添加ArduinoMqttClient库的使用

main
hwf453 1 month ago
parent b3d6ececad
commit f444864d8e

@ -0,0 +1,8 @@
<!-- saved from url=(0011)about:blank -->
<html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" charset="utf-8" src="https://js.intercomcdn.com/frame-modern.4da73d46.js"></script><script type="text/javascript" charset="utf-8" src="https://js.intercomcdn.com/vendor-modern.500d7f31.js"></script></head>
<body>
</body></html>

@ -0,0 +1,63 @@
@font-face {
font-family: "sm-iconfont"; /* Project id 2090596 */
src: url('./font.woff2') format('woff2'),
url('./font.woff') format('woff'),
url('./font.ttf') format('truetype');
}
.sm-iconfont {
font-family: "sm-iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.iconguocheng:before {
content: "\e655";
}
.iconchenggong1:before {
content: "\e656";
}
.iconshuaxin:before {
content: "\e653";
}
.iconguanbi:before {
content: "\e654";
}
.iconshibai:before {
content: "\e652";
}
.iconchenggong:before {
content: "\e651";
}
.icona-bianzubeifen22:before {
content: "\e650";
}
.iconshezhengwenben:before {
content: "\e60c";
}
.iconweijinwenben:before {
content: "\e60d";
}
.iconshipin:before {
content: "\e60e";
}
.icontupian:before {
content: "\e60f";
}
.iconyinpin:before {
content: "\e610";
}

@ -0,0 +1,8 @@
<!-- saved from url=(0011)about:blank -->
<html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" charset="utf-8" src="https://js.intercomcdn.com/frame-modern.7842a022.js"></script><script type="text/javascript" charset="utf-8" src="https://js.intercomcdn.com/vendor-modern.500d7f31.js"></script></head>
<body>
</body></html>

@ -0,0 +1 @@
!function(e,t){e.WxLogin=function(o){var n="default";!0===o.self_redirect?n="true":!1===o.self_redirect&&(n="false");var r=t.createElement("iframe"),s=(new Date).getTime(),a="https://open.weixin.qq.com/connect/qrconnect?appid="+o.appid+"&scope="+o.scope+"&redirect_uri="+o.redirect_uri+"&state="+o.state+"&login_type=jssdk&self_redirect="+n+"&styletype="+(o.styletype||"")+"&sizetype="+(o.sizetype||"")+"&bgcolor="+(o.bgcolor||"")+"&rst="+(o.rst||"")+"&ts="+s;a+=o.style?"&style="+o.style:"",a+=o.href?"&href="+o.href:"",a+="en"===o.lang?"&lang=en":"",a+=1===o.stylelite?"&stylelite=1":"",a+=0===o.fast_login?"&fast_login=0":"","auto"===o.color_scheme?a+="&color_scheme=auto":"dark"===o.color_scheme?a+="&color_scheme=dark":"light"===o.color_scheme&&(a+="&color_scheme=light"),r.src=a,r.frameBorder="0",r.allowTransparency="true",r.scrolling="no",r.width="300px",r.height="400px";var i=t.getElementById(o.id);if(i.innerHTML="",i.appendChild(r),e.addEventListener&&e.JSON){var c=function(t){if("https://open.weixin.qq.com"===t.origin)try{var n=JSON.parse(t.data);if(n&&"status"===n.type){var r="wxReady"===n.status;r&&o.onReady&&"function"==typeof o.onReady&&o.onReady(r),"wxQRcodeReady"===n.status&&o.onQRcodeReady&&"function"==typeof o.onQRcodeReady&&o.onQRcodeReady()}}catch(t){e.console&&"function"==typeof e.console.log&&e.console.log("wxLogin postMessage error",t)}};e.addEventListener("message",c,!1);var l=!1;o.onCleanup=function(){!l&&e.removeEventListener&&(e.removeEventListener("message",c,!1),l=!0)}}}}(window,document);

@ -0,0 +1,149 @@
//安装ArduinoMqttClient库
//安装ArduinoJson库
//安装DHT11库 DHT sensor library
#include <WiFi.h>
#include <ArduinoMqttClient.h>
#include <DHT.h>
#include <ArduinoJson.h>
#define DHT_PIN 15
#define DHT_TYPE DHT11
DHT dht(DHT_PIN, DHT_TYPE);
// WiFi 配置
const char* ssid = "rehome";
const char* password = "Ruihong123";
// MQTT 配置
const char* mqtt_server = "47.242.184.139"; // hk服务器
const int mqtt_port = 1883;
const char* mqtt_user = "admin"; // 如果需要认证
const char* mqtt_password = "publish452131wW452131wW$";
WiFiClient wifiClient;
MqttClient mqttClient(wifiClient);
const char topic[] = "esp32/status";
unsigned long lastSensorRead = 0;
const long sensorInterval = 10000; // 10秒
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("正在连接: ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi 连接成功");
Serial.print("IP 地址: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
while (!mqttClient.connected()) {
Serial.println("尝试 MQTT 连接...");
// 设置认证帐号和密码
mqttClient.setUsernamePassword(mqtt_user, mqtt_password);
// 客户端 ID
mqttClient.setId("ArduinoMqttClient_dht11_" + String(random(0xffff), HEX));
// 尝试连接
if(mqttClient.connect(mqtt_server, mqtt_port)) {
Serial.println("MQTT连接成功");
// 订阅主题
// Subscribe to topic
//mqttClient.subscribe(topic);
//Subscribe with QoS
mqttClient.subscribe(topic, 0); // QoS 0 - 最多一次 QoS 1 - 至少一次 QoS 2 - 恰好一次
} else {
Serial.print("MQTT连接失败错误代码: ");
Serial.println(" 5秒后重试...");
delay(5000);
}
}
}
void publishSensorData(float temperature,float humidity) {
StaticJsonDocument<200> doc;
doc["device"] = "ESP32_002";
doc["temperature"] = String(temperature);
doc["humidity"] = String(humidity);
doc["timestamp"] = millis();
// Serialize and publish
mqttClient.beginMessage(topic, false, 0);// true表示保留消息 QoS 0 - 最多一次 QoS 1 - 至少一次 QoS 2 - 恰好一次
serializeJson(doc, mqttClient);
mqttClient.endMessage();
}
void onMessage(int messageSize) {
Serial.println("Message received: ");
String topic = mqttClient.messageTopic();
String message = "";
while (mqttClient.available()) {
message += (char)mqttClient.read();
}
Serial.print("Message on '");
Serial.print(topic);
Serial.print("': ");
Serial.println(message);
Serial.println();
}
void readAndPublishSensorData() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (!isnan(temperature) && !isnan(humidity)) {
char tempStr[8];
char humStr[8];
dtostrf(temperature, 6, 2, tempStr);
dtostrf(humidity, 6, 2, humStr);
Serial.printf("传感器数据已发布: 温度=%s°C, 湿度=%s%%\n", tempStr, humStr);
//发布json格式温湿度数据
publishSensorData(temperature,humidity);
}
}
void setup() {
Serial.begin(115200);
setup_wifi();
// 设置MQTT
// Connect with will message
// mqttClient.beginWill("arduino/status", 1, true, 1);
// mqttClient.endWill();
// Set callback
mqttClient.onMessage(onMessage);
}
void loop() {
if(WiFi.status() != WL_CONNECTED){
setup_wifi();
}
if (!mqttClient.connected()) {
reconnect();
}
mqttClient.poll();
// 定期读取传感器数据
if (millis() - lastSensorRead > sensorInterval) {
Serial.println("定期读取传感器数据");
lastSensorRead = millis();
readAndPublishSensorData();
Serial.println("mqtt消息已发布。");
}
}

