LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
IoT

LoRa na STM32 i SX1276 – jaki jest realny zasięg transmisji?

Następna sekcja to inicjalizacja modułu radiowego i konfiguracja parametrów transmisji. W pierwszej kolejności rejestrowane są callbacki wołane po skończonej transmisji i po odbiorze pakietu. Dla uproszczenia zostały pominięte pozostałe, odpowiadające m. in. za błędy transmisji i detekcję zajętości kanału radiowego. Użyte funkcje zostaną omówione w dalszej części tekstu. Kolejne linie kodu konfigurują parametry modemu radiowego.

Funkcja SetChannel ustawia częstotliwość sygnału, natomiast pozostałe dwie funkcje konfigurują parametry transmisji i odbioru. Listy argumentów obu funkcji zostały wyjaśnione w tabeli 1. Istotne w tym przypadku jest, aby zarówno odbiornik, jak i nadajnik były skonfigurowane w ten sam sposób. W tym momencie radio gotowe jest już do komunikacji, więc zostaje wprowadzone w tryb ciągłego nasłuchu (argument 0 funkcji Rx oznacza brak limitu czasu na odbiór pakietu).

W dalszej części programu konfigurowany jest licznik sterujący czasem świecenia diody sygnalizującej odbiór pakietu. Korzysta on z interfejsu dostarczanego przez moduł Lora/Utilities/timeServer. Dzięki niemu można w łatwy sposób zarządzać licznikami opartymi na sprzętowym RTC. Jest on używany przez sterownik SX1276, ale można go także wykorzystać w swoim kodzie.

Ostatnią czynnością wykonywaną przez funkcję main jest skonfigurowanie przycisku służącego do nadawania pakietu. Przerwanie jest włączane za pomocą funkcji dostarczanej przez moduł hw_gpio, natomiast konfiguracja GPIO znajduje się w BSP płytki B-072Z-LRWAN1.

 

Tab. 1. Parametry konfiguracji transmisji i odbioru

SetTxConfig SetRxConfig
Argument Opis Argument Opis
modem Typ modulacji (LoRa/FSK). modem Typ modulacji (LoRa/FSK)
power Moc sygnału nadawanego [dBm]. bandwidth Pasmo (LoRa 0: 125 kHz, 1: 250 kHz, 2: 500 kHz, FSK <2,6kHz:250kHz>).
fdev Dewiacja częstotliwości (tylko FSK). datarate Przepustowość (dla LoRa wyrażona jako 2SF , gdzie SF = {6…12}, dla FSK jako bit/s).
bandwidth Pasmo (tylko LoRa, 0: 125 kHz, 1: 250 kHz, 2: 500 kHz). coderate Korekcja błędów (tylko LoRa: 1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8).
datarate Przepustowość (dla LoRa wyrażona jako 2SF , gdzie SF = {6…12}, dla FSK jako bit/s). bandwidthAfc Pasmo automatycznej regulacji częstotliwości (tylko FSK <2,6kHz:250kHz>)
coderate Korekcja błędów (tylko LoRa: 1: 4/5, 2: 4/6, 3: 4/7, 4: 4/8). preambleLen Długość preambuły pakietu.
preambleLen Długość preambuły pakietu. symbTimeout Maksymalny czas trwania trybu odbioru pojedynczego pakietu wyrażony w liczbie symboli (tylko LoRa).
fixLen Stała/zmienna długość pakietu danych. fixLen Stała/zmienna długość pakietu danych.
crcOn Włączona/wyłączona generacja CRC. payloadLen Długość pakietu danych, gdy fixLen = true.
freqHopOn Włączona/wyłączona opcja rozpraszania widma Frequency-hopping (tylko LoRa). crcOn Włączona/wyłączona kontrola CRC.
hopPeriod Okres zmiany częstotliwości jeśli freqHopOn = true (tylko LoRa). freqHopOn Włączona/wyłączona opcja rozpraszania widma Frequency-hopping (tylko LoRa).
iqInverted Inwersja sygnałów I oraz Q (tylko LoRa). hopPeriod Okres zmiany częstotliwości jeśli freqHopOn = true (tylko LoRa).
timeout Ograniczenie czasu transmisji w [ms]. iqInverted Inwersja sygnałów I oraz Q (tylko LoRa).
rxContinuous Włączony/wyłączony tryb ciągłego odbioru.

 

Do omówienia pozostały funkcje obsługi przerwań przedstawione na listingu 2:

  • gpioCallback – przerwanie od przycisku, przełącza radio w tryb nadawania pakietu, zapala diodę sygnalizującą nadawanie pakietu,
  • txDoneEventCallback – przerwanie po skończonej transmisji pakietu, przełącza radio z powrotem w tryb nasłuchu, gasi diodę nadawczą,
  • rxDoneEventCallback – przerwanie po odebraniu pakietu, zapala diodę sygnalizującą odbiór, uruchamia licznik kontrolujący czas świecenia diody, wypisuje treść otrzymanej wiadomości,
  • ledTimerCallback – przerwanie licznika kontrolującego diodę.

List. 2. Funkcje obsługujące zdarzenia radia oraz przerwania licznika i przycisku

static void gpioCallback()

{
BSP_LED_On(LED3);
Radio.Send(buffer, 10);
}

static void ledTimerCallback()

{
BSP_LED_Off(LED2);
}

void txDoneEventCallback()

{
BSP_LED_Off(LED3);
Radio.Rx(0);
}

void rxDoneEventCallback(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr)
{
BSP_LED_On(LED2);
TimerStart(&ledTimer);
PRINTF("->");
for(int i=0; i<size; i++)
PRINTF("%c", payload[i]);
PRINTF("\n");
}

