• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar
  • Skip to secondary sidebar
  • Skip to footer

У Павла!

  • Контроллеры
    • Arduino
      • Приборы
      • Музыка
      • Проекты Arduino
      • Уроки Arduino
      • Игры на Arduino
      • Роботы на Ардуино
      • FLProg
    • Одноплатные ПК
      • Orange pi
      • Raspberry pi
        • Raspberry pi pico
        • Raspberry pi server
        • Проекты Raspberry pi
    • ESP
      • ESP8266
        • NodeMCU
      • ESP32
      • M5stack
    • Другие контроллеры
      • STM32
  • Умный дом
    • Home Assistant
      • Автоматизации
    • Tuya
    • Bluetooth
    • ESPHome
    • Frigate
    • Telegram
    • Яндекс
  • ЧПУ
  • 3d печать
  • Об авторе

Отправка и получение данных в устройствах LILYGO LoRa V1.0 ESP32 на чипе SX1276 915Mhz.

26 июля, 2022

Купить модули можно тут: http://alii.pub/6ex227

DHT22: http://alii.pub/5yjvv7

Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.

 

 

Попали мне в руки вот эти модули. На самом деле они мне очень понравились.

Это модули ESP32 с большим количеством пинов свободных. Вы только посмотрите на распиновку:

И помимо всего этого, здесь установлен модуль LORA SX1276. Который впринципе можно купить отдельно: http://alii.pub/6ex2t8 или http://alii.pub/6ex2u0

Но тут он уже встроен и цена мне кажется выигрывает этих модулей, чем отдельно лора модуль и отдельно esp32.

Вариант у Lilygo есть либо на 868Mhz или на 915Mhz. Мой вариант на 915Mhz.

 

Ну а теперь давайте перейдем к программной части.

Существует страничка на Github для этих модулей. https://github.com/LilyGO/TTGO-LORA32/tree/LilyGO-868-V1.0

Там есть пример. Но пример очень примитивный и он на модули с дисплеем. Которые стоят дороже и я считаю что дисплей тут лишний. Вобщем пример так-себе и мы его рассматривать не будем.

Я на основ этих примеров (отправки и получения данных) сделал свой пример. Для работы нам понадобится библиотека LORA. Ее можно скачать из стандартных библиотек по слову “LORA” вот так это выглядит:

Остальное уже у Вас в Arduino IDE по умолчанию установлено.

Теперь давайте расскажу про мой вариант.

Я взял модуль температуры и влажности DHT 22 и отправляю по Lora значения температуры и влажности каждые 5 секунд. По мимо этого, на приемнике я записываю значения температуры и влажности в разные переменные. Чтоб потом их использовать в дальнейшем (эта тема для следующей статьи, мы там будем делать бюджетную метеостанцию).

Код передатчика можно скачать отсюда: https://disk.yandex.ru/d/RBDg0cZmo8q6mQ

И он выглядит так:

#include <SPI.h>
#include <LoRa.h>
#include <Wire.h>  
#include "DHT.h"

#define DHTPIN 23

#define SCK     5    // GPIO5  -- SX1278's SCK
#define MISO    19   // GPIO19 -- SX1278's MISO
#define MOSI    27   // GPIO27 -- SX1278's MOSI
#define SS      18   // GPIO18 -- SX1278's CS
#define RST     14   // GPIO14 -- SX1278's RESET
#define DI0     26   // GPIO26 -- SX1278's IRQ(Interrupt Request)
#define BAND    915E6

unsigned int counter = 0;

DHT dht(DHTPIN, DHT22);


String LoRaMessage = "";

void setup() {

  pinMode(2,OUTPUT);
  
  Serial.begin(115200);
  dht.begin();
  while (!Serial);
  Serial.println("LoRa Sender Test");
  
  SPI.begin(SCK,MISO,MOSI,SS);
  LoRa.setPins(SS,RST,DI0);
  while (!LoRa.begin(915E6))     //433E6 - Asia, 866E6 - Europe, 915E6 - North America
  {
    Serial.println(".");
    delay(500);
 
  }
  //LoRa.onReceive(cbk);
//  LoRa.receive();
  Serial.println("init ok");
  
  delay(1500);
}

