Оглавление:
Видео: ESP32 Lora Thingspeak Gateway с сенсорным узлом: 9 шагов
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
В этом проекте IoT я разработал шлюз ESP32 LoRa, а также узел датчика ESP32 LoRa для беспроводного отслеживания показаний датчика с расстояния в несколько километров. Отправитель считывает данные о влажности и температуре с помощью датчика DHT11. Затем он передает данные через LoRa Radio. Данные принимаются модулем приемника. Затем получатель отправит данные на сервер Thingspeak через определенный интервал.
Шаг 1. Необходимые компоненты
1. Плата ESP32 - 2 шт.
2. Модуль Lora SX1278 / SX1276
3. Датчик температуры влажности DHT11
4. Макетная плата
5. Подключение перемычек.
Шаг 2: установка необходимых библиотек
Сначала нам нужно установить разные библиотеки:
1. Библиотека DHT11
2. Библиотека LoRa
Шаг 3. Шлюз ESP32 LoRa Thingspeak
Теперь давайте посмотрим на схему отправителя и получателя для построения шлюза и сенсорного узла ESP32 LoRa. Я собрал обе схемы на макетной плате. Если хотите, можете сделать это на плате.
Вот схема шлюза ESP32 LoRa Module SX1278. Эта часть работает как приемник. Данные о влажности и температуре принимаются с помощью LoRa Radio и загружаются на сервер Thingspeak.
Шаг 4: Узел датчика ESP32 LoRa
Вот схема узла датчика ESP32 LoRa с датчиком DHT11. Эта часть работает как передатчик. Данные о влажности и температуре считываются датчиком температуры влажности DHT11 и передаются с помощью LoRa Radio.
Шаг 5: настройка Thingspeak
Чтобы отслеживать данные датчиков на сервере Thingspeak, вам сначала необходимо настроить Thingspeak. Чтобы настроить сервер Thingspeak, посетите https://thingspeak.com/. Создайте учетную запись или просто войдите в систему, если вы создали учетную запись ранее. Затем создайте новый канал со следующими данными.
Шаг 6: Код шлюза
#включают
// Библиотеки для LoRa #include #include // определяют контакты, используемые модулем приемопередатчика LoRa #define ss 5 #define rst 14 #define dio0 2 #define BAND 433E6 // 433E6 для Азии, 866E6 для Европы, 915E6 для Северной Америки // Замените учетными данными вашей сети String apiKey = "14K8UL2QEK8BTHN6"; // Введите свой ключ API записи из ThingSpeak const char * ssid = "Wifi SSID"; // замените ваш Wi-Fi ssid и ключ wpa2 const char * password = "Password"; const char * server = "api.thingspeak.com"; Клиент WiFiClient; // Инициализируем переменные для получения и сохранения данных LoRa int rssi; String loRaMessage; Температура струны; Влажность струны; String ReadID; // Заменяет заполнитель значениями DHT String processor (const String & var) {//Serial.println(var); if (var == "TEMPERATURE") {температура возврата; } else if (var == "ВЛАЖНОСТЬ") {возвращаем влажность; } иначе, если (var == "RRSI") {return String (rssi); } return String (); } void setup () {Serial.begin (115200); int counter; // настраиваем модуль приемопередатчика LoRa LoRa.setPins (ss, rst, dio0); // настраиваем модуль приемопередатчика LoRa while (! LoRa.begin (BAND) && counter <10) {Serial.print ("."); счетчик ++; задержка (2000); } if (counter == 10) {// Увеличиваем ReadID при каждом новом чтении Serial.println («Не удалось запустить LoRa!»); } Serial.println («Инициализация LoRa ОК!»); задержка (2000); // Подключаемся к сети Wi-Fi с SSID и паролем Serial.print («Подключение к»); Serial.println (ssid); WiFi.begin (ssid, пароль); в то время как (WiFi.status ()! = WL_CONNECTED) {задержка (2000); Serial.print ("."); } // Распечатать локальный IP-адрес и запустить веб-сервер Serial.println (""); Serial.println («Wi-Fi подключен.»); Serial.println ("IP-адрес:"); Serial.println (WiFi.localIP ()); } // Чтение пакета LoRa и получение показаний датчика void loop () {int packetSize = LoRa.parsePacket (); if (packetSize) {Serial.print ("Получен пакет Lora:"); while (LoRa.available ()) // Прочитать пакет {String LoRaData = LoRa.readString (); Serial.print (LoRaData); int pos1 = LoRaData.indexOf ('/'); int pos2 = LoRaData.indexOf ('&'); ReadID = LoRaData.substring (0, pos1); // Получить значение чтения ID temperature = LoRaData.substring (pos1 +1, pos2); // Получить температуру и влажность = LoRaData.substring (pos2 + 1, LoRaData.length ()); // Получить влажность} rssi = LoRa.packetRssi (); // Получить RSSI Serial.print ("с RSSI"); Serial.println (rssi); } if (client.connect (server, 80)) // «184.106.153.149» или api.thingspeak.com {String postStr = apiKey; postStr + = "& field1 ="; postStr + = Строка (идентификатор чтения); postStr + = "& field2 ="; postStr + = Строка (температура); postStr + = "& field3 ="; postStr + = String (влажность); postStr + = "& field4 ="; postStr + = строка (rssi); postStr + = "\ r / n / r / n / r / n / r / n"; client.print ("POST / обновить HTTP / 1.1 / n"); client.print ("Хост: api.thingspeak.com / n"); client.print ("Соединение: закрыть / n"); client.print ("X-THINGSPEAKAPIKEY:" + apiKey + "\ n"); client.print ("Content-Type: application / x-www-form-urlencoded / n"); client.print ("Длина содержимого:"); client.print (postStr.length ()); client.print ("\ n / n"); client.print (postStr); } // задержка (30000); }
Шаг 7: Код узла датчика
#включают
#include // Библиотеки для LoRa #include "DHT.h" #define DHTPIN 4 // контакт, к которому подключен dht11 DHT dht (DHTPIN, DHT11); // определение контактов, используемых модулем приемопередатчика LoRa #define ss 5 #define rst 14 #define dio0 2 #define BAND 433E6 // 433E6 для Азии, 866E6 для Европы, 915E6 для Северной Америки // счетчик пакетов int readID = 0; int counter = 0; Строка LoRaMessage = ""; температура поплавка = 0; влажность поплавка = 0; // Инициализируем модуль LoRa void startLoRA () {LoRa.setPins (ss, rst, dio0); // настраиваем модуль приемопередатчика LoRa while (! LoRa.begin (BAND) && counter <10) {Serial.print ("."); счетчик ++; задержка (500); } if (counter == 10) {// Увеличиваем ReadID при каждом новом чтении ReadID ++; Serial.println («Не удалось запустить LoRa!»); } Serial.println («Инициализация LoRa ОК!»); задержка (2000); } void startDHT () {if (isnan (влажность) || isnan (температура)) {Serial.println ("Ошибка чтения с датчика DHT!"); возвращение; }} void getReadings () {влажность = dht.readHumidity (); температура = dht.readTemperature (); Serial.print (F ("Влажность:")); Серийный отпечаток (влажность); Serial.print (F ("% Температура:")); Serial.print (температура); Serial.println (F («° C»)); } void sendReadings () {LoRaMessage = String (ID чтения) + "/" + String (температура) + "&" + String (влажность); // Отправляем пакет LoRa получателю LoRa.beginPacket (); LoRa.print (LoRaMessage); LoRa.endPacket (); Serial.print («Отправка пакета:»); Serial.println (идентификатор чтения); readID ++; Serial.println (LoRaMessage); } void setup () {// инициализировать Serial Monitor Serial.begin (115200); dht.begin (); startDHT (); startLoRA (); } void loop () {getReadings (); sendReadings (); задержка (500); }
Шаг 8: мониторинг данных на сервере Thingspeak
После загрузки кода вы можете открыть последовательный монитор как на шлюзе, так и на схеме узла датчика. Вы отправите и получите данные, если код правильный. Теперь вы можете посетить Thingspeak Private View. Здесь вы можете увидеть, что данные для количества пакетов, температуры, влажности и шлюза загружаются через интервал в 15 секунд.
Шаг 9: ссылки
1.
2.