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);
}
浙公网安备 33010602011771号