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

时间:2024-02-20 13:25:44

一、硬件准备

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主题