Índice:
- Etapa 1: Demonstração
- Etapa 2: Montagem
- Etapa 3: Montagem - Mesa
- Etapa 4: Ubidots
- Etapa 5: Biblioteca SimpleDHT
- Etapa 6: Biblioteca PubSubClient
- Etapa 7: Biblioteca TinyGSM
- Etapa 8: Biblioteca TFT_eSPI
- Etapa 9: Biblioteca TFT_eSPI
- Etapa 10: Ubidots
- Etapa 11: Alterar os dados em.ino
- Etapa 12: GPRS_ESP32_DHT.ino - Declarações e variáveis
- Etapa 13: Fixação
- Etapa 14: configuração
- Etapa 15: SetupDisplay
- Etapa 16: SetupGSM
- Etapa 17: ConnectMQTTServer
- Etapa 18: Loop
- Etapa 19: ReadDHT
- Etapa 20: PublishMQTT
- Etapa 21: CreateJsonString
- Etapa 22: ShowDataOnDisplay
- Etapa 23: Arquivos
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
Hoje falaremos sobre o modem GPRS, ou melhor, o ESP32 e sua utilização com a rede de telefonia celular. Isso é algo que funciona muito bem. Usando o protocolo MQTT, enviaremos dados para o painel do Ubidots. Use nesta montagem um display para feedback do circuito, além do SIM800L e um chip de celular. Com este projeto, portanto, enviaremos dados de temperatura e umidade através de GPRS e MQTT, e visualizaremos os dados em um gráfico de linhas.
Etapa 1: Demonstração
Etapa 2: Montagem
Etapa 3: Montagem - Mesa
Etapa 4: Ubidots
Etapa 5: Biblioteca SimpleDHT
No IDE Arduino, vá para Sketch-> Incluir Biblioteca-> Gerenciar Bibliotecas …
Instale SimpleDHT
Etapa 6: Biblioteca PubSubClient
No IDE Arduino, vá para Sketch-> Incluir Biblioteca-> Gerenciar Bibliotecas …
Instale PubSubClient
Etapa 7: Biblioteca TinyGSM
No IDE Arduino, vá para Sketch-> Incluir Biblioteca-> Gerenciar Bibliotecas …
Instale TinyGSM
Etapa 8: Biblioteca TFT_eSPI
No IDE Arduino, vá para Sketch-> Incluir Biblioteca-> Gerenciar Bibliotecas …
Instale TFT_eSPI
Etapa 9: Biblioteca TFT_eSPI
Altere os pinos de exibição na pasta lib.
A fixação está no arquivo User_Setup.h em
C: / Users / \ Documents / Arduino / libraries / TFT_eSPI
Altere esses padrões para os seguintes valores na imagem.
Etapa 10: Ubidots
Faça login no Ubidots com sua conta e clique em Dispositivos
Clique no botão "+" no canto superior direito
Clique em Branco
Digite o nome do dispositivo. Observe o "rótulo do dispositivo", pois será usado no "tópico" que usaremos no.ino
Na lista de dispositivos, o dispositivo que você acabou de criar aparecerá. Clique nisso.
Na tela que aparece, clique em “Adicionar Variável”. Um pop-up aparecerá. Clique em “Raw”.
Clique na caixa de texto e insira o nome da propriedade.
Tem que ser exatamente o que enviaremos no json do.ino. Repita isso para a outra propriedade.
Volte para o painel clicando no logotipo da Ubidots.
No painel, clique em "Adicionar novo widget"
Na lista de Widgets, escolha "Eixo duplo"
Etapa 11: Alterar os dados em.ino
Etapa 12: GPRS_ESP32_DHT.ino - Declarações e variáveis
#define TINY_GSM_MODEM_SIM800 // Tipo de modem que estamos usando # include #include #include #include #include // Token de que pegamos no Ubidots #define TOKEN "BBFF-abcdefghijklmnopqrstuvwxyz0123" // usuário dados onde postar e postar (esp32_gprs é o nome do dispositivo no Ubidots) #define TOPIC "/v1.6/devices/esp32_gprs" // id do dispositivo que pegamos no painel do Ubidots #define DEVICE_ID "5c01234567890abc12345678" // URL do servidor MQTT #define MQT_SERVER " mqtt: //things.ubidots.com "// Porta padrão do MQTT #define MQTT_PORT 1883 // Pino onde está o DHT22 #define DHT_PIN 27
Etapa 13: Fixação
// Pinagem em User_Setup.h na pasta da bibliotecaTFT_eSPI display = TFT_eSPI (); // Intervalo entre os envios e refresh da tela #define INTERVAL 10000 // Canal serial que vamos usar para comunicarmos com o modem. Utilizar sempre 1 HardwareSerial SerialGSM (1); TinyGsm modemGSM (SerialGSM); TinyGsmClient gsmClient (modemGSM); // Cliente MQTT, passa a url do servidor, a porta // e o cliente GSM PubSubClient client (MQTT_SERVER, MQTT_PORT, gsmClient); // Tempo em que o último envio / atualização foi feito uint32_t lastTime = 0; umidade do flutuador; // Variável onde hospedará o valor da umidade float; // Variável onde hospedar o valor da temperatura SimpleDHT22 dht; // Objeto que realizará a leitura da umidade e temperatura
Etapa 14: configuração
void setup () {Serial.begin (115200); setupDisplay (); // Inicializa e configura o display setupGSM (); // Inicializa e configura o modem GSM connectMQTTServer (); // Conectamos ao mqtt server // Espera 2 segundos e limpamos o display delay (2000); display.fillScreen (TFT_BLUE); display.setCursor (0, 0); }
Etapa 15: SetupDisplay
void setupDisplay () {display.init (); display.setRotation (1); display.fillScreen (TFT_BLUE); // Limpa o display com um cor azul display.setTextColor (TFT_WHITE, TFT_BLUE); // Coloca o texto como branco com fundo azul display.setTextWrap (true, true); // Ativa quebra de linha display.setTextSize (1); display.setCursor (0, 0, 2); // Posicção x, y e fonte do texto display.println ("Setup Display Complete"); }
Etapa 16: SetupGSM
void setupGSM () {display.println ("Setup GSM…"); // Inicializamos um serial onde está o modem SerialGSM.begin (9600, SERIAL_8N1, 4, 2, false); atraso (3000); // Mostra informação sobre o modem Serial.println (modemGSM.getModemInfo ()); // Inicializa o modem if (! ModemGSM.restart ()) {display.println ("Reinicialização do modem GSM falhou"); atraso (10000); ESP.restart (); Retorna; } // Espera pela rede if (! ModemGSM.waitForNetwork ()) {display.println ("Falha ao conectar à rede"); atraso (10000); ESP.restart (); Retorna; } // Conecta à rede gprs (APN, usuário, senha) if (! ModemGSM.gprsConnect ("", "", "")) {display.println ("Falha na conexão GPRS"); atraso (10000); ESP.restart (); Retorna; } display.println ("Configuração GSM com sucesso"); }
Etapa 17: ConnectMQTTServer
void connectMQTTServer () {display.println ("Conectando ao servidor MQTT…"); // Se a conexão ao dispositivo que definimos if (client.connect (DEVICE_ID, TOKEN, "")) {// Se a conexão foi bem localizada display.println ("Conectado"); } else {// Se ocorreu algum erro display.print ("error ="); display.println (client.state ()); atraso (10000); ESP.restart (); }}
Etapa 18: Loop
void loop () {// Faz a leitura da umidade e temperatura readDHT (); // Se desconectou do servidor MQTT if (! Client.connected ()) {// Mandamos conectar connectMQTTServer (); } // Tempo decorrido desde o boot em milissegundos unsigned long now = millis (); // Se passado o intervalo de envio if (now - lastTime> INTERVAL) {// Publicamos para o server mqtt publishMQTT (); // Mostramos os dados no display showDataOnDisplay (); // Atualizamos o tempo em que foi feito o último envio lastTime = now; }}
Etapa 19: ReadDHT
void readDHT () {float t, h; // Faz a leitura da umidade e temperatura e apenas atualiza como variáveis se foi bem sucedido se (dht.read2 (DHT_PIN, & t, & h, NULL) == SimpleDHTErrSuccess) {temperature = t; umidade = h; }}
Etapa 20: PublishMQTT
void publishMQTT () {// Cria o json que iremos enviar para o servidor MQTT String msg = createJsonString (); Serial.print ("Publicar mensagem:"); Serial.println (msg); // Publicamos no tópico int status = client.publish (TOPIC, msg.c_str ()); Serial.println ("Status:" + String (status)); // Status 1 se sucesso ou 0 se deu erro}
Etapa 21: CreateJsonString
String createJsonString () {String data = "{"; if (! isnan (umidade) &&! isnan (temperatura)) {data + = "\" umidade / ":"; dados + = String (umidade, 2); dados + = ","; dados + = "\" temperatura / ":"; dados + = String (temperatura, 2); } dados + = "}"; dados de retorno; }
Etapa 22: ShowDataOnDisplay
void showDataOnDisplay () {// Reseta a posição do cursor e mostra umidade e temperatura lidas display.setCursor (0, 0, 2); display.println ("Umidade:" + String (umidade, 2)); display.println ("Temperatura:" + String (temperatura, 2)); }
Etapa 23: Arquivos
Baixe os arquivos
EU NÃO