Arduino IDE + ESP8266+MQTT订阅发布温湿度信息

您所在的位置:网站首页 arduino控制esp8266发送信息 Arduino IDE + ESP8266+MQTT订阅发布温湿度信息

Arduino IDE + ESP8266+MQTT订阅发布温湿度信息

2024-07-16 10:27| 来源: 网络整理| 查看: 265

1、库文件安装

(1)先安装ESP8266支持

文件->首选项->附加开发板管理器地址 添加http://arduino.esp8266.com/stable/package_esp8266com_index.json 在这里插入图片描述

(2)点击工具 - 开发板 - 开发板管理器,进入开发板管理器界面:找到 esp8266 并安装; (3)工具->开发板-。选择如下图 在这里插入图片描述

(4)下载外库包

地址: https://github.com/JINYU-ZHOU/MQTT-DHT11.git(如果有其他问题欢迎留言)

点项目->加载库->添加.zip库->选择你下载好的压缩包,下面窗口回提示你是否安装成果!

2、ESP8266配网

看了很多配网的教程,我觉得PubSubClient库实例特别兼容,. 此库可以在Arduino IDE的库管理器中找到。工具->管理库->找到PubSubClient根据自己想要的版本下载,之后打开实例兼容 你只需加上自己要连接网的名字和密码以及你要连接MQTT服务器的地址

const char* ssid = "........";//你的WIFI名称 const char* password = "........";//你的WIFI密码 const char* mqtt_server = "broker.mqtt-dashboard.com"; //你要连接的MQTT服务器地址如const char* mqtt_server = "123.57.133.11";

连接网络成功后串口会提示 在这里插入图片描述 *

如果你不间接使用Arduino,直接连接ESP8266,需要提前下载CH340或者CP2102的驱动, 我用的CP2102,如果需要可以留言我发邮箱。

3、温湿度模块测试

前提下载DHT11相应的库包,还是上面那个地址。这是源代码,只是单单用来测试温湿度模块,后续订阅还需要进行组装。 mqtt下载地址:

https://github.com/JINYUZHOUZHOU/MQTT.git

点项目->加载库->添加.zip库->选择你下载好的压缩包,下面窗口回提示你是否安装成果!

#include "DHT.h" #define DHTPIN 5 #define DHTTYPE DHT11 // Initialize DHT sensor DHT dht(DHTPIN, DHTTYPE, 15); void setup() { // Start Serial Serial.begin(115200); // Init DHT dht.begin(); } void loop() { // Reading temperature and humidity float h = dht.readHumidity(); float t = dht.readTemperature(); // Display data Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(t); Serial.println(" *C "); // Wait a few seconds between measurements. delay(2000); } 4、订阅加发布信息

我之前的博文有提过订阅加发布代码,如果想了解更多可以点击MQTT+ardunio+ESP8266开发 简单发布信息的部分代码如下,全部代码参考我之前的博文。

void loop() { if (!client.connected()) { reconnect(); } client.loop(); long now = millis(); if (now - lastMsg > 20000) {//延时 lastMsg = now; ++value; snprintf (msg, 75, "hello world #%ld", value); Serial.print("Publish message: "); Serial.println(msg); client.publish("outTopic", msg); }

这次需要将snprintf (msg, 75, "hello world #%ld", value);中间的hello world #%ld替换成我们的温湿度数据 能直接这样吗?

void loop() { // Reading temperature and humidity float h = dht.readHumidity(); float t = dht.readTemperature(); void loop() { ... snprintf (msg, 75, h, value); Serial.print("Publish message: "); Serial.println(msg); client.publish("outTopic", msg); } // Wait a few seconds between measurements. delay(2000); }

如果这样直接上传就会报错!!!可以了解snprintf这个函数,第三个变量为const char 那么有个好方法,把你的温湿度数据变成字符串

String data = "{\"H\":" + String(h) +",\"T\":" + String(t)+"}";

我们利用string函数将字符串转换为const char 类型

strcpy(c,data.c_str());//char c[50];

最后附上总代码

#include #include #include "DHT.h" #define DHTPIN 5 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE, 15); // Update these with values suitable for your network. const char* ssid = "JINYU"; const char* password = "150"; const char* mqtt_server = "123.57.133.11"; WiFiClient espClient; PubSubClient client(espClient); long lastMsg = 0; char msg[50]; int value = 0; void setup() { pinMode(BUILTIN_LED, OUTPUT); // Initialize the BUILTIN_LED pin as an output Serial.begin(115200); dht.begin(); setup_wifi(); client.setServer(mqtt_server, 1883); client.setCallback(callback); } void setup_wifi() { delay(10); // We start by connecting to a WiFi network Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); for (int i = 0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3