OrangePi-ZEROを使ってみる

WiringOP-ZEROライブラリ

OPI-PCのピンヘッダーは40ピンですが、ZEROのGPIOピンヘッダーは26ピンです。
今まで、OPI-PCの1-26ピンがそのまま出ているのかと思っていたので真面目に調べていませんでした。

OPI-ZERO(H2+)のピンアウトはこちらに公開されて います。
よくよく見てみると、OPI-PCとアサインが違うことが分かりました。
特に、Pin#19 と Pin#21 に、OPI-PCにはない PA15 PA16 が出ています。
PA15 PA16 はOPI-PCのWiringOPでは使うことができません。
また、SPIデバイスはSPI0ではなくSPI1となっています。
ZERO専用のWiringPiライブラリがこちらで公開されて います。


ライブラリ内部で、RaspberryPiやOrangePi-PCとピン番号の互換をとっているので、WiringPi関数を使ったC 言語 では
RPI/OPI-PCとOPI-ZEROは互換性が有りますが、ハードウェアレベルではピン互換はありません。

<2017年10月11日追記>
今までwiringPiSetup()でも、wiringPiSetupGpio()でも、RaspberryPiやOrangePi-PCとピ ン番号の互換が有りましたが
なぜか最新のライブラリではwiringPiSetupGpio()では互換が失われました。
wiringPiSetup()のピン番号は互換性が有ります。

こちらでArmbian+WiringOPでは 4つのピン番号があることを紹介しています。

@WiringOPでwiringPiSetupPhys()で初期化する場合
AWiringOPでwiringPiSetup()で初期化する場合
BWiringOPでwiringPiSetupGpio()で初期化する場合
Cデバイスファイルを使って操作するときの番号

WiringOP付属のgpioコマンドで操作するときの番号は@ABの何れかの番号になります。
 gpio -1 mode/write pin# (このときの番号は@の番号)
 gpio mode/write pin# (このときの番号はAの番号)
 gpio -g mode/write  pin# (このときの番号はBの番号)

OPI-PCとZEROではCの番号が違います。
Aの番号 Bの番号 Cの番号 @の番号 Aの番号 Bの番号 Cの番号
OPI-PC ZERO OPI-PC ZERO OPI-PC ZERO OPI-PC ZERO





1 2




8 2 2 12 12 3 4




9 3 3 11 11 5 6




7 4 4 6 6 7 8 15 14 20 13 198





9 10 16 15 21 14 199
0 17 17 1 1 11 12 1 18 5 110 7
2 27 27 0 0 13 14




3 22 22 3 3 15 16 4 23 0 68 19





17 18 5 24 1 71 18
12 10 利用できない 64 15 19 20




13 9 利用できない 65 16 21 22 6 25 25 2 2
14 11 15 66 14 23 24 10 8 14 67 13





25 26 11 7 19 21 10

Cの番号の違いは「gpio readall」で分かります。





Pin#18に接続したLEDをLチカする場合はこのようになります。

OPI-PCの場合

$ sudo sh -c "echo 71 >/sys/class/gpio/export"
$ sudo sh -c "echo out >/sys/class/gpio/gpio71/direction"
$ sudo sh -c "echo 1 > /sys/class/gpio/gpio71/value"
$ sudo sh -c "echo 0 > /sys/class/gpio/gpio71/value"
$ sudo sh -c "echo 71 > /sys/class/gpio/unexport"
 
$ gpio -g mode 24 out
$ gpio -g write 24 on
$ gpio -g write 24 off

$ gpio mode 5 out
$ gpio write 5 on
$ gpio write 5 off

$ gpio -1 mode 18 out
$ gpio -1 write 18 on
$ gpio -1 write 18 off

ZEROの場合

$ sudo sh -c "echo 18 >/sys/class/gpio/export"
$ sudo sh -c "echo out >/sys/class/gpio/gpio18/direction"
$ sudo sh -c "echo 1 > /sys/class/gpio/gpio18/value"
$ sudo sh -c "echo 0 > /sys/class/gpio/gpio18/value"
$ sudo sh -c "echo 18 > /sys/class/gpio/unexport"

$ gpio -g mode 1 out
$ gpio -g write 1 on
$ gpio -g write 1 off

$ gpio mode 5 out
$ gpio write 5 on
$ gpio write 5 off

$ gpio -1 mode 18 out
$ gpio -1 write 18 on
$ gpio -1 write 18 off

SPIを使う場合、[/boot/armbianEnv.txt]に以下の2行を追加する必要が有ります。
これを追加しないと、SPIデバイスが出現しません。
verbosity=1
logo=disabled
console=both
disp_mode=1920x1080p60
overlay_prefix=sun8i-h3
rootdev=UUID=3d863bb3-b616-4229-94e7-8c92ac95501a
rootfstype=ext4
usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u
overlays=spi-spidev
param_spidev_spi_bus=1

Opi-ZEROでSPIを使うときは注意が必要です。
RpiもOpi-PCもSPIはSPI0のデバイスがアサインされていますが、Opi-ZEROのSPIはSPI1となっています。
従って、SPIデバイスは以下のデバイスとなります。
直接このファイルをアクセスするライブラリでは、デバイスを変える必要が有ります。
$ ls /dev/spi*
/dev/spidev1.0

次回はZEROで使えるPythonライブラリを紹介します。