• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
MKT-porter
博客园    首页    新随笔    联系   管理    订阅  订阅
ESP8266对接onenet

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);
}

  

 

posted on 2021-04-17 19:57  MKT-porter  阅读(921)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3