RaspberryPi software PWM przez przeglądarkę

RaspberryPi software PWM przez przeglądarkę

Niedawno na mym biurku wylądowała nowiutka Malinka. Pomysłów na wykorzystanie jej miałem już w głowie mnóstwo. Jednym z nich było kontrolowanie jej z poziomu przeglądarki internetowej, a konkretniej – sterowanie PWM. Z góry zastrzegam, że nie jest to profesjonalna implementacja tego zagadnienia i wiem, że można to zrobić lepiej, jednak chciałbym zaprezentować mój sposób rozwiązania tego problemu.

Cały proces odbywał się w systemie Raspbian i tak też będę go przedstawiał. Na początek zainstalujmy wiringPi – bibliotekę do obsługi GPIO. Instalujemy GIT:

Następnie pobieramy wiringPi z oficjalnej strony autora:

później kolejno

Aby móc sterować naszą Maliną z przeglądarki potrzebny nam będzie serwer Apache:

Należy również zainstalować PHP5, dzięki któremu będziemy mogli interpretować skrypt dla przeglądarki:

Tworzymy nowy plik w katalogu /var/www o nazwie index.php (jeżeli w katalogu www/ znajduje się plik index.html należy go usunąć poleceniem sudo rm index.html)

i w edytorze wklejamy kod php:

A teraz nieco wyjaśnień: dane z formularza są zapisywane do tablicy POST w komórce [pwm] (linia 16), a następnie wykonuje się polecenie echo, które zapisuje wartość z tablicy w pliku war.txt (linia 20). W przeglądarce pod adresem IP naszej Malinki (jeżeli pracujesz na RPi w polu adresu strony możesz wpisać localhost), który można sprawdzić poleceniem ifconfig, powinniśmy zobaczyć taki widok:

chrome

 

Teraz czas na program uruchamiany na RaspberryPi. w katalogu /home/pi tworzymy nowy plik o nazwie pwm.c

i w edytorze wklejamy

Program jak widać jest bardzo prosty. Odczytuje wartość z pliku war.txt i zapisuje ją do zmiennej moc i porównuje ją z poprzednią wartością z pliku. Jeżeli są takie same, program kontynuuje swoje działanie i ustawia stan wysoki na pinie 0 na czas określony przez wartość z pliku, a następnie ustawia stan niski na resztę czasu okresu. Okres trwa 1ms i w tym czasie wypełnienie stanem wysokim jest procentowo równe wartości z pliku war.txt. Tak właśnie działa software PWM według mojego przepisu :).

Następnie kompilujemy (musimy pamiętać o dodaniu w komendzie dyrektywy -lwiringPi):

i uruchamiamy program w tle:

W tzw. międzyczasie budujemy sobie prosty układzik, żeby sprawdzić czy nasze software PWM działa

pwm

Łączymy jak na obrazku. Wartość rezystora to 220Ω. Wszystko powinno ładnie działać i dioda powinna świecić adekwatnie do tego jaką liczbę wprowadziliśmy w przeglądarce :)

Jest to mój pierwszy wpis na Majsterkowie, dlatego liczę na Wasze przychylne oko i obiektywne komentarze oraz oceny. W tym projekcie korzystałem z poradnika zamieszczonego na stronie http://mikrokontroler.pl/.

Dziękuję serdecznie i pozdrawiam

Maciej Tycner

Ocena: 4.16/5 (głosów: 63)

Podobne posty

12 komentarzy do “RaspberryPi software PWM przez przeglądarkę

    • Z przykładami tak już jest, że to tylko przykłady. Jak będziesz chciał zintegrować jakieś swoje rozwiązanie z użyciem gotowego oprogramowania napisanego w PHP to co zrobisz? Będziesz sięgał lewą ręką w rękawicy bokserskiej, pod kroczem, do tylnej kieszeni spodni?

      Odpowiedz
    • Oj tam, oj tam. Chłopak zrobił jak umiał. Chwali się że zrobił, a jak mu się zachce to dopracuje. Sam mam zrobiony NAS na bazie WYSE S10, w którym brak wsparcia dla DMA (o UDMA nawet nie wspomnę) co przypomina wystawianie portalu z pornografią przez modem analogowy :P. Ale jest i działa i daje się z niego odtwarzać filmy przez sieć i na tą chwilę więcej mi nie trzeba mimo że wrzucanie na niego trawa wieki. Dla niektórych obsługa GPIO to już nie lada wyzwanie.

      A tak z innej beczki – jakie jest zurzycie procesora przy takim programowym PWM’ie??? I jeżeli będą jakieś upgrade’y to proponuję zamienić apache’a czym lżejszym (nginx, lighttpd), a i php możnaby zamienić skryptem cgi ale to tylko luźne hint’y.

      Odpowiedz
      • dziękuję za podpowiedzi ;)
        Skorzystałem z tego, o czym każdy słyszał. Apache i PHP to chyba najpopularniejsze opcje, więc uczyniłem tak jak uczyniłem :)

        A co do zużycia CPU, to szczerze nie sprawdzałem, ale przy najbliższej okazji sprawdzę :)

        Odpowiedz
        • Pytałem bo jak ja się bawiłem RPi to skrypt który w pętli sprawdzał jedno GPIO i zapalał diodę na drugim jak się zmienił stan (wszystko w bashu :P) to mi top pokazywał zurzycie procesora na poziomie ~15% dla tego jednego procesu.

          Odpowiedz
          • W programie napisanym w C wystarczy przepisać odczyt z czystych plików na nazwane potoki i wykorzystać standardowy mechanizm blokowania na odczycie kiedy potok jest pusty. Teraz pewnie jest w stanie zjeść i 100% kiedy nic się nie dzieje.

            Odpowiedz
    • Tylko, jeżeli to jedyny sposób na opróżnienie kieszeni, o którym słyszałem, bądź jedyny, który znam i dzięki niemu opróżniam skutecznie tę kieszeń, to czemu mam robić to inaczej? Kiedy dowiem się, że można to zrobić drugą ręką, bez użycia kolana to chętnie spróbuję ;) dlatego też zamieściłem ten wpis – żeby dowiedzieć się od bardziej doświadczonych osób jak można zrobić to łatwiej/lepiej.

      Co do obsługi gpio: nie wiem dlaczego, ale nie działa mi załączone w gpio opcja pwm, dlatego napisałem własny nieskomplikowany program.

      Odpowiedz
    • Można się domyślić ;) to jest tylko szkielet, który nie jest “idiotoodporny” jak to mawiał mój nauczyciel informatyki. Bez problemu można dać takie zabezpieczenia, ale po co, skoro zakładam, że nie jestem idiotą ;)

      Odpowiedz
  • Jestem początkującym …
    Jobię tak jak autor napisał ;acz wywala mi błąd przy instalacji wiringpi macie może jakiś pomysł co z tym zrobić ?
    pozdrawiam :P

    Odpowiedz

Odpowiedz

anuluj

Masz uwagi?