Moduł Radiowy Lora 3km 433mHz/8km 868mHz Direct Link Supla Pushover

Masz pomysł na funkcjonalność lub koncepcję na rozwój projektu. Opisz wszystko tutaj.
Awatar użytkownika
Lucas
Posty: 552
Rejestracja: pn lip 31, 2017 7:11 am
Lokalizacja: Chrzanów

sob maja 16, 2020 10:04 pm

A propos Lory, to Zamel wykorzystał te moduły w najnowszej wersji dzwonka Bulik II Pro. Oglądałem ostatnio parę filmów na YT odnośnie modułów LoRa, sam jestem ciekaw ich możliwości.
8x Sonoff Basic, 1x Sonoff Touch, 2x ROW-02, 1x SRW-03, 1x SLW-01, 1x Shelly 1v3, 2x Yunshan, 1x MoesHouse, 1x BW-SHP6, 2x Smart DGM, kilka modułów na D1 mini... i notoryczny brak czasu na więcej
GH + Trådfri + RM mini 3
Awatar użytkownika
Zibi
Posty: 218
Rejestracja: śr lip 31, 2019 9:20 am
Lokalizacja: Białogard

pn maja 18, 2020 5:24 pm

Jestem w trakcie testów lora 8km 868mHz Wspólnie z Piomar2 walczyliśmy miałem problemy zasięg był bardzo mały, ale udało się wreszcie rozwiązać problem. W centrum miasta uzyskałem 800m kurcze centrum miasta tak gęsto, jestem mega zadowolony, pogoda nie pozwoliła. Będą kolejne testy, ale myślę że w otwartej przestrzeni odległości będą imponujące.
piomar2
Posty: 348
Rejestracja: pt kwie 26, 2019 5:32 pm
Lokalizacja: Bukowice

pt maja 22, 2020 6:04 am

Witajcie.

Zabawa z Lorą wciągnęła mnie z @Zibim nieźle (Jego zaangażowanie jest nieocenione a testy na odległość to Jego zasługa).

A teraz krótki poradnik jak zacząć z Lorą oraz proste programiki realizujące pomiar temperatury DS-em, wysyłanie danych za pomocą lory, odbiór i dostarczenie do supli wraz z usypianiem (pobór prądu we śnie < 180 mikro amper - narazie, prace trwają).
To tylko przykład. Można wysyłać dane "jakie się chce". Wyżej wspomniałem o zdalnym otwieraniu bramy, @Zibi stosuje to rozwiązanie do do obsługi skrzynki pocztowej. Inwencja granic nie ma.

Uruchomienie transmisji "nadajnik - odbiornik" za pomocą Lora E32.
Posiłkowałem się tą stroną:
https://create.arduino.cc/projecthub/xr ... use-804d25
i biblioteką Renzo Mischianti.

Podłączamy konwerter USB do lory ( zasilanie +3v3, masa, TX i RX)
Oczywiście RX i TX na krzyż z konwerterem...
i ustawiamy parametry osobno dla lory nadajnika i lory odbiornika:
Lora_ustawienia.jpg
Lora_ustawienia.jpg (88.35 KiB) Przejrzano 127 razy
Ustawiamy adres odbiornika.
Adres nadajnika ustawiamy dowolny.

W zależności czy używamy lorę 3km czy 8km ustawiamy w opcji "Power" 20 dBm lub
30 dBm.

Naciskamy SetParam i mamy zapis ustawień.

Ustawiony adres odbiornika wpisujemy do programu: nadajnik w tej linii:
"e32ttl100.sendFixedMessage(0, 3, 23, TEMP);"
Adres przykładowy odbiornika "3".
Poz 1 to ADDH, poz 2 to ADDL, poz 3 to kanał, poz 4 to zmienna wysyłana.

Niezależnie kompilujemy i wgrywamy oprogramowanie do wemosa mini. Podłączamy lory i odpalamy układy.


Nadajnik:

Kod: Zaznacz cały

//nadajnik DS18B20 z usypianiem(120 sek)
//skompilowac i wgrac program, potem polaczyc RST z D0;
//D1 RX Lora
//D2 TX Lora
//D5 M0, M1
//D7 DS18B20
//plytki 2.4.2
 /*
 * LoRa E32-TTL-100
 * E32-TTL-100----- esp8266
 * M0         ----- D5
 * M1         ----- D5
 * RX         ----- D1 (PullUP 4k7)
 * TX         ----- D2 (PullUP 4k7)
 * AUX        ----- (PullUP 4k7)
 * VCC        ----- 3.3v
 * GND        ----- GND
 * ustawiony adres odbiornika na "3"
 */
