『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提示的步骤完成操作,注意此过程中需要记下生成的"密钥",创建完成选择『连接测试』
以下页面的信息会在我们编程时用到,接下来进行编程
#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);
}
如果你成功接入那么将看到
OK!接下来接入DHT12与BME280传感器上报到百度的MQTT
/*
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*CHumedad: %0.2f%%Pressure: %0.2fPa\r\n", tmp, hum, pressure);
delay(3000);
}
https://www.bilibili.com/video/BV1EQ4y1K7C8/
页:
[1]