查看: 360|回复: 0

[用户分享] 『TinkerNode NB-IoT』BC20接入百度天工物联网实现数据上报

[复制链接]
拿到NB-IoT的板子有两周了,由于Mac端的固件问题一直没开始写测评,反馈给DF的工作人员后,问题暂时得到了解决。下面我们一起来看一下主要组成部分,板上的电源部分在设计时考虑了大部分应用场景,因此无论用什么方式接入电源都能保证系统正常运行。

IMG_9155.JPG

说实话比较给力,到手就可以用。扩展板还是挺实用的,可以手动控制低功耗。
当然DF不会忘记宣传自家文化。

IMG_9093.JPG
参照wiki上的说明,安装开发板配置文件
截屏2020-04-11 下午8.30.01.png
然后就有了DF的示例程序。简单看了一下示例,发现都包含了"DFRobot_BC20.h"头文件,打开看看
截屏2020-04-11 下午8.37.01.png 截屏2020-04-11 下午8.36.51.png
封装的这些函数,在datasheet里的AT指令说明内都能找到,使用起来简直不要太方便。打开.cpp结合AT说明就可以看懂需要传入的函数参数和用法。虽然官方的example没有过多的引用这里的函数,但是自学起来也不困难。通过注释能看到部分功能DF的工程师还没完全写完。
既然已经有了现成的函数,下面直奔主题:
1.在百度智能云注册开发者账号(与百度网盘账号通用),找到物接入IoT Hub
截屏2020-04-11 下午8.42.33.png
创建新项目,选择数据型设备


截屏2020-04-11 下午8.44.22.png
选择刚才新建的项目,创建用户
截屏2020-04-11 下午8.46.22.png
按照1-4提示的步骤完成操作,注意此过程中需要记下生成的"密钥",创建完成选择『连接测试』
截屏2020-04-11 下午8.50.18.png
以下页面的信息会在我们编程时用到,接下来进行编程
[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]

如果你成功接入那么将看到
截屏2020-04-11 下午9.08.09.png
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]










您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2021 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail