Pierwsze kroki z Raspberry Pi: zdalne (WiFi) sterowanie PWM na przykładzie serwomechanizmu i LED

Generowanie sygnału PWM i sterowanie przez sieć

Teraz wrócimy do sterowania diodą, ale będziemy korzystać z innej ciekawej funkcjonalności pakietu pigpio, czyli możliwości sterowania przez socket (zarówno lokalnie jak i przez sieć). Program pigpiod domyślnie oczekuje na połączenia na porcie 8888, na który należy wysłać cztery 32-bitowe dane, pierwszą jest kod rozkazu, trzy kolejne są jego argumentami, lista rozkazów jest w tabeli poniżej.

Macro cmd Function p1 p2 res
PI_CMD_MODES 0 gpioSetMode gpio mode value status
PI_CMD_MODEG 1 gpioGetMode gpio mode or error
PI_CMD_PUD 2 gpioSetPullUpDown gpio pull up down value status
PI_CMD_READ 3 gpioRead gpio level or error
PI_CMD_WRITE 4 gpioWrite user gpio level status
PI_CMD_PWM 5 gpioPWM user gpio duty cycle status
PI_CMD_PRS 6 gpioSetPWMrange user gpio range real range or error
PI_CMD_PFS 7 gpioSetPWMfrequency user gpio frequency selected frequency or error
PI_CMD_SERVO 8 gpioServo user gpio pulse width status
PI_CMD_WDOG 9 gpioSetWatchdog user gpio timeout status
PI_CMD_BR1 10 gpioRead_Bits_0_31 levels
PI_CMD_BR2 11 gpioRead_Bits_32_53 levels
PI_CMD_BC1 12 gpioWrite_Bits_0_31_Clear bits 0
PI_CMD_BC2 13 gpioWrite_Bits_32_53_Clear bits 0
PI_CMD_BS1 14 gpioWrite_Bits_0_31_Set bits 0
PI_CMD_BS2 15 gpioWrite_Bits_32_53_Set bits 0
PI_CMD_TICK 16 gpioTick tick
PI_CMD_HWVER 17 gpioHardwareRevision revision
PI_CMD_NO 18 gpioNotifyOpen handle or error
PI_CMD_NB 19 gpioNotifyBegin handle bits status
PI_CMD_NP 20 gpioNotifyPause handle status
PI_CMD_NC 21 gpioNotifyClose handle status
PI_CMD_PRG 22 gpioGetPWMrange user gpio range or error
PI_CMD_PFG 23 gpioGetPWMfrequency user gpio frequency or error
PI_CMD_PRRG 24 gpioGetPWMrealRange user gpio real range or error
PI_CMD_HELP 25 N/A, handled by calling program 0

 

Po wysłaniu tych czterech wartości pigpiod odeśle nam je z tą różnicą, że czwarty parametr będzie zawierał wynik operacji. Jeśli chcielibyśmy zaświecić diodę z wypełnieniem PWM równym 50% powinniśmy wywołać w konsoli polecenie:

Tutaj p określa operację jaką chcemy wykonać, 15 – numer linii, 128 oznacza wypełnienie (zakres od 0 do 255). Aby tę samą operację wykonać przez socket należy wysłać kolejno:

5 – rozkaz PWM,

15 – numer linii,

128 – wartość wypełnienia PWM,

0 – pusta wartość.

W przykładowym filmie posłużono się aplikacją dla systemu Android, która wykonuje powyższe operacje, artykuł na temat sposobu tworzenia takiej aplikacji zamieścimy wkrótce.

Do pobrania

O autorze