【LWM2M协议传输ADC到ONENET移动云】

简介: 【LWM2M协议传输ADC到ONENET移动云】

1. 简介

采用移远的BC20物联网模块,实现NB-IOT的LWM2M协议透传,接下让我们开启ONENET的NB-IOT物联网开发吧!😀😀😀

1.png

2. 实验准备

实验准备包括硬件和软件两部分。

  1. 移远的BC20物联网模块(外加数据线);
  2. ST-LINGK下载器
  3. 四根母母杜邦线

2.png

2.2 软件

  1. Keil 5.31版本;
    2.10.LWM2M协议传输ADC到ONENET移动云程序;
  2. 浏览器登录onenet平台

image.png

3. 实验步骤

首先搭建onenet平台,记录对应创建的产品相关参数,以便后期程序端口接入开发。👩👩👩

3.1 搭建onenet监控平台

登录onenet平台,选择控制台🎈

3.1.png

来到控制台首页,选择全部产品服务,采用NB-IOT接入🎈🎈

3.2.png

  1. 立即添加设备,完善相关信息,点击添加完成设备添加🎈🎈🎈🎈

3.3.png

3.31.png

IMSI:460043331905774
//自己串口查询卡号
IMEI:862177042740673
//自己串口查询卡密

具体可参照:【BC20开发板的NB和GPS的硬件调试】

  1. 这样就添加产品和设备都完成了,然后点击详情🎈🎈🎈🎈🎈

3.5.png

3.2 为ESP8266-NodeMCU烧入程序

  1. 硬件连接,ESP8266-NodeMCU硬件连接非常简单,只需将DHT11数据线接入D6引脚就好,具体接线如下
ESP8266-NodeMCU -----> USBtoTLL
VCC -----> 3.3V 
GND -----> GND
out -----> D6

3.6.png

2. 程序设计,程序有三部分esp8266_mqtt、OneNet和smartConfig,其中:

文件名 功能
esp8266_mqtt 程序初始化调用和主程序调用;
OneNet 初始化系统、连接OneNet、云端下发、发布温湿度信息
smartConfig 自动连接、一键配网、延时重启

5.png

esp8266_mqtt代码如下,只需要修改对应的wifi和onenet的三个参数;

/**
   The blue LED on the ESP-01 module is connected to GPIO1
   1.实现ESP8266通过MQTT协议连接ONENET
   2.实现DHT11温湿度数据的获取,串口发送调试,并将数据上发ONENET平台,于平台控件中显示数据
   3.实现ONENET平台对ESP8266板载LED亮灭的控制
   4.实现可以通过WIFI_DEBUG选择是使用一键配网功能还是使用代码中写入的无线账号密码连接,该功能主要考虑程序的通用性
   @author 234vor参考https://blog.csdn.net/weixin_43278295/article/details/114900553
   @date 2021/10/30
*/
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include <Ticker.h>
#include <dht11.h>
#define WIFI_DEBUG 1          //1:使用一键配网,其它值则使用默认无线账号密码
#define DHT11PIN 12           //设置DHT引脚为Pin 12(D6)
#define ONENET_DISCONNECTED 1 //已经断开
#define ONENET_CONNECTED 2    //已经连接上
#define ONENET_RECONNECT 3    //重连成功
#define VER  "ESP8266_MQTT_V1.0"  //版本号
#define AP_SSID "J09 502" //需要修改你的wifi名字
#define AP_PSW  "qwertyuiop111"//需要修改你的wifi密码
/*OneNet*/
PubSubClient mqttClient;
const char* mqttServer = "183.230.40.39";//mqtt服务器
const uint16_t mqttPort = 6002;       //端口号
#define onenet_productId   "466002" //需要修改产品ID
#define onenet_deviceId    "804892296" //需要修改设备ID
#define onenet_apiKey      "EQbaLsJlXRaIG8gD7w5Dsc6i3hc=" //需要修改API_KEY
int state;
Ticker delayTimer;
WiFiClient espClient;
dht11 DHT11;
/* 初始化ONENET通信 */
void initOneNetMqtt() {
  mqttClient.setServer(mqttServer, mqttPort);
  mqttClient.setClient(espClient);
  mqttClient.setCallback(callback);
}
/* 初始化 */
void setup() {
  initSystem();
  initOneNetMqtt();
}
/* 主函数 */
void loop() {
  ESP.wdtFeed();
  DHT11.read(DHT11PIN);
  state = connectToOneNetMqtt();
  Serial.println(WiFi.status());
  if (state == ONENET_RECONNECT) {
    mqttClient.loop();
  }
  else if (state == ONENET_CONNECTED) {
    printf("temp:%d \r\n", DHT11.temperature);
    printf("humi:%d \r\n", DHT11.humidity);
    Temp_pubMQTTmsg(DHT11.temperature);
    Humi_pubMQTTmsg(DHT11.humidity);
    mqttClient.loop();
  }
  delay(2000);
}

