Use arduino IDE para desarrollar ESP8266NodeMCU y conecte DHT11 para realizar la detección de temperatura y humedad y cargar en el sitio web oficial de onenet

Prefacio:

        Este blog registra el uso de arduino IDE para desarrollar ESP8266NodeMCU, realizar la detección de temperatura y humedad con DHT11 y cargar la nueva versión del sitio web oficial de onenet; es un poco incómodo. En el espíritu de código abierto, este blog compensará el falta de información en esta área.

trabajo de preparación inicial:

Hardware:

        1, ESP8266NodeMCU

         2. sensor DHT11

         3. Un cable USB a micoUSB, varios cables Dupont

Crear un dispositivo en la nueva versión de Onenet

        1. En primer lugar, debemos registrar una cuenta de onenet, y no escribiré pasos específicos para usted aquí.

        2. Después del registro, haga clic en la flecha para ingresar al centro de desarrolladores

         3. Continúe haciendo clic en el centro de costos

         4. Aparecerá una nueva interfaz

        5. Pase el mouse sobre el área señalada por la flecha a la izquierda y se expandirá la siguiente interfaz 

        6. Seleccionar acceso multiprotocolo

         7. Hacemos clic para agregar productos

         8. Escriba la información necesaria de acuerdo con las flechas y las indicaciones del cuadro. Esto se puede escribir de manera casual, siempre y cuando confirmemos que el método de red es wifi y el protocolo de acceso es MQTT (versión anterior).

         9. Hacemos clic para agregar el dispositivo inmediatamente

        10. Haga clic en Agregar dispositivo

         11. Aparecerá una nueva interfaz para nosotros

         12. También puede escribir casualmente aquí Después de escribir las opciones requeridas, haga clic en Agregar.

         13. Después de completar la adición, podemos ver una nueva interfaz. En esta interfaz, el dispositivo está fuera de línea al principio, lo cual es normal. Además, la ID de nuestro dispositivo debe registrarse y debemos hacer un seguimiento de acuerdo con el ID del dispositivo Modifique su propio código.

         14. Hacemos clic en este detalle para ver la situación general de nuestro equipo

        15. Luego de ingresar a la nueva interfaz, hacemos clic en Add APIkey

         16. Esta APIKey la podemos configurar nosotros mismos. Lo escribiré de manera casual aquí. Este sitio web oficial generará un código de APIKey correspondiente para nosotros. Lo escribo aquí de manera casual, siempre que haya suficientes 16.

         17. Después de hacer clic en Enviar, se generará una nueva APIKey para nosotros. Esto también debe recordarse, y también debe recordarse la escritura de código posterior.

         19. Hagamos clic en la descripción general del producto para verificar nuestra ID de producto y registrar esto, porque también lo usaremos para la escritura de código posterior.

         Hasta ahora, nuestro dispositivo onenet está configurado y el siguiente paso es agregar un dispositivo ESP8266 en el IDE de arduino.

arduinoIDE agregar ESP8266

        Si elegimos usar arduino IDE para editar ESP8266 al principio, necesitamos hacer algunas operaciones en el editor

        1. Abra Archivo -> Preferencias en la barra de menú y copie la siguiente URL en la ubicación especificada

http://arduino.esp8266.com/stable/package_esp8266com_index.json

      

         2. Luego abra la herramienta, pase el mouse sobre la posición de la placa de desarrollo y aparecerá la administración de la placa de desarrollo. Si no aparece, solo significa que la versión de Arduino es diferente. No hay problema con esto, ya que se muestra en la figura

         3. Hacemos clic en la administración de la placa de desarrollo y aparece la siguiente interfaz. Buscamos ESP8266 en el área señalada por la flecha y luego encontramos una versión adecuada para descargar.

         4. Comience a descargar.

         5. Este proceso es muy propenso a errores, y no importa si comete un error. Una vez que se informe un error, descárguelo varias veces. Asegúrese de que la red sea fluida, de lo contrario, la descarga fallará.

        6. Una vez completada la descarga, debemos reiniciar nuestro IDE para encontrar nuestra placa de desarrollo descargada en la ubicación de la placa de desarrollo. Aquí debemos elegir la placa de desarrollo sobre la que paso el mouse. La placa de desarrollo correspondiente a nuestro ESP8266NodeMCU es NodeMCU 1.0, no debe elegir el incorrecto aquí, de lo contrario, es fácil cometer algunos errores.

 Instale el controlador de CP2102

       Si conectamos el ESP8266NodeMCU a nuestra computadora al principio, no hay forma de reconocer nuestro puerto serie, es decir, el código de grabación no se puede grabar al principio. Si conecta el ESP8266NodeMCU, la siguiente interfaz aparecerá en el administrador de dispositivos de la computadora.

        Aquí he instalado el controlador CP2102 antes. Al principio lo leí mal y pensé que el ESP8266NodeMCU a bordo es el controlador CH340. Después de una mirada más cercana, no lo es. También necesitamos instalar un controlador CP2102. Aquí también lo encontré para usted Un controlador adecuado, lo puse en el disco de red de Baidu, el    código de extracción del controlador CP2102 es: brqt

        Después de la descarga, elegimos el controlador correspondiente según el tipo de computadora. Para 64 bits, elegimos X64 y para 32 bits, elegimos X86.

         Haga doble clic para ejecutar. Simplemente haga clic en Siguiente, instalación infalible.

         Después de la instalación, podemos encontrar que se reconoce el puerto serie.

       Hasta ahora, nuestro trabajo preparatorio se ha completado.