@ -0,0 +1,140 @@
//安装ArduinoMqttClient库
#include <WiFi.h>
#include <ArduinoMqttClient.h>
#include <ArduinoJson.h>
// WiFi 配置
const char* ssid = "rehome";
const char* password = "Ruihong123";
// MQTT 配置
const char* mqtt_server = "47.242.184.139"; // hk服务器
const int mqtt_port = 1883;
const char* mqtt_user = "admin"; // 如果需要认证
const char* mqtt_password = "publish452131wW452131wW$";
WiFiClient wifiClient;
MqttClient mqttClient(wifiClient);
const char topic[] = "esp32/status32";
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("正在连接: ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi 连接成功");
Serial.print("IP 地址: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
while (!mqttClient.connected()) {
Serial.println("尝试 MQTT 连接...");
// 设置认证帐号和密码
mqttClient.setUsernamePassword(mqtt_user, mqtt_password);
// 客户端 ID
mqttClient.setId("ArduinoMqttClient_" + String(random(0xffff), HEX));
// 尝试连接
if(mqttClient.connect(mqtt_server, mqtt_port)) {
Serial.println("MQTT连接成功");
// 订阅主题
// Subscribe to topic
//mqttClient.subscribe(topic);
//Subscribe with QoS
mqttClient.subscribe(topic, 0); // QoS 0 - 最多一次 QoS 1 - 至少一次 QoS 2 - 恰好一次
} else {
Serial.print("MQTT连接失败错误代码: ");
Serial.println(" 5秒后重试...");
delay(5000);
}
}
}
void publishSensorData() {
float temperature = 25.3;
float humidity = 82.5;
// Create JSON document
StaticJsonDocument<200> doc;
doc["temperature"] = temperature;
doc["humidity"] = humidity;
doc["timestamp"] = millis();
// Serialize and publish
mqttClient.beginMessage(topic, false, 0);// true表示保留消息 QoS 0 - 最多一次 QoS 1 - 至少一次 QoS 2 - 恰好一次
serializeJson(doc, mqttClient);
mqttClient.endMessage();
}
void onMessage(int messageSize) {
Serial.println("Message received: ");
String topic = mqttClient.messageTopic();
String message = "";
while (mqttClient.available()) {
message += (char)mqttClient.read();
}
Serial.print("Message on '");
Serial.print(topic);
Serial.print("': ");
Serial.println(message);
Serial.println();
}
void setup() {
Serial.begin(115200);
setup_wifi();
// 设置MQTT
// Connect with will message
// mqttClient.beginWill("arduino/status", 1, true, 1);
// mqttClient.endWill();
// Set callback
mqttClient.onMessage(onMessage);
}
void loop() {
if(WiFi.status() != WL_CONNECTED){
setup_wifi();
}
if (!mqttClient.connected()) {
reconnect();
}
// 发布消息示例
static unsigned long lastMsg = 0;
if (millis() - lastMsg > 5000) {
lastMsg = millis();
String message = "Hello from ESP32 - " + String(millis());
//client.publish("esp32/status", message.c_str());
// Simple publish
// mqttClient.beginMessage(topic, false, 1); // true表示保留消息 QoS 0 - 最多一次 QoS 1 - 至少一次 QoS 2 - 恰好一次
// mqttClient.print(message);
// mqttClient.endMessage();
// With QoS and retention
// mqttClient.beginMessage(topic, false, 1); // true表示保留消息 QoS 0 - 最多一次 QoS 1 - 至少一次 QoS 2 - 恰好一次
// mqttClient.print(message);
// mqttClient.endMessage();
publishSensorData();
Serial.println("消息已发布。");
//Serial.println("消息已发布: " + message);
}
mqttClient.poll();
}

@ -1,5 +1,6 @@
//安装PubSubClient库 //安装PubSubClient库
//安装ArduinoJson库 //安装ArduinoJson库
//安装DHT11库 DHT sensor library
#include <WiFi.h> #include <WiFi.h>
#include <PubSubClient.h> #include <PubSubClient.h>

@ -1,3 +1,5 @@
//安装PubSubClient库
#include <WiFi.h> #include <WiFi.h>
#include <PubSubClient.h> #include <PubSubClient.h>

Loading…
Cancel
Save