5953| 17
|
[用户分享] TinkerNode NB-IoT物联网开发板(小试牛刀) |
本帖最后由 不脱发的程序猿 于 2020-7-5 16:13 编辑 最近很多朋友问我如何选购合适的NB-IoT模组,于是本篇博文给各位朋友安利一款DF创客社区最新出品的NB-IoT 开发板:TinkerNode NB-IoT 物联网开发板,性价比挺高,调测使用后感觉挺不错,非常适合零基础初学者和快速搭建项目的小伙伴。 1、模组简介TinkerNode NB-IoT物联网开发板是ESP32平台具有NB-IoT广域低功耗通信和GPS/BeiDou双星精确定位功能的四模低功耗物联网开发硬件平台,在不到一半手掌大的面积上集成了ESP32主控模组、NB-IoT/GNSS通信模组、RGB指示灯、按钮、电源管理系统等功能,并通过过孔焊盘引出如IIC、SPI、UART等所有常用的IO、通信接口和电源管脚,性能强悍,扩展性极强。 该模块在开发板集成了专用的太阳能电源管理芯片和多电源管理电路,可直接使用5V太阳能板给3.7V锂电池充电和系统供电,同时支持MPPT(最大功率追踪,MPPT控制器能够实时侦测太阳能板的发电电压,并追踪最高电压电流值(VI),使系统以最大功率输出对蓄电池充电,应用于太阳能光伏系统中,协调太阳能电池板、蓄电池、负载的工作,是光伏系统的大脑),最大化太阳能板的输出效率,实现系统在户外应用场景的不间断供电,免去定期充电维护的麻烦。 对于之前已经使用过ESP32平台(如:FireBeetle、掌控、乐鑫官方开发板等)的用户,可以方便地将之前的Arduino程序移植到这块新主控板,尽享ESP32主控模组所有的强大功能和低功耗能力,快速掌握与实现户外物联网项目的搭建。 2、模组特性主控制器:乐鑫ESPRESSIF ESP32,技术参数如下所示:
NB-IoT通信模组:移远QUECTEL BC20,和NB-IoT实战中是同一款模组,技术参数如下所示:
电源管理多样化设计,技术参数如下所示:
IO接口,技术参数如下所示:
其它功能与特性,技术参数如下所示:
模组系统原理框图如下所示: 产品更详细描述可参见官网网址。 3、环境搭建第1步:安装环境,项目实践依托于Arduino IDE,各位请自行安装下载合适版本。 第2步:打开Arduino IDE,首先需要添加开发板驱动的下载地址。菜单栏中选择文件->首选项(或使用快捷键“Ctrl+ ,”)。 点击附加开发板管理器网址右边的小图标。 在弹出窗口的最后一行,如图复制开发板驱动的地址: [mw_shl_code=cpp,false]http://download.dfrobot.top/TinkerNode-NB-IoT/package_TinkerNode-NB-IoT_index.json[/mw_shl_code] 最后保存设置。 第3步: 安装开发板的板卡驱动包,点击工具->开发板->开发板管理。 弹出开发板管理器,管理器会自动更新板卡信息。 等待更新完成后,选择TinkerNode_NB-IoT,选择最新版本的开发板驱动,单击Install安装驱动。 第4步: 安装串口驱动,目前仅支持Windows系统(Win7、Win10)。 第5步: 安装成功后切换到TinkerNode NB-IoT (CH)开发板,此时可向开发板烧录程序或查看串口打印的数据。 开发板所有的相关样例代码,可在菜单栏中选择文件->示例->TinkerNode NB-IoT (CH)的例子,其中DFRobot_NBIoT目录中为开发板专用的样例代码:NB-IoT、GNSS、MQTT低功耗收发、RGB灯光控制、数据记录仪datalogger等功能的样例代码均在此,其它目录为ESP32的通用样例代码,用户可通过这些通用样例学习掌握ESP32的各类基本功能与应用开发。 TinkerNode NB-IoT物联网开发板有:WiFi、蓝牙、NB-IoT和GNSS定位四种无线通信方式,接下来依托于样例代码,让我们进行简单调测。 4.1、 扫描附近WiFi网络使用开发板中的WiFi通信,实现对附近WiFi无线信号的扫描,效果如下所示: 示例代码如下所示: [mw_shl_code=cpp,false]/* 4.2、 蓝牙通信* 如何扫描WiFi网络 */ #include "WiFi.h" void setup() { Serial.begin(115200); // 将WiFi设置为站模式,如果AP之前已经连接,则断开连接 WiFi.mode(WIFI_STA); WiFi.disconnect(); delay(100); Serial.println("设置完成"); } void loop() { Serial.println("扫描开始"); //扫描网络将返回找到的网络数量 int n = WiFi.scanNetworks(); Serial.println("扫描完成"); if (n == 0) { Serial.println("无网络"); } else { Serial.print("WiFi数量:"); Serial.println(n); Serial.println("网络列表如下:"); for (int i = 0; i < n; ++i) { //打印每个网络SSID和RSSI Serial.print(i + 1); Serial.print(": "); Serial.print(WiFi.SSID(i)); Serial.print(" ("); Serial.print(WiFi.RSSI(i)); Serial.print(")"); Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN)?" ":"*"); delay(10); } } Serial.println(""); //稍等片刻再重新扫描 delay(5000); }[/mw_shl_code] 使用开发板中的蓝牙通信,实现与手机蓝牙调测助手进行通信,调测助手建立连接如下所示: 手机蓝牙调测助手发送数据到开发板,效果如下所示: 开发板发送数据到手机蓝牙调测助手,效果如下所示: 示例代码如下所示: [mw_shl_code=cpp,false]#include "DFRobot_BLESerial.h" DFRobot_BLESerial SerialBLE; void setup() { // put your setup code here, to run once: Serial.begin(115200); SerialBLE.begin("TinkerNode_BLE"); Serial.println("The device started, now you can pair it with ble"); } void loop() { if (Serial.available()) { SerialBLE.write(Serial.read()); } if (SerialBLE.available()) { Serial.write(SerialBLE.read()); } delay(20); }[/mw_shl_code] 这款蓝牙调测助手比较不错,可建立RSSI的可视化分析图,方便使用者查看。 4.3、查看NB-IoT配置信息 示例代码如下所示: [mw_shl_code=cpp,false]#include "DFRobot_BC20.h" 4.4、 GNSS定位DFRobot_BC20 myBC20; void setup(){ Serial.begin(115200); Serial.print("启动BC20,请稍等. . . "); while(!myBC20.powerOn()){ delay(1000); Serial.print("."); } Serial.println("BC20启动成功!"); // Deep Sleep Mode is automatically enable every time upon power up. // When this mode is entered, BC20 will not respond any AT commands from ESP32 myBC20.ConfigSleepMode(eSleepMode_Disable); //Each AT command should begin with "AT" or "at" and end with "Carriage return". //The commands can be upper-case or lower-case. ex. "AT+CSQ" or "at+csq". Serial.println("Enter AT commands:"); } void loop(){ if(Serial.available()){ BC20Serial.write((char)Serial.read()); } if(BC20Serial.available()){ Serial.write((char)BC20Serial.read()); } }[/mw_shl_code] GNSS(全球导航卫星系统定位)能在地球表面或近地空间的任何地点为用户提供全天候的3维坐标和速度以及时间信息的空基无线电导航定位系统,静态物体定位主要用到经纬度坐标,动态物体则可分析实时速度、高度等因素。 需要注意测试时GNSS定位在室内是基本上无信号的,尽可能在室外使用,否则无法获取有效的定位信息,使用模组获取我此时的GNSS定位信息,效果如下所示: 使用百度坐标拾取系统进行验证,由于我在室内测试的存在一些偏差,效果如下所示: 示例代码如下所示: [mw_shl_code=cpp,false]#include "DFRobot_BC20.h" 5、 注意事项DFRobot_BC20 myBC20; void Display_Location_Information(){ //UTC time of the anchor point Serial.print("Time:\t\t"); Serial.print(sCLK.Year); Serial.print("/"); Serial.printf("%02d",sCLK.Month); Serial.print("/"); Serial.printf("%02d ",sCLK.Day); Serial.printf(" %02d",sCLK.Hour); Serial.printf(":%02d",sCLK.Minute); Serial.printf(":%02d\r\n",sCLK.Second); Serial.print("Latitude:\t"); Serial.print(sGGNS.LatitudeVal,6); Serial.print(" deg "); Serial.println(sRMC.LatitudeDir); Serial.print("Longitude:\t"); Serial.print(sGGNS.LongitudeVal,6); Serial.print(" deg "); Serial.println(sRMC.LongitudeDir); Serial.print("Altitude:\t"); Serial.print(sGGNS.Altitude,1); Serial.println(" m"); Serial.print("Speed:\t\t"); Serial.print(sGGNS.Speed); Serial.println(" km/h"); Serial.print("Heading:\t"); Serial.print(sGGNS.Heading); Serial.println(" deg"); Serial.print("Status:\t\t"); Serial.println(sGGNS.FixStatus); Serial.print("PDOP:\t\t"); Serial.println(sGGNS.PDOP); Serial.print("HDOP:\t\t"); Serial.println(sGGNS.HDOP); Serial.print("VDOP:\t\t"); Serial.println(sGGNS.VDOP); Serial.println(); } void Display_Satellite_Information(){ Serial.print(sSAT.NUM); Serial.println(" in view."); Serial.print(sSAT.USE); Serial.println(" in used."); Serial.print("PRN\t"); Serial.print("Elev(deg)\t"); Serial.print("Azim(deg)\t"); Serial.print("SNR(dBHz)\t"); Serial.print("SYS\t"); Serial.println("Used"); for(uint8_t i = 0; i <sSAT.NUM; i++){ Serial.print(sSAT.data.PRN); Serial.print("\t"); Serial.print(sSAT.data.Elev); Serial.print("\t\t"); Serial.print(sSAT.data.Azim); Serial.print("\t\t"); Serial.print(sSAT.data.SNR); Serial.print("\t\t"); Serial.print(sSAT.data.SYS); Serial.print("\t"); Serial.println(sSAT.data.Status); } } void setup(){ Serial.begin(115200); Serial.print("Starting the BC20.Please wait. . . "); while(!myBC20.powerOn()){ delay(1000); Serial.print("."); } Serial.println("BC20 started successfully !"); Serial.println("check OK"); if(myBC20.getQGNSSC() == OFF){ Serial.println("open QGNSSC"); myBC20.setQGNSSC(ON); } } void loop(){ delay(5000); myBC20.getQGNSSRD(); Display_Location_Information(); Display_Satellite_Information(); }[/mw_shl_code]
|
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed