2595| 0
|
[用户分享] 『TinkerNode NB-IoT』BC20接入百度天工物联网实现数据上报 |
拿到NB-IoT的板子有两周了,由于Mac端的固件问题一直没开始写测评,反馈给DF的工作人员后,问题暂时得到了解决。下面我们一起来看一下主要组成部分,板上的电源部分在设计时考虑了大部分应用场景,因此无论用什么方式接入电源都能保证系统正常运行。 说实话比较给力,到手就可以用。扩展板还是挺实用的,可以手动控制低功耗。 当然DF不会忘记宣传自家文化。 参照wiki上的说明,安装开发板配置文件 然后就有了DF的示例程序。简单看了一下示例,发现都包含了"DFRobot_BC20.h"头文件,打开看看 封装的这些函数,在datasheet里的AT指令说明内都能找到,使用起来简直不要太方便。打开.cpp结合AT说明就可以看懂需要传入的函数参数和用法。虽然官方的example没有过多的引用这里的函数,但是自学起来也不困难。通过注释能看到部分功能DF的工程师还没完全写完。 既然已经有了现成的函数,下面直奔主题: 1.在百度智能云注册开发者账号(与百度网盘账号通用),找到物接入IoT Hub 创建新项目,选择数据型设备 选择刚才新建的项目,创建用户 按照1-4提示的步骤完成操作,注意此过程中需要记下生成的"密钥",创建完成选择『连接测试』 以下页面的信息会在我们编程时用到,接下来进行编程 [mw_shl_code=c,false] #include "DFRobot_BC20.h" DFRobot_BC20 myBC20; void setup() { Serial.begin(115200); Serial.print("Starting the BC20.Please wait. . . "); //等待BC20上电 while(!myBC20.powerOn()){ delay(1000); Serial.print("."); } Serial.println("BC20 started successfully !"); myBC20.ConfigSleepMode(eSleepMode_Disable); delay(1000); //BC20启用了一个AT&W的指令,默认断电保存设置,这里我通过查询状态,主动关闭MQTT客户端 if(myBC20.ReadMQTT()){ Serial.println(myBC20.CloseMQTT(0)); } delay(200); //与MQTT服务器建立连接:0为connectID,字符串为百度的mqtt地址,端口1883,格式参考datasheet myBC20.OpenMQTT(0, "8zwxs17.mqtt.iot.gz.baidubce.com", 1883); //串口打印一下返回信息,我在CPP文件里开启了Debug调试,增加了返回值,你看不懂CPP的话该句可忽略 myBC20.CheckMQTT(0); //查询连接状态,如果没有接入那么反复进行连接,格式( ConnectID, 客户端名称, 百度中设备生成的用户名, 百度中设备生成的密码) while (!myBC20.connected()){ Serial.println(myBC20.ConnectServer(0, "vany5921", "8zwxs17/nb-iot", "k46De7vJQQ1hARwW")); } } //发布一个"Hello World",看看是否成功("dfrobot"为设备"策略列表"中的topic主题 void loop() { myBC20.publish("dfrobot","Hello World"); delay(2000); }[/mw_shl_code] 如果你成功接入那么将看到 OK!接下来接入DHT12与BME280传感器上报到百度的MQTT [mw_shl_code=c,false]/* note: need add library Adafruit_BMP280 from library manage */ #include "DHT12.h" #include <Wire.h> //The DHT12 uses I2C comunication. #include "Adafruit_Sensor.h" #include <Adafruit_BMP280.h> #include "DFRobot_BC20.h" DFRobot_BC20 myBC20; DHT12 dht12; //Preset scale CELSIUS and ID 0x5c. Adafruit_BMP280 bme; void setup() { Wire.begin(); Serial.begin(115200); Serial.println(F("ENV Unit(DHT12 and BMP280) test...")); while (!bme.begin(0x76)){ Serial.println("Could not find a valid BMP280 sensor, check wiring!"); } Serial.print("Starting the BC20.Please wait. . . "); while(!myBC20.powerOn()){ delay(1000); Serial.print("."); } Serial.println("BC20 started successfully !"); myBC20.ConfigSleepMode(eSleepMode_Disable); delay(1000); if(myBC20.ReadMQTT()){ Serial.println(myBC20.CloseMQTT(0)); } delay(200); myBC20.OpenMQTT(0, "8zwxs17.mqtt.iot.gz.baidubce.com", 1883); myBC20.CheckMQTT(0); while (!myBC20.connected()){ Serial.println(myBC20.ConnectServer(0, "vany5921", "8zwxs17/nb-iot", "k46De7vJQQ1hARwW")); } } void loop() { float tmp = dht12.readTemperature(); float hum = dht12.readHumidity(); float pressure = bme.readPressure(); String sendMessage ="tmp: " + String(tmp) + ";"+ "hum:" + String(hum) + ";" + "pressure:" + String(pressure); myBC20.publish("dfrobot", sendMessage); Serial.printf("Temperatura: %2.2f*C Humedad: %0.2f%% Pressure: %0.2fPa\r\n", tmp, hum, pressure); delay(3000); }[/mw_shl_code] |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed