Tytuł Oryginału: Raspberry Pi Cookbook: Software And Hardware Problems .

Transcription

Tytuł oryginału: Raspberry Pi Cookbook: Software and Hardware Problems and Solutions, 3rd EditionTłumaczenie:Anna Mizerska z wykorzystaniem fragmentów Raspberry Pi. Recepturyw przekładzie Konrada MatukaISBN: 978-83-283-6647-3 2020 Helion SAAuthorized Polish translation of the English edition of Raspberry Pi Cookbook, 3rd Edition ISBN9781492043225 2020 Simon MonkThis translation is published and sold by permission of O’Reilly Media, Inc.,which owns or controls all rights to publish and sell the same.All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means,electronic or mechanical, including photocopying, recording or by any information storage retrieval system,without permission from the Publisher.Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszejpublikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną,fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powodujenaruszenie praw autorskich niniejszej publikacji.Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ichwłaścicieli.Autor oraz Helion SA dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletnei rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tymewentualne naruszenie praw patentowych lub autorskich. Autor oraz Helion SA nie ponoszą równieżżadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce.Helion SAul. Kościuszki 1c, 44-100 Gliwicetel. 32 231 22 19, 32 230 98 63e-mail: helion@helion.plWWW: http://helion.pl (księgarnia internetowa, katalog książek)Drogi Czytelniku!Jeżeli chcesz ocenić tę książkę, zajrzyj pod adreshttp://helion.pl/user/opinie/raspr3Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.Pliki z przykładami omawianymi w książce można znaleźć pod inted in Poland. Kup książkę Poleć książkę Oceń książkę Księgarnia internetowa Lubię to! » Nasza społeczność

Spis treściWstęp do wydania trzeciego . 151. Podłączanie i konfiguracja . 191.0. Wprowadzenie1.1. Wybór modelu Raspberry Pi1.2. Podłączanie urządzeń zewnętrznych do Raspberry Pi1.3. Zamknięcie Raspberry Pi w obudowie1.4. Wybór zasilacza1.5. Wybór dystrybucji systemu operacyjnego1.6. NOOBS — zapis na kartę mikro-SD1.7. Instalacja systemu operacyjnego bez NOOBS1.8. Użycie PiBakery do konfiguracji i zapisu karty SD1.9. Użycie PiBakery do konfiguracji Raspberry Pi bez monitora1.10. Uruchamianie systemu z zewnętrznego dysku twardego lub z pendrive’a1.11. Podłączanie monitora wyposażonego w interfejs DVI lub VGA1.12. Korzystanie z telewizora lub monitora podłączonego za pośrednictwemzłącza composite video1.13. Zmiana rozmiaru obrazu wyświetlanego na monitorze1.14. Maksymalizacja wydajności1.15. Zmiana hasła1.16. Wyłączanie Raspberry Pi1.17. Instalacja modułu kamery1.18. Użycie Bluetootha191922242629303435373942424446485051552. Praca w sieci . 592.0. Wprowadzenie2.1. Łączenie z siecią przewodową2.2. Ustalanie własnego adresu IP2.3. Przypisywanie stałego adresu IP2.4. Zmiana nazwy, pod którą Raspberry Pi jest widoczne w sieci59596162655Kup książkęPoleć książkę

