记录一下折腾nodemcu的经过。

本文主要讲述如何使用nodemcu开发板上报数据到onenet云平台

硬件连接

如图所示,黑线为地线,红线为接3.3V,蓝色的线为数据线。

软件代码

有关与温湿度数据的获取请查看本人撰写的这篇《基于nodemcu开发板与DHT11温湿度传感器》

【https://blog.csdn.net/Lozenyi/article/details/115409547】

首先是相关的头文件

#include <DHT.h>//温湿度传感器库
#include <ESP8266WiFi.h>//WiFi头文件
#include <PubSubClient.h>//mqtt库头文件

WIFI与MQTT协议的相关连接参数的设置

//接入WiFi参数
#define wifi_ssid "youwifissid"
#define wifi_passwd "youwifipawssd"
//MQTT协议接入参数
const char* mqtt_server = "mqtt.heclouds.com";//mqtt服务器网址【这是onenet的mqtt服务器】
const char* mqtt_com="6002";//mqtt服务器端口
const char* mqtt_ID="*********";//设备ID
const char* mqtt_CID="*******";//产品ID
const char* mqtt_key="********";//鉴权信息【密码】

实例化

WiFiClient wifiClient;//建立WiFiClient对象
PubSubClient mqttClient(wifiClient);//建立mqttClient对象

WiFi初始化

//WiFi初始化【连接WiFi】
void WiFiInit(){WiFi.mode(WIFI_STA);//设置为客户端模式WiFi.begin(wifi_ssid,wifi_passwd);//输入WiFi参数while(WiFi.status() != WL_CONNECTED){//判断连接状态,后面的是个库里定义的常量delay(2000);Serial.println("WIFI not Connect");}Serial.println("Connected to AP");Serial.print("IP address is ");Serial.println(WiFi.localIP());
}

mqtt连接函数,【用于重连服务】

