驴友花雕 发表于 2021-9-7 07:21:19

本帖最后由 驴友花雕 于 2021-9-7 07:58 编辑

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百零九:Gravity: I2C & UART BC20 NB-IoT & GNSS通信模块
NB-IoT广域低功耗无线通信 GPS/北斗精准定位 户外物联网必备
项目十八:设备通过Easy-IoT物联网云平台发送消息到云端

实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百零九:Gravity: I2C & UART BC20 NB-IoT & GNSS通信模块
NB-IoT广域低功耗无线通信 GPS/北斗精准定位 户外物联网必备
项目十八:设备通过Easy-IoT物联网云平台发送消息到云端
实验接线:
BC20       UNO
VIN      5V
GND      GND
SCL      A5
SDA      A4
*/

#include "DFRobot_BC20_Gravity.h"

//RGB有7种颜色可供选择
#defineRED 0
#defineBLUE 1
#defineGREEN 2
#defineYELLOW 3
#definePURPLE 4
#defineCYAN 5
#defineWHITE 6

//配置设备证书信息
char* Iot_id = "qlZ0uezGR";
char* Client_ID= "BC20 NB-IoT";
char* Iot_pwd    = "3_W0uezGgz";

//配置域名和端口号
char* EasyIot_SERVER = "182.254.130.180";
char* PORT = "1883";

//设置需要发布的设备编号
char* pubTopic = "hJmOvRIng";

//IIC通讯
#define USE_IIC

//硬件串口通讯
//#define USE_HSERIAL

//软件串口通讯
//#define USE_SSERIAL

DFRobot_BC20_IIC myBC20(0x33);

void ConnectCloud() {
Serial.print("尝试MQTT连接...");
myBC20.changeColor(YELLOW);
while (!myBC20.connected()) {
    Serial.print(".");
    myBC20.LED_ON();
    delay(500);
    myBC20.LED_OFF();
    delay(500);

    if (myBC20.connect(Client_ID, Iot_id, Iot_pwd)) {
      Serial.println("\n连接服务器正常");
    } else {

      //用于检测设备与服务器的连接
      if (myBC20.getQMTCONN())
      break;
    }
}
}

void setup() {
Serial.begin(115200);
myBC20.LED_OFF();

//初始化 BC20
Serial.print("正在启动BC20,请稍等...... ");
myBC20.changeColor(RED);
while (!myBC20.powerOn()) {
    Serial.print(".");
    myBC20.LED_ON();
    delay(500);
    myBC20.LED_OFF();
    delay(500);
}
Serial.println("BC20 启动成功!");

//检查 SIM 卡是否插入
Serial.println("正在检查SIM卡……");
myBC20.changeColor(GREEN);
while (!myBC20.checkNBCard()) {
    Serial.println("请插入NB SIM卡!");
    myBC20.LED_ON();
    delay(500);
    myBC20.LED_OFF();
    delay(500);
}
Serial.println("SIM 卡检查OK!");

//打印 IMEI、ICCID 和 IMSI
myBC20.getGSN(IMEI);
Serial.print("BC20 IMEI: ");
Serial.println(sGSN.imei);
Serial.print("SIM card ICCID:");
Serial.print(myBC20.getQCCID());
Serial.print("SIM card IMSI: ");
Serial.println((char *)myBC20.getIMI());

/*
   模块将自动尝试连接到网络(移动站)。
   检查它是否已连接到网络。
*/
Serial.println("正在连接网络...");
myBC20.changeColor(BLUE);
while (myBC20.getGATT() == 0) {
    Serial.print(".");
    myBC20.LED_ON();
    delay(500);
    myBC20.LED_OFF();
    delay(500);
}
Serial.println("网络已连接!");

Serial.println("连接到DFRobot Easy-IoT!");

//Configure IoT Server
myBC20.setServer(EasyIot_SERVER, PORT);
Serial.println("服务器可用!");
ConnectCloud();
}

void loop() {
delay(10000);
Serial.println("发送消息到云端...");
myBC20.publish(pubTopic, "Hello World");
Serial.println("消息已发送");
}

驴友花雕 发表于 2021-9-7 07:24:00

实验串口返回情况


驴友花雕 发表于 2021-9-7 07:36:18