void loop() {
  Serial.print("Sending packet: ");
  float h = dht.readHumidity(); //Измеряем влажность
  float t = dht.readTemperature(); //Измеряем температуру
  LoRaMessage = "$" + String(dht.readHumidity()) + "&" + String(dht.readTemperature());
  // send packet
  Serial.print(dht.readTemperature());
  LoRa.beginPacket();
  LoRa.print(LoRaMessage);
  LoRa.endPacket();

  counter++;
  digitalWrite(2, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(2, LOW);    // turn the LED off by making the voltage LOW
  delay(5000);                       // wait for a second
}

Из кода видно, что датчик DHT22 подключен к 23 пину модуля Lora ESP32.

В скетче присутствуют значения 915E6 – это частота на которой работает Lora. Этот параметр используется в нескольких местах скетча. Если у Вас частота 868 Mhz, то значения надо поставить 866E6.

Так-же обратите внимание на вот эту строчку:

LoRaMessage = “$” + String(dht.readHumidity()) + “&” + String(dht.readTemperature());

Здесь значения температуры и влажности которые отправляются одной строчкой и разделены двумя символами. Перед влажностью стоит символ $ и перед температурой символ &.

Это нужно как-раз для того, чтоб на приемнике по этим символам различать, где в полученной строчке температура, а где влажность.

 

С передатчиком вроде разобрались. Давайте теперь приступим к приёмнику.

Скачать скетч приемника можно тут: https://disk.yandex.ru/d/PfxuKS-_B1F1jg

Выглядит он так:

#include <SPI.h>
#include <LoRa.h>
#include <Wire.h>  


#define SCK     5    // GPIO5  -- SX1278's SCK
#define MISO    19   // GPIO19 -- SX1278's MISO
#define MOSI    27   // GPIO27 -- SX1278's MOSI
#define SS      18   // GPIO18 -- SX1278's CS
#define RST     14   // GPIO14 -- SX1278's RESET
#define DI0     26   // GPIO26 -- SX1278's IRQ(Interrupt Request)
#define BAND    915E6
String temperature;
String humidity;



void setup() {
  
  
  Serial.begin(115200);
  while (!Serial);
  Serial.println("LoRa Receiver Callback");
  SPI.begin(SCK,MISO,MOSI,SS);
  LoRa.setPins(SS,RST,DI0);  
  while (!LoRa.begin(915E6))     //433E6 - Asia, 866E6 - Europe, 915E6 - North America
  {
    Serial.println(".");
    delay(500);
  }
  //LoRa.onReceive(cbk);
  LoRa.receive();
  Serial.println("init ok");
  
  delay(1500);
}

void loop() {
 
  
  int packetSize = LoRa.parsePacket();
  if (packetSize) { Serial.print("Received packet '");
 
    while (LoRa.available())              // read packet
    {
      String LoRaData = LoRa.readString();
      Serial.print(LoRaData);
      int pos1 = LoRaData.indexOf('$');
      int pos2 = LoRaData.indexOf('&');
      humidity = LoRaData.substring(pos1+1, pos2); 
      temperature = LoRaData.substring(pos2+1, LoRaData.length()); 
      
    }
    Serial.print("' with RSSI ");         // print RSSI of packet
    Serial.println(LoRa.packetRssi());
    Serial.println(temperature); 
    Serial.println(humidity); 
  }

}

Здесь точно так-же меняем значения 915E6  в зависимости от Вашей частоты.

Далее, вот эта часть кода отвечает за сортировку температуры и влажности:

int pos1 = LoRaData.indexOf(‘$’);

int pos2 = LoRaData.indexOf(‘&’);

humidity = LoRaData.substring(pos1+1, pos2);

temperature = LoRaData.substring(pos2+1, LoRaData.length());

А точнее первые две строчки определяют символы $ и &. Вторые две строчки записывают для переменной humidity значение после символа “$”. А для переменной temperature записывают значения после символа “&”.

 

Вот и все. Пример получился простой, но в то -же время полезный. Всетаки мы уже можем получать температуру и влажность по протоколу LORA на расстоянии до 15 КМ при полной видимости.

А так-же этот пример легко изменить под себя, собственно для этого я его и создавал.

В дальнейшем у меня есть мысль сделать метеостанцию из самых дешевых датчиков, поставить ее в кладовке где не добивает мой домашний wi-fi. И отправлять значения с этих датчиков по LORA, а полученные данные отправлять по mqtt на сервер Home Assistant. И используя этот пример мне будет не сложно все изменить.

 

Primary Sidebar

Поиск

Новые записи

  • Автоматизация перезагрузки устройства по команде Ping.
  • Разблокирование и добавление шлюза Xiaomi gateway 3 в Home Assistant для управления Bluetooth устройствами из экосистемы Xiaomi Home (mihome)
  • Интеграция для локального управления (без интернета) ик пультом Tuya работающим по wifi из Home Assistant
  • Транслируем показания с Уличного Bluetooth Датчика температуры по BTHome на дисплей датчика температуры XIaomi LYWSD03MMC
  • Заставляем Bluetooth датчики температуры tuya и xiaomi отправлять данные по Zigbee в Home Assistant.

Официальный YouTube Канал M5Stack:

Подписывайтесь на Телеграм канал

https://t.me/ypavla

Подписаться на YouTube!

Secondary Sidebar




Подписывайтесь на Telegram Канал!

У Павла!

Footer

Copyright_У Павла! © 2025 ·