OneNet代码如下

/**
 * The blue LED on the ESP-01 module is connected to GPIO1
   初始化系统、连接OneNet、云端下发、发布温湿度信息
*/
/* 初始化系统 */
void initSystem() {
  int cnt = 0;
  Serial.begin (115200);
  Serial.println("\r\n\r\nStart ESP8266 MQTT");
  Serial.print("Firmware Version:");
  Serial.println(VER);
  Serial.print("SDK Version:");
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, HIGH);
  Serial.println(ESP.getSdkVersion());
  ESP.wdtEnable(5000);
  if (WIFI_DEBUG == 1) //开启一键配网模式
  {
    if (!autoConfig())
    {
      Serial.println("Start smartConfig");
      smartConfig();
    }
  }
  else
  {
    WiFi.begin(AP_SSID, AP_PSW);
    while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      cnt++;
      Serial.print(".");
      if (cnt >= 40) {
        cnt = 0;
        //重启系统
        delayRestart(1);
      }
    }
  }
  Serial.print("WIFI Connect \r\n");
}
/* 连接OneNet */
int connectToOneNetMqtt() {
  int cnt = 0;
  while (!mqttClient.connected()) {
    ESP.wdtFeed();
    cnt++;
    Serial.println("Connect to OneNet MQTT...");
    if (mqttClient.connect(onenet_deviceId, onenet_productId, onenet_apiKey)) {
      Serial.println("connect success!");
      return ONENET_RECONNECT;
    } else {
      Serial.print("connect fail!");
      Serial.println(" try again in 5 seconds");
      delayNs(5);
    }
    if (cnt >= 10) {
      //只做10次连接到OneNet,连接不上重启8266
      cnt = 0;
      delayRestart(1);
    }
  }
  return ONENET_CONNECTED;
}
/* 云端下发 */
void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();
  if ((char)payload[0] == '1') {
    digitalWrite(LED_BUILTIN, LOW);
  } else {
    digitalWrite(LED_BUILTIN, HIGH);
  }
}
/* 发布温度信息 */
void Temp_pubMQTTmsg(uint32_t data) {
  long lastMsg = 0;
  char msg[50];
  char tmp[28];
  char d[3];
  snprintf(tmp, sizeof(tmp), "{\"Temp\":%d}", data);
  uint16_t streamLen = strlen(tmp);
  d[0] = '\x03';
  d[1] = (streamLen >> 8);
  d[2] = (streamLen & 0xFF);
  snprintf(msg, sizeof(msg), "%c%c%c%s", d[0], d[1], d[2], tmp);
  mqttClient.publish("$dp", (uint8_t*)msg, streamLen + 3, false);
}
/* 发布湿度信息 */
void Humi_pubMQTTmsg(uint32_t data) {
  long lastMsg = 0;
  char msg[50];
  char tmp[28];
  char d[3];
  snprintf(tmp, sizeof(tmp), "{\"Humi\":%d}", data);
  uint16_t streamLen = strlen(tmp);
  d[0] = '\x03';
  d[1] = (streamLen >> 8);
  d[2] = (streamLen & 0xFF);
  snprintf(msg, sizeof(msg), "%c%c%c%s", d[0], d[1], d[2], tmp);
  mqttClient.publish("$dp", (uint8_t*)msg, streamLen + 3, false);
}

smartConfig 代码如下

/**
 * The blue LED on the ESP-01 module is connected to GPIO1
   自动连接、一键配网、延时重启
*/
/* 自动连接 */
bool autoConfig()
{
  delay(2000);
  for (int i = 0; i < 20; i++)
  {
    Serial.println("Setup start");
    //启动STA模式,并连接到wifi网络
    WiFi.begin(AP_SSID, AP_PSW);
    Serial.print(String("Connecting to ") + AP_SSID);
    if (WiFi.status() == WL_CONNECTED)
    {
      Serial.println("AutoConfig Success");
      Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
      Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
      WiFi.printDiag(Serial);
      return true;
    }
    else
    {
      Serial.print("AutoConfig Waiting......");
      Serial.println(WiFi.status());
      delay(5000);
    }
  }
  Serial.println("AutoConfig Faild!" );
  return false;
}
/* 一键配网 */
void smartConfig()
{
  WiFi.mode(WIFI_STA);
  Serial.println("\r\nWait for Smartconfig");
  WiFi.beginSmartConfig();
  while (1)
  {
    Serial.print(".");
    digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
    if (WiFi.smartConfigDone())
    {
      Serial.println("SmartConfig Success");
      Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
      Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
      WiFi.setAutoConnect(true);  // 设置自动连接
      break;
    }
    delay(2000); // 这个地方一定要加延时,否则极易崩溃重启
  }
}
/* 延时N秒 */
void delayNs(uint8_t m) {
  for (uint8_t index = 0; index < m; index ++) {
    delay(1000);
    ESP.wdtFeed();
  }
}
/* 延时重启 */
void delayRestart(float t) {
  Serial.print("Restart after ");
  Serial.print(t);
  Serial.println("s");
  delayTimer.attach(t, []() {
    Serial.println("\r\nRestart now!");
    ESP.restart();
  });
}

