Spisu treści:

Wskaźnik zdarzeń RPi-Zero IoT / kolorowa lampa: 6 kroków (ze zdjęciami)
Wskaźnik zdarzeń RPi-Zero IoT / kolorowa lampa: 6 kroków (ze zdjęciami)

Wideo: Wskaźnik zdarzeń RPi-Zero IoT / kolorowa lampa: 6 kroków (ze zdjęciami)

Wideo: Wskaźnik zdarzeń RPi-Zero IoT / kolorowa lampa: 6 kroków (ze zdjęciami)
Wideo: Ups. 2024, Lipiec
Anonim
Wskaźnik zdarzeń RPi-Zero IoT / kolorowa lampka
Wskaźnik zdarzeń RPi-Zero IoT / kolorowa lampka
Wskaźnik zdarzeń RPi-Zero IoT / kolorowa lampka
Wskaźnik zdarzeń RPi-Zero IoT / kolorowa lampka
Wskaźnik zdarzeń RPi-Zero IoT / kolorowa lampka
Wskaźnik zdarzeń RPi-Zero IoT / kolorowa lampka

Bez dodatkowego mikrokontrolera i bez dodatkowego modułu HAT. RPi-Zero robi to wszystko. Jeszcze lepiej użyj RPi-Zero W !

Przykładowe zastosowanie: wskaźnik stanu usługi sieciowej (np. śledzenie DowJonesIndex), wskaźnik stanu wydarzenia politycznego lub sportowego, lampka nastroju, śledzenie czujnika, nazwij go. Obejrzyj wideo w kroku 6.