2.5. Nawiązywanie połączenia z siecią bezprzewodową2.6. Korzystanie z kabla konsolowego2.7. Zdalne sterowanie Raspberry Pi za pomocą protokołu SSH2.8. Sterowanie Raspberry Pi za pomocą VNC2.9. Zdalne sterowanie Raspberry Pi za pomocą zdalnego pulpitu2.10. Udostępnianie plików w sieci komputerów Macintosh2.11. Używanie Raspberry Pi jako magazynu NAS2.12. Drukowanie sieciowe68707476787981843. System operacyjny . 873.0. Wprowadzenie3.1. Przenoszenie plików w interfejsie graficznym3.2. Kopiowanie plików na pamięć USB3.3. Uruchamianie sesji Terminala3.4. Przeglądanie plików i folderów za pomocą Terminala3.5. Kopiowanie plików i folderów3.6. Zmiana nazwy pliku lub folderu3.7. Edycja pliku3.8. Oglądanie zawartości pliku3.9. Tworzenie plików bez użycia edytora3.10. Tworzenie katalogów3.11. Kasowanie plików i katalogów3.12. Wykonywanie zadań z uprawnieniami administratora3.13. Co oznaczają atrybuty plików?3.14. Modyfikacja atrybutów plików3.15. Zmiana właściciela pliku3.16. Wykonywanie zrzutów ekranu3.17. Instalacja oprogramowania za pomocą polecenia apt-get3.18. Usuwanie zainstalowanego oprogramowania za pomocą polecenia apt-get3.19. Instalowanie bibliotek Pythona za pomocą Pip3.20. Pobieranie plików za pomocą wiersza poleceń3.21. Pobieranie kodu źródłowego za pomocą polecenia git3.22. Pobieranie materiałów pomocniczych do tej książki3.23. Automatyczne uruchamianie programu lub skryptu przy starcie Raspberry Pi3.24. Automatyczne uruchamianie programu lub skryptu jako usługi3.25. Automatyczne uruchamianie programu lub skryptuw regularnych odstępach czasu3.26. Wyszukiwanie3.27. Korzystanie z historii wiersza poleceń3.28. Monitorowanie aktywności procesora3.29. Obsługa 6107108108109110112115116118119120122124Spis treściKup książkęPoleć książkę

3.30. Wyświetlanie listy podłączonych urządzeń USB3.31. Zapisywanie w pliku komunikatów wyświetlanych w wierszu poleceń3.32. Łączenie plików3.33. Korzystanie z potoków3.34. Ukrywanie danych wyjściowych wyświetlanych w oknie Terminala3.35. Uruchamianie programów w tle3.36. Tworzenie aliasów poleceń3.37. Ustawianie daty i godziny3.38. Ustalanie ilości wolnego miejsca na karcie pamięci3.39. Sprawdzanie wersji systemu operacyjnego3.40. Aktualizacja systemu Raspbian1241251261261271281291291301311324. Oprogramowanie .1334.0. Wprowadzenie4.1. Tworzenie multimedialnego centrum rozrywki4.2. Instalowanie oprogramowania biurowego4.3. Uruchamianie serwera kamery internetowej4.4. Uruchamianie emulatora klasycznej konsoli do gier4.5. Uruchamianie gry Minecraft4.6. Raspberry Pi jako nadajnik radiowy4.7. Edycja grafiki rastrowej4.8. Edycja grafiki wektorowej4.9. Radio internetowe1331331351361381401411431441455. Podstawy Pythona .1475.0. Wprowadzenie5.1. Wybór pomiędzy Pythonem 2 a 35.2. Edytowanie programów Pythona z Mu5.3. Korzystanie z konsoli Pythona5.4. Uruchamianie programów napisanych w Pythonie za pomocą Terminala5.5. Zmienne5.6. Wyświetlanie danych generowanych przez program5.7. Wczytywanie danych wprowadzonych przez użytkownika5.8. Działania arytmetyczne5.9. Tworzenie łańcuchów5.10. Scalanie (łączenie) łańcuchów5.11. Konwersja liczb na łańcuchy5.12. Konwersja łańcuchów na liczby5.13. Ustalanie długości łańcucha5.14. Ustalanie pozycji łańcucha w łańcuchu5.15. Wydobywanie fragmentu łańcucha5.16. Zastępowanie fragmentu łańcucha innym 161161162163Spis treściKup książkę7Poleć książkę