设备通过Easy-IoT发送消息到云端de核心设置
1、模块按照连线图与主控板相连,连接好NB-IoT天线,插入SIM卡。
2、将记录下来Iot_id、Iot_pwd和Topic这三个参数的值填入样例代码中,其它参数不变。(Client_ID用于区分不同设备,可任意配置一个数值,这里使用“BC20 NB-IoT")

//配置设备证书信息
char* Iot_id = "HJZv1ZFRSQ"; //填入Iot_id
char* Client_ID = "BC20 NB-IoT";
char* Iot_pwd = "ByfP1-YABX"; //填入Iot_pwd

//配置域名和端口号(这是固定的)
char* EasyIot_SERVER = "182.254.130.180";
char* PORT = "1883";

//设置需要发布的设备编号
char* pubTopic = "JoUOAg_WR"; //填入Topic



驴友花雕 发表于 2021-9-7 08:39:30

为了验证云平台是否确实收到设备端所发送的信息“Hello World”,回到Easy-IoT云平台的工作间,最上面一行,6/1000,表示已经接收到6条信息,具体可点击Topic下方的查看详情(红点处)查看。



驴友花雕 发表于 2021-9-7 08:41:04

在查询结果一栏中可找到云端接收到的消息。


驴友花雕 发表于 2021-9-7 09:44:06

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百零九:Gravity: I2C & UART BC20 NB-IoT & GNSS通信模块
NB-IoT广域低功耗无线通信 GPS/北斗精准定位 户外物联网必备
项目十九:简单的设备发送消息到云端

实验开源图形编程(Mind+、Mixly、编玩边学)



驴友花雕 发表于 2021-9-7 09:45:29

实验串口返回情况


驴友花雕 发表于 2021-9-7 09:47:51

在查询结果一栏中可找到云端接收到的消息。



驴友花雕 发表于 2021-9-7 11:30:02

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百零九:Gravity: I2C & UART BC20 NB-IoT & GNSS通信模块
NB-IoT广域低功耗无线通信 GPS/北斗精准定位 户外物联网必备
项目二十:通过Easy-IOT平台发布消息

实验开源代码

/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百零九:Gravity: I2C & UART BC20 NB-IoT & GNSS通信模块
NB-IoT广域低功耗无线通信 GPS/北斗精准定位 户外物联网必备
项目二十:通过Easy-IOT平台发布消息
实验接线:
BC20       UNO
VIN      5V
GND      GND
SCL      A5
SDA      A4
*/

#include "DFRobot_BC20_Gravity.h"

//RGB有7种颜色可供选择
#defineRED 0
#defineBLUE 1
#defineGREEN 2
#defineYELLOW 3
#definePURPLE 4
#defineCYAN 5
#defineWHITE 6

//配置设备证书信息
char* Iot_id = "wGkCJkIng";
char* Client_ID= "BC20 NB-IoT";
char* Iot_pwd    = "QMkC1kInRz";

//配置域名和端口号
char* EasyIot_SERVER = "182.254.130.180";
char* PORT = "1883";

//设置需要发布的设备编号
char* pubTopic = "hJmOvRIng";

//IIC通讯
#define USE_IIC

//硬件串口通讯
//#define USE_HSERIAL

//软件串口通讯
//#define USE_SSERIAL

DFRobot_BC20_IIC myBC20(0x33);

/*
   每次模块收到消息时,都会调用此函数。
   它将打印消息和相应的主题。
*/
void callback(char * topic, uint8_t * payload, unsigned int len) {
Serial.print("接收[主题:");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < len; i++) {
    Serial.print((char)payload);
}
Serial.println();

//根据接收到的消息控制板载 RGB LED。
char* receivedData = (char*)payload;
if (strcmp(receivedData, "OFF") == 0) {
    myBC20.LED_OFF();
    Serial.println("LED 灯熄灭");
}
else if (strcmp(receivedData, "RED") == 0) {
    myBC20.changeColor(RED);
    myBC20.LED_ON();
    Serial.println("LED 是红色的");
}
else if (strcmp(receivedData, "GREEN") == 0) {
    myBC20.changeColor(GREEN);
    myBC20.LED_ON();
    Serial.println("LED 为绿色");
}
else if (strcmp(receivedData, "BLUE") == 0) {
    myBC20.changeColor(BLUE);
    myBC20.LED_ON();
    Serial.println("LED 为蓝色");
}
else if (strcmp(receivedData, "YELLOW") == 0) {
    myBC20.changeColor(YELLOW);
    myBC20.LED_ON();
    Serial.println("LED 是黄色的");
}
else if (strcmp(receivedData, "PURPLE") == 0) {
    myBC20.changeColor(PURPLE);
    myBC20.LED_ON();
    Serial.println("LED 是紫色的");
}
else if (strcmp(receivedData, "CYAN") == 0) {
    myBC20.changeColor(CYAN);
    myBC20.LED_ON();
    Serial.println("LED 为青色");
}
else if (strcmp(receivedData, "WHITE") == 0) {
    myBC20.changeColor(WHITE);
    myBC20.LED_ON();
    Serial.println("LED 是白色的");
}
else {
    ;
}
}

