В этой статье давайте поговорим об esp8266, использующем для связи протокол mqtt. и сохранить данные в базу данных.
MQTT (протокол телеметрии очереди сообщений) — это «легкий» протокол связи, основанный на режиме публикации/подписки. Самым большим преимуществом MQTT является то, что он использует очень мало кода и ограниченную полосу пропускания для подключения удаленных устройств. Обеспечивает надежный обмен сообщениями в реальном времени. услуги.
Здесь мы используем emqx для сборки сервера mqtt в centos. Официально предоставляет интуитивно понятный метод установки.,Чрезвычайно просто。То, что я установил здесь, этоEMQX5.0
(Корпоративная версия)
wget https://www.emqx.com/zh/downloads/enterprise/v5.0.0/emqx-enterprise-5.0.0-el7-arm64.rpm
yum install emqx-enterprise-5.0.0-el7-arm64.rpm
sudo systemctl start emqx
Следует отметить, что,Попробуй не скачивать последнюю версию。Потому что многие функции последней версии стоят денег.。Больше исторических версий можно скачать здесь.https://www.emqx.com/zh/downloads/enterprise
Затем введите начальный аккаунтadmin
public
Авторизоваться。
Нам нужно отправить данные DHT11 через протокол mqtt. Код горения следующий.
#include "DHT.h"
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
/************ WIFI and MQTT Information (CHANGE THESE FOR YOUR SETUP) ******************/
const char* ssid = "PDCN"; //type your WIFI information inside the quotes
const char* password = "1234567890";
const char* mqtt_server = "192.168.123.173";
const char* mqtt_username = "admin";
const char* mqtt_password = "admin";
const int mqtt_port = 1883;
const char* mqtt_sensor_topic = "dht11";
unsigned long last_send = 0;
#define DHTPIN 4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
Serial.begin(115200);
dht.begin();
setupWifi();
client.setServer(mqtt_server, mqtt_port);
}
// соединять Wifi
void setupWifi() {
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void loop()
{
if ( !client.connected() ) { // MQTT Успешно ли сотрудничать?
reconnect();
}
if ( millis() - last_send > 5000 ) { // Публикуйте данные о температуре и влажности каждые 5 секунд.
handleTemperatureAndHumidity();
last_send = millis();
}
client.loop();
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect(mqtt_sensor_topic, mqtt_username, mqtt_password)) {
Serial.println("connected");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void handleTemperatureAndHumidity() {
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t) ) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
// Подготовьте JSON Payload
String payload = "{";
payload += "\"temp\":"; payload += t; payload += ",";
payload += "\"humi\":"; payload += h;
payload += "}";
// Отправить данные о температуре и влажности
char attributes[100];
payload.toCharArray( attributes, 100 );
client.publish( mqtt_sensor_topic, attributes );
Serial.println( attributes );
}
В приведенном выше коде,Мы представилиPubSubClient
иDHT
Библиотека。существоватьide中安装这两个Библиотека。(Обратите внимание на версию,Если он слишком высок, он может не скомпилироваться)
Загрузите код в esp8266. Через некоторое время мы видим в emqx, что устройство онлайн.
В приведенном выше коде,Наша тема подписки:dht11
。скачатьmqttинструментmqttx。Создать новыйсоединять。
Конкретная конфигурация выглядит следующим образом
После завершения подключения добавьте подписку
Таким образом, данные dht11 в esp8266 успешно получены.
Следует отметить, что,Нам нужно обработать данные в данные json.,方便后期入Библиотека。нравиться{"temp":23.40,"humi":57.00}
Чтобы упростить обработку данных в дальнейшем, мы можем сохранить их в MySQL. Конкретные операции заключаются в следующем:
Нажмитеданныеперекрытие
-создавать
-Тип ресурса — MySQL.
,Заполните соответствующиеmysqlАккаунт и другая информация,и тест,намекатьдоступные ресурсы
Это доказывает, что проблем нет。
Содержимое шаблона sql следующее:
insert into wendu ( temp, humi,time) values (${temp}, ${humi},FROM_UNIXTIME(${time}/1000) )
Простой оператор вставки sql,即существоватьwendu
столtemp
humi
time
Вставьте соответствующее значение в поле。
После завершения настройки,Он автоматически предложит вам настроить соответствующие правила.
Код выглядит следующим образом
SELECT
timestamp as time, payload.temp as temp ,payload.humi as humi #Получите значение и присвойте его переменной, обратите внимание на разделение запятыми.
FROM
"dht11" # данныеLaizi подписался на тему dht11
Сейчас,我们существоватьmysql中Создать новыйwendu
стол。исоздаватьtemp
humi
иtime
Поле。
Конечный эффект следующий.
Авторские права принадлежат: старшему двоюродному брату Сяояози.
Ссылка на эту статью:https://cloud.tencent.com/developer/article/2295611
Лицензия: Creative Commons Attribution-NonCommercial 4.0 International. Перепечатка цитируемых статей регулируется той же лицензией.