5.17. Zamiana znaków łańcucha na wielkie lub małe litery5.18. Uruchamianie poleceń po spełnieniu określonych warunków5.19. Porównywanie wartości5.20. Operatory logiczne5.21. Powtarzanie instrukcji określoną liczbę razy5.22. Powtarzanie instrukcji do momentu, w którym zostanie spełnionyokreślony warunek5.23. Przerywanie działania pętli5.24. Definiowanie funkcji1631641661671681691691706. Python — listy i słowniki . 1736.0. Wprowadzenie6.1. Tworzenie list6.2. Uzyskiwanie dostępu do elementu znajdującego się na liście6.3. Ustalanie długości listy6.4. Dodawanie elementów do listy6.5. Usuwanie elementów z listy6.6. Tworzenie listy w wyniku przetwarzania łańcucha6.7. Iteracja listy6.8. Numerowanie elementów listy6.9. Sortowanie listy6.10. Wycinanie fragmentu listy6.11. Przetwarzanie elementów listy przez funkcję6.12. Tworzenie słownika6.13. Uzyskiwanie dostępu do elementów znajdujących się w słowniku6.14. Usuwanie elementów ze słownika6.15. Iteracja 31841857. Python — zaawansowane funkcje . 1877.0. Wprowadzenie7.1. Formatowanie liczb7.2. Formatowanie dat7.3. Zwracanie więcej niż jednej wartości7.4. Definiowanie klasy7.5. Definiowanie metody7.6. Dziedziczenie7.7. Zapis danych w pliku7.8. Odczytywanie pliku7.9. Serializacja7.10. Obsługa wyjątków7.11. Stosowanie modułów7.12. Liczby losowe8187187188189190191192193194195196197199Spis treściKup książkęPoleć książkę

7.13. Wysyłanie żądań do sieci Web7.14. Argumenty Pythona w wierszu poleceń7.15. Uruchamianie poleceń Linuxa z Pythona7.16. Wysyłanie wiadomości pocztą elektroniczną z poziomu aplikacji Pythona7.17. Prosty serwer sieci Web napisany w Pythonie7.18. Usypianie programu Pythona7.19. Wykonywanie kilku zadań naraz7.20. Python i Minecraft Pi7.21. Przetwarzanie danych do formatu JSON7.22. Tworzenie interfejsu użytkownika7.23. Wyszukiwanie tekstu za pomocą wyrażeń regularnych7.24. Sprawdzanie poprawności wprowadzanych danychprzy użyciu wyrażeń regularnych7.25. Pozyskiwanie danych ze stron internetowych przy użyciu wyrażeń 8. Rozpoznawanie obrazów .2198.0. Wprowadzenie8.1. Instalacja programu SimpleCV8.2. Ustawienie kamery USB do rozpoznawania obrazów8.3. Użycie modułu kamery do Raspberry Pi do rozpoznawania obrazów8.4. Liczenie monet8.5. Wykrywanie twarzy8.6. Wykrywanie ruchu8.7. Optyczne rozpoznawanie znaków2192192202222232272282319. Podstawowy sprzęt elektroniczny .2339.0. Wprowadzenie9.1. Styki złącza GPIO9.2. Bezpieczne korzystanie ze złącza GPIO9.3. Konfiguracja magistrali I2C9.4. Korzystanie z narzędzi I2C9.5. Przygotowanie do pracy interfejsu SPI9.6. Instalowanie biblioteki PySerial pozwalającej na korzystaniez portu szeregowego przez aplikacje Pythona9.7. Testowanie portu szeregowego za pomocą aplikacji Minicom9.8. Łączenie Raspberry Pi z płytką prototypowąza pomocą przewodów połączeniowych9.9. Łączenie modułu Pi Cobbler z płytką prototypową9.10. Użycie Raspberry Squid9.11. Użycie przycisku Raspberry Squid9.12. Zmniejszanie napięcia sygnałów z 5 do 3,3 V za pomocą dwóch rezystorówSpis treściKup Poleć książkę

