NanoPi-M1を使ってみる

NanoPi専用WiringNPライブラリ


NPiのGPIOのマッピングはこちらに ありますが、RPiともOPiとも微妙に違っています。
WiringPiライブラリも NPi専用のものをインストールする必要が有ります。
現在以下の2つのライブラリがあることを確認しています。
どちらにも同じバグが有り、Pin#13 35 36のIOが正しく動作しません。
以前は、どちらのライブラリにも同じバグが有り、Pin#13 35 36のIOが正しく動作しませんでしたが、
wertyzpのリポジトリは不具合が修正されています。

https://github.com/friendlyarm/WiringNP

https://github.com/wertyzp/WiringNP

friendlyarmのライブラリもライブラリソースを以下のように修正することで正しく動作するようになります。
$ git clone https://github.com/wertyzp/WiringNP.git
$ cd WiringNP
$ cd wiringPi
$ vi wiringPi.c
(前略)
static int pinToGpio [64] ={
    0, 6, // 0, 1
    2, 3, // 2, 3
    200, 201, // 4  5
    1, 203, // 6, 7
    12, 11, // 8, 9
    67, 17, //10,11
    64, 65, //12,13
    66, 198, //14,15
    199, -1, //16,17
    -1, -1, //18,19
    -1, 20, //20,21
    21, 8, //22,23
//    13, 9, //24,25
    16, 9, //24,25 // Update nopnop2002
//    7, 16, //26,27
    7, 13, //26,27 // Update nopnop2002
    15, 14, //28,29
    19, 18, //30,31

(中略)

static int pinTobcm [64] ={

    19, 18, //map to BCM GPIO0,1
    12, 11, //map to BCM GPIO2,3
    203, 20, //map to BCM GPIO4,5
    21, 17, //map to BCM GPIO6,7
    67, 65, //map to BCM GPIO8,9
    64, 66, //map to BCM GPIO10,11
    7, 8, //map to BCM GPIO12,13
    198, 199, //map to BCM GPIO14,15
//    16, 0, //map to BCM GPIO16,17
    13, 0, //map to BCM GPIO16,17 // Update nopnop2002
//    6, 13, //map to BCM GPIO18,19
    6, 16, //map to BCM GPIO18,19 // Update nopnop2002
    15, 14, //map to BCM GPIO20,21
    3, 200, //map to BCM GPIO22,23
    201, 1, //map to BCM GPIO24,25
//    9, 13, //map to BCM GPIO26,27
    9, 2, //map to BCM GPIO26,27// Update nopnop2002

$ cd ..
$ chmod 777 build
$ sudo ./build

Pin#18に接続したLEDをLチカする場合はこのようになります。
デバイスファイルを使ってGPIOを制御するとき、NPiはRPiともOPiとも互換性がありません。

RaspberryPiの場合

$ sudo sh -c "echo 24 > /sys/class/gpio/export"
$ sudo sh -c "echo out > /sys/class/gpio/gpio24/direction"
$ sudo sh -c "echo 1 > /sys/class/gpio/gpio24/value"
$ sudo sh -c "echo 0 > /sys/class/gpio/gpio24/value"
$ sudo sh -c "echo 24 > /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

OrangePiの場合

$ 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

NanoPiの場合

$ sudo sh -c "echo 201 >/sys/class/gpio/export"
$ sudo sh -c "echo out >/sys/class/gpio/gpio201/direction"
$ sudo sh -c "echo 1 > /sys/class/gpio/gpio201/value"
$ sudo sh -c "echo 0 > /sys/class/gpio/gpio201/value"
$ sudo sh -c "echo 201 > /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

gpio readall は以下のように表示されます


上の表示をよく見てみると、「NanoPI M1 Debug UART(オンボードのUARTポート)」が下の方に表示されていて、
BCM番号、wPi番号がアサインされています。
このライブラリの特徴は、オンボードUARTポートもプログラムから制御することができます。
以下のコマンドでオンボードUARTポート(Tx/Rx)につないだLEDをLチカすることができます。
$ gpio mode 32 output
$ gpio write 32 on
$ gpio write 32 off

$ gpio -1 mode 43 output
$ gpio -1 write 43 on
$ gpio -1 write 43 off

$ gpio mode 33 output
$ gpio write 33 on
$ gpio write 33 off

$ gpio -1 mode 44 output
$ gpio -1 write 44 on
$ gpio -1 write 44 off


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