void mqtt_commend(){while(!mqttClient.connected()){Serial.print("Attempting MQTT connection...");if(mqttClient.connect(mqtt_ID,mqtt_CID,mqtt_key)){//连接参数Serial.println("connected");mqttClient.publish("temperature",itoa(tem,str_tem,10));mqttClient.publish("humidity",itoa(hum,str_hum,10));}else{Serial.print("failed, rc=");Serial.print(mqttClient.state());Serial.println(" ——1秒后重试");delay(1000);}}
}

数据获取与处理

//数据处理【数据封装】
dht11();//获取温湿度数据到
char json[256];
char *JsonStr="{\"datastreams\":[{\"id\":\"temperature\",\"datapoints\":[{\"value\":%f}]},{\"id\":\"humidity\",\"datapoints\":[{\"value\":%f}]}]}";
sprintf(json,JsonStr,tem,hum);unsigned short jsonlen=strlen(json);
unsigned char data[jsonlen+3];data[0]='\x01';
data[1]=jsonlen>>8;
data[2]=jsonlen;
memcpy(data+3,json,jsonlen);

数据上报

//数据发送函数【标签头,有效数据,有效数据长度】
mqttClient.publish("$dp",data,jsonlen+3);

代码整体

/*项目名:基于nedomcu的MQTT上传温湿度数据
*/
//头文件设置
//#include <dht11.h>//温湿度传感器DHT11头文件
#include <DHT.h>//温湿度传感器库【麻省理工库】
#include <ESP8266WiFi.h>//WiFi头文件
#include <PubSubClient.h>//mqtt库头文件
#include <Ticker.h>//任务调度头文件//关于温湿度传感器的设置
#define DHTTYPE DHT11//温湿度传感器型号
#define DHT11_PIN 2//温湿度检测引脚【智能选用】
DHT dht(DHT11_PIN,DHTTYPE);//构造函数,实例化
//dht11 DHT11;//实例化
//定义温湿度全局变量
float tem;
float hum;
char str_tem[10];
char str_hum[10];
WiFiClient wifiClient;//建立WiFiClient对象
PubSubClient mqttClient(wifiClient);//建立mqttClient对象
//接入WiFi参数
#define wifi_ssid "youwifissid"
#define wifi_passwd "youwifipawssd"
//MQTT协议接入参数
const char* mqtt_server = "mqtt.heclouds.com";//mqtt服务器网址【这是onenet的mqtt服务器】
const char* mqtt_com="6002";//mqtt服务器端口
const char* mqtt_ID="*********";//设备ID
const char* mqtt_CID="*******";//产品ID
const char* mqtt_key="********";//鉴权信息【密码】//采集温湿度并显示的函数
void dht11(){//读取温湿度数据dht.begin();tem=dht.readTemperature();hum=dht.readHumidity();delay(300);Serial.print("t=");Serial.print(tem);  Serial.print("*C,h=");Serial.print(hum);Serial.print("%\n");}
//WiFi初始化【连接WiFi】
void WiFiInit(){WiFi.mode(WIFI_STA);//设置为客户端模式WiFi.begin(wifi_ssid,wifi_passwd);//输入WiFi参数while(WiFi.status() != WL_CONNECTED){//判断状态,后面的是个库里定义的常量delay(1000);Serial.println("WIFI not Connect");}Serial.println("Connected to AP");Serial.print("IP address is ");Serial.println(WiFi.localIP());
}
//连接MQTT服务器
void mqtt_commend(){while(!mqttClient.connected()){Serial.print("Attempting MQTT connection...");if(mqttClient.connect(mqtt_ID,mqtt_CID,mqtt_key)){//连接参数Serial.println("connected");mqttClient.publish("temperature",itoa(tem,str_tem,10));mqttClient.publish("humidity",itoa(hum,str_hum,10));}else{Serial.print("failed, rc=");Serial.print(mqttClient.state());Serial.println(" ——1秒后重试");delay(1000);}}
}//初始化【只执行一遍】
void setup() {pinMode(DHT11_PIN, INPUT);pinMode(LED_BUILTIN, OUTPUT);Serial.begin(115200);//设置串口波特率WiFiInit();//设置MQTT服务器和端口号(这里使用的是普通的TCP端口)mqttClient.setServer(mqtt_server, 6002);//连接服务器while(!mqttClient.connect(mqtt_ID,mqtt_CID,mqtt_key));Serial.print("MQTT服务器连接成功!");
}
//主循环函数
void loop() {//重连机制if(!mqttClient.connected()){//重连mqtt_commend();}mqttClient.loop();//数据发送处理delay(1000);//延时处理//数据处理【数据封装】dht11();//获取温湿度数据到char json[256];char *JsonStr="{\"datastreams\":[{\"id\":\"temperature\",\"datapoints\":[{\"value\":%f}]},{\"id\":\"humidity\",\"datapoints\":[{\"value\":%f}]}]}";sprintf(json,JsonStr,tem,hum);unsigned short jsonlen=strlen(json);unsigned char data[jsonlen+3];data[0]='\x01';data[1]=jsonlen>>8;data[2]=jsonlen;memcpy(data+3,json,jsonlen);//数据发送函数【标签头,有效数据,有效数据长度】mqttClient.publish("$dp",data,jsonlen+3);}

重点难点

关于上报的数据格式

在设备端接入协议-MQTT文档中的5.接入流程-5.2消息发布-5.2.1数据点上报有相关的描述。

看官可以自行查看该文档,文档下载链接放在下一行

【https://open.iot.10086.cn/doc/multiprotocol/book/develop/mqtt/device/doc-tool.html】

详解上报json格式

{"datastreams":[//必要项,允许多条数据上报{"id":"temperature",//数据流名称"datapoints":[{"value":25}//数据流的值]},{"id":"",//数据流名称"datapoints":[{"value":%d}//数据流的值]}]
}

注意:“”在加进代码里需要使用\保护!!!

感谢“我要开飞机”博主的以下文章,大家可以看一下我参考的这篇文章。数据处理部分参照了该篇的,但是JsonStr那个地方出现的问题,自己折腾了一下才搞定。

【https://blog.csdn.net/oBaoChiChenMo/article/details/87996899?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161683310816780255217444%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=161683310816780255217444&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-2-87996899.pc_search_positive&utm_term=nodemcu+mqtt%E6%8E%A5%E5%85%A5onenet】

以上为本文全部内容,如有错误的地方烦请看官指正指正!小弟感激不尽!!

nodemcu使用mqtt连接onenet相关推荐

  1. NodeMCU 通过MQTT 连接阿里云物联网

    NodeMCU 通过MQTT 连接阿里云物联网 前言: 这是第一个帖子,希望以后所有的东西都能记录在CSDN吧!自己在调试过程中也借鉴了很多人的帖子,这里总结出来,方便以后查阅,也方便他人! 1.No ...

  2. 塔石E18D mqtt连接onenet

    一.准备工作: 1.OneNET平台注册账号(免费注册且可以不进行实名认证),官网链接:https://open.iot.10086.cn/:具体的注册步骤可以参考MQTT物联网套件的文档,参考链接: ...

  3. 使用MQTT连接onenet云平台(九 两台网络调试助手互相通信)

    一.说明 本次试验实现两个网络调试助手模拟两台设备通过MQTT连接到onenet云平台进行互相通信控制,模拟两台设备信息如下: 二.设备信息 2.1设备1信息 名称:testa 设备ID:925027 ...

  4. 【bearpi物联网应用笔记】hi3861通过mqtt连接onenet

    一.mqtt介绍 1.1 概述   MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分. ...

  5. 树莓派mqtt连接onenet平台实现消息订阅与发布

    目录 一.引言 二.代码 三.测试效果 四.说明 一.引言 由于毕设需求,需要通过MQTT上传数据与下发命令,所以小白的我学习了MQTT,虽然理论部分还是懵懵懂懂,但别人的实现代码看懂也还算凑合.对于 ...

  6. BC26通过MQTT协议连接ONENET,AT流程

    onenet平台操作 首先登录平台,并进入控制台 选择多协议接入 点击添加产品,新建一个产品 名称.类别根据需要填写,接入协议选择MQTT 新建产品成功: 点击产品名字,进入产品设置页面,为产品添加设 ...

  7. 单片机通过MQTT协议连接OneNet实现发布/订阅理论篇

    材料: 51单片机 ESP8266-01S ESP LINK烧写器(USB-TTL也可以) 杜邦线若干 MQTT简述: MQTT是基于发布/订阅范式的消息协议.你发布了一个Topic,只要别人订阅了这 ...

  8. ESP8266 NodeMcu 连接onenet 保姆级教学

    ESP8266 nodemcu模块使用Arduino IDE 连接onenet示例 文章目录 目录 ESP8266 nodemcu模块使用Arduino IDE 连接onenet示例 文章目录 前言 ...

  9. MQTT连接中移物联网ONENET

    MQTT连接中移物联网ONENET 注册登录ONENET,在开发者中心中添加产品和设备 通过网络调试助手实现和ONENET的通信 准备知识 OneNET MQTT服务器IP地址和端口号 183.230 ...

最新文章

  1. linux 系统调用 open函数使用
  2. windows server 2008设置远程桌面连接最大数量
  3. [poj 2001] Shortest Prefixes (字典树)
  4. Understanding your audience
  5. Spring与SpringMVC集成出现的问题
  6. 使用jclouds在S3上分段上传
  7. Netfilter框架
  8. securityPolicy与安全策略等级配置
  9. Android的Jetpack概括
  10. css absolute relative 定位
  11. 冒险岛java_079src 冒险岛079服务端源码,解压出来 直接导入到java改成即可 Develop 243万源代码下载- www.pudn.com...
  12. 全能电子地图下载器-获取离线地图瓦片的工具
  13. ARKit入门到精通-0.0-史小川-专题视频课程
  14. PE文件格式偏移参考
  15. 操作系统——并发之锁
  16. PPT文件不能打印是什么原因
  17. iOS IAP 服务器二次验证突然断网了怎么办
  18. 流行的几种世界观来源
  19. 永远相信美好的事情即将发生。
  20. 复盘罗辑思维卖月饼:微信电商的五大G点 (转)

热门文章

  1. 利用vpython实现秋千模型
  2. Doris(一)-简介、架构、编译、安装和数据表的基本使用
  3. 学计算机用锐龙,新平台APU锐龙R3-2200G装机 适合一般家用与学生电脑主机配置推荐...
  4. autocad锐龙英特尔_入门级CPU怎么选?请不要再纠结于酷睿和锐龙啦!
  5. %3chtml%3e%3c html,在JEditorPane中显示HTML的问题java
  6. 若依报错com.alibaba.fastjson2.JSONArray cannot be cast to com.ruoyi.common.core.domain.model.LoginUser
  7. 静态HTML网页设计作品—绿色古典旅游景区(6页) HTML+CSS+JavaScript 学生DW网页设计作业成品
  8. 网上图书商城系统毕业设计,网上图书销售系统设计与实现,毕业设计论文毕设作品参考
  9. 给定桩号获取纵断面中的高程值(c# for civil3d)
  10. PICASSO:面向搜推广业务的工业级稀疏训练引擎