Приём данных с датчика LoRa Sensor BME

Наконец-то получил в руки «пироженку», датчик температуры, влажности и давления LoraSensor BME. Сайт проекта http://lorasensor.site/

Датчик передает данные в виде строки с JSON по LoRa на 434Мгц (возможны и другие частоты). Принимать данные можно при помощи любого устройства LoRa, так как любое устройство LoRa является трансивером, т.е. приемопередатчиком. В моем случае таким устройством стала Arduino подобная плата с Ali на базе проца Atmega32u4 и трансивера 433 МГц LoRA RA02 от AI-Thinker. Плата без проблем прошивается из Arduino IDE, предварительно нужно установить библиотеку https://github.com/BSFrance/BSFrance-avr для платы и добавить ее описание.2-433-LoRa32u4-Ra02-LoRa-WiFi.jpg_960x960

Далее необходимо выбрать скетч LoRaReceiverCallback.ino и модифицировать под свои нужды. Мне необходимо было изменить частоту на 434Е6, распиновку выбрать для платы 433 V1.2 и вместо хардварного Serial применять софтовый при помощи библиотеки SoftwareSerial. Данные передаются на пины 10 и 11 и далее на плату NodeMCU (ESP8266) на пины RX и TX. В ESP используется прошивка ESPEASY Mega с плагином Serial2Net. Плата поднивает сервер последовательного порта и транслирует данные на выбранный TCP порт ESP.

https://www.letscontrolit.com/wiki/index.php/Ser2Net

Затем я подключаюсь к выбранному порту ESP при помощи своего нетбука в установленным Node Red.

Ниже ссылка на флоу, где данные забираются из TCP, преобразуются в JSON объект, затем разбираются по метрикам и транслируются в MQTT и Dashboard.

https://pastebin.com/zpeQH59b

 

Доработка до ума китайского WIFI реле на базе ESP-01S

Заказал на ALI два WIFI реле. В целях домашней автоматизации хотелось иметь устройство, управляемое через GET запросы или MQTT. Думал, что изделие заработает из коробки, но не тут то было.

Вот чудо китайской мысли

20

Не вдаваясь в тонкости, сообщу что есть две версии данного устройства (по инфо из сети): версия 1.0 и версия 4.0. Номер версии можно посмотреть на обратной стороне платки

21.png

 

Так вот, версия 1.0 имеет косяки по схемотехнике, которые не позволяют ESP даже стартовать. Вроде, версия 4.0 не имеет таких косяков. Но, на ALI я не нашел такой платы. А плат v1.0 море. Лечится это при помощи резистора 10кОМ, припаянного следующим образом (см. фото).

По умолчанию в ESP залита прошивка заточенная на Android приложение китайских коллег. Мне такой вариант не подошел и я залил простейший скетч из Arduino IDE ( из этого обзора http://robotchip.ru/obzor-modulya-rele-dlya-esp8266-01s-esp-01s/ )

#include <ESP8266WiFi.h> // Подключаем библиотеку ESP8266WiFi

const char* ssid = «Название Вашей сети»; // Название Вашей WiFi сети
const char* password = «Пароль от Вашей сети»;// Пароль от Вашей WiFi сети

#define RELAY 0 // Пин к которому подключен датчик
WiFiServer server(80); // Указываем порт Web-сервера

void setup(){
Serial.begin(115200); // Скорость передачи 115200
pinMode(RELAY,OUTPUT); // Указываем вывод RELAY как выход
digitalWrite(RELAY, LOW); // Устанавливаем RELAY в LOW (0В)
Serial.println(); // Печать пустой строки
Serial.print(«Connecting to «); // Печать «Подключение к:»
Serial.println(ssid); // Печать «Название Вашей WiFi сети»

WiFi.begin(ssid, password); // Подключение к WiFi Сети

while (WiFi.status() != WL_CONNECTED) // Проверка подключения к WiFi сети
{
delay(500); // Пауза 500 мкс
Serial.print(«.»); // Печать «.»
}
Serial.println(«»); // Печать пустой строки
Serial.println(«WiFi connected»); // Печать «WiFi connected»

server.begin(); // Запуск сервера
Serial.println(«Server started»); // Печать «Server starte»
Serial.print(«Use this URL to connect: «); // Печать «Use this URL to connect:»
Serial.print(WiFi.localIP()); // Печать выданого IP адресса
Serial.println(«/»); // Печать «/»
}

void loop(){
WiFiClient client = server.available(); // Получаем данные, посылаемые клиентом
if (!client)
{
return;
}
Serial.println(«new client»); // Отправка «new client»
while(!client.available()) // Пока есть соединение с клиентом
{
delay(1); // пауза 1 мс
}

String request = client.readStringUntil(‘\r’);
Serial.println(request);
client.flush();

int value = LOW;
if (request.indexOf(«/RELAY=ON») != -1)
{
Serial.println(«RELAY=ON»);
digitalWrite(RELAY,LOW);
value = LOW;
}
if (request.indexOf(«/RELAY=OFF») != -1)
{
Serial.println(«RELAY=OFF»);
digitalWrite(RELAY,HIGH);
value = HIGH;
}

client.println(«HTTP/1.1 200 OK»);
client.println(«Content-Type: text/html»);
client.println(«»);
client.println(«<!DOCTYPE HTML>»);
client.println(«<html>»);
client.println(«<head><title>ESP8266 RELAY Control</title></head>»);
client.print(«Relay is now: «);

if(value == HIGH)
{
client.print(«OFF»);
}
else
{
client.print(«ON»);
}
client.println(«<br><br>»);
client.println(«Turn <a href=\»/RELAY=OFF\»>OFF</a> RELAY<br>»);
client.println(«Turn <a href=\»/RELAY=ON\»>ON</a> RELAY<br>»);
client.println(«</html>»);

delay(1);
Serial.println(«Client disonnected»);
Serial.println(«»);
}

Основные сложности были в прошивке модуля ESP-01s. На ALI можно приобрести переходник USB на TTL с разъемом, куда вставляется платка ESP. Но у меня такого переходника не было. Поэтому, пришлось в качестве переходника использовать Arduino UNO.  Пользовался мануалом: https://cordobo.com/2300-flash-esp8266-01-with-arduino-uno/

Если коротко:

  1. Схема подключения такая

Wiring scheme:
UNO — ESP8266 (wire color)
RX — RX (white)
TX — TX (green)
GND — GND (black)
GND — GPIO 0 (purple)
3.3V — VCC (red)
3.3V — CH_PD (orange)

2. На UNO обязательно надо замкнуть RESET на GND. Иначе, проц UNO запустится и прошить ESP не удастся.

3. Подключать RX TX выходы через делители (согласовывать уровни TTL 5v-3.3v) не стал — у меня все получилось без этого.

4. Существует мнение, что питать ESP от UNO не надо, слишком мал допустимый ток. У меня все получилось без дополнительных источников 3.3в

5. И, что больше всего выгрызло мне мозг: выбирайте кабель USB для подключения UNO минимальной длины. При получении ошибки при прошивке я долго пытался найти причину и искал ее в схеме подключения. Однако, всему виной был кабель. Я перепробовал три различных кабеля, пока не нашел подходящий.

Выводы: Можно брать, если знать, как вылечить плату. Цена оправдывает средства. Цена такой платки на данный момент 140 руб. Цена Sonoff Basic около 320. Правда, Sonoff — уже готовое устройство с решенной проблемой питания модуля и реле от сети 220В. Если бюджет не жмет, то лучше взять Sonoff.