9.13. Korzystanie z modułu przetwornika obniżającego napięcie sygnałów z 5 do 3,3 V9.14. Zasilanie Raspberry Pi za pomocą baterii9.15. Zasilanie Raspberry Pi za pomocą akumulatora litowo-polimerowego (LiPo)9.16. Rozpoczęcie pracy z Sense HAT9.17. Rozpoczęcie pracy z Explorer HAT Pro9.18. Rozpoczynanie pracy z płytką RaspiRobot9.19. Używanie płytki prototypowej Pi Plate9.20. Tworzenie HAT9.21. Pi Zero i Pi Zero W25225325525625825926126526810. Sterowanie sprzętem elektronicznym . 27110.0. Wprowadzenie10.1. Podłączanie diody LED10.2. Pozostawienie pinów GPIO w bezpiecznym stanie10.3. Regulacja jasności diody LED10.4. Sterowanie pracą urządzenia o dużej mocy zasilanego prądem stałymza pośrednictwem tranzystora10.5. Włączanie urządzeń o dużej mocy za pomocą przekaźnika10.6. Sterowanie urządzeniami zasilanymi wysokim napięciem przemiennym10.7. Sterowanie sprzętem za pomocą Androida i Bluetootha10.8. Tworzenie interfejsu pozwalającego na włączanie i wyłączanie elektronikipodłączonej do Raspberry Pi10.9. Tworzenie interfejsu użytkownika pozwalającego na sterowanie mocą diodi silników za pomocą modulacji czasu trwania impulsu10.10. Zmiana koloru diody RGB LED10.11. Stosowanie analogowego woltomierza w charakterzewyświetlacza 11. Silniki . 29511.0. Wprowadzenie11.1. Sterowanie pracą serwomotoru11.2. Dokładne sterowanie serwomotorami11.3. Sterowanie pracą wielu serwomotorów11.4. Sterowanie prędkością obrotową silnika zasilanego prądem stałym11.5. Zmienianie kierunku obrotów silnika zasilanego prądem stałym11.6. Używanie unipolarnych silników krokowych11.7. Korzystanie z bipolarnych silników krokowych11.8. Sterowanie pracą bipolarnego silnika krokowego za pomocą Stepper Motor HAT11.9. Sterowanie pracą bipolarnego silnika krokowego za pośrednictwempłytki RasPiRobot11.10. Budowa prostego jeżdżącego robota10295295300302305307310314316317319Spis treściKup książkęPoleć książkę

12. Cyfrowe wejścia .32312.0. Wprowadzenie12.1. Podłączanie przełącznika chwilowego12.2. Korzystanie z przełącznika chwilowego12.3. Korzystanie z dwupozycyjnego przełącznika bistabilnego lub suwakowego12.4. Korzystanie z przełącznika trójpozycyjnego12.5. Redukcja drgań styków powstających podczas wciskania przycisku12.6. Korzystanie z zewnętrznego rezystora podciągającego12.7. Korzystanie z (kwadrantowego) enkodera obrotowego12.8. Korzystanie z bloku klawiszy12.9. Wykrywanie ruchu12.10. Raspberry Pi i moduł GPS12.11. Wprowadzanie danych z klawiatury12.12. Przechwytywanie ruchów myszy12.13. Korzystanie z modułu zegara czasu rzeczywistego12.14. Dodanie włącznika do Raspberry Pi32332332632832933233433533834134334734834935313. Czujniki .35713.0. Wprowadzenie13.1. Korzystanie z czujników rezystancyjnych13.2. Pomiar jasności światła13.3. Pomiar temperatury za pomocą termistora13.4. Wykrywanie metanu13.5. Pomiar stężenia dwutlenku węgla13.6. Pomiar napięcia13.7. Stosowanie dzielnika napięcia13.8. Podłączanie rezystancyjnego czujnika do przetwornika analogowo-cyfrowego13.9. Pomiar temperatury za pomocą przetwornika analogowo-cyfrowego13.10. Pomiar temperatury procesora Raspberry Pi13.11. Pomiar temperatury, wilgotności i ciśnienia za pomocą Sense HAT13.12. Pomiar temperatury za pomocą cyfrowego czujnika13.13. Pomiar przyspieszenia przy użyciu modułu MMA8452Q13.14. Wyznaczanie magnetycznej północy przy użyciu Sense HAT13.15. Wykorzystanie inercyjnej jednostki zarządzania nakładki Sense HAT13.16. Wykrywanie magnesu przy użyciu kontraktonu13.17. Wykrywanie magnesu przy użyciu nakładki Sense HAT13.18. Pomiar odległości przy użyciu ultradźwiękowego dalmierza13.19. Pomiar odległości przy użyciu czujnika Time-of-Flight13.20. Pojemnościowy czujnik dotyku13.21. Odczyt kart elektronicznych przy użyciu RFID13.22. Wyświetlanie mierzonych wielkości13.23. Zapisywanie danych do dziennika utworzonego w pamięci USBSpis treściKup 8438838939039139239539739940240411Poleć książkę

