Spisu treści:

Seed LoRa IoTea Rozwiązanie: 5 kroków
Seed LoRa IoTea Rozwiązanie: 5 kroków

Wideo: Seed LoRa IoTea Rozwiązanie: 5 kroków

Wideo: Seed LoRa IoTea Rozwiązanie: 5 kroków
Wideo: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Lipiec
Anonim
Nasiona LoRa IoTea Rozwiązanie
Nasiona LoRa IoTea Rozwiązanie

Automatyczny system zbierania informacji zastosowany na plantacji herbaty. Jest częścią inteligentnego zbierania informacji rolniczych.

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

Inteligentne rolnictwo polega na zastosowaniu technologii Internetu Rzeczy w tradycyjnym rolnictwie, wykorzystując czujniki i oprogramowanie do sterowania produkcją rolną za pośrednictwem platform mobilnych lub komputerowych, czyniąc tradycyjne rolnictwo bardziej „inteligentnym”.

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. To najbardziej znany widok 36-letniego Denga, jednego z nielicznych 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 herbaty wysokogórskie to zazwyczaj niewielkie zbiory, a ich wartość nie znajduje odzwierciedlenia na rynku”. Od dwóch lat 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. Seeed IoTea Solution ma na celu pomóc hodowcom herbaty w lepszym zarządzaniu plantacjami bez zmiany tradycyjnych praktyk uprawy herbaty, a także prezentować w czasie rzeczywistym dane środowiskowe z plantacji na otwartej platformie.

Składająca się z czujników, węzłów i bram, IoTea zbiera w czasie rzeczywistym dane dotyczące czynników, które mogą wpływać na jakość herbaty podczas procesów uprawy i produkcji, w tym temperatury i wilgotności, CO2, O2, PM i ekspozycji na światło. Dane są zbierane przez sensory, wysyłane przez węzły do bramy, a ostatecznie do chmury i udostępniane klientom końcowym na stronie internetowej.

Krok 3: Połączenie sprzętowe

Krok 1: Połączenie bramy

Bramka jest montowana osobno w pudełku. Biorąc pod uwagę problem rozpraszania ciepła, dodaliśmy 2 wentylatory. Jeden służy do rozpraszania ciepła Raspberry Pi, drugi do wewnętrznej i zewnętrznej cyrkulacji powietrza. Skrzynka wjazdowa jest umieszczona w domu rolnika, więc nie musimy rozważać jej problemu z zasilaniem.

Obraz
Obraz

Krok 2: Połączenie z węzłem

Węzeł jest terminalem danych i stąd pobierane są wszystkie oryginalne dane. Do węzła podłączonych jest 6 czujników. Oprócz czujnika wilgotności i temperatury gleby, w skrzynce żaluzji umieszczamy inne czujniki.

Obraz
Obraz
Obraz
Obraz

Węzeł umieszczony jest w wodoszczelnym pudełku. Aby mieć lepsze połączenie z węzłem, wykonujemy płytkę adaptera. Na koniec udostępnimy link do pobrania schematu tej płyty. Jak pokazano poniżej, kable czujników są podłączane do płytki adaptera za pomocą listew zaciskowych. Używamy 3 lamp MOS (SI2301) do budowy obwodów przełączających do sterowania włączaniem i wyłączaniem czujników i wentylatora. Wentylator służy do schładzania. Posiadamy czujnik temperatury (DS18B20) zamontowany na płytce. Może nam powiedzieć o wewnętrznej temperaturze skrzynki, a następnie mikrokontroler decyduje, czy włączyć wentylator. Używamy kilku rezystorów do wykonania obwodu dzielnika napięcia do pomiaru napięcia akumulatora kwasowo-ołowiowego. Na koniec rezerwujemy 3 interfejsy IIC i port szeregowy na płycie do późniejszej rozbudowy i debugowania.

Obraz
Obraz

Porozmawiajmy o problemie zasilania węzła. Węzeł jest losowo umieszczany na plantacji herbaty, więc tradycyjna metoda zasilania nie ma już zastosowania. Dobrym pomysłem jest wykorzystanie energii słonecznej. Obecnie na rynku dostępnych jest wiele rozwiązań. Możemy wybrać jedną z nich, która odpowiada naszym potrzebom. W rozwiązaniu, które wybraliśmy, znajdują się 3 części: panel słoneczny, regulator ładowania słonecznego i akumulator kwasowo-ołowiowy. Aby lepiej wychwytywać energię słoneczną, umieszczamy panel słoneczny na górze wspornika i dostosowujemy jego kąt, aby był skierowany w stronę słońca. Umieściliśmy kontroler ładowania słonecznego w tym samym pudełku z węzłem. Ponieważ w pudełku nie ma dodatkowej przestrzeni, musieliśmy znaleźć nowe wodoodporne pudełko do umieszczenia akumulatora kwasowo-ołowiowego.

