前回、RasPi2 でWiringPiを使ってGPIO の制御をしました。
OrangePi でも同様に無いか探したところ、Forkしたものがありました。
WiringOP
https://github.com/zhaolei/WiringOP
サンプルソース
#include <wiringPi.h> #define LED 16 #define MSEC 50 int main (void) { wiringPiSetup () ; pinMode (LED, OUTPUT) ; for (;;) { digitalWrite (LED, HIGH) ; delay (MSEC) ; digitalWrite (LED, LOW) ; delay (MSEC) ; } return 0 ; }
ビルド方法は以下のようにしました。
# gcc -o blink blink.c -lwiringPi -lpthread
ピンの指定が、以下で出てくる wPi の番号のようでした。
root@opi:~# gpio readall +-----+-----+----------+------+---+--OrangePiPC--+---+------+---------+-----+--+ | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM | +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+ | | | 3.3v | | | 1 || 2 | | | 5v | | | | 2 | -1 | SDA.0 | | | 3 || 4 | | | 5V | | | | 3 | -1 | SCL.0 | | | 5 || 6 | | | 0v | | | | 4 | 6 | IO6 PA06 | OUT | 0 | 7 || 8 | | | TxD3 | | | | | | 0v | | | 9 || 10 | | | RxD3 | | | | 17 | -1 | RxD2 | | | 11 || 12 | 0 | OUT | IO1 PD14 | 1 | 18 | | 27 | -1 | TxD2 | | | 13 || 14 | | | 0v | | | | 22 | -1 | CTS2 | | | 15 || 16 | 0 | OUT | IO4 PC04 | 4 | 23 | | | | 3.3v | | | 17 || 18 | 0 | OUT | IO5 PC07 | 5 | 24 | | 10 | -1 | MOSI | | | 19 || 20 | | | 0v | | | | 9 | -1 | MISO | | | 21 || 22 | | | RTS2 | | | | 11 | -1 | SCLK | | | 23 || 24 | | | SPI-CE0 | | | | | | 0v | | | 25 || 26 | | | CE1 | | | | 0 | -1 | SDA.1 | | | 27 || 28 | | | SCL.1 | | | | 5 | 7 | IO7 PA7 | OUT | 0 | 29 || 30 | | | 0v | | | | 6 | 8 | IO8 PA8 | OUT | 0 | 31 || 32 | 0 | OUT | IO9 PG08 | 9 | 12 | | 13 | 10 | IO10 PA9 | OUT | 0 | 33 || 34 | | | 0v | | | | 19 | 12 | IO12PA10 | OUT | 0 | 35 || 36 | 0 | OUT | IO13PG09 | 13 | 16 | | 26 | 14 | IO14PA20 | ALT3 | 0 | 37 || 38 | 0 | OUT | IO15PG06 | 15 | 20 | | | | 0v | | | 39 || 40 | 1 | OUT | IO16PG07 | 16 | 21 | +-----+-----+----------+------+---+----++----+---+------+----------+-----+-----+ | BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM | +-----+-----+----------+------+---+--OrangePIPC--+------+----------+-----+-----+
とりあえず動きました。関数の扱いがちょっと?な部分もあり、完全に互換ソースで動くというわけじゃなさそうです。
root@opi:~# ls /sys/class/gpio_sw/ normal_led PA10 PA13 PA14 PA15 PA21 PA3 PA6 PA7 PA8 PA9 PC3 PC4 PC7 PD14 PG6 PG7 PG8 PG9 PL10 standby_led root@opi:~# lsmod Module Size Used by gpio_sunxi 8233 0 8189es 901572 0 root@opi:~# modprobe gpio_sunxi root@opi:~# modprobe gpio-sunxi root@opi:~# modprobe gpio modprobe: FATAL: Module gpio not found. root@opi:~# echo 1 > /sys/class/gpio_sw/standby_led/data root@opi:~# echo 0 > /sys/class/gpio_sw/standby_led/data root@opi:~# gpio -g write 16 1 pin number error root@opi:~# gpio -g write 21 1 pin number error root@opi:~# gpio -g write IO16PG07 1 pin number error root@opi:~# gpio -g write PG7 1 pin number error root@opi:~# gpio -g write 0 1 pin number error root@opi:~#
もう少し、手入れが必要ですね。sysfs に直接書くと以下のように光ります。gpio のマッピングがうまく機能していないようですね。