14. Wyświetlacze . 40714.0. Wprowadzenie14.1. Korzystanie z czterocyfrowego wyświetlacza LED14.2. Wyświetlanie komunikatów za pomocą wyposażonego w interfejs I2Cwyświetlacza składającego się z matrycy diod LED14.3. Korzystanie z wyświetlacza składającego się z matrycy diod LEDna nakładce Sense HAT14.4. Wyświetlanie komunikatów na alfanumerycznej nakładce LCD HAT14.5. Korzystanie z wyświetlacza OLED14.6. Korzystanie z taśmy LED RGB14.7. Korzystanie z nakładki Unicorn HAT firmy Pimoroni14.8. Korzystanie z papieru elektronicznego40740740941141441641842142315. Dźwięk . 42515.0. Wprowadzenie15.1. Podłączenie głośnika15.2. Kontrolowanie wyjścia audio15.3. Odtwarzanie dźwięku z linii poleceń15.4. Odtwarzanie dźwięku za pomocą Pythona15.5. Użycie mikrofonu na USB15.6. Generowanie brzęczącego dźwięku42542542742942943043316. Internet rzeczy . 43516.0. Wprowadzenie16.1. Sterowanie złączem GPIO za pomocą sieci Web16.2. Wyświetlanie odczytów czujników na stronie internetowej16.3. Rozpoczęcie pracy z Node-RED16.4. Wysyłanie powiadomień z użyciem IFTTT16.5. Wysyłanie tweetów za pomocą ThingSpeak16.6. CheerLights16.7. Wysyłanie odczytów czujnika do ThingSpeak16.8. Odpowiadanie na tweety przy użyciu Dweet i IFTTT43543543944244645045245345617. Inteligentny dom . 46117.0. Wprowadzenie17.1. Raspberry Pi jako Message Broker17.2. Korzystanie z Node-RED i MQTT17.3. Wgrywanie nowego oprogramowania układowego na bezprzewodowyprzełącznik Sonoff Wi-Fi Smart Switch17.4. Konfiguracja przełącznika Sonoff Wi-Fi Smart Switch17.5. Użycie przełącznika Sonoff z MQTT17.6. Użycie przełącznika Sonoff z Node-RED12461461464469475477480Spis treściKup książkęPoleć książkę

17.7. Panel sterowania w Node-RED17.8. Planowanie zdarzeń z Node-RED17.9. Publikowanie wiadomości MQTT z WeMos D117.10. Użycie WeMos D1 z Node-RED48348748949218. Raspberry Pi i Arduino .49518.0. Wprowadzenie18.1. Programowanie Arduino za pośrednictwem Raspberry Pi18.2. Komunikacja z Arduino za pośrednictwem monitora portu szeregowego18.3. Sterowanie Arduino za pomocą biblioteki PyFirmatazainstalowanej na Raspberry Pi18.4. Sterowanie pracą cyfrowych wyjść Arduino za pomocą Raspberry Pi18.5. Sterowanie Arduino za pomocą biblioteki PyFirmata za pośrednictwemportu szeregowego18.6. Odczytywanie danych z cyfrowych wejść Arduinoza pomocą biblioteki PyFirmata18.7. Odczytywanie danych z analogowych wejść Arduinoza pomocą biblioteki PyFirmata18.8. Obsługa wyjść analogowych (PWM) za pomocą biblioteki PyFirmata18.9. Sterowanie pracą serwomotoru za pomocą biblioteki PyFirmata18.10. Podłączanie do Raspberry Pi mniejszych płytek Arduino18.11. Korzystanie z płytki z wbudowanym Wi-Fi (ESP8266)495496498500502504506508510512514515A Komponenty i dystrybutorzy .519B Piny Raspberry Pi .525Spis treściKup książkę13Poleć książkę

14Spis treściKup książkęPoleć książkę

