Spisu treści:

Seeed IoTea LoRa Solution (aktualizacja 1811): 5 kroków
Seeed IoTea LoRa Solution (aktualizacja 1811): 5 kroków

Wideo: Seeed IoTea LoRa Solution (aktualizacja 1811): 5 kroków

Wideo: Seeed IoTea LoRa Solution (aktualizacja 1811): 5 kroków
Wideo: High Density 2022 2024, Lipiec
Anonim
Seeed IoTea LoRa Rozwiązanie (Aktualizacja 1811)
Seeed IoTea LoRa Rozwiązanie (Aktualizacja 1811)

Internet+ jest obecnie popularnym pojęciem. Tym razem wypróbowaliśmy Internet plus rolnictwo, aby z ogrodu herbacianego wyrosła Herbata Internetowa.

Krok 1: Rzeczy użyte w tym projekcie

Komponenty sprzętowe

  • Grove - czujnik dwutlenku węgla (MH-Z16)
  • Grove - cyfrowy czujnik światła
  • Grove - czujnik kurzu (PPD42NS)
  • Grove - czujnik tlenu (ME2-O2-Ф20)
  • Czujnik wilgotności gleby i temperatury
  • LoRa LoRaWAN Gateway - zestaw 868MHz z Raspberry Pi 3
  • Grove - Czujnik temperatury i wilgotności oraz barometryczny (BME280)

Aplikacje i usługi online

Microsoft Visual Studio 2015

Krok 2: Historia

Na Górze Mengding na północny wschód od Ya'an w Syczuanie grzbiet górski biegnie z zachodu na wschód w morzu zieleni. Jest to najbardziej znany widok 36-letniego Denga, jednego z niewielu producentów herbaty Mengding swojego pokolenia, z plantacją o powierzchni 50mu (=3,3 hektara) położoną na wysokości 1100 m n.p.m. Deng pochodzi z rodziny producentów herbaty, ale kontynuacja rodzinnej spuścizny nie jest łatwym zadaniem. „Nasze herbaty są uprawiane na dużych wysokościach w ekologicznym środowisku, aby zapewnić ich doskonałą jakość. Ale jednocześnie gęstość wzrostu jest niska, koszt wysoki, a pączkowanie jest nierównomierne, co sprawia, że herbata jest trudna do zebrania. Dlatego herbatki wysokogórskie mają zwykle niewielkie zbiory, a ich wartość nie znajduje odzwierciedlenia na rynku”. Przez ostatnie dwa lata Deng starał się zwiększać świadomość konsumentów na temat herbat wysokogórskich, aby promować ich wartość. A kiedy spotkał Fana, który szukał plantacji do wdrożenia technologii IoTea firmy Seeed, znalazł idealne rozwiązanie.

Krok 3: Połączenie sprzętowe

Sprzęt tego projektu można podzielić na 4 części: zasilanie, czujniki, węzeł i bramę. Poniższy artykuł pokaże Ci, jak to zrobić krok po kroku.

Część mocy

Część zasilająca zawiera głównie panel słoneczny i baterię litową, jeśli zbudujesz ten projekt tylko do demonstracji, możesz je zignorować. Możesz też skorzystać z poprzedniego samouczka, aby zainstalować moc węzła.

Czujniki Część

W części z czujnikami, ze względu na dużą ilość czujników, zastosowaliśmy stację pogodową, a także wykonaliśmy uchwyt akrylowy do ich montażu.

Obraz
Obraz

Jak widać na powyższym obrazku, cyfrowy czujnik światła zawsze znajduje się na górze, aby mógł zbierać informacje o oświetleniu. Czujniki, które będą generować ciepło, są zainstalowane w środku wspornika akrylowego, takie jak czujnik O2, czujnik kurzu i czujnik CO2. W końcu czujnik temperatury i wilgotności na spodzie wspornika akrylowego.

Poza tym czujnik temperatury i wilgotności gleby jest instalowany samodzielnie w glebie. Część węzła

Obraz
Obraz

Node Part to Seeeduino LoRaWan, który jest zainstalowany w wodoodpornym pudełku, łączy się z zasilaniem i czujnikami za pomocą złączek wodnych. Wśród nich czujnik kurzu podłącz do cyfrowego styku D3 LoRaWan, czujnik CO2 do styków D4 i D5, czujnik gleby do styków D6 i D7, czujnik O2 do styku analogowego A1, a czujnik światła i czujnik barometru do portu I2C.

UWAGA: Rezystor 10k powinien być dodany pomiędzy niebieski przewód czujnika gleby (dane) a czerwony przewód (Vcc).

Seeeduino LoRaWan co jakiś czas zbiera wartości czujników i wysyła je do Gateway za pośrednictwem LoRa. Format danych jak poniżej:

{

[0], /* Temperatura powietrza (℃) */ [1], /* Wilgotność powietrza (%) */ [2], /* Wysokość (m) wysoki bajt */ [3], /* Wysokość (m) niski bajt */ [4], /* stężenie CO2 (PPM) wysoki bajt */ [5], /* stężenie CO2 (PPM) niski bajt */ [6], /* stężenie pyłu (szt/0.01cf) wysoki bajt */ [7], /* Stężenie kurzu (szt/0,01cf) niski bajt */ [8], /* Natężenie światła (lux) wysoki bajt */ [9], /* Natężenie światła (lux) niski bajt */ [10], /* Stężenie O2 (%) */ [11], /* Temperatura gleby (℃) */ [12], /* Wilgotność gleby (%) */ [13], /* Napięcie akumulatora (V) */ [14] /* Kod błędu czujnika */ }

Każdy bit w bajcie Sensor Error Code ma inne znaczenie, tak jak poniżej:

{

bit0: 1; /* Błąd czujnika barometru */ bit1: 1; /* Błąd czujnika CO2 */ bit2: 1; /* Błąd czujnika kurzu */ bit3: 1; /* Błąd czujnika światła */ bit4: 1; /* Błąd czujnika O2 */ bit5: 1; /* Błąd czujnika gleby */ zarezerwowane: 2; /* Skryty */ }

Część bramy

Obraz
Obraz

Gateway Part to Raspberry Pi, który podłączył moduł Gateway RHF0M301–868 i mostek PRI 2 RHF4T002, jest zainstalowany w wodoodpornym pudełku i podłączany do zasilania i kamery USB przez złącza wodne. Ponieważ używa specjalistycznego oprogramowania, postępuj zgodnie z Seeed Wiki, aby go skonfigurować.

Krok 4: Programowanie oprogramowania

Jako połączenie sprzętowe, programowanie oprogramowania można również podzielić na 3 części: węzeł, bramę i witrynę internetową.

Część węzła

Większość sterowników wymaganych przez Node Part znajduje się już w folderze origin_driver. Poniższe biblioteki należy zainstalować ręcznie:

Adafruit_ASFcore

Ponieważ projekt jest skomplikowany, zalecamy korzystanie z Microsoft Visual Studio zamiast Arduino IDE. Wtyczka o nazwie Visual Micro może pomóc w tworzeniu projektu Arduino za pomocą Visual Studio. Kliknij tutaj, aby uzyskać więcej informacji.

Dla lepszej czytelności i łatwości konserwacji, tym razem używamy programowania obiektowego. Diagram klas tego projektu wygląda jak poniżej:

Obraz
Obraz

W przypadku tych czujników, które mają już sterownik OOP, przepakowaliśmy go, aby dostosować ten projekt, w przypadku innych przepisaliśmy ich sterowniki za pomocą OOP. Klasa Sensor w warstwie oprogramowania pośredniczącego służy do ujednolicenia interfejsów rzeczywistych czujników, na przykład czujnik barometryczny może jednocześnie zbierać temperaturę, wilgotność i wysokość, dzięki czemu ma 3 interfejsy do pomiaru temperatury, wilgotności i wysokości. Ale mają nazwę metody różnicy, która sprawi, że program pozyskiwania wartości czujników będzie bardziej skomplikowany, tak jak to:

barometr->getTemperature();

barometr->getHumidity(); barometr->getAltitude(); // … inny_czujnik->getSomeValue(); // …

Ale używając OOP wygląda to tak:

for (auto i = 0; i getValue();

}

Spakowaliśmy również klasę Application, implementuje ona interfejs IApplication, metody setup() i loop() w IoTea.ino mogą wywołać metodę setup() i loop() w obiekcie Application.

UWAGA: Port szeregowy USB służy TYLKO do debugowania. Po debugowaniu proszę skomentować jego inicjalizację kodu w metodzie setup().

Część bramy

Program Python Gateway Part w folderze domowym służy do robienia zdjęć i przesyłania ich do serwera Amazon S3 co godzinę. Zanim go użyjesz, upewnij się, że fswebcam jest już zainstalowany w twoim Raspberry Pi:

sudo apt-get aktualizacja i sudo apt-get zainstaluj fswebcam

Jeśli chcesz przesłać zdjęcia, skonfiguruj swój AWS, wykonując następujące czynności. Najpierw zainstaluj AWS SDK i AWS CLI na swoim Raspberry Pi, używając tych poleceń:

sudo pip zainstaluj boto3

sudo pip zainstalować awscli

a następnie uruchom AWS CLI:

konfiguracja sudo aws

Skonfiguruj identyfikator klucza dostępu AWS, tajny identyfikator dostępu AWS i nazwę regionu domyślnego.

Jeśli nie chcesz przesyłać zdjęć, możesz pominąć kroki konfiguracji AWS i kody komentarzy dotyczące przesyłania w photo.py. Aby uruchomić ten program po każdym uruchomieniu Raspberry Pi, możesz utworzyć zdjęcie nazwy pliku w /etc/init.d i napisać do niego następujący kod.

#!/kosz/bash