Komentarza wymaga jeszcze funkcja PRINTF. W rzeczywistości jest to makro dostarczane przez moduł vcom, który pozwala na łatwe wypisywanie komunikatów na port szeregowy USART2 (TX: PA2, RX: PA3). Domyślnie jest on skonfigurowany w następujący sposób:

  • BaudRate – 115200
  • WordLength – 8
  • StopBits – 1
  • Parity – None
  • HardwareFlowControl – None

Z makra PRINTF korzysta także driver SX1276, o czym można się przekonać przeglądając plik źródłowy BSP/MLM32L07X01/Phy/sx1276.c. Można je wyłączyć modyfikując odpowiednio zawartość pliku vcom.h.

Po podłączeniu płytki do komputera należy kliknąć prawym przyciskiem myszy na nazwę projektu w drzewie plików po lewej stronie i wybrać opcję Debug As → Ac6 STM32 C/C++ Application aby zaprogramować pamięć mikrokontrolera.

Działanie przykładu jest następujące. Po przyciśnięciu przycisku urządzenie wysyła zdefiniowany w kodzie pakiet danych, co sygnalizuje niebieską diodą. Drugie urządzenie odbiera pakiet, co sygnalizuje zieloną diodą oraz wypisuje zawartość pakietu na port USART2. Jest to bardzo prosty przykład komunikacji za pomocą modemu LoRa SX1276, który pozwala na zapoznanie się z bibliotekami dostarczanymi przez ST.

 

Testy terenowe

Najważniejszą cechą modemów LoRa jest duży zasięg transmisji, który zweryfikowaliśmy w praktyce za pomocą dwóch zestawów B-072Z-LRWAN1. Przedstawione wyniki należy traktować poglądowo, z uwagi na to że zasięg jest uzależniony od wielu czynników zewnętrznych, z których najważniejszymi są:

  • konfiguracja modemu,
  • wysokość zamocowania anten,
  • typ anten,
  • rodzaj i ukształtowanie terenu,
  • warunki atmosferyczne.

Testy zostały przeprowadzone dla dwóch konfiguracji przedstawionych w tabeli 2. Pierwsza z nich zapewnia największy zasięg kosztem przepustowości łącza. W drugim przypadku jest odwrotnie – większa przepustowość kosztem zmniejszonego zasięgu. Komentarza wymaga ustawienie zmiany częstotliwości modulującej na 125 kHz. Mimo, że dokumentacja modemu wskazuje na najmniejszą możliwą wartość 7,8 kHz, to dostarczona przez ST biblioteka nie pozwala na ustawienie wartości mniejszej niż 125 kHz.

Tab. 2. Testowane konfiguracje modemu LoRa

Parametr Konfiguracja 1. Konfiguracja 2.
BW (modulation bandwidth) 125 kHz 500 kHz
SF (spread factor) 12 7
CR (code rate) 4/8 4/8

Jako miejsce do przeprowadzenia testów wybrane zostały następujące obszary różniące się gęstością zabudowy:

  • warszawska Białołęka (teren rzadko zabudowany z niską zabudową),
  • Zalew Zegrzyński (teren otwarty),
  • Stare Miasto w Warszawie (teren gęsto zabudowany).

We wszystkich przypadkach moduły znajdowały się ok. 1,5 m nad ziemią. Wyniki pomiarów zostały zebrane w tabeli 3 oraz na filmach.

Tab. 3. Wyniki uzyskane podczas testów

Miejsce Konfiguracja Odległość RSSI
Białołęka 1 1890 m –120 dBm
2160 m –130 dBm
2 1890 m –120 dBm
2160 m
Zalew Zegrzyński 1 4720 m –127 dBm
8350 m –134 dBm
2 4720 m
8350 m
Stare Miasto w Warszawie 1 408 m –124 dBm
688 m –130 dBm
2 408 m –121 dBm
688 m

Zgodnie z oczekiwaniami, największy zasięg można otrzymać na otwartym terenie z niewielką liczbą przeszkód stojących na drodze sygnału i jest on tym mniejszy im więcej przeszkód znajdujących się pomiędzy nadajnikiem a odbiornikiem.

Wyniki można poprawić umieszczając wyżej anteny lub zmniejszając pasmo modulacji (konieczne jest użycie innej biblioteki do obsługi modemu SX1276 lub napisanie własnego sterownika).

 

Pobór prądu

Drugim istotnym czynnikiem wpływającym na możliwość użycia modemów LoRa w sieciach czujników jest pobór prądu, który bezpośrednio wpływa na czas życia na baterii. Zależy on od konfiguracji modemu i jest różny dla stanów uśpienia, odbioru i transmisji danych. Dla konfiguracji użytych w teście, wartości zmierzone dla odbioru i transmisji wynoszą odpowiednio ok. 11 mA i 32 mA. Należy pamiętać, że jest to wyłącznie prąd pobierany przez sam modem LoRa. Aby oszacować czas życia na baterii należy doliczyć jeszcze prąd pobierany przez mikrokontroler STM32L072CZ i inne elementy znajdujące się na płytce.

 

Podsumowanie

Modemy LoRa są dostępne na rynku od niedawna, jednak dzięki możliwości uzyskania dużego zasięgu podczas transmisji danych przy stosunkowo niewielkim poborze prądu zyskują coraz więcej zwolenników. Są one dobrym rozwiązaniem dla rozległych sieci czujników, w których węzły powinny działać nieprzerwanie przez wiele dni dostarczając danych pomiarowych. Przy ich planowaniu należy jednak pamiętać o czynnikach mogących ograniczyć zasięg, dobierając odpowiednią konfigurację modemów, która będzie miała wpływ na przepustowość sieci.

 

Do pobrania

Tagi: LoRa, STM32