BC20模块:Mind+ 第三方用户库移植,可接入EMQ服务器


前言

Mind+是一款拥有自主知识产权的国产青少年编程软件,支持Arduino、micro:bit、掌控板等各种开源硬件,兼容Scratch3.0,支持AI与IoT功能,只需要拖动图形化程序块即可完成编程,还可以使用Python/C/C++等高级编程语言,让大家轻松体验创造的乐趣。

物联网(The Internet of things,IoT)顾名思义,就是物与物相连的互联网。这有两层意思:第一,物联网的核心和基础仍然是互联网,是在互联网基础上的延伸和扩展的网络;第二,其用户端延伸和扩展到了任何物品与物品之间,进行信息交换和通信。
窄带物联网(Narrow Band Internet ofThings,NB-IoT)是物联网领域一个新兴的技术,主要用于低移动性、小数据量、对时延不敏感的连接服务,其支持低功耗设备在网络中的数据传输,因此也是一种低功耗广域网(LowPower Wide Area Network,LPWAN)通信技术。相对于被逐渐淘汰的2G通信,NB-IoT具有三大优势:

  • 广覆盖:海量链接的能力,在同一基站的情况下, NB-IoT 可以比现有无线技术提供 50~100 倍的接入数。一个扇区能够支持,10 万个连接,设备成本与功耗有效降低,网络架构得到优化。
  • 大连接:在同样的频段下, NB-IoT比现有的网络增益提升了 20 dB,相当于提升了 100 倍的覆盖面积。
  • 低功耗:NB-IoT借助 PSM(Power Saving Mode,节电模式)和 eDRX(Extended Discontinuous Reception,超长非连续接收)可实现更长待机。

文章参考链接:https://mindplus.dfrobot.com.cn/ext-api
移植库链接:https://gitee.com/chenqi1233/ext-BC20_NB-IoT.git

本文通过对DFrobot BC20模块库进行移植,完善了该库的功能。
以下表格将展示原库(DFrobot官方库)与移植更新库(“BC20 - wong”)可接入的MQTT平台:

EMQEasy-IOT
DFrobot官方库×
BC20 - wong

移植更新库相较于原库,可以连入EMQ MQTT Broker服务器了!

EMQ 是家面向 5G 和物联网市场的消息与流处理开源软件公司。 EMQ (Erlang/Enterprise/Elastic MQTT Broker) 是基于 Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器。
Erlang/OTP 是出色的软实时(Soft-Realtime)、低延时(Low-Latency)、分布式(Distributed) 的语言平台。
MQTT 是轻量的(Lightweight)、发布订阅模式(PubSub) 的物联网消息协议。
EMQ 项目设计目标是承载移动终端或物联网终端海量 MQTT 连接,并实现在海量物联网设备间快速低延时消息路由:

  • 稳定承载大规模的 MQTT 客户端连接,单服务器节点支持50万到100万连接。
  • 分布式节点集群,快速低延时的消息路由,单集群支持1000万规模的路由。 消息服务器内扩展,支持定制多种认证方式、高效存储消息到后端数据库。
  • 完整物联网协议支持,MQTT、MQTT-SN、CoAP、WebSocket 或私有协议支持

提示:以下是本篇文章正文内容。

一、用户库文件结构

└─EXT-BC20_ NB-IOT			// 项目名称
	│		config.json		// 本用户库的配置文件
	│		LICENSE.TXT		// 许可证说明
	│		README.md		// 文档说明
	│		nick-dfrobot_bc20-thirdex-V0.0.1.mpext		// 导出0.0.1版本文件
	│		nick-dfrobot_bc20-thirdex-V0.0.2.mpext		// 导出0.0.2版本文件
	│
	└─arduinoC			// arduino模式用户库根目录
		│	main.ts		// 图形块描述文件
		│
		├─libraries		// arduino库文件,列出本扩展库所有需要引用的.c或.h或.cpp文件
		│	└─DFRobot_BC20_Gravity
		│		DFRobot_BC20_Gravity.cpp
		│		DFRobot_BC20_Gravity.h
		│		DFRobot_BC20AT.h
		│		DFRobot_queue.cpp
		│		DFRobot_queue.h
		│
		├─_images		// 图片文件
		│	featured.png	// MindPlus扩展库展示图片
		│	icon.svg		// MindPlus中图形块上的图标文件
		│
		├─_locales		// 翻译文件,支持多国语言
		│	zh-cn.json
		│	en.json
		│
		└─_menus		// 下拉菜单参数,每个板子可以独立设置
			arduinonano.json
			esp32.json
			arduino.json
			mega2560.json
			microbit.json
			leonardo.json

二、核心代码

(一)config.json代码

{
  "name": {
    "zh-cn": "BC20-MQTT",
    "en": " BC20-MQTT "
  },
  "description": {
    "zh-cn": "具有NB-IoT低功耗蜂窝通信和GPS/北斗双星精确定位功能的物联网通信模块。",
    "en": " Internet of Things communication module with NB-IoT and GPS/Beidou positioning functions."
  },
  "author": "duorou wong",
  "email": "strongestwong@126.com",
  "license": "MIT",
  "isBoard": false,
  "id": "BC20-MQTT",
  "version": "0.0.2",
  "platform": [
    "win"
  ],
  "asset": {
    "arduinoC": {
      "dir": "arduinoC/",
      "version": "0.0.2",
      "board": [
        "arduino",
        "esp32",
        "leonardo",
        "arduinonano",
        "mega2560"
      ],
      "main": "main.ts",
      "files": [
        "_images/featured.png",
        "_images/icon.svg",
        "_locales/zh-cn.json",
        "_menus/arduino.json",
        "_menus/arduinonano.json",
        "_menus/esp32.json",
        "_menus/leonardo.json",
        "_menus/mega2560.json",
        "_menus/microbit.json",
        "libraries/libraries.zip"
      ]
    }
  }
}

(二)main.ts 代码

 //% block="---"
    export function noteSep() {

    }
    //% block="NB-IoT 初始化 MQTT server: [SERVER] client_id: [ID] client_pwd: [PWD]" blockType="command" 
     
    //% SERVER.shadow="string" SERVER.defl="NULL"
    //% ID.shadow="string" ID.defl="NULL"
    //% PWD.shadow="string" PWD.defl="NULL"
    export function DFRobot_BC20IotServer(parameter: any, block: any) { 
    
      let server = parameter.SERVER.code;
  
      let id = parameter.ID.code;
      let pwd = parameter.PWD.code;
     
      /*Generator.addObject("Iot_SERVER","char*",`Iot_SERVER  = ${server};`);
      Generator.addObject("PORT","char*",`PORT  = ${port};`);*/

      Generator.addSetup( "powerOn1",`myBC20.powerOn1();`);
      Generator.addSetup( "check",`myBC20.check();`);
    //  Generator.addSetup( "Serial",`Serial.println("Connecting to DFRobot Easy-IoT");`);
      Generator.addSetup("setServer",`myBC20.setServer(${server}, "1883");`);
      Generator.addSetup("ConnectCloud",`myBC20.ConnectCloudsend1("Hello world!",${id},${pwd});`);

(三)zh-cn.json 代码

{
    "DFRobot_BC20.DFRobot_BC20_I2cInit|block": "NB-IoT 初始化I2C模式 地址:[ADDR] " ,
    "DFRobot_BC20.DFRobot_BC20_HsInit|block": "NB-IoT 初始化[HS]模式 RX(绿):[RX]TX(蓝):[TX] " ,
    "DFRobot_BC20.DFRobot_BC20_SsInit|block": "NB-IoT 初始化[SS]模式 RX(绿):[SRX]TX(蓝):[STX] " ,
    "DFRobot_BC20.DFRobot_BC20RGB|block": "NB-IoT[CL]RGB灯:[RGB]",
    "DFRobot_BC20.DFRobot_BC20GetSignal|block": "NB-IoT 获取NB信号强度",
    "DFRobot_BC20.DFRobot_BC20GetTime|block": "NB-IoT 获取蜂窝基站当前时间:[TIME]",
    "DFRobot_BC20.DFRobot_BC20GetpositionInit|block": "NB-IoT 获取一次位置数据",
    "DFRobot_BC20.DFRobot_BC20Getposition|block": "NB-IoT 获取位置详细信息:[POSITION]",
    "DFRobot_BC20.DFRobot_BC20SerialDBG|block": "NB-IoT 串口透传调试模块",
    "DFRobot_BC20.DFRobot_BC20Iot|block": "NB-IoT  Iot_id [ID]Iot_pwd [PWD]Topic [Topic]",
    "DFRobot_BC20.DFRobot_BC20IotServer|block": "NB-IoT 初始化MQTT服务器:[SERVER] Iot_id:[ID] Iot_pwd:[PWD]",
    "DFRobot_BC20.DFRobot_BC20IotServertopic|block": "NB-IoT 订阅一次Topic:[Topic]",
    "DFRobot_BC20.DFRobot_BC20Iotsend|block": "NB-IoT 发送消息 [MESS]到Topic [Topic]",
    "DFRobot_BC20.DFRobot_BC20Iotreceive|block": "NB-IoT 当接受到消息时",
    "DFRobot_BC20.DFRobot_BC20IotreceiveMess|block": "NB-IoT 是否接收到消息?",
    "DFRobot_BC20.DFRobot_BC20IotreceiveMesstopic|block": "NB-IoT 读取消息的Topic",
    "DFRobot_BC20.DFRobot_BC20IotreceiveMessdata|block": "NB-IoT 读取消息内容",
    "DFRobot_BC20.DFRobot_BC20IotreceiveMessLOOP|block": "NB-IoT 获取一次数据",
    "DFRobot_BC20.HS.HardwareSerial|menu": "硬串口",
    
    "DFRobot_BC20.SS.SoftwareSerial|menu": "软串口",
    
    "DFRobot_BC20.CL.ON|menu": "打开",
    "DFRobot_BC20.CL.OFF|menu": "关闭",

    "DFRobot_BC20.SERVER.China|menu": "中文(CN)",
    "DFRobot_BC20.SERVER.Global|menu": "英文(EN)",


    "DFRobot_BC20.RGB.RED|menu": "红色",
    "DFRobot_BC20.RGB.BLUE|menu": "蓝色",
    "DFRobot_BC20.RGB.GREEN|menu": "绿色",
    "DFRobot_BC20.RGB.YELLOW|menu": "黄色",
    "DFRobot_BC20.RGB.PURPLE|menu": "紫色",
    "DFRobot_BC20.RGB.CYAN|menu": "青色",
    "DFRobot_BC20.RGB.WHITE|menu": "白色",

    "DFRobot_BC20.TIME.Year|menu": "年",
    "DFRobot_BC20.TIME.Month|menu": "月",
    "DFRobot_BC20.TIME.Day|menu": "日",
    "DFRobot_BC20.TIME.Hour|menu": "时",
    "DFRobot_BC20.TIME.Minute|menu": "分",
    "DFRobot_BC20.TIME.Second|menu": "秒",

    
    "DFRobot_BC20.POSITION.LatitudeVal|menu": "纬度坐标(Latitude)",
    "DFRobot_BC20.POSITION.LatitudeDir|menu": "纬度方向(LatitudeDir)",
    "DFRobot_BC20.POSITION.LongitudeVal|menu": "经度坐标(Longitude)",
    "DFRobot_BC20.POSITION.LongitudeDir|menu": "经度方向(LongitudeDir)",
    "DFRobot_BC20.POSITION.Altitude|menu": "海拔高度(Altitude)",
    "DFRobot_BC20.POSITION.Speed|menu": "对地速度(Speed)",
    "DFRobot_BC20.POSITION.Heading|menu": "对地朝向(Heading)",
    "DFRobot_BC20.POSITION.Status|menu": "定位状态(Status)",
    "DFRobot_BC20.POSITION.PDOP|menu": "位置精度因子(PDOP)",
    "DFRobot_BC20.POSITION.HDOP|menu": "水平精度因子(HDOP)",
    "DFRobot_BC20.POSITION.VDOP|menu": "垂直精度因子(VDOP)"
    
    
    
     
}

三、效果图

(一)模块组成:

在这里插入图片描述

(二)模块代码:

#include <DFRobot_BC20_Gravity.h>

// 动态变量
String mind_s_data;
// 创建对象
DFRobot_BC20_IIC myBC20(0x33);


// 主程序开始
void setup() {
	Serial.begin(9600);
	myBC20.powerOn1();
	myBC20.check();
	myBC20.setServer("127.0.0.1", "1883");
	myBC20.ConnectCloudsend1("Hello world!","BC20","abc123@@");
	myBC20.topic("ZJ");
}
void loop() {
	myBC20.loop();
	if (myBC20.flag1==1) {
		mind_s_data = (myBC20.read1topic1());
		mind_s_data = (myBC20.readdata2());
		Serial.println((String((myBC20.read1topic1())) + String((String(":") + String((myBC20.readdata2()))))));
	}
}

四、功能测试

在这里插入图片描述

五、总结

移植更新库主要是在原官方库的基础上,增加了服务器地址的填写功能,便于我们对不同的云平台进行MQTT通信。后期会继续更新该库,以便连入像阿里云物联网平台那样的大型物联网开发平台。

想要这个移植更新库吗?请联系博主拿喔!


欢迎关注公众号:“二月十二”, 致力于向大家分享单片机与物联网通信技术项目开发经验。单片机涉及STM32、Arduino、树莓派、ARM Linux;通信技术涉及WIFI、LORA、NB-IOT、蓝牙、以太网…

在这里插入图片描述

我是王多肉,一名喜欢物联网行业的菜鸡,热衷于嵌入式应用开发。
长路漫漫,希望与您,一起以项目为导向,深入且高效的学习。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王鸽子

你的鼓励都是我前进的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值