
Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-23 15:04

В этом проекте 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.
Рекомендуемые:
Считыватель RFID на базе ESP32 с сенсорным дисплеем: 7 шагов

Считыватель RFID на основе ESP32 с сенсорным дисплеем: в этой небольшой инструкции я покажу, как создать простой считыватель RFID с выходом TFT для настенного монтажа, используя модуль ESP32 DEV KIT C, печатную плату считывателя на основе RC-522 и комплект AZ-Touch ESP. Вы можете использовать этот считыватель для доступа к двери или охранной сигнализации
Кодовый замок ESP32 с сенсорным экраном: 5 шагов

Кодовый замок ESP32 с сенсорным экраном: многие люди просили меня дать очень простой пример кода для ArduiTouch, чтобы протестировать их работу, а также в качестве отправной точки для собственных разработок. Этот очень простой кодовый замок продемонстрирует основные функции Arduitouch без каких-либо наворотов и
Почвенный увлажнитель с узлом: 7 шагов

Почвенный увлажнитель с узлом: в этом руководстве я покажу вам, как сделать почвенный датчик для системы здравоохранения сада. Я покажу вам, что вам нужно, приведу несколько примеров кода и как его реализовать. В конце инструкций вы узнаете, как изменить
UCL-IIOT - система сигнализации с базой данных и красным узлом: 7 шагов

UCL-IIOT - система сигнализации с базой данных и Node-red: цель этой сборки - научить подключать Arduino к Node-red и базе данных, чтобы вы могли регистрировать данные, а также собирать их для дальнейшего использования. простая система сигнализации Arduino, которая выводит 5 номеров данных, каждое из которых отделено
Беспроводной датчик температуры и влажности большого радиуса действия IOT с красным узлом: 27 шагов

Беспроводной датчик температуры и влажности большого радиуса действия IOT с Node-Red: Представляем беспроводной датчик температуры-влажности большого радиуса действия NCD, обеспечивающий дальность действия до 28 миль с использованием архитектуры беспроводной ячеистой сети. Датчик температуры-влажности Honeywell HIH9130 передает высокоточные данные о температуре и