#include "Arduino.h"
#include "LoRa_E32.h"
LoRa_E32 e32ttl100(D2, D1); //TX ,RX

#include <OneWire.h>
#include <DallasTemperature.h> 
OneWire oneWire(13);
DallasTemperature sensors(&oneWire);

float temp; 
String TEMP;
int spanie=120;//sekundy
byte c;
 
void printParameters(struct Configuration configuration);
void printModuleInformation(struct ModuleInformation moduleInformation);
 
void setup()
{
   Serial.begin(9600); 
    pinMode(14, OUTPUT);//D5
    digitalWrite(14, LOW);

  sensors.begin();
  sensors.setResolution(10);//rozdzielczosc DS-a 
    
  e32ttl100.begin();
  
  ResponseStructContainer c;
  c = e32ttl100.getConfiguration();
  Configuration configuration = *(Configuration*) c.data;
  Serial.println(c.status.getResponseDescription());
  Serial.println(c.status.code);
  }
//********************************************************
void loop() {
 digitalWrite(14, LOW); //podlaczyc do M0 M1 budzenie Lory
 
 sensors.requestTemperatures();
 delay(1000);
 
 float temp = sensors.getTempCByIndex(0); 
 TEMP=(String(temp));

e32ttl100.sendFixedMessage(0, 3, 23, TEMP);
digitalWrite(14, HIGH);//lora spac

       delay(50);
ESP.deepSleep(spanie* 1000 * 1000); 
 }
Odbiornik:

Kod: Zaznacz cały

//odbiornik Lora E32 - odbior wrtosci z DS18B20 z lory do supli
//plytki 2.4.2
//ustawiony adres odbiornika na "3"
/*
 * E32-TTL-100----- esp8266
 * M0         ----- masa
 * M1         ----- masa
 * RX         ----- D1 (PullUP 4k7)
 * TX         ----- D2 (PullUP 4k7)
 * AUX        ----- (PullUP 4k7)
 * VCC        ----- 3.3v
 * GND        ----- GND
 */

#include <srpc.h>
#include <log.h>
#include <eh.h>
//#include <proto.h>
#include <IEEE754tools.h>
#define SUPLADEVICE_CPP
#include <SuplaDevice.h>
#include <lck.h>

#include <WiFiClient.h>
#include <ESP8266WiFi.h>
#include <WiFiServer.h>

#include "Arduino.h"
#include "LoRa_E32.h"
LoRa_E32 e32ttl100(D2, D1); //TX ,RX

WiFiClient client;

const char* ssid     = "xxxxxx";
const char* password = "xxxxxx";

float temp;

double get_temperature(int channelNumber, double last_val) {

    double t = -275;
   t= temp;
    return t;  
}
//--------------------------------------------------------
void setup() {
  
  Serial.begin(9600);

   e32ttl100.begin();
   ResponseStructContainer c;
  c = e32ttl100.getConfiguration();
  Configuration configuration = *(Configuration*) c.data;
  Serial.println(c.status.getResponseDescription());
  Serial.println(c.status.code);
  
    // Replace the falowing GUID
 char GUID[SUPLA_GUID_SIZE] = {0xB0,0x33,0xDC,0xB3,0x4B,0x4F,0x54,0x6E,0x43,0xD0,0xE1,0xF6,0x06,0x27,0x39,0x5E};
  // with GUID that you can retrieve from https://www.supla.org/arduino/get-guid
  
  // Ethernet MAC address
  uint8_t mac[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

  // CHANNEL0 - Temp 
  SuplaDevice.addDS18B20Thermometer();
  
 SuplaDevice.setName("Lora_temp"); 
SuplaDevice.begin(GUID,              // Global Unique Identifier 
                    mac,               // Ethernet MAC address
                    "svrx.supla.org",  // SUPLA server address
                    xxxx,                 // Location ID 
                    "xxxx");             // Location Password}
        
}
//--------------------------------------------------------
void loop() {

  if (e32ttl100.available()  > 1){
     ResponseContainer rs = e32ttl100.receiveMessage();
      Serial.println(rs.data);
        temp = (rs.data.toFloat());
   }
  SuplaDevice.iterate();
 }
 
// Supla.org ethernet layer
int supla_arduino_tcp_read(void *buf, int count) {
  _supla_int_t size = client.available();

  if ( size > 0 ) {
    if ( size > count ) size = count;
    return client.read((uint8_t *)buf, size);
  };

  return -1;
};

int supla_arduino_tcp_write(void *buf, int count) {
  return client.write((const uint8_t *)buf, count);
};

bool supla_arduino_svr_connect(const char *server, int port) {
  return client.connect(server, 2015);
}

bool supla_arduino_svr_connected(void) {
  return client.connected();
}

void supla_arduino_svr_disconnect(void) {
  client.stop();
}

void supla_arduino_eth_setup(uint8_t mac[6], IPAddress *ip) {

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
            delay(500);
  }
}

