sterowanie GPIO Raspberry Pi z poziomu przeglądarki internetowej (strony www)

Raspberry Pi posiada 8 dowolnie programowalnych linii I/O + UART (port szeregowy) + I2C + SPI (do wykorzystania również jako zwykłe piny IO). Wszystko (wraz z liniami zasilającymi oraz masy) wyprowadzone na złącze P1 (jest jeszcze kilka linii I/O na innych portach, ale o nich kiedy indziej + nie do wszystkich jest łatwy dostęp).

Ponieważ dostęp do w/w linii jest bezpośredni, to można (i jest nawet wskazane) podłączać różne urządzenia do tego portu, zaś sterowanie rozwiązać np.: poprzez stronę internetową.

Oczywiście dla wytrawnych programistów dostępnych jest cała gama języków programowania + biblioteki umożliwiające prosty dostęp do I/O. Zaś dla osób mniej obeznanych (oraz takich jak ja, czyli dopiero wchodzących w świat języków wysokiego poziomu) na początek zaleca się skorzystanie z gotowych lub pół-gotowych rozwiązań.

I tutaj przychodzi na ratunek WEBIOPI, czyli framework oraz aplikacja webowa pozwalająca na kontrolowanie liniami GPIO z poziomu przeglądarki internetowej.

Instalacja jest bardzo prosta. Konfiguracja również. Pozostaje tylko ustawienie własnego portu, na którym można apkę wypuścić na świat + przekierowanie na routerze i można się bawić.

Bardziej rozbudowany opis webiapi można znaleźć na stronie: http://pccode.pl/raspberry-pi-i-zestaw-duzego-masterkowicza/, gdzie jest przy okazji opis jak podłączyć diody LED poprzez układ ULN.

Pełen opis portów oraz przykłady kodów sterujących nimi dostępny jest tutaj: http://elinux.org/Rpi_Low-level_peripherals. Co ciekawe, przykładowe kody rozpisane są na języki (i powłokę) sh, C, Perl, C#, Ruby i Basic.

Kolejnym ciekawym rozwiązaniem jest podłączenie RPi i zarządzanie nim poprzez port szeregowy. Opis można znaleźć tutaj: http://elinux.org/Rpi_Low-level_peripherals. W sumie port RS można wykorzystać również w drugą stronę (i o ile nie mamy innego portu RS w domu), to przy pomocy tego z RPi odratować na przykład router, który po „update” przestał odpowiadać po protokole http.

RPi to nie tylko 3 w/w interfejsy. Wystarczy chwilę pokombinować i już mamy 1Wire, a na nim zegary RTC, pamięci eeprom, czujniki temperatury i inne gadżety od Dallas… tfu… Maxim Integrated. W projekcie: http://techfreak.pl/nettemp/ wykorzystanych zostało kilka czujników DS18B20, które nie wymagają kalibrowania i posiadają względnie dobrą dokładność.

Na koniec jeszcze opis kolegi Spychalskiego: http://www.spychalski.info/2013/01/12/obsluga-magistrali-i2c-raspberry-pi z manualem do obsługi magistrali I2C. Co prawda w projekcie wykorzystany jest jakiś przetwornik A/C, ale nic nie stoi na przeszkodzie, żeby podłączyć kilka PCF8574, który da nam n x 8 (każdy układ to expander i2c na 8bit) portów I/O dodatkowo.

Arduino pod Ubuntu i dostęp do portu szeregowego (RS) przez zwykłego użytkownika

Wydawałoby się, że dostęp do dowiązania portu szeregowego przez zwykłego użytkownika (nie root’a lub przy użyciu sudo) jest najbardziej oczywistym rozwiązaniem przy pracy z Arduino. Niestety na kilku różnych instancjach Ubuntu miałem z tym problem – na szczęście naprawa tego defektu jest szalenie prosta.

Na wielu forach dyskusyjnych można znaleźć pytania użytkowników odnośnie portu szeregowego w Arduino pod Ubuntu. Po pobieżnej lekturze okazuje się jednak, że społeczność przeważnie miewa problem z zupełnym brakiem dowiązania do portu, co jest zupełnie odrębnym problemem.

Na stronie: http://blog.markloiseau.com/2012/05/install-arduino-ubuntu/ znalazłem arcy-proste rozwiązanie:

I added my user to the dialout group with the command  sudo usermod -a -G dialout mark . Usually, that would have fixed it but iserial port was still grayed out.

Changing the permissions on /dev/ttyACM0 to world readable and writeable fixed the grayed out serial port. I ran  sudo chmod a+rw /dev/ttyACM0 and the serial port menu worked again.

U mnie drugie rozwiązanie zawsze skutkuje sukcesem i umożliwia dalszą zabawę z zestawem.

Miłego programowania:)

narzędzia (kilka kabelków) też trzeba mieć

W wolnej chwili postanowiłem zmontować trochę kabelków, które niewątpliwie przy uruchamianiu mi się przydadzą. Ponieważ jakiś czas temu zaopatrzyłem się w uniwersalne płytki stykowe, to i dokupiłem do nich odpowiednie przewody. Problem jednak miałem z tymi (płytkami), które kiedyś sam robiłem „starą” metodą, czyli z goldpinami. Ten sam problem pojawił się przy wyświetlaczach LCD mających złącze goldpinowe (część dwurzędowe, część jednorzędowe). Skoro włączyłem lutownicę i wyjąłem wszystkie akcesoria, to zmontowałem z lekkim zapasem różne kombinacje. W zasadzie na zdjęciach wszystko widać.

Ale nie samymi kabelkami człowiek żyje. Gdy lutowanie tego samego zestawu: kabelek-złączka stawało się usypiające, to przepinałem się na arduino i IDE. Pod ręką miałem kilka DS18B20 (laserowo kalibrowany cyfrowy czujnik temperatury na magistralę 1Wire). Podłączyłem, trochę poprogramowałem i… wszystko działało.

Z ciekawszych komend:

LiquidCrystal lcd(5, 6, 7, 9, 10, 11, 12); – konfiguracja podłączenia LCD

#define ONE_WIRE_BUS 3
OneWire oneWire(ONE_WIRE_BUS); – definicja i konfiguracja interfejsu 1Wire

cała reszta to proste funkcje i instrukcje, żeby śmigało. Program przy okazji napisałem tak, że jednocześnie śle info na LCD (temperatura w st. C) i RS232 (temperatura w st. C i F, info o ilości czujników oraz ich adresach 1Wire). Jakby ktoś bardzo chciał, to mogę udostępnić kod – jest tak paskudny, że publicznie raczej pokazywać go nie chcę:)

[nggallery id=2]