ROZDZIAŁ 16.Internet rzeczy16.0. WprowadzenieInternet rzeczy (ang. Internet of Things — IoT) to bardzo szybko rozwijająca się sieć urządzeń(rzeczy) podłączonych do Internetu. Internet rzeczy to nie tylko komputery, na których korzystamy z przeglądarek internetowych, ale także wszystkie sprzęty, które mogą łączyć się z globalnąsiecią, włączając w to różnego rodzaju inteligentne systemy zarządzania domem, takie jak inteligentne sprzęty domowe i oświetlenie, systemy ochrony, a nawet karmniki dla zwierząt sterowaneprzez Internet lub inne, mniej praktyczne, lecz zabawne projekty.Po lekturze tego rozdziału będziesz wiedzieć, w jaki sposób Twoje Raspberry Pi może stać się częściąInternetu rzeczy.16.1. Sterowanie złączem GPIO za pomocą sieci WebProblemChcesz sterować pracą wyjść złącza GPIO za pośrednictwem sieci Web.RozwiązanieSkorzystaj z biblioteki bottle (zobacz receptura 7.17). Pozwoli ona na stworzenie interfejsu sieciowego umożliwiającego sterowanie złączem GPIO za pośrednictwem dokumentu HTML.Aby skorzystać z tej receptury, musisz zbudować obwód składający się z:xpłytki prototypowej i przewodów połączeniowych (zobacz sekcja „Sprzęt przydatny podczaswykonywania prototypów” w dodatku A),xtrzech rezystorów 1 k: (zobacz sekcja „Rezystory i kondensatory” w dodatku A),xtrzech diod LED (zobacz sekcja „Optoelektronika” w dodatku A),xtrzech przełączników chwilowych (zobacz sekcja „Pozostałe” w dodatku A).Na rysunku 16.1 przedstawiono ułożenie tych elementów na płytce prototypowej.435Kup książkęPoleć książkę

Rysunek 16.1. Schemat obwodu sterowanego za pośrednictwem strony WebZamiast płytki prototypowej możesz użyć przełącznika i diody LED umieszczonych na przewodach i podpinanych bezpośrednio do pinów GPIO (zobacz receptury 9.10 i 9.11), tak jak zostałoto pokazane na rysunku 16.2.Rysunek 16.2. Przełącznik i dioda LED podłączone bezpośrednio do pinów GPIO Raspberry Pi436Rozdział 16. Internet rzeczyKup książkęPoleć książkę

Proces instalacji biblioteki bottle opisano w recepturze 7.17.Umieść poniższy kod (plik r16 web control.py) w oknie środowiska programistycznego IDLE.from bottle import route, runfrom gpiozero import LED, Buttonleds [LED(18), LED(23), LED(24)]switch Button(25)def switch status():if switch.is pressed:return 'Wcisnietyelse:return 'Niewcisniety'def html for led(led number):i str(led number)result " input type 'button' onClick 'changed(" i ")' value 'LED " i "'/ "return result@route('/')@route('/ led number ')def index(led number "n"):if led number ! "n":leds[int(led number)].toggle()response " script "response "function changed(led)"response "{"response " window.location.href '/' led"response "}"response " /script "response ' h1 Sterowanie gniazdem GPIO /h1 'response ' h2 Przycisk ' switch status() ' /h2 'response ' h2 Diody /h2 'response html for led(0)response html for led(1)response html for led(2)return responserun(host '0.0.0.0', port 80)Podobnie jak wszystkie programy pokazane w tej książce, powyższy kod znajdziesz w materiałachdo pobrania (zobacz recepturę 3.22).Program należy uruchomić jako użytkownik posiadający uprawnienia administratora, używającwersji Python 2: sudo python r16 web control.pyJeżeli program zostanie uruchomiony poprawnie, powinien się wyświetlić komunikat o treścipodobnej do poniższej:Bottle server starting up (using WSGIRefServer()).Listening on http://0.0.0.0:80/Hit Ctrl-C to quit.16.1. Sterowanie złączem GPIO za pomocą sieci WebKup książkę437Poleć książkę

Jeżeli otrzymujesz wiadomości o błędach, upewnij się, że uruchamiasz program przy użyciu komendy sudo oraz python, a nie python3.Na dowolnym komputerze, lub na samym Raspberry Pi, pracującym w Twojej sieci uruchomprzeglądarkę. W polu adresu wpisz adres IP swojego Raspberry Pi (zobacz recepturę 2.2). Powinien się wyświetlić interfejs widoczny na rysunku 16.3.Rysunek 16.3. Sieciowy interfejs sterujący pracą złącza GPIOKlikając któryś przycisk LED, zobaczysz, jak skorelowana z nim dioda zapala się i gaśnie.Jeżeli wciśniesz przycisk podłączony do Raspberry Pi i przeładujesz stronę w przeglądarce, to zobaczysz, że obok słowa Przycisk widnieje napis Wciskasz (zamiast Nie wciskasz).OmówienieŻeby przedstawić działanie programu, najpierw przyjrzymy się interfejsowi sieci Web. Działaniewszystkich interfejsów sieciowych opiera się na serwerze odpowiadającym na żądania wysyłaneprzez przeglądarkę. W naszym przypadku funkcję serwera pełni program uruchomiony naRaspberry Pi.Serwer po odebraniu żądania analizuje zawarte w nim informacje i generuje w odpowiedzi dokument HTML (dokument sformatowany w języku hipertekstowego znakowania informacji).Jeżeli żądanie sieciowe odwołuje się do strony głównej (http://192.168.1.8/), to zmiennej led numberprzypisana zostanie domyślna wartość parametru n. Jeżeli w przeglądarce wpisalibyśmy adreshttp://192.168.1.8/2, to liczba 2 znajdująca się na końcu adresu URL zostałaby przypisana do parametru led number.Przypisanie parametrowi led number liczby 2 spowoduje przełączenie diody LED 2.Aby uzyskać dostęp do adresu URL przełączającego diodę, musimy spowodować, że po kliknięciuprzycisku LED 2 strona zostanie przeładowana, a na końcu adresu zostanie dodany dodatkowyparametr. Cała sztuczka polega na umieszczeniu w dokumencie HTML funkcji JavaScript wpływającej na pracę przeglądarki. Gdy funkcja ta zostanie uruchomiona przez przeglądarkę, stronazostanie przeładowana, a na końcu adresu zostanie dodany odpowiedni parametr.438Rozdział 16. Internet rzeczyKup książkęPoleć książkę

Wszystko to sprawia, że mamy do czynienia ze złożoną sytuacją, w której program napisanyw Pythonie generuje kod JavaScript uruchamiany później w przeglądarce internetowej. Poniższelinie kodu generują wspomnianą funkcję eresponse " script " "function changed(led)" "{" " window.location.href '/' led" "}" " /script "Kod HTML nie jest powtarzany dla każdego z przycisków z osobna. Jest on generowany przezfunkcję html for led:def html for led(led):l str(led)result " input type 'button' onClick 'changed(" l ")'value 'LED " l "'/ "return resultKod ten jest używany trzykrotnie — po jednym razie dla każdego przycisku. Przekazuje on informacje na temat kliknięcia przycisku do funkcji changed. Do funkcji w roli parametru przekazywany jest również numer diody LED.Sposób określania, czy przycisk jest wciśnięty, jest o wiele prostszy. Polega on na odczytaniu stanuwejścia i wygenerowaniu kodu HTML informującego odbiorcę o tym, czy przycisk jest wciśnięty.Zobacz równieżDodatkowe informacje na temat biblioteki bottle znajdziesz na stronie https://www.bottlepy.org/docs/dev/.16.2. Wyświetlanie odczytów czujnikówna stronie internetowejProblemChcesz wyświetlać odczyty czujnika podłączonego do Twojego Raspberry Pi na automatycznieaktualizowanej stronie internetowej.RozwiązanieUżyj serwera sieciowego bottle i języka JavaScript, aby aktualizować wyświetlane informacje.Przykładowy projekt, pokazany na rysunku 16.4, polega na wyświetlaniu temperatury procesoraRaspberry Pi, mierzonej za pomocą wbudowanego czujnika.16.2. Wyświetlanie odczytów czujników na stronie internetowejKup książkę439Poleć książkę

Rysunek 16.4. Wyświetlanie temperatury procesora Raspberry PiAby dowiedzieć się, jak zainstalować bibliotekę bottle, zobacz recepturę 7.17.W folderze r16 web sensor, znajdującym się w materiałach do pobrania, znajdziesz 4 pliki dlatego przykładu.web sensor.pyZawiera napisany w Pythonie kod dla serwera bottle.main.htmlZawiera kod HTML, który będzie wyświetlany w Twojej przeglądarce.justgage.1.0.1.min.jsZewnętrzna biblioteka JavaScript, która wyświetla grafikę termometru.raphael.2.1.0.min.jsBiblioteka używana przez bibliotekę justgage.W celu uruchomienia programu zmień folder na r16 web sensor i użyj poniższej komendy: sudo python web sensor.pyPodobnie jak pozostałe programy omówione w tej książce, powyższy program znajdziesz w materiałach do pobrania (receptura 3.22).Następnie otwórz przeglądarkę, na tym samym Raspberry Pi lub na innym komputerze podłączonym do tej samej sieci, i wpisz adres IP Raspberry Pi w pasku adresu. Jeżeli wykonałeś wszystkopoprawnie, pojawi się strona podobna do tej pokazanej na rysunku 16.4.440Rozdział 16. Internet rzeczyKup książkęPoleć książkę

OmówienieGłówny program, web sensor.py, jest tak naprawdę bardzo krótki.import os, timefrom bottle import route, run, templatedef cpu temp():dev os.popen('/opt/vc/bin/vcgencmd measure temp')cpu temp dev.read()[5:-3]return cpu temp@route('/temp')def temp():return cpu temp()@route('/')def index():return template('main.html')@route('/raphael')def index():return )def index():return template('justgage.1.0.1.min.js')run(host '0.0.0.0', port 80)Funkcja cpu temp odczytuje temperaturę procesora Raspberry Pi, tak jak zostało to opisane w recepturze 13.10.W dalszej części programu zostały użyte 4 polecenia @route, które łączą podany w nawiasie adresURL z następującą po nich procedurą. Pierwsza ścieżka (/temp) zwraca temperaturę procesoraRaspberry Pi w stopniach Celsjusza. Wartość ta jest zapisana jako zmienna tekstowa. Głównaścieżka (/) zwraca szablon głównej strony HTML, main.html. Dwie pozostałe ścieżki umożliwiajądostęp do kopii bibliotek JavaScript: justgage i raphael.Plik main.html zawiera głównie kod JavaScript do renderowania interfejsu użytkownika. html head script src /jquery.min.js"type "text/javascript" charset "utf-8" /script script src "raphael" /script script src "justgage" /script script function callback(tempStr, status){if (status "success") {temp Timeout(getReading, 1000);}else {alert("Wystapil problem");}}16.2. Wyświetlanie odczytów czujników na stronie internetowejKup książkę441Poleć książkę

function getReading(){ .get('/temp', callback);} /script /head body div id "gauge" class "200x160px" /div script var g new JustGage({id: "gauge",value: 0,min: 10,max: 60,title: "Temperatura procesora 'C"});getReading(); /script /body /html Biblioteka jquery jest importowana bezpośrednio ze strony internetowej ery. Natomiast biblioteki justgage i raphael importowane są z lokalnych plików.Pobieranie odczytu z Raspberry Pi do przeglądarki jest procesem dwustopniowym. Najpierw wywoływana jest funkcja getReading, która wysyła żądanie przez /temp do programu web sensor.py.Gdy nadejdzie odpowiedź, wywołana zostanie funkcja callback odpowiedzialna za aktualizacjęgrafiki termometru wyświetlanej na stronie. Po sekundzie funkcja getReading zostanie wywołanaponownie, zgodnie z drugim argumentem funkcji setTimeout.Zobacz równieżJeżeli chciałbyś wyświetlać odczyty czujnika w aplikacji napisanej w Pythonie zamiast na stronieinternetowej, zobacz recepturę 13.22.Biblioteka justgage ma wiele użytecznych opcji wyświetlania odczytów z czujników. Aby uzyskaćdodatkowe informacje na jej temat, odwiedź stronę https://justgage.com/.16.3. Rozpoczęcie pracy z Node-REDProblemChcesz stworzyć prosty proces IoT polegający na wysyłaniu tweeta po wci

1.1. Wybór modelu Raspberry Pi 19 1.2. Podłączanie urządzeń zewnętrznych do Raspberry Pi 22 1.3. Zamknięcie Raspberry Pi w obudowie 24 1.4. Wybór zasilacza 26 1.5. Wybór dystrybucji systemu operacyjnego 29 1.6. NOOBS — zapis na kartę mikro-SD 30 1.7. Instalacja systemu operacyjnego bez NOOBS 34 1.8.