https://bbs.huaweicloud.com/blogs/250068
https://my.oschina.net/u/4335112/blog/4892254
1登陆注册
https://open.iot.10086.cn/passport/login?redirect_uri=%2Fconsole%2F
15610806661
密码 sunqian@123
进入控制台-切换旧版本-多协议-MQTT
本次实验使用的是旧版本的平台,所以点击进入旧版
进入控制台后点击多协议接入
可以看到这个界面中有很多种协议,点击MQTT协议,然后点击添加产品,我的产品列表中已经有之前添加的一个产品了,新用户需要重新添加
#include <ESP8266WiFi.h> #include <PubSubClient.h> //#include <ArduinoJson.h> #include <Ticker.h> #define WIFI_DEBUG 0 //1:使用一键配网,其它值则使用默认无线账号密码 #define ONENET_DISCONNECTED 1 //已经断开 #define ONENET_CONNECTED 2 //已经连接上 #define ONENET_RECONNECT 3 //重连成功 #define VER "ESP8266_MQTT_V1.0" //版本号 const char* ssid = "love";//wifi账号 const char* password = "love123456";//wifi密码 /*OneNet*/ PubSubClient mqttClient; const char* mqttServer = "183.230.40.39";//mqtt服务器 const uint16_t mqttPort = 6002; //端口号 #define onenet_productId "5020815" //产品ID #define onenet_deviceId "9212108287" //设备ID #define onenet_apiKey "4zi5rANyLE31zKOMjHJgpQDG7fJ6k=" //API_KEY int state; Ticker delayTimer; WiFiClient espClient; /* 延时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(); }); } /* 自动连接 */ bool autoConfig() { WiFi.begin(); for (int i = 0; i < 20; i++) { 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(1000); } } 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(1000); // 这个地方一定要加延时,否则极易崩溃重启 } } /* 连接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"); delay(5000); } 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); } } /* 发布一个传感器信息 String sensorname 传感器名字 String data 数据 int sendlen=200; 数据大小 */ void pubMQTTmsg_one_name_value(String sensorname,String data){ long lastMsg = 0; int sendlen=200;//28 //数组大小 char msg[sendlen+22]; //数组大小 char tmp[sendlen]; char d[3]; //snprintf(tmp,sizeof(tmp),String("")+"{\""+sensorname+"\":%d}",data); String sendmsg=String("")+"{\""+sensorname+"\":"+data+"}"; //String sendmsg="{\"mq2\":1234,\"mq3\":345}"; sendmsg.toCharArray(tmp, sendlen); Serial.println(tmp); 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); } /* 发布多个传感器信息 String sendmsg 打包数据 {"senseor1":1213,"senseor2":313.3,"senseor3":543.09,"senseor4":645.0} 注意 ” 转义字符串 \“ */ void pubMQTTmsg_more_name_value(String sendmsg_in){ long lastMsg = 0; int sendlen=800;//28 //数组大小 char msg[sendlen+22]; //数组大小 char tmp[sendlen]; char d[3]; //snprintf(tmp,sizeof(tmp),String("")+"{\""+sensorname+"\":%d}",data); //String sendmsg=String("")+"{\""+sensorname+"\":"+data+"}"; String sendmsg=sendmsg_in; sendmsg.toCharArray(tmp, sendlen); Serial.println(tmp); 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 initSystem(){ int cnt = 0; Serial.begin (9600); 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(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); cnt++; Serial.print("."); if(cnt>=40){ cnt = 0; //重启系统 delayRestart(1); } } } Serial.print("WIFI Connect \r\n"); } /* 初始化ONENET通信 */ void initOneNetMqtt(){ mqttClient.setServer(mqttServer,mqttPort); mqttClient.setClient(espClient); mqttClient.setCallback(callback); } /* 初始化 */ void setup() { initSystem(); initOneNetMqtt(); } /* 主函数 */ void loop() { ESP.wdtFeed(); state = connectToOneNetMqtt(); Serial.println(WiFi.status()); if(state == ONENET_RECONNECT){ mqttClient.loop(); } else if(state == ONENET_CONNECTED) { //发布一个消息 //pubMQTTmsg_one_name_value("mq2","1213"); //发布多个个消息 String msg=String("")+"{" +"\"sen1\":"+"121.33"+"," +"\"sen2\":"+"31.44"+"," +"\"sen3\":"+"41.55" +"}"; pubMQTTmsg_more_name_value(msg); mqttClient.loop(); } delay(2000); }
读取温湿度和光照和红外
#include <ESP8266WiFi.h> #include <PubSubClient.h> //#include <ArduinoJson.h> #include <Ticker.h> #include "DHT.h" #define DHTPIN D2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); #define WIFI_DEBUG 0 //1:使用一键配网,其它值则使用默认无线账号密码 #define ONENET_DISCONNECTED 1 //已经断开 #define ONENET_CONNECTED 2 //已经连接上 #define ONENET_RECONNECT 3 //重连成功 #define VER "ESP8266_MQTT_V1.0" //版本号 const char* ssid = "love";//wifi账号 const char* password = "love123456";//wifi密码 /*OneNet*/ PubSubClient mqttClient; const char* mqttServer = "183.230.40.39";//mqtt服务器 const uint16_t mqttPort = 6002; //端口号 #define onenet_productId "51303636" //产品ID #define onenet_deviceId "923733120724" //设备ID #define onenet_apiKey "DYcL312swhRWZru4EggFVnDq09M568=" //API_KEY int state; Ticker delayTimer; WiFiClient espClient; /* 延时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(); }); } /* 自动连接 */ bool autoConfig() { WiFi.begin(); for (int i = 0; i < 20; i++) { 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(1000); } } 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(1000); // 这个地方一定要加延时,否则极易崩溃重启 } } /* 连接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"); delay(5000); } 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); } } /* 发布一个传感器信息 String sensorname 传感器名字 String data 数据 int sendlen=200; 数据大小 */ void pubMQTTmsg_one_name_value(String sensorname,String data){ long lastMsg = 0; int sendlen=200;//28 //数组大小 char msg[sendlen+22]; //数组大小 char tmp[sendlen]; char d[3]; //snprintf(tmp,sizeof(tmp),String("")+"{\""+sensorname+"\":%d}",data); String sendmsg=String("")+"{\""+sensorname+"\":"+data+"}"; //String sendmsg="{\"mq2\":1234,\"mq3\":345}"; sendmsg.toCharArray(tmp, sendlen); Serial.println(tmp); 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); } /* 发布多个传感器信息 String sendmsg 打包数据 {"senseor1":1213,"senseor2":313.3,"senseor3":543.09,"senseor4":645.0} 注意 ” 转义字符串 \“ */ void pubMQTTmsg_more_name_value(String sendmsg_in){ long lastMsg = 0; int sendlen=800;//28 //数组大小 char msg[sendlen+22]; //数组大小 char tmp[sendlen]; char d[3]; //snprintf(tmp,sizeof(tmp),String("")+"{\""+sensorname+"\":%d}",data); //String sendmsg=String("")+"{\""+sensorname+"\":"+data+"}"; String sendmsg=sendmsg_in; sendmsg.toCharArray(tmp, sendlen); Serial.println(tmp); 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 initSystem(){ int cnt = 0; Serial.begin (9600); 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(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); cnt++; Serial.print("."); if(cnt>=40){ cnt = 0; //重启系统 delayRestart(1); } } } Serial.print("WIFI Connect \r\n"); } /* 初始化ONENET通信 */ void initOneNetMqtt(){ mqttClient.setServer(mqttServer,mqttPort); mqttClient.setClient(espClient); mqttClient.setCallback(callback); } /* 初始化 */ void setup() { initSystem(); initOneNetMqtt(); dht.begin(); pinMode(D1, INPUT); } /* 主函数 */ void loop() { ESP.wdtFeed(); state = connectToOneNetMqtt(); Serial.println(WiFi.status()); if(state == ONENET_RECONNECT){ mqttClient.loop(); } else if(state == ONENET_CONNECTED) { //发布一个消息 //pubMQTTmsg_one_name_value("mq2","1213"); int h = int(dht.readHumidity()); int t = int(dht.readTemperature()); if (isnan(h) || isnan(t) ){ h=27; t=23; } int LightValue = analogRead(A0); LightValue=1024-LightValue; bool PeopleValue =digitalRead(D1); PeopleValue=!PeopleValue; //发布多个个消息 String msg=String("")+"{" +"\"Humidity\":"+String(h)+"," +"\"Temperature\":"+String(t)+"," +"\"Light\":"+String(LightValue)+"," +"\"People\":"+String(PeopleValue) +"}"; pubMQTTmsg_more_name_value(msg); mqttClient.loop(); } delay(2000); }