选择NodeMCU1.0,端口选对应的,其他默认,最后点击上传;

7.png

上传成功,点击串口监视器

8.png

Arduino串口打印显示,onenet平台显示设备在线,点击详情,选择数据流展示可见温湿度数据

9.png

10.png

11.png

记录这两个变量名称,Humi是湿度,Temp是温度,后面两者有交互

Humi
Temp

3.3 onenet平台交互显示开发

  1. 选择数据模板,添加humi数据流模板

1.png

添加Temp数据流模板

2.png

选择触发器管理,添加触发器

3.png

选择应用管理,添加应用

4.png

然后双击lab,进行应用控制设计

5.png
6.png

进行以上操作后点击右上角保存和发布,然后选择应用管理刷新,就可以看见温湿度的动态变化🎉🎉🎉

7.png

4. 总结

本文是一个难度中等的物联网项目,实现ESP8266一键配网功能、MQTT协议连接ONENET、DHT11温湿度数据的获取、数据上发ONENET平台、ESP8266板载LED亮灭的控制、温度限幅触发器提示

在以后的博文中我们将学会用ESP8266做常用的物联网开发,从而实现对外部世界进行感知,充分认识这个有机与无机的环境,科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力。

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
目录
相关文章
|
8月前
|
网络协议 数据处理 数据格式
51单片机ESP8266云端通信的实现
51单片机ESP8266云端通信的实现
452 1
ESP-01S连接OneNET上报温湿度信息
本文介绍了如何利用ESP-01S连接OneNET上报温湿度信息,其中包括如何烧录固件,如何配置OneNET平台,如何进行连接测试。最后,给出了一部分程序设计。
338 0
ESP-01S连接OneNET上报温湿度信息
|
传感器 数据采集 JSON
RS232/RS485转4G DTU 上传基于Modbus协议的温湿度传感器数据到远程TCP服务器
RS232/RS485转4G DTU 上传基于Modbus协议的温湿度传感器数据到远程TCP服务器
727 0
RS232/RS485转4G DTU 上传基于Modbus协议的温湿度传感器数据到远程TCP服务器
EMQ
|
传感器 监控 网络协议
使用 Neuron 接入 Modbus TCP 及 Modbus RTU 协议设备
作为一款支持数十种工业协议转换的物联网边缘工业协议网关软件,Neuron也已经实现了基于Modbus RTU协议TCP传输的功能。本文将在Ubuntu 20.04.3、X86_64的环境下,介绍如何使用Neuron接入Modbus TCP及Modbus RTU协议设备。
EMQ
767 0
使用 Neuron 接入 Modbus TCP 及 Modbus RTU 协议设备
|
移动开发 网络协议 物联网
STM32+果云GA6-GPRS/GSM模块+MQTT+HTTP协议连接中移OneNet上传GPS数据定位
STM32+果云GA6-GPRS/GSM模块+MQTT+HTTP协议连接中移OneNet上传GPS数据定位
1106 0
STM32+果云GA6-GPRS/GSM模块+MQTT+HTTP协议连接中移OneNet上传GPS数据定位
|
7月前
|
网络协议 API 开发者
无线通信模块通过TCP/IP协议实现与PC端的数据传输
本文介绍了无线通信模块借助TCP/IP协议向PC端传输数据的过程,包括数据封装、发送和接收,并以WIFI模块为例,讨论了在QT平台下实现无线数据传输的方法。通过QTcpSocket类,开发者能轻松建立WIFI模块与PC间的连接。随着无线通信技术的进步,未来将有更多创新应用出现。
|
传感器 网络协议 物联网
STM32+ESP8266+MQTT协议连接阿里云物联网平台
STM32+ESP8266+MQTT协议连接阿里云物联网平台
12874 3
STM32+ESP8266+MQTT协议连接阿里云物联网平台
|
8月前
|
监控 网络性能优化 网络安全
【MODBUS】Modbus主站为边缘设备通过MQTT协议上云
【MODBUS】Modbus主站为边缘设备通过MQTT协议上云
123 1
串口通讯,三种数据传输方式介绍
串口通讯,三种数据传输方式介绍
248 0
|
8月前
|
Java 物联网 网络安全
mqtt问题之STM32F103GPRS模组如何接入物理网平台
MQTT接入是指将设备或应用通过MQTT协议接入到消息服务器,以实现数据的发布和订阅;本合集着眼于MQTT接入的流程、配置指导以及常见接入问题的解决方法,帮助用户实现稳定可靠的消息交换。
176 2

热门文章

最新文章