当前位置: 代码迷 >> 综合 >> BC20模块:Mind+ 第三方用户库移植,可接入EMQ服务器
  详细解决方案

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

热度:87   发布时间:2023-12-17 08:58:40.0

文章目录

  • 前言
  • 一、用户库文件结构
  • 二、核心代码
    • (一)config.json代码
    • (二)main.ts 代码
    • (三)zh-cn.json 代码
  • 三、效果图
    • (一)模块组成:
    • (二)模块代码:
  • 四、功能测试
  • 五、总结


前言

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平台:

EMQ Easy-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.jsonesp32.jsonarduino.jsonmega2560.jsonmicrobit.jsonleonardo.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、蓝牙、以太网…

在这里插入图片描述

我是王多肉,一名喜欢物联网行业的菜鸡,热衷于嵌入式应用开发。
长路漫漫,希望与您,一起以项目为导向,深入且高效的学习。