nodemcu使用mqtt连接onenet
记录一下折腾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相关推荐
- NodeMCU 通过MQTT 连接阿里云物联网
NodeMCU 通过MQTT 连接阿里云物联网 前言: 这是第一个帖子,希望以后所有的东西都能记录在CSDN吧!自己在调试过程中也借鉴了很多人的帖子,这里总结出来,方便以后查阅,也方便他人! 1.No ...
- 塔石E18D mqtt连接onenet
一.准备工作: 1.OneNET平台注册账号(免费注册且可以不进行实名认证),官网链接:https://open.iot.10086.cn/:具体的注册步骤可以参考MQTT物联网套件的文档,参考链接: ...
- 使用MQTT连接onenet云平台(九 两台网络调试助手互相通信)
一.说明 本次试验实现两个网络调试助手模拟两台设备通过MQTT连接到onenet云平台进行互相通信控制,模拟两台设备信息如下: 二.设备信息 2.1设备1信息 名称:testa 设备ID:925027 ...
- 【bearpi物联网应用笔记】hi3861通过mqtt连接onenet
一.mqtt介绍 1.1 概述 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分. ...
- 树莓派mqtt连接onenet平台实现消息订阅与发布
目录 一.引言 二.代码 三.测试效果 四.说明 一.引言 由于毕设需求,需要通过MQTT上传数据与下发命令,所以小白的我学习了MQTT,虽然理论部分还是懵懵懂懂,但别人的实现代码看懂也还算凑合.对于 ...
- BC26通过MQTT协议连接ONENET,AT流程
onenet平台操作 首先登录平台,并进入控制台 选择多协议接入 点击添加产品,新建一个产品 名称.类别根据需要填写,接入协议选择MQTT 新建产品成功: 点击产品名字,进入产品设置页面,为产品添加设 ...
- 单片机通过MQTT协议连接OneNet实现发布/订阅理论篇
材料: 51单片机 ESP8266-01S ESP LINK烧写器(USB-TTL也可以) 杜邦线若干 MQTT简述: MQTT是基于发布/订阅范式的消息协议.你发布了一个Topic,只要别人订阅了这 ...
- ESP8266 NodeMcu 连接onenet 保姆级教学
ESP8266 nodemcu模块使用Arduino IDE 连接onenet示例 文章目录 目录 ESP8266 nodemcu模块使用Arduino IDE 连接onenet示例 文章目录 前言 ...
- MQTT连接中移物联网ONENET
MQTT连接中移物联网ONENET 注册登录ONENET,在开发者中心中添加产品和设备 通过网络调试助手实现和ONENET的通信 准备知识 OneNET MQTT服务器IP地址和端口号 183.230 ...
最新文章
- linux 系统调用 open函数使用
- windows server 2008设置远程桌面连接最大数量
- [poj 2001] Shortest Prefixes (字典树)
- Understanding your audience
- Spring与SpringMVC集成出现的问题
- 使用jclouds在S3上分段上传
- Netfilter框架
- securityPolicy与安全策略等级配置
- Android的Jetpack概括
- css absolute relative 定位
- 冒险岛java_079src 冒险岛079服务端源码,解压出来 直接导入到java改成即可 Develop 243万源代码下载- www.pudn.com...
- 全能电子地图下载器-获取离线地图瓦片的工具
- ARKit入门到精通-0.0-史小川-专题视频课程
- PE文件格式偏移参考
- 操作系统——并发之锁
- PPT文件不能打印是什么原因
- iOS IAP 服务器二次验证突然断网了怎么办
- 流行的几种世界观来源
- 永远相信美好的事情即将发生。
- 复盘罗辑思维卖月饼:微信电商的五大G点 (转)
热门文章
- 利用vpython实现秋千模型
- Doris(一)-简介、架构、编译、安装和数据表的基本使用
- 学计算机用锐龙,新平台APU锐龙R3-2200G装机 适合一般家用与学生电脑主机配置推荐...
- autocad锐龙英特尔_入门级CPU怎么选?请不要再纠结于酷睿和锐龙啦!
- %3chtml%3e%3c html,在JEditorPane中显示HTML的问题java
- 若依报错com.alibaba.fastjson2.JSONArray cannot be cast to com.ruoyi.common.core.domain.model.LoginUser
- 静态HTML网页设计作品—绿色古典旅游景区(6页) HTML+CSS+JavaScript 学生DW网页设计作业成品
- 网上图书商城系统毕业设计,网上图书销售系统设计与实现,毕业设计论文毕设作品参考
- 给定桩号获取纵断面中的高程值(c# for civil3d)
- PICASSO:面向搜推广业务的工业级稀疏训练引擎