Obraz
Obraz
Obraz
Obraz
Obraz
Obraz

Krok 4: Konfiguracja oprogramowania

Węzeł

W tej sekcji przedstawimy głównie konfigurację oprogramowania węzła.

Format danych

Dane przesłane przez węzeł do bramy:

unsigned char Lora_data[15] ={0, 1, 2, 3,, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};

Znaczenie każdego bitu danych:

Lora_data[0] :Temperatura powietrza, ℃

Lora_data[1] :Wilgotność powietrza, %

Lora_data [2] :Wysokość osiem, m

Lora_data [3] :Niska ósemka

Lora_data [4] :Stężenie CO2 wysokie osiem, ppm

Lora_data [5]: stężenie CO2 niskie osiem

Lora_data [6] :Stężenie pyłu wysokie osiem, szt./0.01cf

Lora_data[7] :Stężenie pyłu niskie osiem

Lora_data[8] :Natężenie światła wysokie osiem, luks

Lora_data[9] :Natężenie światła niska ósemka

Lora_data[10] :Stężenie O2, % (surowe dane podzielone przez 1000)

Lora_data[11]: Temperatura gleby, ℃

Lora_data[12] :Wilgotność gleby, %

Lora_data[13] :Napięcie baterii, v

Lora_data[14] :Kod błędu czujnika

Kod błędu:

Lora_data[14] = [bit7, bit6, bit5, bit4, bit3, bit2, bit1, bit0]

Znaczenie każdego bitu:

bit 0: 1---- Błąd czujnika temperatury i humi oraz barometru (BME280)

bit 1: 1---- Błąd czujnika dwutlenku węgla (MH-Z16)

bit 2: 1---- Czujnik kurzu (PPD42NS) błąd)

bit 3: 1---- Błąd cyfrowego czujnika światła

bit 4: 1---- Błąd czujnika tlenu (ME2-O2-Ф20)

bit 5: 1---- Błąd czujnika wilgotności i temperatury gleby;

bit 6: Zarezerwowany

bit 7: Zarezerwowany

Zrobiliśmy Error_code_transform.exe, otwórz go i wprowadź kod błędu w systemie szesnastkowym, szybko dowiesz się, który czujnik jest błędem. Link do pobrania znajduje się na końcu tego artykułu.

Regulacja parametrów: a) cykl transmisji danych

//seedtea.ino

#defineinterval_time 600 //sekundę

Ten parametr można zmienić, aby zmienić cykl transmisji danych. W każdym cyklu akwizycja danych trwa około 1 minuty. Dlatego nie zaleca się zmiany tej wartości na mniej niż 60 sekund.

b)Czas nagrzewania czujnika kurzu

//seedtea.ino

#definePreheat_time 30000 //Czas nagrzewania czujnika DustSensor, milisekunda //Dust_other.cpp #definesampletime_ms 30000 //samplingtime30s

c)Współczynnik napięcia

//POWER_Ctrl.cpp

#defineBattery_coefficient 0.159864 //wartość ADC× Battery_ coefficient = solar_voltage

Te dwa parametry są obliczane na podstawie obwodu dzielnika napięcia.

d)Próg temperatury otwarcia wentylatora

//POWER_Ctrl.cpp

#defineFan_start_temp 45 //temperaturethreshold #defineFan_start_light 500 //intensywność światła

Gdy rzeczywista temperatura przekroczy próg, wentylator zacznie się schładzać.

e) parametr inicjalizacji czujnika O2;

//Tlen.cpp

#defineO2_procent 208,00 //20,8%

f) Przełącznik makro

//seedtea.ino

#defineLORA_RUN //Po komentarzu inicjalizacja Lora i transmisja danych zostaną zatrzymane #defineSENSOR_RUN //Po komentarzu zewnętrzne czujniki przestaną działać //POWER_Ctrl.cpp #defineFAN_ON //Tylko fortestowanie, praktyczna aplikacja wymaga komentarza /**** ***Tryb sterowania DS18B20 **********************/ #defineSlower_Mode // Tryb wolny, aby uzyskać temperaturę. Komentarz jest trybem szybkim

g) Mapowanie pinów

D2: wskaźnik LED i zewnętrzny mikrokontroler resetowania IIC: SCL i SDA

//Pył_inny.h

#defineDust_pin 3 //Czujnik kurzu //CO2.cpp #defineCO2_serial Serial1 //użyj hardwareserial port (D0 i D1) //seeedtea.ino #definedataPin 6 //Pin danych gleby #defineclockPin 7 //Pin zegara gleby //POWER_Ctrl. h #defineDS18B20_pin 8 //DS18B20 #defineFan_pin 9 //Fan #defineAir_CtrlPin 10 // Pin sterujący czujnikami umieszczonymi w żaluzjach #defineSoil_CtrlPin 11 // Przełącznik czujnika wilgotności gleby i temperatury #defineBattery_pin A2 // Pomiar napięcia baterii_pin_3 AdefineSolar /Pomiar napięcia panelu słonecznego //Oxygen.h #defineO2_pin A1 //Czujnik O2