Conexiones de clavijas de hardware

        

pasador DHT11 pines ESP8266NODEMCU
TIERRA TIERRA
CCV 3v3
DATOS D6

parte del código:

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include <Ticker.h>
#include <dht11.h>

#define WIFI_DEBUG 0          //1:使用一键配网,其它值则使用默认无线账号密码
#define DHT11PIN 12           //设置DHT引脚为Pin 12
#define ONENET_DISCONNECTED 1 //已经断开
#define ONENET_CONNECTED 2    //已经连接上
#define ONENET_RECONNECT 3    //重连成功
#define VER  "ESP8266_MQTT_V1.0"  //版本号

const char* ssid = "********";//你的wifi账号
const char* password = "********";//wifi密码


/*OneNet*/
PubSubClient mqttClient;
const char* mqttServer = "183.230.40.39";//mqtt服务器
const uint16_t mqttPort = 6002;       //端口号
#define onenet_productId   "******" //产品ID
#define onenet_deviceId    "**********" //设备ID
#define onenet_apiKey      "******************" //API_KEY

int state;
Ticker delayTimer;
WiFiClient espClient;
dht11 DHT11;

/* 延时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");
             delayNs(5);
        }
        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);
  }
}

/* 发布温度信息 */
void Temp_pubMQTTmsg(uint32_t data){
   long lastMsg = 0;

   char msg[50];
   char tmp[28];
   char d[3];
   snprintf(tmp,sizeof(tmp),"{\"Temp\":%d}",data);
   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 Humi_pubMQTTmsg(uint32_t data){
   long lastMsg = 0;

   char msg[50];
   char tmp[28];
   char d[3];
   snprintf(tmp,sizeof(tmp),"{\"Humi\":%d}",data);
   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 (115200);
    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();
  DHT11.read(DHT11PIN);
  state = connectToOneNetMqtt();
  Serial.println(WiFi.status());
  if(state == ONENET_RECONNECT){
     mqttClient.loop();
  }
  else if(state == ONENET_CONNECTED){
     printf("temp:%d \r\n",DHT11.temperature);
     printf("humi:%d \r\n",DHT11.humidity);
     Temp_pubMQTTmsg(DHT11.temperature);
     Humi_pubMQTTmsg(DHT11.humidity);
     mqttClient.loop();
  }
  delay(2000);
}

         Lo que debe modificar aquí es la identificación del producto, la identificación del dispositivo, la clave de API y el punto de acceso y la contraseña de su propio teléfono móvil que le recordé que registrara.

        Por supuesto, si compila, primero debe seleccionar la placa de desarrollo como ESP8266NodeMCU. entonces todavía informe

        Y estas bibliotecas se pueden encontrar en el sitio web oficial, y también resolveré qué hacer si no tiene estas bibliotecas.

Qué hacer si no hay una biblioteca correspondiente

        1. Copie la siguiente URL en su navegador

https://www.arduino.cc/reference/en/libraries/

        2. Ingrese a la siguiente interfaz

         3. Busque la biblioteca que falta donde apunta la flecha.

         4. Aquí tomo PubSubClient.h como ejemplo Después de buscar, haga clic en el primero

         5. Ingrese a la siguiente interfaz, aquí elijo la última versión, y se descargará automáticamente después de hacer clic.

         6. Ingrese al IDE de Arduino, haga clic en Proyecto -> Cargar biblioteca -> Agregar biblioteca .zip. Seleccione la ruta del archivo que acaba de descargar, especifique el archivo e instálelo directamente. Puede ver el indicador de éxito de la instalación en la ventana de comandos del IDE.

         7. Lo mismo es cierto para las otras bibliotecas.

Compilar:

        Después de compilar, se ve así, no un error.

        Antes de grabar, debemos seleccionar el puerto serie que acabamos de ver en el administrador de dispositivos, luego hacer clic en Herramientas -> Puerto -> seleccionar el puerto serie correspondiente a CP2102, y luego podemos comenzar a grabar.

        Si se realiza la operación de grabación, aparecerá el efecto que se muestra en la siguiente figura, indicando que todo está bien.

         En este momento, la parte de visualización del puerto serie se agrega al código y podemos ver la temperatura y la humedad actuales en el monitor del puerto serie. Podemos abrir el monitor serie para ver el efecto.

         También puede ingresar al sitio web oficial de onenet para ver el efecto.

 

Supongo que te gusta

Origin blog.csdn.net/weixin_51651698/article/details/131262456
Recomendado
Clasificación