void ConnectCloud() {
Serial.print("尝试MQTT连接......");
while (!myBC20.connected()) {
    Serial.print(".");
    if (myBC20.connect(Client_ID, Iot_id, Iot_pwd)) {
      Serial.println("连接服务器正常");
    } else {
      //用于检测设备与服务器的连接
      if (myBC20.getQMTCONN())
      break;
    }
}

while (!myBC20.subTopic('0', '1',pubTopic , '0')) {
    Serial.print(".");
}
Serial.print("主题:");
Serial.print(pubTopic);
Serial.println(" 订阅了!");
}

void setup() {
Serial.begin(115200);
myBC20.LED_OFF();

/*Initialize BC20*/
Serial.print("正在启动BC20,请稍等...... ");
myBC20.changeColor(RED);
while (!myBC20.powerOn()) {
    Serial.print(".");
    myBC20.LED_ON();
    delay(500);
    myBC20.LED_OFF();
    delay(500);
}
Serial.println("BC20 启动成功!");

//检查 SIM 卡是否插入
Serial.println("正在检查SIM卡……");
myBC20.changeColor(GREEN);
while (!myBC20.checkNBCard()) {
    Serial.print(".");
    myBC20.LED_ON();
    delay(500);
    myBC20.LED_OFF();
    delay(500);
}
Serial.println("OK!");

//禁用睡眠模式
myBC20.configSleepMode(eSleepMode_Disable);
//禁用 PSM
myBC20.setPSMMode(ePSM_OFF);

/*
   模块将自动尝试连接到网络(移动站)。
   检查它是否已连接到网络。
*/
Serial.print("正在连接网络......");
myBC20.changeColor(BLUE);
while (myBC20.getGATT() == 0) {
    Serial.print(".");
    myBC20.LED_ON();
    delay(500);
    myBC20.LED_OFF();
    delay(500);
}
Serial.println("已连接!");

//设置回调函数
myBC20.setCallback(callback);

Serial.println("连接到DFRobot Easy-IoT");

//配置物联网服务器
myBC20.setServer(EasyIot_SERVER, PORT);
Serial.println("服务器可用!");

//连接DFRobot Easy-IoT
ConnectCloud();
}

void loop() {
myBC20.loop();
}

驴友花雕 发表于 2021-9-7 11:36:57

打开工作台,点发送消息


驴友花雕 发表于 2021-9-7 11:39:43

在发送框填入待发送的信息“everything fine?”,点发送



驴友花雕 发表于 2021-9-7 11:41:07

查看信息


驴友花雕 发表于 2021-9-7 11:43:04

实验串口返回情况


驴友花雕 发表于 2021-9-7 12:27:55

在工作台,发送“RED”



驴友花雕 发表于 2021-9-7 12:28:37

实验串口返回情况


驴友花雕 发表于 2021-9-7 12:31:16

实验场景图——LED 是红色的



驴友花雕 发表于 2021-9-7 12:38:04

发送不同字符串命令,BC20模块上RGB灯显示不同的颜色



驴友花雕 发表于 2021-9-7 12:39:03

实验串口返回情况


驴友花雕 发表于 2021-9-7 14:06:45

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百零九:Gravity: I2C & UART BC20 NB-IoT & GNSS通信模块
NB-IoT广域低功耗无线通信 GPS/北斗精准定位 户外物联网必备
项目二十一:通过Easy-IOT平台发布消息

实验开源图形编程(Mind+、Mixly、编玩边学)



驴友花雕 发表于 2021-9-7 14:09:36

通过工作台,发送字符串命令“topic”和“data”



驴友花雕 发表于 2021-9-7 14:10:28

实验串口返回情况


页: 1 2 3 4 [5] 6
查看完整版本: 【Arduino】168种传感器系列实验(209)---移远 BC20 NB+GNSS模块