LoRaWAN Demo Project Tutorial
Blog post opisuje tutorial, przedstawiający przykład zastosowania protokołu LoRaWAN w dziedzinie IoT.
Przygotowany program został przetestowany na płytce rozwojowej B-L072Z-LRWAN1, przesyłającej wiadomości do chmury TTN(The Things of Network), wykorzystując w tym celu protokół LoRaWAN.
Jako broker sieci LoRaWAN wykorzystano urządzenie lpnGate. Jego opis jest zamieszczony pod podanym linkiem.
Jak działa projekt demo?
Program wgrany do urządzenia końcowego sieci LoRaWAN B-L072Z-LRWAN1, odpowiada za obsługę przerwań, generowanych poprzez naciśnięcie przycisku USER(niebieski przycisk, znajdujący się na powierzchni modułu). W rezultacie timer ulegał przepełnieniu. Program zawiera 2 procedury obsługi przerwań. Pierwsza odpowiada za obsługę przerwań, generowanych przez naciśnięcie przycisku USER. Z kolei druga procedura obsługuje generowane na skutek przepełnienia sprzętowego timera.
W ramach pierwszej procedury program włącza/wyłącza diodę LED1 i ustawia flagę, umożliwiającą przesłanie do chmury TTN wiadomości, zawierającej kod wygenerowanego przez wciśnięcie przycisku przerwania.
Druga procedura ISR dokonuje zmiany stanu diody LED2, co 2 sekundy i ustawia flagę umożliwiającą przesłanie do TTN wiadomości, zawierającej kod przerwania, wygenerowanego na skutek przepełnienia timera. Opracowany program umożliwia debugowanie komunikacji po sieci LoRaWAN, poprzez wykorzystanie monitora portu szeregowego.
Konfiguracja urządzenia
W pierwszym kroku zaopatrz się w zestaw uruchomieniowy B-L072Z-LRWAN1.
Następnie zdobądź i skonfiguruj bramę LPN, zgodnie z podaną instrukcją.
Dodaj aplikację
W pierwszym kroku przejdź do strony The Things of Network’s i zaloguj się na swoje konto na TTN (jeśli go jeszcze nie masz, zarejestruj je).
W następnym kroku umieść kursor myszy na swoim awatarze i wybierz opcję Console-> Applications.
Jeśli chcesz dodać nowe urządzenie końcowe, kliknij opcję “Add application”. Tam wstaw identyfikator swojej aplikacji.
Rejestracja urządzenia
TTN utworzy nową aplikację. Następnie musisz jeszcze zarejestrować swoje urządzenie. Wybierz opcję Devices->register device. Wprowadź identyfikator urządzenia oraz jego EUI(wartość EUI ustala użytkownik).
TTN powinien wygenerować EUI aplikacji oraz klucz dla nowo zarejestrowanego urządzenia.
Konfiguracja deskryptora TTN
Aby TTN był w stanie odpowiednio przetworzyć otrzymane wiadomości, wysłane z urządzenia końcowego, należy utworzyć funkcję deskryptora komunikatów. Deskryptory TTN muszą być opracowane w języku JavaScript.
Aby skonfigurować funkcję deskryptora, na stronie głównej TTN zaloguj się na swoje konto. Przejdź do opcji Console->Applications. Wybierz swoje urządzenie i wybierz opcję “Payload Formats”.
Wybierz opcję dekodera. W danym polu wprowadź funkcję deskryptora. W przypadku projektu demo, deskryptor ma następujący szablon:
function Decoder(bytes, port) {
// Decode plain text; for testing only
return {
myTestValue: String.fromCharCode.apply(null, bytes)
};
}
Następnie zapisz funkcję. Przetestuj, czy funkcja poprawnie przetwarza odebrane dane. W etykiecie “Payload” wstaw przykładowe dane (ciąg bajtów) i kliknij opcję “Test”. Poniżej powinieneś zobaczyć wynik funkcji.
Przygotuj projekt w Mbed Online Compiler
Pobierz projekt mbed-os-example-lorawan
Projekt demonstracyjny został opracowany w kompilatorze Mbed Online. Daje on swoim użytkownikom nie tylko możliwość programowania kodu aplikacji w oparciu o Mbed OS, ale także jego kompilacji.
Aby skonfigurować i skompilować projekt, przejdź do strony firmy Mbed i zaloguj się na swoje konto (jeśli go jeszcze nie masz, zarejestruj je). Po zalogowaniu się na konto Mbed, wybierz opcję “Compiler”. Powinieneś zostać przekierowany do Mbed Online Compiler.
W obszarze roboczym programu zaznacz katalog “My programs” i wybierz opcję “Import”. W etykiecie “Search” wpisz nazwę przykładowego projektu LoRaWAN, utworzonego przez Mbed OS Group:
mbed-os-example-lorawan
Wybierz wersję tego projektu utworzoną przez “Team mbed-os-examples” i kliknij Enter. Pamiętaj, że musisz zaimportować projekt jako program.
Importuj pliki z repozytorium projektu demo LoRaWAN
Najpierw pobierz i rozpakuj z pliku demo_project.zip, główny kod i pliki konfiguracyjne dla projektu demonstracyjnego LoRaWAN.
Teraz podmień main.cpp i pliki konfiguracyjne (mbed_app.json i pliki umieszczone w katalogu config) z odpowiadającymi im plikami z paczki demo_project.zip. Najpierw usuń poprzednie wersje tych plików z programu mbed-os-example-lorawan. Usuń także niepotrzebny plik nagłówkowy DummySensor.h.
Następnie w obszarze roboczym programu zaznacz projekt mbed-os-example-lorawan i wybierz opcję “Import->Upload”. Załaduj do głównego projektu pliki main.cpp, SX127X_example_config.json oraz mbed_app.json.
Ustaw nazwę importowanego pliku jako „package”. Mbed Online Compiler powinien zaciągnąć do obszaru roboczego nowy program o nazwie “package”, zawierający zaciągnięte wcześniej pliki.
Przenieś każdy plik z programu “package” do odpowiednich lokalizacji programu mbed-os-example-lorawan (pamiętaj, aby plik SX127X_example_config.json umieścić w katalogu config, wewnątrz programu mbed-os-example-lorawan) i usuń już niepotrzebny program “package”.
Skonfiguruj pliki konfiguracyjne dla sieci Lora
W plikach mbed_app.json i SX127X_example_config.json dla elementu „target_overrides”, ustaw odpowiednie wartości następujących pól:
- lora.device-eui
- lora.application-eui
- lora.application-key
Dla danego przykładu urządzenia końcowego należy wstawić następujące wartości tych pól:
"lora.device-eui": "{ 0x07, 0x00, 0xB3, 0x0D, 0x50, 0x7E, 0x0D, 0x00 }", "lora.application-eui": "{ 0x70, 0xB3, 0xD5, 0x7E, 0xD0, 0x02, 0x96, 0x72 }", "lora.application-key": "{ 0x0B, 0x24, 0x21, 0x68, 0xBC, 0x78, 0x95, 0x42, 0x82, 0x62, 0x46, 0x3E, 0xFD, 0x83, 0x7B, 0x92 }"
Skompiluj projekt
Na koniec wybierz platformę urządzenia końcowego (kliknij opcję „No device selected”).
W tym przykładzie powinna to być płytka rozwojowa DISCO-L072-LRWAN1. Jeśli nie została ona wcześniej wybrana, wejdź w opcję „Add Board”.
Nastąpi przekierowanie do następującej strony. Wyszukaj platformę DISCO-L072-LRWAN1 i dodaj ją do kompilatora Mbed Online.
W kompilatorze Mbed Online, kliknij opcję „Compile” na pasku menu. Po udanej kompilacji pobierz odpowiedni plik w formacie .bin.
Uruchom projekt demo LoRaWAN
Na koniec podłącz urządzenie końcowe B-L072Z-LRWAN1 do komputera, przy użyciu złącza USB. W eksploratorze plików, powinieneś zobaczyć urządzenie DIS_L072Z, podłączone do PC. Aby podejrzeć debugowe logi na monitorze szeregowym, sprawdź nazwę podłączonego urządzenia w Terminalu za pomocą następującej komendy:
$ dmesg
Terminal powinien wyświetlić to urządzenie jako ttyACM0:
[ 7337.681261] usb 1-1.3: Product: STM32 STLink [ 7337.681263] usb 1-1.3: Manufacturer: STMicroelectronics [ 7337.681264] usb 1-1.3: SerialNumber: 0665FF353830523457161547 [ 7337.736348] usb-storage 1-1.3:1.1: USB Mass Storage device detected [ 7337.736699] scsi host6: usb-storage 1-1.3:1.1 [ 7337.737115] cdc_acm 1-1.3:1.2: ttyACM0: USB ACM device [ 7338.768014] scsi 6:0:0:0: Direct-Access MBED microcontroller 1.0 PQ: 0 ANSI: 2 [ 7338.768402] sd 6:0:0:0: Attached scsi generic sg2 type 0 [ 7338.769164] sd 6:0:0:0: [sdb] 456 512-byte logical blocks: (233 kB/228 KiB) [ 7338.769776] sd 6:0:0:0: [sdb] Write Protect is off [ 7338.769778] sd 6:0:0:0: [sdb] Mode Sense: 03 00 00 00 [ 7338.770380] sd 6:0:0:0: [sdb] No Caching mode page found [ 7338.770385] sd 6:0:0:0: [sdb] Assuming drive cache: write through [ 7338.792416] sd 6:0:0:0: [sdb] Attached SCSI removable disk [ 8308.981091] TCP: eno1: Driver has suspect GRO implementation, TCP performance may be compromised.
Uruchom monitor portu szeregowego minicom (musisz zainstalować minicom na komputerze) dla podłączonego urządzenia:
$ sudo minicom -b 115200 -o -D /dev/ttyACM0
Następnie zaprogramuj swój zestaw uruchomieniowy za pomocą skompilowanego FW, przenosząc zbudowany plik binarny do katalogu DIS_L072Z. Po kilku sekundach monitor portu szeregowego powinien wyświetlić następujący zbiór komunikatów:
Mbed LoRaWANStack initialized CONFIRMED message retries : 3 Adaptive data rate (ADR) - Enabled Connection - In Progress ... Connection - Successful Timer Overflow Interrupt has been executed. Code: 15, Message: Timer overflow. 2 bytes scheduled for transmission Message Sent to Network Server Timer Overflow Interrupt has been executed. Code: 15, Message: Timer overflow. 2 bytes scheduled for transmission Message Sent to Network Server Timer Overflow Interrupt has been executed. Code: 15, Message: Timer overflow. 2 bytes scheduled for transmission Message Sent to Network Server Timer Overflow Interrupt has been executed. Code: 15, Message: Timer overflow. 2 bytes scheduled for transmission Message Sent to Network Server Timer Overflow Interrupt has been executed. Code: 15, Message: Timer overflow. 2 bytes scheduled for transmission Message Sent to Network Server Timer Overflow Interrupt has been executed. Code: 15, Message: Timer overflow. 2 bytes scheduled for transmission Message Sent to Network Server USER BUTTON Interrupt has been executed. Code: 10, Message: USER BUTTON pressed. 2 bytes scheduled for transmission Message Sent to Network Server USER BUTTON Interrupt has been executed. Code: 10, Message: USER BUTTON pressed. 2 bytes scheduled for transmission Message Sent to Network Server Timer Overflow Interrupt has been executed. Code: 15, Message: Timer overflow. 2 bytes scheduled for transmission
Urządzenie końcowe powinno zmieniać stan diody LED2 co 2 sekundy (w wyniku obsługi przerwań, generowanych w wyniku przepełnienia timera) oraz powinnno zmieniać stan diody LED1, gdy użytkownik naciśnie niebieski przycisk (wynik obsługi przerwania, wyemitowanego na skutek naciśnięcia przycisku USER).
Odczyty w chmurze TTN
Aby zobaczyć dane wysłane przez urządzenie końcowe do TTN, otwórz listę urządzeń Twojej aplikacji, wchodząc w ten link. Wybierz swoje urządzenie i kliknij opcję “Data”. Odczytywane wyniki powinny mieć podobną postać:
Podsumowanie
Przygotowany tutorial przedstawia przykład możliwych zastosowań sieci LoRaWAN, z wykorzystaniem produktu lpnGate. Każdy z klientów firmy LPN Plant Sp. z o.o. może skorzystać z przygotowanego projektu demonstracyjnego LoRaWAN dla swoich celów, takich jak pomiar temperatury, ciśnienia lub przyspieszenia. Jeśli Państwo mają do nas jakieś pytania, prosimy o kontakt z naszą firmą.
Jeśli Państwo są zainteresowani zakupem produktów lpnGate, prosze przejść do strony sklepu firmy LPN Plant.