SuplaDeviceCallbacks supla_arduino_get_callbacks(void) {
  SuplaDeviceCallbacks cb;

  cb.tcp_read = &supla_arduino_tcp_read;
  cb.tcp_write = &supla_arduino_tcp_write;
  cb.eth_setup = &supla_arduino_eth_setup;
  cb.svr_connected = &supla_arduino_svr_connected;
  cb.svr_connect = &supla_arduino_svr_connect;
  cb.svr_disconnect = &supla_arduino_svr_disconnect;
  cb.get_temperature = &get_temperature;
  cb.get_temperature_and_humidity = NULL;
  cb.get_rgbw_value = NULL;
  cb.set_rgbw_value = NULL;

  return cb;
}
  
Mamy nadzieję z @Zibim, że w zastosowanie lory w powiązaniu z suplą zaangażują się inni koledzy bo temat jest niezmiernie ciekawy.
W załączniku biblioteka i program do ustawiania lory.

Wykres w cloudzie:
wykres.jpg
wykres.jpg (53.56 KiB) Przejrzano 127 razy
Załączniki
zalacznik_lora.zip
(1.02 MiB) Pobrany 6 razy
Awatar użytkownika
Robert Błaszczak
Posty: 1102
Rejestracja: sob gru 22, 2018 8:55 pm
Lokalizacja: Zielona Góra
Kontaktowanie:

pt maja 22, 2020 6:39 am

Dzięki koledzy za kawał porządnej roboty w temacie Lory. Bardzo przydatne informacje.
Ja na razie ze względu na nawał pracy w firmie nie mam już po pracy za bardzo chęci do zajęcia się tym tematem :evil: .
Pozdrawiam
Robert Błaszczak

Strona prywatna: https://www.blaszczak.pl
Jakość powietrza: https://robert.aqi.eco
Awatar użytkownika
Lucas
Posty: 552
Rejestracja: pn lip 31, 2017 7:11 am
Lokalizacja: Chrzanów

pt maja 22, 2020 10:17 am

Super, świetna robota. Może uda mi się dzięki temu coś pobawić w temacie. Zrobiłbym połączenie z garażem. Trzeba by zamówić te moduły, ale na razie mam podobnie jak Robert. Ciężko znaleźć czas i chęci, a obecny czas jakoś temu nie służy.
8x Sonoff Basic, 1x Sonoff Touch, 2x ROW-02, 1x SRW-03, 1x SLW-01, 1x Shelly 1v3, 2x Yunshan, 1x MoesHouse, 1x BW-SHP6, 2x Smart DGM, kilka modułów na D1 mini... i notoryczny brak czasu na więcej
GH + Trådfri + RM mini 3
Awatar użytkownika
Zibi
Posty: 218
Rejestracja: śr lip 31, 2019 9:20 am
Lokalizacja: Białogard

pt maja 22, 2020 5:08 pm

Panowie jestem po kolejnych testach lory z pomocą kolegi Piomar2 zrobiłem antenę z drutów, bo nie mam oryginalnej. Zasięgi tej lory są powalające jestem bardzo zadowolony z efektów dzisiaj uzyskałem prawie 1.2 km w centrum miasta byłem w takich zakamarkach i zabudowaniach, a sygnał się przebijał. Piomar2 wykonał dużo pracy dzięki, której mamy płytkę giganta jeśli chodzi o łączność radiową.
Awatar użytkownika
Zibi
Posty: 218
Rejestracja: śr lip 31, 2019 9:20 am
Lokalizacja: Białogard

ndz maja 24, 2020 6:41 pm

Testy zakończone płytki zrobione, lora 3km i 8km w opakowaniu czeka na najbliższy projekt.
Załączniki
IMG_20200524_200711.jpg
IMG_20200524_200711.jpg (3.61 MiB) Przejrzano 15 razy
ODPOWIEDZ