Raspberry-Pi ma tylko jedną obsługiwaną sprzętowo linię PWM. Ten projekt wymaga 3 linii PWM, więc użyłem sterowanej programowo biblioteki PWM 'c' (https://wiringpi.com/reference/software-pwm-library/), która powinna już być zainstalowana.

Przetwarzanie podzieliłem na 2 procesy. Jeden, sterowany przerwaniami, w razie potrzeby przełączający linie sterujące na diodę LED, odbierający rozkazy marszu ze swojego strumienia „stdin”. Drugi to sterowany zdarzeniami serwer nodeJS wykorzystujący IO gniazda. Ma to na celu zapobieganie migotaniu światła, zapewniając jednocześnie responsywność. Kombinacja zazwyczaj wykorzystuje mniej niż 5% procesora. W czasach ciągłych aktualizacji kolorów (za pomocą suwaków i/lub wielu klientów) może z łatwością korzystać z ponad 50% (szczególnie, gdy używasz przeglądarki w GUI Pi-Zero). Należy zauważyć, że gdy nadejdzie zmiana, powiadomienia o aktualizacji są wysyłane do wszystkich klientów z otwartym gniazdem.

Krok 1: Czego potrzebujesz

Co będziesz potrzebował
Co będziesz potrzebował
Co będziesz potrzebował
Co będziesz potrzebował
  • Karta micro-SD Pi-Zero, zalecane 8 GB. Z Raspbian-Linux lub NOOBS
  • Led RGB (użyłem tego:
  • 3 rezystory (wartość w oparciu o pożądany prąd i/lub pożądaną jasność, 1/8 W)
  • WiFi, klucz sprzętowy USB (np. https://www.ebay.com/itm/252018085448) lub jeszcze lepiej Raspberry Pi Z-W (z wbudowanym WiFi)
  • etui (np. małe: https://www.ebay.com/itm/131583579374 z większą ilością miejsca:
  • dyfuzor (patrz przykłady na zdjęciu)
  • Kable i adaptery w razie potrzeby.

Opcjonalnie, w zależności od sposobu podłączenia komponentów

  • nagłówek (https://www.ebay.com/itm/14186077616)
  • zworki (https://www.ebay.com/itm/262235387520)
  • adapter micro-USB kątowy (Blue USB 2.0 OTG R)
  • koncentrator mini USB, używany tylko w fazie konfiguracji

Krok 2: Konfiguracja Pi-Zero i przygotowanie do rozwoju

Postępuj zgodnie z tą początkową konfiguracją dla swojego PiZero, aby przygotować go do rozwoju…

Gdy masz kartę microSD z konfiguracją NOOBS, to:

Podłącz kartę microSD. Podłącz koncentrator USB o niskim poborze mocy z kluczem sprzętowym Wi-Fi, klawiaturą i myszą (Możesz użyć bezprzewodowej myszy i/lub klawiatury, w każdym razie może to wymagać zewnętrznego zasilania do koncentratora, ale nie jest to prawdopodobne). Użyłem adapterów i huba, który już miałem.

Teraz podłącz monitor i zasilacz microUSB, a uruchomi się. Kontynuuj i zakończ instrukcje dotyczące konfiguracji Raspbian, Debian Linux, jak widać w powyższym linku noobs-setup.

Dodatkowo miałem zbyt niską rozdzielczość. Więc dodałem te linie do /boot/config.txt

disable_overscan=1

hdmi_group=2 hdmi_mode=58

hdmi_mode=58 działa na moim monitorze, twój może potrzebować czegoś innego.

patrz: make-raspberry-pi-use-full-resolution-monitor i

raspberrypi.org/documentation/configuration/config-txt.md

Po uruchomieniu Pi-Zero przechodzi do interfejsu GUI.

Aby wykorzystać pełny rozmiar mojej karty microSD, użyłem opcji raspi-config #1 „Rozwiń system plików”. W wierszu poleceń w oknie terminala wpisz „sudo raspi-config”Patrz: dokumentacja/konfiguracja/raspi -config.md

Zmieniłem również te ustawienia w punkcie 5 „Opcje internacjonalizacji”

  • Lokalizacja: en_US. UTF-8 UTF-8
  • Strefa czasowa: Ameryka … Los_Angeles
  • Układ klawiatury: Ogólny 105-klawiszowy (Intl) PC … Angielski (USA)

Dla mnie brytyjski standard klawiatury (dla którego Raspbian jest wstępnie ustawiony) sprawiał, że większość moich edycji była prawdziwym obowiązkiem.

Zmień te ustawienia zgodnie z potrzebami, odpowiednio dla siebie. Zauważ, że musisz użyć klawiszy strzałek i klawisza tabulacji, aby poruszać się po 'raspi-config'; a po dokonaniu wyboru odpowiedź może być bardzo powolna.

Nie ma problemu z połączeniem się z internetem za pomocą klucza WiFi-USB (użyłem 2 różnych). Po prostu musiałem wprowadzić hasło dostępu do Wi-Fi za pomocą menu rozwijanego w prawym górnym rogu GUI. Kiedy to zrobię, połączy się automatycznie po ponownym uruchomieniu / włączeniu zasilania.

Teraz byłem gotowy do ogólnego rozwoju.

Aby dojść do tego punktu, możesz iść wieloma ścieżkami. Do tego momentu nie podałem tutaj zbyt szczegółowo, ale w sieci jest wiele metod i konfiguracji opisanych bardziej szczegółowo. W tym jeden dla konfiguracji bezgłowej, w której można użyć zdalnego okna terminala ssh na komputerze osobistym, aby wykonać kroki programistyczne podane w tej instrukcji.

Krok 3: Środowisko programistyczne i narzędzia

Środowisko programistyczne i narzędzia
Środowisko programistyczne i narzędzia
Środowisko programistyczne i narzędzia
Środowisko programistyczne i narzędzia

W celu konfiguracji systemu i oprogramowania, które opracowałem dla projektu, wykonałem prace badawczo-rozwojowe nad Raspberry Pi-2; ponieważ ma czterordzeniowy procesor, dzięki czemu przeglądanie i tworzenie kodu z wieloma oknami jest znacznie szybsze. Do realizacji tego projektu można oczywiście użyć dowolnego modelu Raspberry-Pi.

Aby skonfigurować Node.js (obsługę JavaScript po stronie serwera we/wy sterowanego zdarzeniami), wykonałem następujące czynności…

aktualizacja sudo apt-get

sudo apt-get zainstaluj nodejs npm

Dodanie tych pakietów nodeJS (npm to Nodejs Package Manager)

npm zainstaluj ekspres

npm zainstaluj gniazdo.io

Referencje:

www.npmjs.com/package/express Szybki, minimalistyczny framework web

www.npmjs.com/package/socket.io Socket. IO umożliwia dwukierunkową komunikację opartą na zdarzeniach w czasie rzeczywistym

Krok 4: Sprzęt

Sprzęt
Sprzęt
Sprzęt
Sprzęt
Sprzęt
Sprzęt
Sprzęt
Sprzęt

Użyte wartości rezystorów są różne, ponieważ spadek napięcia i sprawność różnią się dla wszystkich trzech segmentów kolorów LED. Wszystkie poziomy wyjściowe GPIO High wynosiły około 3,2 wolta. Każdy segment LED został przetestowany, aby upewnić się, że zużywa mniej niż 20 mA maksymalnie i około 40 mA razem (maksymalnie dozwolone <50 mA), co PiZero może z łatwością obsłużyć. Uzyskałem tak dużą jasność wyjściową, jak tylko mogłem, bezpośrednio napędzając diodę LED; co wystarcza na moje potrzeby. Aby sterować wyższymi prądami, aby uzyskać znacznie jaśniejsze wyjście, można użyć tranzystorów pośredniczących ze wspólną anodą LED z anodą podłączoną do linii 5V. PS: Ponieważ moje różne poziomy bieli są nieco niebieskawe, 27 zamiast 24 Ohm byłby dla mnie lepszym wyborem.

Zauważ, że użyłem nagłówka z męskimi pinami i podłączonym do nóg LED za pomocą zworek F-F. To ograniczyło całkowitą wysokość. W środku zworek wlutowałem rezystory. Brak płytki drukowanej lub płytki bez lutowania, a także użycie adaptera micro-USB na USB pod kątem prostym dla klucza WiFi, sprawiło, że końcowy montaż był dość kompaktowy.

Jako dyfuzor polecam piłeczkę pingpongową (łatwo wywiercić otwór na tyle duży, by włożyć do niego diodę 5-8-10 mm). Lub odetnij górną część żarówki LED (takiej, która wykorzystuje plastikowy dyfuzor). W tym celu zaznacz cienką końcówką linię, w której chcesz ciąć, i użyj narzędzia podobnego do Dremel z cienką końcówką do cięcia. Jeśli chcesz, możesz użyć ładnego, małego szklanego słoika lub szklanki do picia. Po ustaleniu jednego dyfuzora przyklej go do górnej części obudowy.

Do demonstracji lubię używać małego powerbanku Li umieszczonego wewnątrz obudowy. To urządzenie wydaje się bardziej imponujące całkowicie bezprzewodowe. Oczywiście w tej konfiguracji będzie miał ograniczony czas działania. Do normalnej pracy używam po prostu adaptera ściennego micro-USB.

Krok 5: Oprogramowanie projektowe

Oprogramowanie projektowe
Oprogramowanie projektowe

Użyłem dwóch programów, procesu Node.js rozmawiającego z procesem potomnym za pośrednictwem strumienia danych stdin. Dzięki temu każdy z nich może robić to, co robi najlepiej i działać jako niezależne procesy we własnym tempie.

Oto, co zrobiłem: Ale nie musisz, ponieważ udostępniłem plik tar-gzip, który zawiera wynikowe drzewo plików.

Konfiguracja po stronie serwera NodeJS:

cd ~

mkdir node_rgb cd node_rgb mkdir public

umieść „index.html” i „style.css” w katalogu „~/node_rgb/public” wstaw „rgbDriver.c” i „rgb_main.js” do katalogu „~/node_rgb”

Skompiluj/zbuduj proces c 'rgbDriver':

cd ~/węzeł_rgb

cc -o rgbDriver rgbDriver.c -lwiringPi -lpthread

Pobieranie i rozszerzanie równoważności

Aby pobrać node_rgb.tgz (poniżej) do swojego Pi-Zero do swojego katalogu domowego (~pi), możesz wykonać jedną z 3 następujących czynności:

  1. Pobierz z przeglądarki w GUI swojego Pi-Zero Przenieś plik do ~pi/
  2. W oknie terminala podłączonym do Ciebie Pi-Zero:cd ~piwget

    mv FZBF9BDIL6VBHKF.tgz rgb_node.tgz

  3. Pobierz z przeglądarki na komputerze stacjonarnym. Użyj WinSCP, aby skopiować go do katalogu ~pi w Pi-Zero

Po wykonaniu #1 2 lub 3 powyżej…

cd ~

tar -xzvf drzewo node_rgb.tgz node_rgb … node_rgb public │ Dow_Jones_Index.html index.html style.css ├── rgbDriver ├── rgbDriver.c ├── rgb_main. js ├── start_rgb ├── kill_rgb └── track_dji

Wynikowy plik wykonywalny (z góry) ' rgbDriver ' może być używany niezależnie od procesu interfejsu Node.js.

Aby sprawdzić, czy ten sterownik i sprzęt działają, należy podać sterownikowi zestawy trzech wartości (od 0 do 255), oddzielonych spacją. Jak „echo 255 0 0 |./rgbDriver' dla czerwonego lub 'echo 0 255 0 |./rgbDriver' dla koloru zielonego. Zauważ, że „./” mówi systemowi operacyjnemu, aby znalazł nasz program „rgbDriver” w bieżącym katalogu. Kiedy wydasz ^c (cntl-c), aby zatrzymać sterownik, dioda może, ale nie musi, pozostać włączona. Alternatywnie możesz interaktywnie karmić jego wartościami. Spróbuj wpisać z wiersza poleceń te wiersze jedna po drugiej i obserwuj diodę LED.

./sterownik rgb

0 255 0 100 0 100 255 255 0 …itd… ^c

Upewnij się, że nie masz 2 z tych procesów działających równolegle.

Aby uruchomić pełny pakiet aplikacji, w tym serwer Node.js, użyj tego polecenia:

sudo node rgb_main.js

Następnie użyj cntl-c, gdy chcesz zatrzymać serwer Node.js. Uruchom go za pomocą

węzeł sudo rgb_main.js&

aby działał w tle, ale wtedy będziesz musiał użyć polecenia „sudo kill -9 pid”, aby go zatrzymać. Jeśli to polecenie wydaje ci się obce, przejrzyj wyniki tych poleceń: „man kill” i „man sudo”.

Użyj przeglądarki na komputerze stacjonarnym, tablecie lub telefonie, który jest podłączony do sieci lokalnej. Przejdź do https://raspberrypi:8080/ lub jeśli to nie zadziała, użyj adresu IP urządzenia (uzyskanego z cmd 'ifconfig') czegoś takiego jak 192.168.1.15 plus specyfikacja portu:8080 lub jeśli używasz Pi-Zero's GUI: localhost:8080 będzie działać.

Obsługuj suwaki RGB na wyświetlonej stronie i obserwuj, jak lampa LED RGB podąża za nimi.

Inne pomocne polecenia Pamiętaj, że jeśli w jednym czasie uruchomisz więcej niż jeden sterownik rgbDriver, prawdopodobnie zachowasz nieprzewidywalne zachowanie. Jeśli spróbujesz uruchomić drugą kopię rgb_main.js, wystąpi błąd.

To polecenie wyświetli listę wszystkich powiązanych procesów:

ps aux | grep rgb

To polecenie zabije wszystkie procesy nodeJS, wraz z procesami potomnymi „rgbDriver”:

sudo ps aux | grep node.*rgb | awk '{print "sudo kill -9 " $2}' | CII

Samodzielna praca

Aby Pi-Zero uruchomił aplikację serwera Node.js podczas uruchamiania… używając ulubionego edytora (np. nano ~/.bash_profile), wpisz następujące wiersze i zapisz do ~/.bash_profile

cd node_rgb

sudo node rgb_main.js &

Aby zapobiec otrzymywaniu uciążliwych komunikatów o błędach podczas otwierania okna terminala, użyj kodowania warunkowego, takiego jak skrypt powłoki w pliku „start_rgb”

Gdy Pi-Zero działa w trybie osadzonym, bez klawiatury, myszy lub monitora; graficzny interfejs użytkownika zajmie minimalny czas procesora, ponieważ nie będzie interakcji użytkownika. Nie wyłączam automatycznego uruchamiania GUI, ponieważ Pi-Zero ma więcej zasobów niż potrzeba, w tym przypadku; i lubię mieć możliwość podłączenia kilku kabli i korzystania z niego w dowolnym momencie w przyszłości. Nie jest to jednak konieczne, ponieważ możesz użyć zdalnego terminala SSH (np. PuTTY), aby wykonać wszelkie niezbędne czynności konserwacyjne.

Używanie go jako monitora zdarzeń

Stworzyłem stronę internetową do monitorowania dziennej zmiany indeksu Dow Jones. Jego źródło może służyć jako wskazówka dla własnej strony, która wykorzystuje niektóre dane internetowe i odpowiednio steruje wskaźnikiem Pi-Zero. Ta strona pobiera swoje dane (json) z usługi internetowej Google. Istnieje wiele form usług internetowych, więc będziesz musiał zbadać ten, którego chcesz użyć, aby określić kod JavaScript, aby uzyskać do niego dostęp.

Jeśli chcesz używać swojego urządzenia, tak jak ja, jako dedykowanego, samodzielnego wskaźnika zmiany indeksu Dow, dodaj te wiersze na końcu pliku ~/.bash_profile lub zgodnie z życzeniem SSH i wydaj drugą linię poleceń. Jeśli następnie chcesz użyć zdalnego sterowania, 'zabij -9' wynikowy proces epifanii-przeglądarki.

spać 20

epiphany-browser --display=:0.0 localhost:8080/Dow_Jones_Index.html &

Wskaźnik zaświeci się na jasnoszary przy wartości 0. Staje się coraz bardziej zielony przy wyższych wartościach. Jest to najjaśniejszy czysty zielony przy około 250. Wyższe jeszcze wartości powodują początkowo płytki błysk, aż do najgłębszego błysku przy około 500. Dla wartości ujemnej (codzienne spadki w Dow) robi się podobnie, ale w czerwieni.

AKTUALIZACJA maj 2018

Utworzyłem nową stronę internetową (SolarStorm_devCon.html, dołączoną jako plik.txt, ponieważ plik.html nie został przesłany), która zbiera informacje o burzy geomagnetycznej (co może zapowiadać niszczycielskie CME, EMP) i używa ich do przedstawienia koloru skala odzwierciedlająca rodzaj indeksu „DevCon” Geo-Storm. wskazujący na potencjalną katastrofę spowodowaną impulsem elektromagnetycznym (EMP) wynikającym z pogody kosmicznej, przypuszczalnie rozbłysków słonecznych lub koronalnego wyrzutu masy (CME). Użyj go tak, jakbyś używał „Dow_Jones_Index.html”.

Krok 6: Zdalna kontrola strony internetowej

Image
Image

W tym momencie możesz kontrolować swoją kolorową lampę IOT z dowolnego miejsca w sieci lokalnej. Jak sprawić, by była widoczna w publicznym Internecie, nie jest częścią tej instrukcji. Jeśli skonfigurujesz publiczny adres IP dla swojego urządzenia, musisz użyj tego adresu IP w poleceniu open socket w JavaScript swoich stron (np. ~/node_rgb/public/index.html)

Planuję użyć mojego urządzenia Pi-Zero IOT jako wskaźnika koloru w czasie rzeczywistym dla zmiany dnia w indeksie Dow Jones. Stworzyłem stronę, która to robi, która pobiera dane json z google.com/finance. Stworzyłem następnie kilka stron internetowych, aby zademonstrować szeroki zakres zastosowań tego małego urządzenia IOT. Zamiast umieszczać moje PiZero w publicznym Internecie, ja hostował strony na moim istniejącym publicznym serwerze WWW (obecnie @ 71.84.135.81 aka: https://raspi.ddns01.com/ kiedy działa mój darmowy dynamiczny serwer nazw domen), który działa na oryginalnej wersji B Raspberry-Pi.

W kodzie na moich zdalnych stronach otworzyłem połączenia z gniazdami na 192.168.1.41:8080, naprawiłem ip mojego Pi-Zero na 192.168.1.41. Aby zrobić podobnie, postępuj zgodnie ze wskazówkami w setup-up-raspberry-pi-with-wifi-and-a-static-ip pod nagłówkiem: Statyczny adres IP. Więc jeśli ustawisz PiZero na 192.168.1.41 w sieci lokalnej, te strony, otwarte z mojej strony internetowej, będą komunikować się z Twoim urządzeniem, ponieważ połączenie odbywa się po stronie klienta.

Oto te strony, na których testowałem i obsługiwałem moje urządzenie oświetleniowe Pi-Zero IOT. Jeśli wywołasz te strony (https://71.84.135.81/iot/rgbLamp/ alias https://raspi.ddns01.com/iot/rgbLamp/ lub którakolwiek ze stron w ramkach na tej stronie) JavaScript po stronie klienta steruj utworzonym światłem IOT (pod warunkiem, że działa pod tym adresem URL „192.168.1.41:8080”) Jeśli chcesz, możesz skopiować źródło dowolnej z tych stron i zmodyfikować je zgodnie z własnymi upodobaniami.

Na pierwszej stronie możesz ustawić urządzenie na dowolny kolor. Lampa LED i kolor, który widzisz na stronie internetowej, będą dość dobrze śledzone. Użyte wartości rezystora można modyfikować (podobnie jak monitor), aby były bardziej dopasowane. Spędziłem niewiele czasu, aby upewnić się, że pasują. Ta strona zaktualizuje swój kolor za każdym razem, gdy ktoś inny zmieni kolor, a serwer wyśle zaktualizowaną wiadomość informacyjną.

Jedna strona to prosta sygnalizacja świetlna sterowana przyciskiem.

Istnieje strona przeznaczona do śledzenia zawodów sportowych (np. Piłka nożna, koszykówka, baseball), wybory, a nawet przystosowana do zbierania funduszy lub wskaźnika poziomu alertu DEFCON. Wyniki (lub oddane głosy wyborcze) mogą być automatycznie uzyskane z serwisu internetowego lub zeskrobane z innej strony internetowej. Nie mam automatycznego kanału sterującego moją stroną Contest_demo. Ktoś z odpowiednim know-how mógłby dodać sterownik mocy, aby uruchomić reflektory LED o dużej mocy i kąpać pokój (lub bar sportowy) w kolorze drużyny, gdy jest na prowadzeniu. Niestety spóźniłem się z tym pouczającym na tegorocznych imprezach super-miskowych, ale na czas na wybory w 2016 roku.

Jest też strona podobna do tej, której użyję, aby zmienić moje urządzenie w wskaźnik śledzenia Dow Jones. Suwak i przyciski znajdują się tylko na stronie demo DJI w celach demonstracyjnych. W źródle tej strony znajduje się kod, który opracowałem, aby ponownie pokolorować obraz inspirowany zielonym ekranem; z wystarczającą ilością komentarzy, które również mogą Ci się przydać.

Tylko pierwsza z tych 4 stron (wraz ze stroną index.html opartą na Pi-Zero) nasłuchuje komunikatów aktualizacji serwera i odpowiednio się odświeża. Całą resztę wysyłamy tylko na serwer.

Zalecana: