概述
文章目录
- 前言
- 一、用户库文件结构
- 二、核心代码
- (一)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 是家面向 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、蓝牙、以太网…
最后
以上就是落寞冬日为你收集整理的BC20模块:Mind+ 第三方用户库移植,可接入EMQ服务器前言一、用户库文件结构二、核心代码三、效果图四、功能测试五、总结的全部内容,希望文章能够帮你解决BC20模块:Mind+ 第三方用户库移植,可接入EMQ服务器前言一、用户库文件结构二、核心代码三、效果图四、功能测试五、总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复