Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Domowa bramka sieci LoRa i system czujników.

ghost666 13 May 2017 17:47 20568 6
Nazwa.pl
  • Domowa bramka sieci LoRa i system czujników.
    System monitorowania środowiska, oparty o interfejs LoRa IoT składa się z stacji bazowej zbudowanej z wykorzystaniem modułu Arduino Mega z bramką LoRa oraz zdalnych stacji opartych na Arduino Feather, które łączą się z stacją bazową poprzez radiowy interfejs LoRa.

    System pozwala na monitorowanie parametrów środowiskowych w domu i jego bezpośrednim otoczeniu. Wszystkie zbierane dane są dostępne poprzez Internet, a także wysyłane okresowo wiadomości SMS pod zdefiniowany numer. System posiada także możliwość skonfigurowania systemu alertów – w takiej sytuacji wysyłane są alarmowe wiadomość SMS w momencie, gdy któryś z monitorowanych parametrów przekroczy założone granice. Wszystkie zbierane dane składowane są w chmurze, co pozwala na analizę nie tylko aktualnych parametrów, ale także danych historycznych.

    Każdy właściciel domu lub mieszkania oprócz ognia najbardziej boi się wody. Niezależnie czy jest to nagła awaria – na przykład pęknięta rura – czy też powoli sącząca się woda z nieszczelnej instalacji, sytuacja taka może doprowadzić do ogromnych strat, jeśli nie zostanie wykryta dostatecznie szybko. Awarie tego rodzaju mogą być problematyczne zwłaszcza, gdy jesteśmy poza domem, dlatego też stworzono ten system. Jednym z monitorowanych parametrów jest wilgotność powietrza; jej nagły skok pozwala na wykrycie awarii instalacji w domu i albo szybszy powrót albo chociażby zawiadomienie sąsiadów o wystąpieniu awarii. Im szybsza jest nasza reakcja tym straty mniejsze.

    Powolne wycieki wody, spowodowane nieszczelnością instalacji, są dużo bardziej problematyczne. Oprócz tego, że o wiele trudniej je wykryć, to mogą one uszkodzić strukturę budynku czy też doprowadzić do pojawienia się grzybów na ścianach. W identyfikacji tego rodzaju sytuacji opisywany tutaj system jest także bardzo pomocny. Dzięki możliwości logowania danych w długim okresie czasu możliwe jest wyznaczenie okresowych wahań wilgotności w pomieszczeniach – zmiana tego zachowania wskazywać może, że gdzieś w budynku pojawiło się nowe źródło wody – na przykład wyciek z instalacji.

    Dzięki tym wszystkim funkcjom, możliwe jest takie skonfigurowanie alarmów w systemie, że gdy tylko wystąpi jakaś awaria w domu to system poinformuje nas poprzez SMS lub e-mail o jej wystąpieniu – tak w przypadku nagłej awarii związanej np. pęknięciem rury z wodą, jak i w przypadku odchyłek od normalnych wartości wilgotności w mieszkaniu, co wskazywać może na pojawienie się niewielkich przecieków. Dzięki temu możliwe jest monitorowanie sytuacji w domu, bez konieczności korzystania z Internetu czy też regularnego sprawdzania strony w sieci Web. Jeśli cokolwiek się stanie system poinformuje nas SMSem.

    System monitorowania domu LoRa IoT powstał w oparciu o gotowe, dostępne komercyjnie moduły, co znacznie upraszcza jego konstrukcję. Jedynie kilka złącz i przełączników dodanych zostało we własnym zakresie Elementy do konstrukcji tego systemu dostępne są poprzez Adafruit, Digikey czy Sparkfun. Są to standardowe moduły wykorzystywane przez hobbystów, więc ich zakup nie będzie skomplikowany.

    Do montażu urządzenia potrzebna będzie jednak umiejętność lutowania, szczególnie elementów SMD, gdyż konieczne będzie przylutowanie dedykowanych złącz radiowych d płytki Feather.

    Cały system oprogramowany jest w środowisku Arduino. Kody źródłowe dostępne są na stronie projektu, a opis działania programu zawarty poniżej.

    Celem projektu było:
    * Stworzenie domowej bramki IoT opartej o interfejs LoRa
    * Stworzenie interfejsu użytkownika dla projektów opartych na Arduino.
    * Zbadania stosowalności interfejsu LoRa w warunkach domowych.

    Opracowana bramka LoRa jest minimalistycznym urządzeniem, zawierającym w sobie minimalny zestaw sprzętu i funkcji, zapewniający działanie systemu monitorowania parametrów środowiskowych w domu.

    Intencją wykorzystania kompletnego Framework interfejsu użytkownika, jest sprawienie, że wszystkie parametry konfiguracyjne dostępne będą bez konieczności wprowadzania zmian w kodzie czy rekompilowania programu. Dzięki temu zmiany wprowadzane będą poprzez prosty interfejs użytkownika na bramce układu. Do jego obsługi wykorzystane zostaną zaledwie cztery przyciski i prosty wyświetlacz LCD 2x16 znaków. Wyświetlacz ten podaje także aktualne parametry środowiskowe – istnieje sześć trybów ich prezentacji.

    Dane uwierzytelniające do zewnętrznych serwisów (Temboo i Google Drive) przechowywane są w pliku tekstowym zapisanym na karcie SD.

    Obecna wersja oprogramowania na stacji bazowej i stacjach pomiarowych spełnia opisane powyżej wymagania. Wyjątki od opisanych powyżej rozwiązań opisane zostaną w tekście.

    LoRa to bezprzewodowy interfejs komunikacyjny o dużym zasięgu, dedykowany do zastosowań w systemach Internetu Rzeczy. Opracowany został przez firmę Semtech, która zaimplementowało go w produkowanych przez siebie układach scalonych, które dostępne są m.in. w modułach Adafruit Feather. LoRa umożliwia realizację prostej, niezawodnej i oszczędnej energetycznie komunikacji bezprzewodowej dla systemów telemetrii itp. Doskonale sprawdza się w tych układach, gdzie WiFi byłoby nadmiernym obciążeniem. Łącza WiFi osiągają bardzo duże prędkości, ale pobierają także sporo energii do zasilania systemu. LoRa działa w paśmie ISM przy częstotliwości 915 MHz, a WiFi w zakresie 2,4 GHz do 5 GHz, co przekłada się na mniejszą przepustowość danych, ale jednocześnie zwiększa zasięg i niezawodność działania systemu.

    System monitorowania parametrów środowiskowych LoRa IoT, opisany poniżej, składa się z następujących podsystemów:

    * Bramka LoRa IoT – bezprzewodowy hub dla sensorów i bramka do podłączenia ich do Internetu.
    * Bezprzewodowej stacji pomiarowej wewnętrznej, wyposażonej w czujnik wilgotności i termometr.
    * Bezprzewodowej stacji pomiarowej zewnętrznej wyposażonej czujniki wilgotności, ciśnienia i temperatury.

    Bramka systemu zbiera okresowo dane od obu stacji – zewnętrznej i zewnętrznej oraz realizuje szereg dodatkowych funkcji:

    * Synchronizacja czasu z czasem sieciowym
    * Obsługa interfejsu użytkownika – przycisków i LCD 2x16.
    * Obsługa alertów wysyłanych poprzez SMS.
    * Obsługa regularnych monitów SMS o temperaturze i wilgotności.
    * Obsługa strony Web aktualizowanej co 10 minut.
    * Obsługa przechowywania danych w chmurze na Google Drive.
    * Usypianie i wybudzanie stacji pomiarowych.

    Na obecnym stadium rozwoju projektu komunikacja w opisywanym systemie jest jednostronna – stacje pomiarowe jedynie wysyłają dane do stacji bazowej, która sama nie transmituje żadnych danych do nich. Wynika to z faktu, że interfejs LoRa zapewnia – przynajmniej w warunkach domowych – bardzo niezawodną komunikację, więc implementacja dwukierunkowego protokołu transmisji nie była wymagana.

    Stacje pomiarowe wysyłają do stacji bazowej wyniki pomiarów co około 10 minut (robią to asynchronicznie). Transmisje te są bardzo krótkie i zawierają niewiele danych, więc szansa na konflikt – nadejście komunikatów od dwóch stacji pomiarowych w tym samym momencie jest minimalna. Dodatkowo w stację bazową wbudowano konfigurowalne zabezpieczenie – jeśli, po N dziesięciominutowych okresach nie nadejdzie pomiar od danej stacji (gdzie N jest konfigurowalne przez użytkownika) to system wysyła SMSa z informację, iż utracił kontakt z jedną ze stacji pomiarowych.

    Informacje dotyczące stanu baterii (w przypadku stacji zewnętrznej, która zasilana jest bateryjnie) także są przesyłane do stacji bazowej, jeśli stan naładowania baterii będzie zbyt niski. Dodatkowo, z poziomu interfejsu użytkownika stacji bazowej, dostępne są informacje na temat siły sygnału radiowego z każdej stacji bazowych, co pozwala na określenie jak dobrze funkcjonuje dane łącze.

    Krok 1: Bramka sieci LoRa i stacja bazowa

    Domowa bramka sieci LoRa i system czujników.


    Lista potrzebnych elementów do stacji bazowej:

    1 x Moduł Adfaruit z Arduino Mega 2560 R3
    1 x Shield z Ethernetem dla Arduino z układem W5500.
    1 x Interfejsem I2C / SPI dla LCD.
    1 x Płytka prototypowa Adafruit PID 1609.
    1 x Płytka do modułu transceivera LoRa RFM95W.
    1 x Złącze antenowe uFL SMT.
    1 x Przejściówka z SMA to uFL/u.FL/IPX/IPEX RF.
    1 x Antena 916 MHz – półfalowa z złączem SMA.
    1 X Wyświetlacz LCD 2X16 znaków.
    4 x Przycisk SPDT.
    4 x Plastikowy element przycisku.
    2 x Grove – Uniwersalny 4 pinowy kabel o długości 20 cm.
    1 x Zasilacz wtyczkowy 9 V DC 650 mA.
    1 x Karta microSD z adapterem. Pojemność 8 GB.
    1 x Obudowa, QRP Labs
    2 x Dedykowany, wykonany na zamówienie panel (tył, przód).
    1 x Kabel Ethernetowy.

    Oprócz tego potrzebne będzie nam trochę pinów, kabelka, przekładki i śrubki, nakrętki i podkładki do zmontowania wszystkiego w całość.

    Ethernet Shield

    Shield z możliwością podłączenia do sieci Ethernet wpięty jest w moduł z Arduino Mega.

    LCD

    Jako LCD wykorzystano wyświetlacz 2x16 znaków, podłączony z pomocą modułu Adafruit I2C/SPI, który umożliwia podłączenie go do Arduino Mega poprzez I2C.

    Do modułu LCD przylutować należy zestaw pinów (żeńskich), a do modułu I2C/SPI analogicznie męskich. Pozwoli to na połączenie obu elementów ze sobą. I2C wyprowadzone jest poprzez konektor Grove na module Ethernetowym – znajdziemy tam oprócz linii SDA i SCL także +5 V i GND (masa). Przygotowujemy stosowny kabel, z jednej strony zakończony wtyczka Grove, a z drugiej strony przylutowany do modułu podłączonego do wyświetlacza LCD. Kable lutujemy w następujący sposób:

    Arduino <--> LCD
    GND (czarny przewód) <--> GND
    +5V (czerwony przewód) <--> +5V
    SDA (biały przewód) <--> DAT
    SCL (żółty przewód) <--> CLK

    Transceiver RFM95W LoRa

    Więcej informacji o tym module możemy znaleźć a https://www.adafruit.com/products/3072" target="_blank" rel="noopener nofollow ugc" title="http:// https://www.adafruit.com/products/3072" class="postlink inline-block ">stronie Adafruit. Zwłaszcza istotne są dokładne informacje na temat lutowania złącza anteny w standardzie uFL. Do tego konektora na płytce transceivera dołączamy kabel RF, który z drugiej strony zakończony jest panelowym gniazdem SMA. Zostanie ono zamontowane w obudowie stacji bazowej. Do wyprowadzonego na tylni panel gniazda podłączymy później antenę sieci LoRa.

    Komunikacja pomiędzy modułem RFM95W a Arduino zrealizowana jest poprzez SPI. Płytka z wyprowadzeniami z RFM95W zamontowana jest na płytce prototypowej Adafruit Perma-Proto poprzez gniazdo wlutowane na pcb. Pasuje one do pinów na module RFM95W.

    Następnie połączyć trzeba wyjście z transceivera LoRa do Arduino, lutując odpowiednio przewody na płytce prototypowej, aby dało się dołączyć je w odpowiednie piny modułu Arduino. Połączenia zrealizowane są w sposób następujący:

    Arduino <--> RFM95W
    GND <--> GND
    +5 V <--> VIN
    Cyfrowy pin 2 (przerwanie 0) <--> G0 (przerwanie z RFMW9)
    Cyfrowy pin 52 (SPI SCK) <--> SCK
    Cyfrowy pin 50 (SPI MISO) <--> MISO
    Cyfrowy pin 51 (SPI MOSI) <--> MOSI
    Cyfrowy pin 8 <--> CS (Chip Select)
    Cyfrowy pin 9 <--> RST (Reset)

    Przyciski do sterowania stacją bazową

    Bramka sieci LoRa IoT wyposażona jest w cztery następujące przyciski:

    FUNC – Wejście i wyjście w poszczególne funkcje stacji bazowej
    ENTER – Akceptacja ustawionego parametru
    UP – Inkrementacja wartości parametru
    DOWN – Dekrementacja wartości parametru.

    Warto zastosować w tym miejscu dobrej jakości przyciski, aby naciskanie ich było proste i czytelne dla użytkownika. Zastosowanie taniego substytutu zaowocuje utrudnieniem obsługi interfejsu w bramce LoRa.

    Przyciski te mają trzy wyprowadzenia: wspólne (c), normalnie otwarte (no) i normalnie zamknięte (nc). Wspólne terminale wszystkich przycisków podłączone są do masy modułu Arduino poprzez kabel Grove, podłączony do portu UART na płytce z modułem Ethernetowym. Pozostałe przewody w tym kablu zostały odcięte – tylko masa zostanie wykorzystana.

    Terminale (no) nie są połączone, natomiast terminale (nc) podłączone są do przycisków w następujący sposób:

    Arduino <--> Przycisk
    Cyfrowy pin 19 <--> FUNC
    Cyfrowy pin 18 <--> ENTER
    Cyfrowy pin 17 <--> DOWN
    Cyfrowy pin 16 <--> UP

    Teraz można już zaprogramować Arduino kodem dostępnym na stronie projektu. Interfejs użytkownika dostępny z poziomu bramki opisany jest poniżej.

    Bramka, po załadowaniu oprogramowania (patrz niżej) powinna bez problemu się uruchomić.

    Krok 2: Wewnętrzna stacja pomiarowa

    Domowa bramka sieci LoRa i system czujników.


    Do zestawienia stacji pomiarowej, która pracuje w pomieszczeniu potrzebne będą:

    1 x Moduł Feather 32u4 RFM95 - 868- lub 915-MHz
    1 x 12 i 16 pinowe złącza żeńskie
    1 x Płytka prototypowa FeatherWing
    1 x Płytka z sensorem wilgotności i temperatury SHT31-D
    1 x 4 pinowe złącza żeńskie
    1 x Kabel USB A – micro USB
    1 x Zasilacz z wtyczką USB 5 V 1 A

    Dodatkowo potrzebne będą kabelki do wykonania połączeń między modułami na płytce prototypowej.

    Na stronie Adafruit znajdziemy dokładne instrukcje:

    1. Polutowania pinów oraz anteny modułu Feather RFM95 - https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/" target="_blank" rel="noopener nofollow ugc" title="http:// https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/" class="postlink inline-block ">link
    2. Polutowania pinów do modułu SHT31-D – https://learn.adafruit.com/adafruit-sht31-d-t...dity-sensor-breakout/wiring-and-test?view=all " target="_blank" rel="noopener nofollow ugc" title="http:// https://learn.adafruit.com/adafruit-sht31-d-t...dity-sensor-breakout/wiring-and-test?view=all " class="postlink inline-block ">link
    3. Przylutowania pinów do płytki prototypowej FeatherWing – https://learn.adafruit.com/featherwing-proto-and-doubler" target="_blank" rel="noopener nofollow ugc" title="http:// https://learn.adafruit.com/featherwing-proto-and-doubler" class="postlink inline-block ">link

    Czteropinowe złącze na płytce FeatherWing lutujemy w sposób pokazany na zdjęciu powyżej tak, że piny VIN i GND modułu radiowego podłączone są do, odpowiednio, 3,3 V i GND na płytce prototypowej. Następnie z pomocą cienkiego kabelka musimy na płytce tej wykonać następujące połączenia:

    FeatherWing <--> SHT31-D
    SDA <--> SDA
    SCL <--> SCL

    Piny SDA i SCL są oznaczone na płytce prototypowej w prawym, górnym rogu, gdy ułożona jest ona jak na zdjęciu powyżej. Następnie możemy podłączyć płytkę prototypową do modułu Feather.

    Po zmontowaniu modułu możemy zaprogramować stację programem dostępnym na stronie projektu, który ładujemy poprzez kabel USB. Następnie, po podłączeniu zasilania, system powinien uruchomić się automatycznie i co 10 minut wysyłać do stacji bazowej LoRa IoT wyniki pomiarów.

    Krok 3: Zewnętrzna stacja pomiarowa

    Domowa bramka sieci LoRa i system czujników. Domowa bramka sieci LoRa i system czujników. Domowa bramka sieci LoRa i system czujników. Domowa bramka sieci LoRa i system czujników.


    Do złożenia stacji pomiarowej, która pracować będzie na dworze potrzebujemy:

    1 x Moduł Feather 32u4 RFM95
    1 x Płytkę prototypową FeatherWing Doubler
    1 x Złącze antenowe uFL SMT
    1 x Adapter z gniazda SMA na uFL/u.FL/IPX/IPEX
    1 x Antenę półfalową na 916 MHz z wtyczką SMA
    1 x Płytkę uniwersalną
    1 x Niewielką, plastikową obudowę w wykonaniu wodoodpornym
    1 x Baterię litowo-polimerową o pojemności 2000 mAh
    1 x Ładowarkę z modułem MPPT dla ogniw fotowoltaicznych
    1 x 2 pinowy kabel JST
    1 x Moduł fotowoltaiczny o mocy 2 W Sparkfun SKU PRT-13781
    1 x Termometr oparty o DS18B20 w wykonaniu wodoodpornym - Sparkfun SKU SEN-11050
    1 x Płytkę BME280 dla sensorów pogodowych
    2 x Terminale śrubowe o rastrze 3,5 mm.
    1 x Moduł Davis Instruments Solar Radiation Shield 7714, Amazon
    1 x Kawałek Lexanu lub Plexi

    Oprócz tego potrzebne będzie trochę goldpinów, kabelków, podkładek i śrub z nakrętkami oraz silikon do uszczelnienia obudowy,

    Pierwszą część elementów – baterię, przetwornicę dla modułu PV, płytkę prototypową FeatherWing Doubler i moduł Feather 32u4 RFM95 LoRa Radio montujemy w plastikowej obudowie urządzenia.

    Następnie płytkę uniwersalną i sensor BME280 montujemy na module Davis Instruments Solar Radiation Shield. Panele fotowoltaiczne zamontować należy na wierzchniej stronie tego modułu, jak pokazano na zdjęciach powyżej,

    Autor projektu testował różne kombinacje sensorów ciśnienia, temperatury i wilgotności, BME280 okazał się być najbardziej niezawodny i dawał pomiary spójne z danymi pogodowymi dla danego miejsca. Sensor ten posiada zintegrowany termometr, higrometr i barometr. Testy układu trwały kilka miesięcy, wliczając w to zimę. Przez cały ten czas BME280 nie sprawiał żadnych problemów.

    Obudowa i zasilacz solarny

    Montaż całości systemu zaczynamy od docięcia pleksiglasu do wymiarów mniejszej z obudów. Następnie musimy wywiercić w nim otwory o rozstawie takim samym jak w obudowie, przez którymi przykręcimy go do obudowy.

    Po zamontowaniu w obudowie elektroniki możemy określić lokalizację gniazda antenowego w module. Możemy wywiercić stosowny otwór w obudowie, a zaraz obok niego dwa kolejne – jeden dla podłączenia modułu BME280 a drugi dla podłączenia sensora temperatury opartego na DS18B20.

    Następnie musimy wywiercić w pleksi kolejne otwory dla modułu Sunny Buddy, który ulokowany musi być tak, aby jego otwory montażowe zgadzały się z otworami na płytce prototypowej FeatherWing Doubler, jak na zdjęciu powyżej.

    Zgodnie z https://learn.sparkfun.com/tutorials/sunny-buddy-solar-charger-v13-hookup-guide-" target="_blank" rel="noopener nofollow ugc" title="http:// https://learn.sparkfun.com/tutorials/sunny-buddy-solar-charger-v13-hookup-guide-" class="postlink inline-block ">instrukcją podłączenia lutujemy na module przetwornicy konektory śrubowe w miejscach oznaczonych „Solar In” oraz „Load”. Następnie możemy zamontować przetwornicę do pleksi korzystając z dostatecznie długich śrub, by możliwy był także montaż płytki prototypowej wraz z odpowiednio długimi rozdzielaczami.

    Po zmontowaniu tej części urządzenia w obudowie montujemy gniazdo SMA na stosownym adapterze i umieszczamy w obudowie baterię. Kabel antenowy przebiegać będzie obok Sunny Buddy do transceivera LoRa.

    Możemy teraz zamontować wycięte pleksi w obudowie wraz z pozostałymi modułami.

    Do złącza JST oznaczonego „BATT” na module przetwornicy solarnej podłączamy baterię. Kable od modułu fotowoltaicznego podłączamy do wcześniej wlutowanego konektora śrubowego na module przetwornicy pamiętając o odpowiedniej polaryzacji wejścia. Do złącza „Load” na Sunny Buddy podłączamy kabel ze złączem JST-2 pamiętając, aby czerwony kabelek szedł do plusa, a czarny do minusa w gnieździe.

    Na tym etapie moduł jest gotowy do zamontowania płytki prototypowej i transceivera LoRa.

    Montaż transceivera radiowego i płytki prototypowej

    Gniazdo uFL dla anteny lutujemy do modułu 32u4 RFM95 https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/antenna-options" target="_blank" rel="noopener nofollow ugc" title="http:// https://learn.adafruit.com/adafruit-feather-32u4-radio-with-lora-radio-module/antenna-options" class="postlink inline-block ">zgodnie z instrukcją.

    Żeńskie gniazda, które dostarczone są z płytką prototypową FeatherWing Doubler montujemy na jednej połowie płytki, tak jak pokazano na zdjęciu powyżej. Druga połowa pozostanie niewykorzystana. Następnie na płytce lutujemy konektory, tak jak pokazano na zdjęciu, aby podłączyć zasilacz (3,3 V oraz GND) i sygnały I2C – SDA oraz SCL – do gniazda dla modułu BME280.

    Dalej lutujemy na płytce prototypowej kolejne złącze, dedykowane dla DS18B20. Do złącza dla tego sensora podłączamy zasilanie (3,3 V i GND) oraz wyjście z cyfrowego pinu numer 5 (to będzie nasz interfejs 1-Wire). Kabel od sensora przekładamy przez przygotowany wcześniej otwór w obudowie i lutujemy do niego złącze, które wepniemy w przygotowane na płytce prototypowej gniazdko.

    Finalnie możemy delikatnie wpiąć w gniazdo antenowe adapter, którego drugą stronę wkręcamy w obudowę, aby móc przypiąć zewnętrzną antenę.

    Montaż tego modułu finalizujemy wpinając płytkę prototypowa w moduł Sunny Buddy i montując ją koniecznie z wykorzystaniem dystansów, tak aby komponenty nie obu modułów nie stykały się ze sobą.

    Teraz możemy wgrać na płytkę oprogramowanie. Gdy już to zrobimy możemy wpiąć moduł Feather do płytki prototypowej. Nie podłączajmy jeszcze na tym etapie kabla z złączem JST z wyjścia „Load” modułu Sunny Buddy. Później dołączymy ten kabel do portu, gdzie normalnie w moduł Feather wpięta jest bateria.

    Po zakończonym montażu uszczelniamy otwory na kable w obudowie silikonem. Dzięki temu obudowa będzie szczelna.

    Shield Solar Radiation

    Postępujmy zgodnie z http://www.davisnet.com/product_documents/weather/manuals/07395-093_IM_07714.pdf" target="_blank" rel="noopener nofollow ugc" title="http:// http://www.davisnet.com/product_documents/weather/manuals/07395-093_IM_07714.pdf" class="postlink inline-block ">instrukcją montażu tego modułu. Zainstalujmy następnie ten moduł tak, jak pokazano to na fotografii powyżej. Na https://learn.adafruit.com/adafruit-bme280-hu...pressure-temperature-sensor-breakout/assembly" target="_blank" rel="noopener nofollow ugc" title="http:// https://learn.adafruit.com/adafruit-bme280-hu...pressure-temperature-sensor-breakout/assembly" class="postlink inline-block ">stronie Adafruit znajdziemy instrukcje połączenia tego moduły z BME280. Następnie przylutujmy do płytki prototypowej złącze kątowe.

    Korzystając z pokazanych wyżej zdjęć połączmy ze sobą oba moduły z wykorzystaniem płytki prototypowej. Wykorzystując kawałki kabelka połączmy wyjścia z BME280 (VIN, GND, SCK oraz SDI) do gniazda na płytce prototypowe, jakie przed chwilą przylutowaliśmy. Następnie dołączamy do niego wyprowadzenia z modułu FeatherWing Doubler w następujący sposób:

    3,3 V – VIN
    GND – GND
    SDA – SDI
    SCL – SCK

    Otwory montażowe płytki prototypowej Adafruit mają taki sam rozstaw jak shield dedykowany do monitorowania nasłonecznienia. Dzięki temu możliwe jest proste połączenie wszystkiego w całość kilkoma śrubkami.

    Na zdjęciu powyżej widoczny jest jeszcze jeden rządek żeńskich pinów. Wykorzystywane były one podczas wstępnych eksperymentów z układem, mających na celu wyłonienie najlepszego sensora – nie są one potrzebne do normalnej pracy układu.

    Następnie docinamy kawałek pleksi, tak jak pokazano to na zdjęciu – docięty fragment powinien być szerokości panelu fotowoltaicznego, ale na tyle od niego dłuższy, aby umożliwić przykręcenie go wraz z panelem do odpowiedniego shielda. Po zamontowaniu przygotowanego w ten sposób modułu będzie on trochę pochylony, dzięki czemu lepiej będzie zbierał światło słoneczne w ciągu dnia.

    W pleksi wiercimy otwory do zamontowania panelu fotowoltaicznego oraz dedykowanego do niego shielda i skręcamy wszystko w całość, jak na pokazanym powyżej zdjęciu.

    Na tym etapie podłączyć możemy do modułu Sunny Buddy resztę systemu do konektora „Load”. Kabel z złączem JST podłączamy do wejścia baterii modułu Feather. Stacja pogodowa powinna od razu się włączyć i zacząć nadawanie – co około 10 minut powinna przesyłać raport z zmierzonymi parametrami do bramki sieci LoRa w naszym systemie. Tak zmontowana stacja pomiarowa działa u autora projektu od października 2016 – bezawaryjne przetrwała zimę.

    Krok 4: Interfejs użytkownika stacji bazowe LoRa IoT

    Domowa bramka sieci LoRa i system czujników.


    Menu wyświetlane na ekranie LCD stacji bazowej prezentuje prosty interfejs użytkownika sterowany czterema przyciskami, jakie zamontowaliśmy w nim wcześniej. Menu to pozwala na proste dodawanie lub odejmowanie funkcji z systemu.

    Interfejs obsługiwany jest czterema przyciskami: Func, Enter, Up oraz Down. Dokładne działanie interfejsu użytkownika zawarte jest w dokumentacji w plikach PDF do pobrania na stronie projektu.

    Interfejs wyposażony jest w szereg opcji:

    1. Wyłączanie i włączanie podświetlenia wyświetlacza LCD.

    Służy do wyłączania podświetlenia ekranu LCD. Po jego wyłączeniu wystarczy nacisnąć klawisz Func, aby podświetlenie zostało włączone ponownie.

    2. Konfiguracja trybu wyświetlania.

    Konfiguruje w jaki sposób dane wyświetlane są w drugim wierszu wyświetlacza. Dostępne są trzy tryby pracy, spośród których każdy może być skonfigurowany do prezentacji temperatury lub wilgotności , co razem daje sześć możliwości prezentacji danych.

    Na ekranie prezentowane mogą być najświeższe dane ze stacji, która ostatnio wysłała raport, dane tylko z jednej stacji lub na zmianę z obu.

    3. Wyświetlanie RSSI

    RSSI to wskaźnik mocy sygnału. Pozwala na wyświetlenie siły sygnału odbieranego przez transceiver LoRa z każdej ze stacji. Po liście stacji przewijamy klawiszami Up oraz Down.

    4. Wyświetlanie stanu baterii

    Wyświetla napięcie baterii – napięcie zasilania każdego z nadajników 32u4 RFM95 w naszej sieci LoRa. Po liście stacji przewijamy się klawiszami Up oraz Down.

    5. Ustawianie alarmów.

    Funkcja ta pozwala na włączanie i wyłączanie alarmów i konfiguracja ich poziomu. W obecnej wersji softu dostępne są alarmy związane z wysoką wilgotnością, niskim stanem baterii i utratą kontaktu ze stacją.

    6. Ustawianie poziomu alarmowego wilgotności.

    Funkcja ta pozwala na konfigurację alarmowego poziomu wilgotności dla każdej ze stacji z osobna.

    7. Ustawianie ilości stacji pomiarowych.

    Domyślnie system startuje z jedną aktywną stacją. Maksymalnie do bramki podłączonych może być dziesięć niezależnych stacji pomiarowych. Liczba stacji musi być skonfigurowana zanim rozpoczniemy korzystanie z kolejnej opcji – funkcji nadawania stacjom unikalnych nazw.

    8. Ustawianie nazw stacji.

    Pozwala na edytowanie nazw stacji. Nazwa może mieć do dziewięciu znaków.

    9. Ustawianie czasu – zimowy/letni.

    Pozwala na ustawienie czy zmiana czasu z zimowego na letni i odwrotnie jest włączona czy nie.

    10. Ustawienie strefy czasowej.

    Pozwala na konfigurację naszej strefy czasowej. Identyfikowanej głównym miastem, jakie znajduje się w danej strefie.

    11. Ustawienie offsetu kalibracji czujnika ciśnienia.

    Pozwala na konfigurację stałego offsetu ciśnienia, związanego z wysokością na jakiej znajduje się stacja pomiarowa. Skonfigurujmy go tak, aby wartości ciśnienia były takie same jak w danych dostępnych na portalach meteorologicznych w naszym rejonie.

    12. Wybór jednostek temperatury.

    Pozwala na wybór w jakich jednostkach podawana jest temperatura: stopniach Celsjusza czy Fahrenheitach.

    Krok 5: Powiadomienia i alarmy przez SMS
    Domowa bramka sieci LoRa i system czujników. Domowa bramka sieci LoRa i system czujników. Domowa bramka sieci LoRa i system czujników.


    Obrazki powyżej pokazują powiadomienia i alarmy wysyłane z pomoc wiadomości tekstowych (SMS).

    Powiadomienia wysyłane są poprzez SMS co około godzinę. Stacja bazowa sieci LoRa skonfigurowana jest aby wysyłać SMS na wskazany numer pół godziny po każdej równej godzinie. W 160 znakach można zmieścić dane z czterech stacji pomiarowych (temperatura i ciśnienie).

    Zawartość powiadomienia zależna jest od zawartości funkcji sendStatus() w oprogramowaniu modułu Temboo w kodzie programu stacji bazowej.

    Alarm wysyłany jest poprzez SMS gdy wybrany parametr przekroczy zaprogramowany próg. Poziomy alarmów ustawiane są dla każdej stacji z osobna. Format SMSa zdefiniowany jest funkcją sendAlert() w oprogramowaniu bramki.

    Wiadomości SMS wysyłane są poprzez bramkę e-mail do SMS danego operatora. W przypadku głównych amerykańskich operatorów telefonii komórkowej adres e-mail skonfigurowane są następująco:

    AT&T: [10 cyfrowy numer telefonu]@txt.att.net
    Sprint: [10 cyfrowy numer telefonu]@messaging.sprintpcs.com
    T-Mobile: [10 cyfrowy numer telefonu]@tmomail.net
    Verizon: [10 cyfrowy numer telefonu]@vtext.com

    Wysłanie e-maila na podany adres spowoduje, że użytkownik danego 10 cyfrowego numeru telefonu otrzyma wiadomość SMS. Adresy e-mail dla naszego operatora mogą być znalezione w Internecie. Numer telefonu przechowywany jest na karcie SD w systemie.

    Aby wysyłać z bramki e-maile konieczne jest konto na Temboo i Gmailowy adres pocztowy. Na stronie Google konfigurujemy e-mail praz Google Drive, także wykorzystywany przez system (patrz niżej). Następnie na stronie Temboo konfigurujemy konto – przez 30 dni konto jest darmowe, potem musimy ponosić pewną niewielką opłatę.

    Na Temboo konfigurujemy Google Gmail SendEmail Choreo, pozwalające na wysyłanie wiadomości pocztowych poprzez Gmaila. Dane uwierzytelniające, do logowania się do usługi Temboo zapisywane są w pliku na karcie SD.

    Krok 6: Przechowywanie danych w chmurze

    Domowa bramka sieci LoRa i system czujników.


    Na obrazku powyżej widać w jaki sposób gromadzone są w arkuszu kalkulacyjnym na Google Drive dane zbierane przez poszczególne moduły pomiarowe. Dane są przesyłane z stacji bazowej do Google Drive co godzinę, około dwóch minut po każdej pełnej godzinie.

    W pierwszej kolumnie znajduje się godzina o której przesłano dany wpis. Jeśli jest to północ, to godzina zastępowana jest datą. Zawartość dalszych kolumn w Google Sheet definiowana jest zawartością funkcji spreadsheetUpdate() w odzie programu związanym z funkcjami Temboo. Jeśli chcemy zapisywać dane z większej liczby stacji pomiarowych lub w jakikolwiek zmodyfikować format przechowywanych danych to właśnie w tym fragmencie kodu.

    Do przesyłania danych do Google Drive z naszej stacji bazowej LoRa IoT potrzebne jest konto Temboo. Tak jak napisano powyżej w pierwszej kolejności konfigurujemy konto Google, a następnie zakładamy konto Temboo i konfigurujemy je. Dane weryfikacyjne do konta uzyskamy tworząc arkusz Google pod nazwą AppendValuesChoreo. Więcej informacji o uwierzytelnianiu znajdziemy w dalszej części tekstu.

    Krok 7: Webowy panel aplikacji

    Domowa bramka sieci LoRa i system czujników.


    Obraz powyżej pokazuje panel AdafruitIO, pokazujący w czasie rzeczywistym stan naszej instalacji i wyniki pomiarów. Dane prezentowane w sieci Web aktualizowane są co trzy minuty.

    W oprogramowaniu dla bramki LoRa IoT zawarto klient systemu kolejkowania MQTT firmy Adafruit. Klient ten publikuje strumienie danych poprzez AdafruitIO, które pełni rolę Brokera zakolejkowanych informacji. Każdy strumień danych – feed – odpowiedzialny jest za jeden parametr z jednego urządzenia, na przykład temperatura z zewnętrznego sensora. Adafruit dostarcza odpowiednie narzędzia do stworzenia strony Web, wyświetlającej te dane z konfigurowalny sposób.

    Adafruit opublikowało bardzo dobry tuto rial opisujący tworzenie konta Adafruit i konfiguracji strumieni danych i ich wyświetlania na AdafruitIO. System obecnie znajduje się w fazie betatestów i ogranicza liczbę strumieni danych do dziesięciu.

    W programie bramki LoRa naszego systemu dane do logowania – nazwa użytkownika i hasło – zapisane są w pliku AIO_Account.h:

    Code: text
    Log in, to see the code


    Po zmianie tych danych trzeba skompilować ponownie program dla bramki i załadować go do systemu.

    W kolejnych wersjach oprogramowania dla braki LoRa IoT autor planuje przechowywać powyższe dane wraz z danymi do logowania do usług Google i Temboo na karcie SD, dzięki czemu rekompilacj źródeł będzie zbędna.

    Obecnie AdafruitIO nie działa idealnie stabilnie – połączenie zrywa się po około 24..48h pracy i nie jest możliwe jest zresetowanie z poziomu urządzenia. Ale, tak jak napisano powyżej, system ten znajduje się dopiero w fazie betatestów. Nie ma to wpływu na działanie innych funkcji bramki LoRa.

    Autor planuje w przyszłych wersjach softu wbudowanie serwera Web w samo urządzenie, dzięki czemu strona prezentowana będzie bez konieczności wykorzystywania systemu kolejkowania MQTT i połączenia z AdafruitIO. Realizacja tego zadania – tworzenie strony HTML5 z JavaScriptem – powinno być w zasięgu możliwości Arduino Mega.

    Krok 8: Oprogramowanie bramki LoRa IoT

    Kod źródłowy bramki dostępny jest na stronie projektu. Jest ono napisane w stylu raczej proceduralnym i ma dużo komentarzy, co powinno ułatwić jego edycję i zrozumienie. Repozytorium z całym softem pobrać można też z Githuba.

    W obecnej wersji jedyną konieczną do wprowadzenia przez użytkownika zmianą jest dodanie danych logowania w pliku AIO_Account.h, jak opisano powyżej. Wszystkie inne opcje konfiguruje się w systemie poprzez interfejs użytkownika bramki, a dane uwierzytelniania do logowania do Google i Temboo zawarte są na karcie SD.

    Poniżej znajdziemy ogólny opis kodu źródłowego i tego co w nim zawarto.

    Setup

    Kod zawarty w tej części inicjalizuje poszczególne piny Arduino do komunikacji z systemami w bramce, inicjalizuje kartę SD, LCD i uruchamia sekwencję inicjalizacji poszczególnych peryferiów w systemie.

    eepromRead()

    Przy pierwszym uruchomieniu bramki system zapisuje do pamięci EEPROM domyślne ustawienia, przy każdym kolejnym uruchomieniu są one odczytywane z tej pamięci. Można je zmieniać z poziomu interfejsu użytkownika. O tym czy dane zostały odczytane z Arduino czy wgrano domyślne poinformuje stosowny komunikat na wyświetlaczu LCD.

    RFM95Initialize()

    Procedura ta wykonuje twardy reset transceivera LoRa i następnie inicjalizuje go konfigurując do pracy z 915 MHz z mocą nadawania +23 dBm (jakkolwiek Tx nie jest obecnie wykorzystywany przez bramkę). W przyszłych wersjach oprogramowania częstotliwość nadawania i moc transceivera ustawiana będzie poprzez interfejs użytkownika bramki.

    ethernetInitialize()

    Procedura inicjalizująca połączenie z siecią poprzez Ethernet. System będzie działał jako klient DHCP, więc to router powinien nadać IP bramce, która wyświetli go na LCD.

    readGatewayData()

    Odczytuje dane do logowania w usługach Temboo oraz Google z karty SD.

    sendStatus()

    Wysyła SMSa z powiadomieniem zawierającym puste pola danych – pozwala na sprawdzenie czy uwierzytelnianie w usługach Temboo i Gmail działa.

    spreadsheetUpdate()

    Aktualizuje zawartość arkuszu Google w usłudze Drive samymi zerami, co pozwala na weryfikację czy uwierzytelnianie w usługach Temboo i Google Drive działa poprawnie

    AIOconnect()

    Łączy się z brokerem AdafruitIO MQTT, co umożliwia weryfikację czy uwierzytelnianie w tej usłudze działa poprawnie.

    Główna pętla programu

    Główna pętla programu – loop() – wykonuje sekwencyjnie następujące działania:

    W pierwszej kolejności sprawdzane jest, czy przycisk Func został naciśnięty, jeśli tak, to wykonuje się Function(), która wykonuje procedury związane z interfejsem użytkownika na LCD bramki. Następnie program uruchamia funkcję systemTimeUpdate(), która aktualizuje czas systemowy; jeśli od poprzedniej iteracji pętli programu minęła co najmniej sekunda (tzn. licznik sekund zwiększył się) to program wykonuje następujące operacje:

    Sprawdza, czy liczba sekund równa jest skonfigurowanej chwili w której wykonywane są – co minutę – zdefiniowane operacje. Póki co zdefiniowane są dwie takie operacje – w czasie zero sekund każdej minuty system pinga brokera danych Adafruit MQTT, a w 50 sekundzie każdej minuty aktualizuje drugą linię wyświetlacza, zgodnie z tym co zapisano w jego konfiguracji.

    W następnej kolejności uruchamiane są procedury, które powtarzają się co dłuższy czas:

    Co 10 minut system publikuje dane w strumieniu AdafruitIO oraz sprawdza, czy nie ma konieczności wysłania predefiniowanego SMSa alarmowego.

    Co godzinę, dwie minuty po pełnej godzinie, wysyłana jest aktualizacja danych do Google Drive. Trzy minuty po pełnej godzinie system aktualizuje swój czas korzystając z Network Timing Protocol (NTP). Cztery minuty po pełnej godzinie układ sprawdza połączenie z Adafruit MQTT – jeśli nie działa, to próbuje się ponownie połączyć z tą usługą.

    Pół godziny po pełnej godzinie wysyłane są SMSy z powiadomieniami, które zawierają informacje dotyczące pomiarów etc. 40 minut po pełnej godzinie system re inicjalizuje system radiowy LoRa. Jest to wymagane faktem, że w ciągu tak długiej pracy transceivery LoRa mogą się wieszać etc, a re inicjalizacja ich co godzinę, w stałej i kontrolowanej porze, sprawia, że problem tego typu nie występuje.

    Po wykonaniu cyklicznych operacji system sprawdza, czy transceiver LoRa otrzymał jakieś pakiety danych od stacji pomiarowych, jeśli tak, to przystępuje do ich obróbki i aktualizuje dane wyświetlane na ekranie LCD w drugiej linii w trybie prezentacji najnowszego pomiaru.

    Obsługa przerwań

    Bramka LoRa wykorzystuje jedno przerwanie, które związane jest ciśnięciem przycisku Func w interfejsie użytkownika. Dzięki emu, w momencie gdy naciśnięty zostanie przycisk sterujący menu, to układ przerwie obecnie realizowaną funkcję i zrealizuje funkcje związane obsługą działania interfejsu użytkownika. Przerwanie zostało tak skonfigurowane, że w momencie uruchomienia funkcji interfejsu użytkownika zostanie ono wyłączone.

    Po powrocie z przerwania system uruchamia NTP, które pozwala na aktualizację czasu systemowego do aktualnego,

    Funkcje sieci radiowej RFM95W

    getRadioPacket()

    Procedura uruchamiana gdy radio LoRa w sieci bazowej odbierze pakiet danych z zewnętrznej stacji. Procedura ta dopisuje do stosownej macierzy siłę sygnału i czas nadejścia pakietu danych i oczywiście go odczytuje.

    checkAlerts()

    Procedura uruchamiana w głównej pętli programu co dziesięć minut. Jeśli wystąpi którakolwiek z zdefiniowanych sytuacji – utrata połączenia z zdalną stacją, wysoki poziom wilgotności czy niski stan baterii modułu, to procedura ta uruchomi wysyłkę alarmowego SMSa.

    Procedury Temboo

    sendStatus()

    Procedura, która generuje wiadomość, która ma być wysłana poprzez bramkę e-mail na SMSa. Domyślnie, oprogramowanie skonfigurowane jest do wysłania w SMSie danych dotyczących wilgotności i temperatury w czterech pierwszych stacjach pomiarowych. Jeśli chcemy zmienić zawartość powiadomienia SMS to jest procedura, której szukamy.

    sendAlert()

    Analogiczna do powyższej procedura, która generuje e-mail, mając być SMSowym alarmem. Uruchamiana jest ona w momencie wystąpienia zdefiniowanej sytuacji alarmowej. Zawartość tej procedury należy zmienić, jeśli chcemy zmienić zawartość wiadomości alarmowych.

    sendEmail()

    Procedura, wygenerowana przez Temboo, do wysyłania wiadomości e-mail poprzez Temboo Gmail Choreo.

    spreadsheetUpdate()

    Aktualizuje dane zwarte w arkuszu Google – wysyłana jest aktualizacja poprzez Temboo Append Row Choreo, które dopisuje jeden wiersz do arkusza na Google Drive. Zawartość tej funkcji należy zmodyfikować, jeśli chcemy zmienić sposób wysyłania danych do arkusza Google lub jego format.

    sendSpreadsheetUpdate()

    Kod, wygenerowany przez Temboo, do wysyłania danych do Google Drive poprzez Temboo.

    Funkcje dedykowane do odmierzania czasu

    systemTimeUpdate()

    Zlicza sekundy lokalnego czasu. Funkcja ta aktualizuje także czas wyświetlany na LCD (w formacie HH:MM:SS 24h).

    ntpTimeUpdate()

    Ta wywoływana co godzinę z głównej pętli programu funkcja lokalizuje się z czasem lokalnej bramy sieciowej – wykorzystuje funkcję getNTPtime() aby uzyskać obecny czas, lokalizuje go z uwzględnieniem strefy czasowej i czasu letniego/zimowego a następnie wyświetla na ekranie bramki, po poprawnym uzyskaniu czasu po NTP.

    Funkcje EEPROMu

    Funkcje związane z obsługą pamięci EEPROM odpowiedzialne są za inicjalizację, zapis i odczyt danych z tej pamięci. Dane w pamięci EEPROM zapisywane są w postaci struktury przedstawionej poniżej. Funkcje readBlock() oraz updateBlock() z EEPROMex.h odpowiedzialne są za, odpowiednio, odczyt i zapis danych w postaci takiej struktury do pamięci EEPROM.

    Aby wydłużyć żywotność pamięci EEPROM (która ma generalnie dosyć ograniczoną ilość cyklów zapisu i odczytu) funkcja zapisująca dane – updateBlock() przed zapisem sprawdza, czy wprowadzi on jakieś zmiany do pamięci; jeśli nie, to nie nadpisuje fizycznie danych.

    Wykorzystanie struktury danych do przetrzymywania danych w pamięci ma ogromną zaletę – w przyszłości umożliwia łatwe wprowadzanie modyfikacji, jeśli ktokolwiek będzie chciał dodać do pamięci dodatkowe dane. Struktura na obecnym etapie rozwoju oprogramowania bramki LoRa wygląda następująco:

    Code: c
    Log in, to see the code


    Funkcje związane z obsługą wyświetlacza LCD i przycisków do zarzucania menu

    Do indeksowania elementów w menu interfejsu na LCD wykorzystany jest enumerator (zdefiniowany poniżej). Dzięki wykorzystaniu enumeratora nie ma konieczności pilnowania numeracji poszczególnych opcji w menu podczas dodawania kolejnych pozycji. Enumerator rozpoczyna się od wpisu "START_FUNCTIONS" a kończy na "END_FUNCTIONS." Dzięki temu – niezależnie od ilości opcji pomiędzy tymi elementami w enumeratorze program zawsze wie kiedy natrafi na początek lub koniec menu. Enumerator zdefiniowany jest w następujący sposób:

    Code: c
    Log in, to see the code


    Za każdym razem gdy naciskamy przycisk Func program przechodzi do pętli while(1). Będąc w tej pętli program monitoruje naciskanie wszystkich czterech przycisków. Ich funkcje to:

    FUNC – Powoduje, że wychodzimy z Function() i wracamy do głównej pętli programu.
    ENTER – Powoduje wykonanie wyświetlanej obecnie opcji w menu.
    UP – Przewija wyświetlaną opcję o jeden w górę.
    DOWN – Przewija wyświetlaną opcję o jeden w dół.

    Po wejściu do Function() za każdym razem, gdy naciśniemy przycisk Up lub Down, wykonana zostanie functionDisplay(), która zmienia wyświetlaną obecnie na LCD funkcję menu. Analogicznie, po naciśnięciu Enter, wykona się functionExecute(), które realizuje daną funkcję z menu.

    Dzięki obecności struktury danych, dodawanie nowych wpisów do menu jest bardzo proste. Analogiczne struktury używane są np. do opisu trybu działania LCD podczas normalnej pracy bramki LoRa. Dokładniejszy opis trybów wyświetlania danych jest zawarty w części artykułu opisującej interfejs użytkownika. Struktura danych, opisująca tryby wyświetlania na LCD wygląda następująco:

    [Syntax=c]enum {
    START_DISPLAY_MODES,
    LAST_STATION_TEMP,
    LAST_STATION_HUMI,
    FIXED_STATION_TEMP,
    FIXED_STATION_HUMI,
    CYCLE_STATION_TEMP,
    CYCLE_STATION_HUMI,
    END_DISPLAY_MODES
    };[/syntax]

    Z wyświetlaczem związana jest także matryca danych do wyświetlania, którą enumerator indeksuje:

    [Syntax=c]const char* DISPLAY_MODE[] = {
    " ",
    "Last Stn Temp",
    "Last Stn Humi",
    "Fixed Stn Temp",
    "Fixed Stn Humi",
    "Cycle Stn Temp",
    "Cycle Stn Humi",
    " "
    };[/syntax]

    Ta technika nie była wykorzystywana w większej ilości miejsc w programie, aczkolwiek mogła, gdyż pozwala na oszczędzanie pamięci RAM układu. Dokładniejszy opis wykorzystania tego rodzaju struktur w programie znaleźć można tutaj.

    Procedury obsługi karty SD

    Procedury związane z obsługą karty SD pozwalają na zapis i odczyt danych z tej karty w bramce LoRa, Funkcja readGatewayData() odczytuje z karty SD zapisane tam wcześniej dane do uwierzytelniania w usługach Temboo i Google. Dane te zapisane są w pliku GW_Data.txt. Więcej o strukturze tego pliku poniżej.

    W pliki GW_Data.txt zawarty jest tekst ograniczony kwadratowymi nawiasami, więc zakładamy, że takich nawiasów nie ma w haśle etc. Jeśli są trzeba użyć innych znaków ograniczających teksty w tym pliku. Funkcja ta odczytuje dane do macierzy stringów gatewayData[12]. Poszczególne elementy macierzy opisane są nazwami z poniższego enumertora.

    Code: c
    Log in, to see the code


    Dzięki zastosowaniu tego rodzaju struktury do danych tych dodawać można kolejne wpisy, jeśli zajdzie taka potrzeba.


    Procedury obsługi LCD

    Funkcja updateStationDisplay() odpowiedzialna jest za generację stringu lastStationDisplay, który zawiera dane do wyświetlenia w drugiej linii LCD. String ten generowany jest zgodnie z ustawieniami trybu wyświetlania. Za każdym razem, gdy jakakolwiek funkcja aktualizuje status danych, funkcja lastStationDisplay() wykorzystywana jest do aktualizacji zawartości stringa, jaki wyświetlany ma być na LCD.

    Do obsługi samego LCD wykorzystane jest, dla uproszczenia, szereg funkcji:

    * updateDisplayLine12(String Line_1, String Line_2) – aktualizuje linie 1 & 2
    * updateDisplayLine1(String Line_1) - aktualizuje linie 1 pozostawia linię 2 nietkniętą
    * updateDisplayLine2(String Line_2) - aktualizuje linie 2 pozostawia linię 1 nietkniętą
    * clearDisplayLine1(String Line_1) – czyści linie 1 & 2 i aktualizuje linie 1
    * clearDisplayLine2(String Line_2) – czyści linie 1 & 2 i aktualizuje linie 2

    Krok 9: Oprogramowanie wewnętrznej stacji pomiarowej

    Stacje pomiarowe sieci LoRa – wewnętrzna i zewnętrzna – w ogólności nazywane są stacjami zdalnymi. Każda zdalna stacja ma swój unikatowy numer ID, dzięki czemu może być poprawnie identyfikowana przez bramkę sieci LoRa. Numer identyfikacyjny jest zapisany na sztywno w oprogramowaniu każdej ze zdalnych stacji. Jeśli chcemy zmienić ten unikatowy numer identyfikacyjny to musimy przekompilować kolejny raz oprogramowanie dla danej stacji.

    W obecnej wersji oprogramowania liczba numerów identyfikacyjnych w systemie jest na sztywno ograniczona. ID przyjąć może wartość od 0x00 do 0x09, co daje 10 stacji. W przyszłych wersjach numerowanie stacji ma być realizowane automatycznie przez bramkę, po połączeniu się do stacji. Dzięki temu możliwe będzie dodawanie kolejnych stacji do systemu w sposób zupełnie bezszwowy.

    Do inicjalizacji i odczytu danych z sensora SHT31 wykorzystane są biblioteki dostarczane przez Adafruit. Oprócz danych odczytanych z tego sensora stacja przesyła też do bramki LoRa inne dane. Przesyłane są one w postaci struktury danych pokazanej poniżej:

    Code: c
    Log in, to see the code


    Powyższa unia danych pozwala na zmapowanie wartości zmiennoprzecinkowych do bajtów, dzięki czemu można je przesłać poprzez interfejs bezprzewodowy. W analogiczny sposób można przesyłać i inne rodzaje zmiennych, takie jak stringi. Liczba przesyłanych zmiennych może zostać zwiększona – wystarczy dodać je do struktury opisanej dokładniej poniżej.

    Wewnętrzna stacja pogodowa przesyła do stacji bazowej informacje o temperaturze powietrza (airTemp) oraz napięciu zasilania (bat volt). W przypadku stacji wewnętrznej za napięcie zasilania brane jest napięcie zasilające moduł Feather. Pozostałe dane, takie jak temperatura gruntu (gndTemp) czy ciśnienie (pressure) są ustawiane na wartość zero.

    Wielkość pakietów, wysyłanych poprzez sieć bezprzewodową wynosi 5 zmiennych float (5 bajty każda) plus jeden bajt na numer ID stacji – razem 21 bajtów. Pakiet sieci LoRa budowany jest poprzez funkcję buildWirelesspacket(), która wykorzystuje binarne mapowanie zmiennych w następujący sposób:

    Code: c
    Log in, to see the code


    Analogicznie dekoduje pakiet oprogramowanie po stronie bramki sieci LoRa, które odczytuje poszczególne wartości z pakietu radiowego.

    W zdalnych stacjach pomiarowych zaimplementowano watchdoga, który pozwala na okresowe wybudzanie stacji, aby zmniejszyć pobór energii. W przypadku opisywanego systemu stacje pomiarowe wybudzane są co około 8 sekund. Wartość ta wynika z maksymalnej wartości preskalera timera wykorzystanego do odmierzania czasu w watchdogu.

    Code: c
    Log in, to see the code


    Za każdym razem, gdy watchdog wybudza procesor poprzez przerwanie funkcja zawarta pod tym przerwaniem inkrementuje zmienną stateTime, która odmierza czas w ośmio sekundowych interwałach. Wykonywana jest także jednokrotnie zawartość pętli loop() i procesor jest podoie usypiany. Pętla loop() zawiera w sobie funkcje odczytu danych z sensorów i wysyłania ich do stacji bazowej – co dziesięć minut.

    Transceiver sieci LoRa jest usypiany, gdy nie jest wykorzystywany do nadawania pakietów z danymi.

    Krok 10: Zewnętrzna stacja pomiarowa

    Zewnętrzna stacja pomiarowa wysyła do bramki sieci LoRa więcej danych: temperturę powietrza (airTemp), temperturę gruntu (gndTemp), wilgotnoć (humidity), ciśnienie (pressure) i napięcie z baterii (vBat) – napięcie dostarczane z baterii litowo-jonowej do modułu Feather.

    Zewnętrzna stacja pomiarowa wykorzystuje układ BME280 do mierzenia temperatury, wilgotności i ciśnienia. Biblioteki do obsługi tego układu dostarcza Adafruit. Dodatkowo do pomiaru temperatury gruntu wykorzystano wodoodporny sensor oparty na DS18B20, który podłączony jest przez 1Wire obsługiwane także przez biblioteki od Adafruit.

    krok 11: Bramka IoT – karta SD z danymi uwierzytelniającymi

    Moduł Arduino Mega wyposażony jest w gniazdo na kartę microSD. Pojemność tej karty nie jest istotna – w projekcie wykorzystano kartę 8 GB, co daje na przyszłość dużo miejsca do zapisywania dnych gdy dodany zostanie system lokalnego logowania pomiarów.

    Dane uwierzytelniające do usług z jakich korzysta z system trzymane są w pliku GQ_Data.txt. Dzięki temu możliwa jest edycja danych logowania do tych usług bez konieczności rekompilowania oprogramowania bramki.

    Oprogramowanie odczytuje dane z karty SD podcas uruchamiania. Funkcja readGatewayData() odczytuje dane z karty SD i przeszukuje plik poszukiwaniu nawiasów kwadratowych, które ograniczają poszczególne wpisy. Odnalezione dne tekstowe są następnie kopiowane do macierzy stringów gatewayData. Wszystkie znaki poza nawiasami są ignorowane, więc pełnią tylko rolę etykiet/komentarzy.

    Plik GW_Data.txt powinien być stworzony i zapisany na karcie SD za pomocą edytora tekstu, który nie dodaje do niego żadnych niewidocznych znaków itp. Autor wykorzystał w tym celu Sublime Text. Plik ten wygląda następująco:

    TEMBOO_ACCOUNT      [nazwa konta Temboo]
    TEMBOO_APP_KEY_NAME [nazwa aplikacji]
    TEMBOO_APP_KEY      [klucz aplikacji]
    SS_Title            [tytuł/nazwa arkusza Google]
    SS_RefreshToken     [token odświeżania]
    SS_ClientSecret     [sekretny kod]
    SS_ClientID         [ID klienta apps.googleusercontent.com]
    EM_Subject          [tytuł e-maila]
    EM_Password         [hasło do e-maila]
    EM_Username         [adres e-mail]
    EM_ToAddress        [adres docelowy e-maila do wysyłania SMSów]


    Źródło: http://www.instructables.com/id/LoRa-IOT-Home-Environment-Monitoring-System/

    Cool? Ranking DIY
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
    About Author
    ghost666
    Translator, editor
    Offline 
    Fizyk z wykształcenia. Po zrobieniu doktoratu i dwóch latach pracy na uczelni, przeszedł do sektora prywatnego, gdzie zajmuje się projektowaniem urządzeń elektronicznych i programowaniem. Od 2003 roku na forum Elektroda.pl, od 2008 roku członek zespołu redakcyjnego.
    ghost666 wrote 11701 posts with rating 9875, helped 157 times. Live in city Warszawa. Been with us since 2003 year.
  • Nazwa.pl
  • #2
    TechEkspert
    Editor
    Ciekawe czy z czasem pojawią się układy pozwalające na budowanie tanich bramek LoRaWAN wielokanałowych, być może to znacząco zwiększyłoby ilość dostępnych amatorskich bramek otwartych dla wszystkich (np. w ramach projektu https://www.thethingsnetwork.org ).
    Cena układu modułu odbiornika jest całkowicie akceptowalna, wiadomo że stacja bazowa musi mieć znacznie większe możliwości ale patrząc z punktu widzenia czasu funkcjonalność Wi-Fi również kiedyś była kosztowna a teraz mamy ESP.
  • Nazwa.pl
  • #3
    markovip
    Level 34  
    O ile nie mamy do czynienia z setkami/tysiącami sensorów; LoRaWAN ani wielokanałowość nie jest tu potrzebna.

    Pozdrawiam
  • #4
    TechEkspert
    Editor
    Jeżeli budujemy system pracujący wokół naszego domu to fakt wielokanałowość nie jest potrzebna,
    ale jeżeli myślimy o rozpowszechnieniu ogólnodostępnych bramek LoRaWAN i korzystaniu z infrastruktury tak jak korzystamy z BTSów telefonem komórkowym to takie bramki LoRaWAN muszą być ustandaryzowane i odpowiednio wyposażone.

    Myślę że popularyzacja sieci typu LoRaWAN / Sigfox możliwa będzie właśnie gdy pojawi się infrastruktura i będziemy mogli umieścić swoje bateryjne urządzenie IoT w dowolnym miejscu a dane otrzymywać do aplikacji chmurowych i obserwować je w przeglądarce lub pobierać urządzeniami mającymi łączność z internetem.
  • #5
    markovip
    Level 34  
    Sam fakt postawienia bramy niczemu nie służy jeżeli nie udostępni się jej publicznie, na przykład przez TTN.

    Z drugiej strony, sieci Sigfox nie są darmowe toteż używane są tylko przez klientów firmowych.

    Pozdrawiam
  • #6
    TechEkspert
    Editor
    TTN to dobry przykład LoRaWan z bramkami upublicznionymi,
    na razie w ramach TTN w Poslce bramek jest bardzo mało: https://www.thethingsnetwork.org/country/poland/
    ale sama technologia pozwala na zastosowanie klucza operatora i klucza aplikacji co może ułatwić współdzielenie infrastruktury zarówno darmowej jak i komercyjnej.

    Co do SigFox to propozycja nie tylko dla profesjonalistów: Arduino MKRFOX1200 a koszty abonamentu rocznego za urządzenie mogą wynosić 1-12 euro, w Polsce jeszcze musimy poczekać na szeroką dostępność ale np. w Warszawie bramki pilotażowego projektu nasłuchują: przegląd technologii łączności bezprzewodowej LPWAN dla IoT i M2M.
  • #7
    teofil111
    Level 13  
    Kwestia czy da się na tym zarobić w przypadku upublicznienia dostępu do bramy, zależy pewnie też od zasięgu i popularyzacji technologii.