Índice:
- Etapa 1: Componentes necessários
- Etapa 2: instalando as bibliotecas necessárias
- Etapa 3: ESP32 LoRa Thingspeak Gateway
- Etapa 4: Nó do sensor ESP32 LoRa
- Etapa 5: Configurando o Thingspeak
- Etapa 6: Código do Gateway
- Etapa 7: Código do Nó Sensor
- Etapa 8: Monitore os dados no servidor Thingspeak
- Etapa 9: Referências
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
neste projeto de IoT, projetei o ESP32 LoRa Gateway e também o ESP32 LoRa Sensor Node para monitorar a leitura do sensor sem fio a distâncias de alguns quilômetros. O remetente lerá os dados de umidade e temperatura usando o sensor DHT11. Em seguida, ele transmite os dados via LoRa Radio. Os dados são recebidos pelo módulo receptor. O receptor enviará os dados para o Thingspeak Server após um certo intervalo.
Etapa 1: Componentes necessários
1. Placa ESP32 - 2
2. Módulo Lora SX1278 / SX1276
3. Sensor de umidade e temperatura DHT11
4. Placa de ensaio
5. Conexão de fios de jumper
Etapa 2: instalando as bibliotecas necessárias
Precisamos instalar bibliotecas diferentes primeiro:
1. Biblioteca DHT11
2. Biblioteca LoRa
Etapa 3: ESP32 LoRa Thingspeak Gateway
Agora vamos ver o circuito emissor e receptor para a construção de ESP32 LoRa Gateway & Sensor Node. Montei o circuito em uma placa de ensaio. Você pode fazer isso no PCB se quiser.
Aqui está um circuito de gateway ESP32 LoRa Module SX1278. Esta parte funciona como um receptor. Os dados de umidade e temperatura são recebidos usando o LoRa Radio e enviados para o Thingspeak Server.
Etapa 4: Nó do sensor ESP32 LoRa
Aqui está um Circuito de Nó do Sensor ESP32 LoRa com Sensor DHT11. Esta parte funciona como um transmissor. Os dados de umidade e temperatura são lidos pelo sensor de umidade e temperatura DHT11 e transmitidos por meio do LoRa Radio.
Etapa 5: Configurando o Thingspeak
Para monitorar os dados do sensor no servidor Thingspeak, primeiro você precisa configurar o Thingspeak. Para configurar o Thingspeak Server, visite https://thingspeak.com/. Crie uma conta ou simplesmente entre se você a criou anteriormente. Em seguida, crie um novo canal com os seguintes detalhes.
Etapa 6: Código do Gateway
#incluir
// Bibliotecas para LoRa #include #include // define os pinos usados pelo módulo transceptor LoRa #define ss 5 #define rst 14 #define dio0 2 #define BAND 433E6 // 433E6 para Ásia, 866E6 para Europa, 915E6 para América do Norte // Substitua por suas credenciais de rede String apiKey = "14K8UL2QEK8BTHN6"; // Insira sua chave de API de gravação de ThingSpeak const char * ssid = "Wifi SSID"; // substitua por seu wi-fi ssid e chave wpa2 const char * password = "Senha"; const char * server = "api.thingspeak.com"; Cliente WiFiClient; // Inicializa as variáveis para obter e salvar os dados LoRa int rssi; String loRaMessage; Temperatura da corda; Umidade da coluna; String readingID; // Substitui o espaço reservado por valores DHT Processador de string (const String & var) {//Serial.println(var); if (var == "TEMPERATURE") {temperatura de retorno; } else if (var == "UMIDADE") {umidade de retorno; } else if (var == "RRSI") {return String (rssi); } return String (); } void setup () {Serial.begin (115200); contador interno; // configurar o módulo transceptor LoRa LoRa.setPins (ss, rst, dio0); // configura o módulo do transceptor LoRa while (! LoRa.begin (BAND) && counter <10) {Serial.print ("."); contador ++; atraso (2000); } if (counter == 10) {// Incrementa readingID em cada nova leitura Serial.println ("Iniciando LoRa falhou!"); } Serial.println ("Inicialização LoRa OK!"); atraso (2000); // Conectar à rede Wi-Fi com SSID e senha Serial.print ("Conectando a"); Serial.println (ssid); WiFi.begin (ssid, senha); while (WiFi.status ()! = WL_CONNECTED) {delay (2000); Serial.print ("."); } // Imprime o endereço IP local e inicia o servidor web Serial.println (""); Serial.println ("WiFi conectado."); Serial.println ("endereço IP:"); Serial.println (WiFi.localIP ()); } // Lê o pacote LoRa e obtém as leituras do sensor void loop () {int packetSize = LoRa.parsePacket (); if (packetSize) {Serial.print ("Lora pacote recebido:"); while (LoRa.available ()) // Pacote de leitura {String LoRaData = LoRa.readString (); Serial.print (LoRaData); int pos1 = LoRaData.indexOf ('/'); int pos2 = LoRaData.indexOf ('&'); readingID = LoRaData.substring (0, pos1); // Obter readingID temperature = LoRaData.substring (pos1 +1, pos2); // Obter temperatura umidade = LoRaData.substring (pos2 + 1, LoRaData.length ()); // Obter umidade} rssi = LoRa.packetRssi (); // Obtenha RSSI Serial.print ("com RSSI"); Serial.println (rssi); } if (client.connect (server, 80)) // "184.106.153.149" ou api.thingspeak.com {String postStr = apiKey; postStr + = "& field1 ="; postStr + = String (readingID); postStr + = "& field2 ="; postStr + = String (temperatura); postStr + = "& field3 ="; postStr + = String (umidade); postStr + = "& field4 ="; postStr + = String (rssi); postStr + = "\ r / n / r / n / r / n / r / n"; client.print ("POST / atualizar HTTP / 1.1 / n"); client.print ("Host: api.thingspeak.com / n"); client.print ("Conexão: fechar / n"); client.print ("X-THINGSPEAKAPIKEY:" + apiKey + "\ n"); client.print ("Content-Type: application / x-www-form-urlencoded / n"); client.print ("Content-Length:"); client.print (postStr.length ()); client.print ("\ n / n"); client.print (postStr); } // atraso (30000); }
Etapa 7: Código do Nó Sensor
#incluir
#include // Bibliotecas para LoRa #include "DHT.h" # define DHTPIN 4 // pino onde o dht11 está conectado DHT dht (DHTPIN, DHT11); // define os pinos usados pelo módulo transceptor LoRa #define ss 5 #define rst 14 #define dio0 2 #define BAND 433E6 // 433E6 para Ásia, 866E6 para Europa, 915E6 para América do Norte // contador de pacote int readingID = 0; contador interno = 0; String LoRaMessage = ""; temperatura flutuante = 0; umidade flutuante = 0; // Inicializar o módulo LoRa void startLoRA () {LoRa.setPins (ss, rst, dio0); // configura o módulo do transceptor LoRa while (! LoRa.begin (BAND) && counter <10) {Serial.print ("."); contador ++; atraso (500); } if (counter == 10) {// Incrementa readingID em cada nova leitura readingID ++; Serial.println ("Falha ao iniciar LoRa!"); } Serial.println ("Inicialização LoRa OK!"); atraso (2000); } void startDHT () {if (isnan (umidade) || isnan (temperatura)) {Serial.println ("Falha ao ler do sensor DHT!"); Retorna; }} void getReadings () {umidade = dht.readHumidity (); temperatura = dht.readTemperature (); Serial.print (F ("Umidade:")); Serial.print (umidade); Serial.print (F ("% Temperatura:")); Serial.print (temperatura); Serial.println (F ("° C")); } void sendReadings () {LoRaMessage = String (readingID) + "/" + String (temperatura) + "&" + String (umidade); // Envia o pacote LoRa para o receptor LoRa.beginPacket (); LoRa.print (LoRaMessage); LoRa.endPacket (); Serial.print ("Enviando pacote:"); Serial.println (readingID); readingID ++; Serial.println (LoRaMessage); } void setup () {// inicializa o Serial Monitor Serial.begin (115200); dht.begin (); startDHT (); startLoRA (); } void loop () {getReadings (); sendReadings (); atraso (500); }
Etapa 8: Monitore os dados no servidor Thingspeak
Assim que o código for carregado, você pode abrir o Monitor Serial no Gateway e no Circuito do Nó do Sensor. Você enviará e receberá dados se o código estiver correto. Agora você pode visitar o Thingspeak Private View. Lá você pode ver os dados de Número do Pacote, Temperatura, Umidade e Gateway são carregados após o intervalo de 15 segundos.
Etapa 9: Referências
1.
2.