• Arduino IDE 开发 ESP-01S/ESP-01物联网实战检测温度湿度上传MQTT服务器


    一、硬件准备

    USB转ESP8266两块、DHT11温度湿度传感器、ESP8266-01/ESP8266-01一块(如果学习的话多买几块,ESP-01/ESP-01S的区别

    USB转ESP8266 说明:为什么要买两块

    二、软件准备

    Arduino、EMQX(这是mqtt服务器可以部署在本地也可以放在远程服务器上)、MQTTBox(mqtt客户端程序)、如果是Window系统的话 安装相关USB驱动程序。

    三、安装EMQX 下面介绍的方法是部署在远程服务器上。

    MQTT服务器配置方法

    四、安装Arduino IDE

    到官网下载安装

    五、配置Arduino IDE  的 ESP8266开发环境

    参考地址

    六、把ESP-01与DHT11连接

    连接方法

    七、打开Arduino IDE 编写代码  

    注意修改 Wi-Fi名和 Wi-Fi密码,如果是本地mqtt服务器的话地址填 127.0.0.1

    #include <SimpleDHT.h>
    #include <ESP8266WiFi.h>
    #include <PubSubClient.h>
    
    int pinDHT11 = 2; // GPIO2 of ESP8266
    const char* ssid = "XXXXX";//手机Wi-Fi热点
    const char* password = "XXXX";//手机Wi-Fi密码
    const char* mqtt_server = "XXXXXXX";//服务器网址或者IP地址
    
    //const String macAddress = WiFi.macAddress();
    //const char* clientID = macAddress.c_str();    //MAC地址
    const char* clientID = "ESP8266_01_A";          //连接mqtt用户名
    
    WiFiClient espClient;
    PubSubClient client(espClient);
    SimpleDHT11 dht11(pinDHT11);
    
    long lastMsg = 0;
    char msg[50];
    int value = 0;
    
    void setup() {
      //pinMode(BUILTIN_LED, OUTPUT);     // 将BUILTIN_LED引脚初始化为输出
      Serial.begin(115200);
      setup_wifi();
      client.setServer(mqtt_server, 1883);
      client.setCallback(callback);
    }
    
    void setup_wifi() {
    
      delay(10);
      WiFi.begin(ssid, password);     // 我们从连接到WiFi网络开始
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
      }
      Serial.println("WiFi 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]);
      }  
    
    }
    
    void reconnect() {
      // 循环,直到我们重新连接
      while (!client.connected()) {
        
        if (client.connect(clientID)) {               //connected
          Serial.print("MQTT连接成功");                 // 连接mqtt成功
      //    client.publish("ESP_01主题", "hello world");  // 一旦连接,发布公告…
          client.subscribe("ESP_01主题");               // 一旦连接,发布主题
        } else {
          delay(5000);                                 // 等待5秒再重试
        }
      }
    }
    void loop() {
    
      if (!client.connected()) {
        reconnect();
      }
      client.loop();
    
    
    ////////温度湿度
      byte temperature = 0;
      byte humidity = 0;
      int err = SimpleDHTErrSuccess;
      if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
        Serial.print("Read DHT11 failed, err="); Serial.println(err);delay(1000);
        return;
      }
       String tmp = "温度:";            //字符串拼接
       tmp += String(temperature);
       tmp += String(" 湿度:");
       tmp += String(humidity);
      
      Serial.print((int)temperature); Serial.print(" *C, "); 
      Serial.print((int)humidity); Serial.println(" H");
      client.publish("ESP_01主题", tmp.c_str());//发送主题
      delay(2000);  
    ////////温度湿度 
    }

    八、烧录程序

    用改装过的 USB转ESP8266 连接ESP-01连接电脑,准备烧录。

    点击IDE左上角的箭头开始烧录。

     九、测试程序

    把烧录好的ESP8266,取下来,装到 USB转ESP8266 没改装的转换器上,插入电脑,打开IDE右上角的图标,即可看到运行状态。

     

     十、打开MQTTBox 订阅ESP_01主题 

  • 相关阅读:
    字节面试:谈谈索引为什么能提高查询性能?
    阿里云服务器(ECS)上搭建rocketmq
    如何在 CentOS 8 上安装 Apache Maven
    147 01 Android 零基础入门 02 Java面向对象 07 Java多态 05 接口(重点)05 关于多接口中重名默认方法处理的解决方案
    146 01 Android 零基础入门 02 Java面向对象 07 Java多态 05 接口(重点)04 接口成员--默认方法 & 静态方法
    145 01 Android 零基础入门 02 Java面向对象 07 Java多态 05 接口(重点)03 接口成员--抽象方法&常量
    tcp循环发消息
    tcp基本语法
    界面开发控件DevExpress WPF开发指南
    高性能H5/JS开发框架DevExtreme 2021新版首发
  • 原文地址:https://www.cnblogs.com/easyidea/p/11568386.html
Copyright © 2020-2023  润新知