h) Zegar nadzoru

Zegar watchdoga służy do monitorowania stanu działania systemu. Gdy system działa nieprawidłowo, węzeł zostanie zresetowany, aby mógł działać nieprzerwanie przez długi czas.

Biblioteka, do której należy się odnieść:

  • Adafruit_SleepyDog.h został dodany do projektu
  • Adafruit_ASFcore-master.zip jest spakowany w folderze projektu i należy go ręcznie dodać do Arduino IDE.

Powiązane funkcje:

Włącz watchdog

int WatchdogSAMD::enable(int maxPeriodMS, bool isForSleep)

Parametry wejściowe:

Int maxPeriodMS: Czas oczekiwania w milisekundach. Maksymalna dozwolona wartość to 16000 milisekund.

zwracana wartość:

Typ Int, zwróć rzeczywisty czas oczekiwania

Zresetuj watchdog

nieważne WatchdogSAMD::reset()

Wywołaj tę funkcję, aby zresetować licznik czasu nadzoru, co jest określane jako „karmienie psa”. Przekroczenie czasu oczekiwania bez resetowania spowoduje ponowne uruchomienie węzła.

Zatrzymaj psa stróżującego

nieważny WatchdogSAMD::wyłącz()

wejście

W tej sekcji przedstawimy jak połączyć się z serwerem Loriot.

Krok 1: Rejestracja bramy Loriot Server

a) Nowy użytkownik musi najpierw zarejestrować konto, kliknąć adres rejestracyjny. Wpisz nazwę użytkownika, hasło i adres e-mail, aby się zarejestrować, po rejestracji zostanie wysłany do Ciebie e-mail, postępuj zgodnie z instrukcjami zawartymi w e-mailu, aby aktywować.

b) Po udanej aktywacji kliknij tutaj, aby się zalogować. Domyślna warstwa to „Sieć społecznościowa”, obsługuje 1 bramę (RHF2S001) i 10 węzłów.

c) Wejdź w Dashboard -> Gateway, kliknij Add Gateway start, aby dodać Gateway.

d) Wybierz Raspberry Pi 3

e) Ustaw jak poniżej:

  • Radio front-end -> RHF2S001 868/915 MHz (SX1257)
  • AUTOBUS -> SPI

f) Wpisz adres MAC swojego RHF2S001, powinien być w formacie b8:27:eb:xx:xx:xx. A także wprowadź informacje o lokalizacji bramy.

g) Kliknij „Zarejestruj bramkę Raspberry Pi”, aby zakończyć rejestrację.

Obraz
Obraz

h) Kliknij zarejestrowaną bramkę, aby wejść na stronę konfiguracji, ręcznie przełącz „Plan częstotliwości”, Twój plan tutaj zależy od typu Twojego typu RHF2S001, dostępny plan to CN470,CN473,CN434,CN780,EU868, po wybraniu odśwież stronę aby uzyskać dokładny kanał. W tej wiki wybieramy EU868.

i) Uruchom polecenie w terminalu putty:

cd /home/rxhf/loriot/1.0.2

sudo systemctl stop pktfwd sudo gwrst wget > -O loriot-gw.bin chmod +x loriot-gw.bin./loriot-gw.bin -f -s cn1.loriot.io

j) Finish gateway registration. You will see the gateway is Connected now. Next is to register node.

Obraz
Obraz

Krok 2: Urządzenie Loriot Server Connect Node

a) Uzyskaj dostępne kanały bramy

Aktualne kanały bramek można pobrać z Dashboard -> Gateway -> Your Gateway, dostępne kanały można zobaczyć jak na poniższym obrazku.

Obraz
Obraz

b) Konfiguracja Seeeduino LoRAWAN GPS (RHF3M076);

Otwórz monitor szeregowy ArduinoIDE, dotknij poniższego polecenia.

w+ch

Aby potwierdzić domyślny kanał twojego Seeeduino_LoRAWAN GPS, otrzymasz 3 kanały. Jeśli nie ma dostępnego kanału, możesz zmienić kanały Seeeduino_LoRAWAN za pomocą poniższego polecenia.

przy+ch=0, 868,1

przy+ch=1, 868,3 przy+ch=2, 868,5

Następnie możesz ponownie użyć at+ch, aby sprawdzić.