# /etc/init.d/photo ### BEGIN INIT INFO # Zapewnia: seeed_photo # Wymagane-Start: $remote_fs $syslog # Wymagane-Stop: $remote_fs $syslog # Domyślne-Start: 2 3 4 5 # Domyślne-Stop: 0 1 6 # Krótki opis: initscript robienia zdjęć # Opis: Ta usługa służy do zarządzania robieniem zdjęć ### END INIT INFO case "$1" in start) echo "Rozpocznij robienie zdjęć" /home/rxhf/photo.py &;; stop) echo "Przestań robić zdjęcie" kill $(ps aux | grep -m 1 'python3 /home/rxhf/photo.py' | awk '{ print $2 }');; *) echo "Użycie: usługa zdjęcie start|stop" exit 1;; esac wyjście 0

ustaw uprawnienia do wykonywania

sudo chmod 777 /etc/init.d/photo

sudo chmod 777 /home/rxhf/photo.py

i przetestuj to

sudo /etc/init.d/start zdjęcia

Jeśli nie ma problemu, zatrzymaj go i dodaj do aplikacji startowej

sudo /etc/init.d/zatrzymanie zdjęć

sudo update-rc.d domyślne ustawienia zdjęć

UWAGA: Jeśli chcesz uruchomić bramę po uruchomieniu Raspberry Pi, dodaj kody startowe bramy w Seeed Wiki do /etc/rc.local, niech wygląda tak:

#!/bin/sh -e

# # rc.local # # Ten skrypt jest wykonywany na końcu każdego poziomu pracy z wieloma użytkownikami. # Upewnij się, że skrypt "wyjdzie z 0" w przypadku powodzenia lub dowolnej innej wartości w przypadku błędu. # # Aby włączyć lub wyłączyć ten skrypt po prostu zmień wykonanie # bitów. # # Domyślnie ten skrypt nic nie robi. # Wydrukuj adres IP _IP=$(nazwa hosta -I) || prawda, jeśli ["$_IP"]; then printf "Mój adres IP to %s\n" "$_IP" fi cd /home/rxhf/loriot/1.0.2 sudo systemctl stop pktfwd sudo gwrst wget https://cn1.loriot.io/home/gwsw/loriot -risinghf-r… -O loriot-gw.bin chmod +x loriot-gw.bin./loriot-gw.bin -f -s cn1.loriot.io wyjście 0

Strona internetowa

Wdrożyliśmy witrynę na CentOS 7. Poniższe kroki pokażą Ci, jak wdrożyć.

Krok 1. Zainstaluj Python3

sudo mniam -y zainstaluj epel-release

sudo mniam -y zainstaluj python36

Krok 2. Zainstaluj pip Pythona i środowisko wirtualne

wget

sudo python36 get-pip.py sudo pip zainstaluj virtualenv

Setp 3. Sklonuj naszą witrynę z GitHub

sudo mniam -y zainstaluj git

klon git

Krok 4. Utwórz i aktywuj środowisko wirtualne

virtualenv -p python36 iotea-hb

cd iotea-hb bin/aktywacja źródła

Krok 5. Zainstaluj zależne biblioteki

pip zainstaluj pymysql

pip install dbutils pip install flask pip install websocket-client pip install cofigparser

Krok 6. Utwórz bazę danych

sudo mniam -y zainstaluj mariadb mariabd-server

sudo systemctl włącz mariadb sudo systemctl start mariadb mysql -uroot -p

a następnie użyj iotea_hb.sql, aby utworzyć tabelę.

Krok 7. Utwórz db.ini i zapisz do niego te kody

[db]

db_port = 3306 db_user = root db_host = localhost db_pass = nazwa_db = iotea

zmień ścieżkę db.ini w db.py

# w db.py

#cf.read("/data/www/python3_iotea_hb/iotea/conf/db.ini") cf.read("/home//iotea-hb/db.ini")

Krok 8. Zmień port w app.py i uruchom stronę:

# w app.py

#app.run(debug=True, port=6000) app.run(debug=True, port=8080)

# w terminalu

pip zainstaluj gunicorn gunicorn -w 5 -b 0.0.0.0:8080 aplikacja:app

teraz odwiedź 127.0.0.1:8080 w przeglądarce internetowej, możesz zobaczyć stronę internetową, ale dane w czasie rzeczywistym nie są wyświetlane.

Krok 9. Uzyskaj dane Loriota

Otwórz inny terminal, ponownie wejdź do wirtualnego środowiska i uruchom aplikację Loriot:

cd iotea-hb

kosz źródłowy/aktywacja gunicorn loriot: aplikacja

Poczekaj chwilę, zobaczysz dane wyświetlane na stronie lub możesz zmienić wss w loriot.py:

# w loriot.py

#ws = create_connection("wss://cn1.loriot.io/app?token=vnwEuwAAAA1jbjEubG9yaW90LmlvRpscoh9Uq1L7K1zbrcBz6w==")

ws = utwórz_połączenie()

Krok 5: Operacja

Możesz odwiedzić nasze strony internetowe, aby wyświetlić dane w czasie rzeczywistym:

  • w Ya'an
  • Do demonstracji

Zalecana: