第1步:演示
第2步:使用的資源
?DHT22
?4k7歐姆電阻
?帳戶(試用30天或已付款)
?Proboardboard
步驟3:MQTT協議
發布和訂閱
步驟4:Ubidots IoT平臺
要解決的問題
?創建一個新帳戶
?創建新的儀表板
?創建ESP32-DHT設備
?獲得MQTT數據-設備ID和主題
?獲得MQTT數據-令牌
?在Ubidots中創建變量
?創建濕度和溫度小部件
步驟5:創建新帳戶
要創建帳戶,請訪問www.ubidots.com并單擊在注冊后
A。公司名稱
B。項目階段:
B-我們選擇了發現階段,表明它是一個測試項目。
C。創建應用程序
D。您的姓名
您的電子郵件
創建個人資料
E。登錄
密碼
開始免費試用
步驟6:創建新儀表板
一個。單擊創建一個新的儀表板
B。輸入儀表板的名稱,然后單擊
步驟7:創建ESP32-DHT設備
A。單擊設備管理和設備
B。單擊創建設備或+
C。將打開一個選項卡,列出help.ubidots站點上的教程,以根據各自的制造商對微控制器進行配置和編程。我們將創建一個空白設備。
D。填寫字段
1。設備名稱
2。標簽(它將是MQTT客戶端使用的主題的一部分)
3。創建
電子。創建設備后,它將在設備頁面上列出,如圖所示
1。設備名稱
2。上次更新
3。設備創建日期/時間
4。與設備有關的組織
5。添加組織并刪除設備
步驟8:獲取MQTT數據-設備ID和主題
一個。選擇設備
B。設備ID值和主題是根據圖像寫入的。
使用的端口為1883。
C。根據圖像3.1和3.2獲得令牌。
步驟9:創建變量
要創建引用設備中變量的窗口小部件,必須已經在設備上創建了它。
注意:變量是在Json上傳后由Ubidots自動創建的,但為此,必須至少連接一次ESP32。要引用小部件而不必連接ESP,我們必須遵循以下步驟。
A。在設備中,選擇設備
B。單擊“添加變量”,然后單擊“原始”。
注意:定義相同的源代碼標簽(在MQTT_Client.h文件中)
C。輸入標簽(VARIABLE_LABEL_TEMPERATURE)
D。重復濕度變量的步驟
(VARIABLE_LABEL_HUMIDITY)
步驟10:創建小部件
一個。轉到儀表板頁面
B。單擊按鈕之一
步驟11:創建小部件-溫度
A。選擇溫度計選項
B。點擊添加變量
C。請按照以下步驟選擇溫度變量
D。單擊“確認”
步驟12:創建窗口小部件-濕度
A。添加另一個小部件
B。選擇“坦克”選項
C。點擊添加變量
D。選擇ESP32-DHT,單擊濕度,然后確認
E。最后,點擊確認
F。濕度小部件將顯示在溫度G以下。
G。您可以通過拖動窗口來安排
步驟13:匯編
聲明和變量
#include
#include //Biblioteca referente ao DHT22
#include “displayESP32LoRa.h” //Arquivo com as fun??es referentes ao display lora
#include “MQTT_Client.h” //Arquivo com as fun??es de mqtt
float temperature; //Temperatura que será obtida pelo sensor DHT
float humidity; //Umidade que será obtida pelo sensor DHT
const int pinDHT = 22; //Pino que é ligado no sensor DHT
SimpleDHT22 dht22(pinDHT); //Objeto que possui os métodos de leitura dos valores do sensor DHT
設置
void setup()
{
//Para debug, iniciamos a comunica??o serial com 115200 bps
Serial.begin(115200);
//Inicializa display lora
if(!loraDisplayConfig())
ESP.restart();
//Exibe mensagem no display
showDisplay(0, “Setting up mqtt.。.”, true);
Serial.println(“Setting up mqtt.。.”);
//Inicializa mqtt (conecta o esp com o wifi, configura e conecta com o servidor da ubidots)
if(!mqttInit())
{
delay(3000);
showDisplay(0, “Failed!”, false);
Serial.println(“Failed!”);
ESP.restart();
}
showDisplay(0, “OK”, false);
Serial.println(“OK”);
}
循環
void loop()
{
//Se o esp foi desconectado do ubidots, tentamos reconectar
if(!client.connected())
reconnect();
//Lê a temperatura e umidade e exibimos no display passando uma flag (que sinaliza sucesso na leitura)
if(getClimate())
showClimate(true);
else
showClimate(false);
//Esperamos 2.5s antes de exibir o status do envio para dar efeito de pisca no display
delay(2500);
if(sendValues(temperature, humidity))
{
Serial.println(“Successfully sent data”);
showDisplay(4,“Successfully sent data”, false);
}
else
{
Serial.println(“Failed to send sensor data”);
showDisplay(4,“Failed to send sensor data”, false);
}
//Esperamos 2.5s para dar tempo de ler as mensagens acima
delay(2500);
}
循環-從DHT22讀取值
//Obtém temperatura e umidade do sensor
bool getClimate()
{
int err = SimpleDHTErrSuccess;
//Passamos as variáveis ‘temperature’ e ‘humidity’ por parametro na fun??o chamada ‘read2’, elas ser?o retornadas por referência
//Se n?o for retornado o código de SimpleDHTErrSuccess (sucesso), exibimos o valor de erro obtido
if ((err = dht22.read2(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess)
{
Serial.print(“Read DHT22 failed, err=”);
Serial.println(err);
//Zera valores
temperature = humidity = 0;
return false;
}
return true;
}
循環-在顯示屏上顯示值
//Essa fun??o exibe os valores com suas respectivas unidades de medida para caso a flag ‘success’ seja true
//Caso a flag ‘success’ seja false, exibimos apenas um tra?o ‘-’
void showClimate(bool success)
{
if(success)
{
showDisplay(0, “Temperature: ”+String(temperature)+“ °C”, true);
showDisplay(1, “Humidity: ”+String(humidity)+“ %”, false);
Serial.println(“Temperature: ”+String(temperature)+“ °C”);
Serial.println(“Humidity: ”+String(humidity)+“ %”);
}
else
{
showDisplay(0, “Temperature: -”, true);
showDisplay(1, “Humidity: -”, false);
Serial.println(“Temperature: -”);
Serial.println(“Humidity: -”);
}
}
MQTT_Client-聲明和變量
#include
#include //Biblioteca para as publica??es via mqtt
#include “displayESP32LoRa.h” //Arquivo com as fun??es referentes ao display lora
#define WIFISSID “MEU_SSID” //Coloque seu SSID de WiFi aqui
#define PASSWORD “MEU_PASSWORD” //Coloque seu password de WiFi aqui
#define TOKEN “xxxxxx” //Coloque seu TOKEN do Ubidots aqui
#define VARIABLE_LABEL_TEMPERATURE “temperature” //Label referente a variável de temperatura criada no ubidots
#define VARIABLE_LABEL_HUMIDITY “humidity” //Label referente a variável de umidade criada no ubidots
#define DEVICE_ID “xxxxxx” //ID do dispositivo (Device id, também chamado de client name)
#define SERVER “things.ubidots.com” //Servidor do Ubidots (broker)
//Porta padr?o
#define PORT 1883
//Tópico aonde ser?o feitos os publish, “esp32-dht” é o DEVICE_LABEL
#define TOPIC “/v1.6/devices/esp32-dht”
//Objeto WiFiClient usado para a conex?o wifi
WiFiClient ubidots;
//Objeto PubSubClient usado para publish–subscribe
PubSubClient client(ubidots);
MQTT_Client-引導
bool mqttInit()
{
//Inicia WiFi com o SSID e a senha
WiFi.begin(WIFISSID, PASSWORD);
//Loop até que o WiFi esteja conectado
while (WiFi.status() != WL_CONNECTED)
{
delay(1000);
Serial.println(“Establishing connection to WiFi.。”);
}
//Exibe no monitor serial
Serial.println(“Connected to network”);
//Seta servidor com o broker e a porta
client.setServer(SERVER, PORT);
//Conecta no ubidots com o Device id e o token, o password é informado como vazio
while(!client.connect(DEVICE_ID, TOKEN, “”))
{
Serial.println(“MQTT - Connect error”);
return false;
}
Serial.println(“MQTT - Connect ok”);
return true;
}
MQTT_Client-重新連接
void reconnect()
{
//Loop até que o MQTT esteja conectado
while (!client.connected())
{
//sinaliza desconex?o do mqtt no display
showDisplay(0,“Disconnected”, true);
showDisplay(1, “Trying to reconnect mqtt.。.”, false);
Serial.println(“Attempting MQTT connection.。.”);
//Tenta conectar
if (client.connect(DEVICE_ID, TOKEN,“”))
Serial.println(“connected”);
else
{
Serial.print(“failed, rc=”);
Serial.print(client.state());
Serial.println(“ try again in 2 seconds”);
//Aguarda 2 segundos antes de retomar
delay(2000);
}
}
//Sinaliza reconex?o do mqtt no display
showDisplay(4,“Reconnected”, false);
}
MQTT_Client-提交(發布)
//Envia valores por mqtt
//Exemplo: {“temperature”:{“value”:24.50, “context”:{“temperature”:24.50, “humidity”:57.20}}}
bool sendValues(float temperature, float humidity)
{
char json[250];
//Atribui para a cadeia de caracteres “json” os valores referentes a temperatura e os envia para a variável do ubidots correspondente
sprintf(json, “{”%s“:{”value“:%02.02f, ”context“:{”temperature“:%02.02f, ”humidity“:%02.02f}}}”, VARIABLE_LABEL_TEMPERATURE, temperature, temperature, humidity);
if(!client.publish(TOPIC, json))
return false;
//Atribui para a cadeia de caracteres “json” os valores referentes a umidade e os envia para a variável do ubidots correspondente
sprintf(json, “{”%s“:{”value“:%02.02f, ”context“:{”temperature“:%02.02f, ”humidity“:%02.02f}}}”, VARIABLE_LABEL_HUMIDITY, humidity, temperature, humidity);
if(!client.publish(TOPIC, json))
return false;
//Se tudo der certo retorna true
return true;
}
步驟14:ESP32代碼
Json
(圖像)
顯示LoRa
#ifndef _DISPLAY_LORA_
#define _DISPLAY_LORA_
#include “SSD1306.h”
//Define os pinos que ser?o utilizados pelo display LoRa
#define SCK 5 // GPIO5 -- SX127x‘s SCK
#define MISO 19 // GPIO19 -- SX127x’s MISO
#define MOSI 27 // GPIO27 -- SX127x‘s MOSI
#define SS 18 // GPIO18 -- SX127x’s CS
#define RST 14 // GPIO14 -- SX127x‘s RESET
#define DI00 26 // GPIO26 -- SX127x’s IRQ(Interrupt Request)
SSD1306 display(0x3c, 4, 15); //Construtor do objeto do display LoRa
顯示LoRa-loraDisplayConfig
//Configura Display LoRa
bool loraDisplayConfig()
{
//Configura RST do oled como saida
pinMode(16,OUTPUT);
//Reseta o OLED
digitalWrite(16, LOW);
//Aguarda 50ms
delay(50);
//Enquanto o OLED estiver ligado, GPIO16 deve estar HIGH
digitalWrite(16, HIGH);
//Inicializa display
if(!display.init())
return false;
//Inverte a tela verticalmente (de ponta cabe?a)
display.flipScreenVertically();
//Configura a fonte do display
display.setFont(ArialMT_Plain_10);
//Aguarda 200ms
delay(200);
//Limpa display
display.clear();
return true;
}
#endif
Display LoRa-showDisplay
//Exibe mensagem recebida como parametro
void showDisplay(int line, String msg, bool clear)
{
//Limpa o display
if(clear)
{
display.clear();
//Configura alinhamento de texto à esquerda
display.setTextAlignment(TEXT_ALIGN_LEFT);
//Configura fonte do texto
display.setFont(ArialMT_Plain_10);
}
//Escreve na pos 0,25 a mensagem
display.drawString(0 , line*10 , msg);
//Exibe no display
display.display();
}
步驟15:安裝庫
SimpleDHT
https://github.com/winlinvip/SimpleDHT
Pubsubclient
https://github.com/knolleary/pubsubclient
*顯示LoRa附加到項目中的
責任編輯:wv
-
MQTT
+關注
關注
5文章
652瀏覽量
22573 -
Ubidots
+關注
關注
0文章
10瀏覽量
3866
發布評論請先 登錄
相關推薦
評論