c) Dodaj Seeeduino_LoRAWAN GPS jako ABP NodeLog na serwerze Loriot, kliknij Dash Board -> Applications -> SimpleApp. Kliknij Importuj ABP (wpisz poniżej pozycji)

  • DevAddr: Seeeduino_LoRAWAN GPS przechodzi przez polecenie „AT+ID” (Uwaga: Loriot nie obsługuje łącznika dwukropka, należy usunąć ręcznie)
  • FCntUp:Ustaw 1
  • FCntDn:Ustaw 1
  • NWKSKEY:wartość domyślna 2B7E151628AED2A6ABF7158809CF4F3C
  • APPSKEY: wartość domyślna 2B7E151628AED2A6ABF7158809CF4F3C
  • EUI: DEVEUI, Seeeduino_LoRAWAN GPS uzyskaj polecenie „AT+ID”
Obraz
Obraz

Kliknij przycisk Importuj urządzenie, aby zakończyć import urządzenia. Teraz wybierz Dashboard-> Applications -> SampleApp, zobaczysz nowy węzeł ABP, który właśnie dodałeś.

Obraz
Obraz

d) Wyślij dane z Seeeduino_LoRAWAN

UWAGA! To tylko test.

Wróć do szeregowego monitora ArduinoIDE, wyślij polecenie:

AT+CMSGHEX="0a 0b 0c 0d 0e"

Następnie przejdź do Dashboard -> Applications -> SampleApp -> Device, kliknij Node Device EUI lub DevAddr, tutaj znajdziesz dane, które właśnie wysłałeś.

Obraz
Obraz

Aby uzyskać szczegółowe informacje, zapoznaj się z tym wiki.

Krok 5: Budowa strony internetowej

Powiązane narzędzia

  • wirtualne środowisko
  • Python3
  • Gunicorn
  • Kierownik
  • Nginx
  • MySQL

Używamy CentOS7 jako testowego środowiska wdrażania

wirtualne środowisko

Użyj virtualenv, aby zbudować samodzielne środowisko produkcyjne python3

a) zainstaluj

pip zainstaluj virtualenv

b) stworzyć wirtualne środowisko python3

virtualenv -p python3 iotea

c) uruchom środowisko wirtualne i wejdź do katalogu iotea

kosz źródłowy/aktywacja

d) istnieje środowisko

dezaktywować

Python3

a) zainstaluj

mniam zainstaluj epel-release

mniam zainstaluj python36

b) zainstaluj zależną bibliotekę PyMySQL, DBUtils, Flask, websocket-client, configparser

pip zainstaluj pymysql

pip install dbutils pip install flask pip install websocket-client pip install configparser

Gunicorn

a) zainstaluj (w środowisku Python3)

pip zainstaluj gunicorn

b) uruchom projekt kolby (w katalogu projektu iotea)

gunicorn -w 5 -b 0.0.0.0:5000 aplikacja:app

c) uruchom websocket-clint, aby uzyskać dane Loriot

gunicorn loriot: aplikacja

d) wyświetl drzewo procesu Gunicorn

pstree -ap|grep gunicorn

Kierownik

a) instalacja (użytkownik root)

kierownik instalacji pip

b) generowanie plików konfiguracyjnych

echo_supervisord_conf > /etc/supervisord.conf

c) utwórz katalog i wprowadź konfigurację katalogu

mkdir -p /etc/supervisor/conf.d

Edytuj /etc/supervisord.conf i zmodyfikuj pole plików pod [include] na końcu pliku.

Pamiętaj, że musisz usunąć ';' przed tymi dwoma wierszami, który jest znakiem komentarza.

[włączać]

Pliki = /etc/supervisor/conf.d/*.conf

Oznacza wprowadzenie /etc/supervisor/conf.d/. Poniższy plik konfiguracyjny jest używany jako plik konfiguracyjny procesu (monitorowany przez osobę nadzorującą).

d) konfiguracja przychodząca (w katalogu iotea)

cp iotea.conf /etc/supervisor/conf.d/

cp loriot.conf /etc/supervisor/conf.d/

e) otwarta iotea służyć

superviosrctl przeładuj #przeładuj plik konfiguracyjny

superviosrctl start loriot #otwórz odbiór danych loriot superviosrctl start iotea #otwórz aplikację kolby iotea

f) inne wspólne operacje

przeładowanie nadzorcy # przeładowanie pliku konfiguracyjnego

superwizor aktualizacja superwizorctl start xxx superwizorctl stop xxx superwizorctl status xxx superwizorctl pomoc # zobacz więcej polecenia

Nginx

a) zainstaluj

mniam zainstaluj -y nginx

b) konfiguracja

cp NginxIotea.conf /etc/nginx/conf.d/

c) uruchom Nginx

systemctl uruchom nginx.service

MySQL

a) powiązane parametry

użytkownik='root'

passwd='1234' db='iotea' port=3306

b) plik

iotea_iotea.sql

c) plik konfiguracyjny

db.ini

Zalecana: