はじめに
いきなり入手できなくなったRaspberry Piの代替として注目していたNanopi Neo 2ですが、こちらもいきなり入手できなくなりましたね。涙
そんな中、Nanopi Neo 2のOSをArmbian 23.02 BullseyeにしたらGPIOが使えなくなってしまいました...涙
色々なところで紹介されているWiringNPをインストールしても「これはNanopi Neo 2ではない!!」と怒られてしまいます。
ということで、Nanopi Neo 2でGPIOを使えるようにした顛末をメモ。
Armbian
以下のURLからダウンロード
GPIOのチェック
使用できるGPIOの情報を確認
cat /sys/kernel/debug/gpio
使えるGPIOの一覧を確認
cat /sys/kernel/debug/pinctrl/*/pinmux-pins
...なんだかよくわからない。
コマンドラインで使う
前述のGPIOの一覧から、8番ピンを入力として使用する場合は198という番号を指定するようです。
echo 198 > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio198/direction
入力の接点をON / OFFしながら動作を確認。
cat /sys/class/gpio/gpio198/value
動いているみたい。
ちなみに、以下の表示で"in"となっていても明示的に"in"と指定しないと値が入ってこない。
cat /sys/class/gpio/gpio198/direction
使用を終了する。
echo 198 > /sys/class/gpio/unexport
Python3で使う
ここでは、8番ピンと10番ピンを入力、16番ピンと18番ピンを出力として利用することとします。
参考
以下のURLを参考にさせて頂きました。
準備
必要なソフトウェアやライブラリをインストールします。
apt install -y python3-pip
pip3 install OPi.GPIO
実行
import OPi.GPIO as GPIO
import time
# Nanopi NEO 2用の設定
GPIO.BOARD = {
7: 203, # PG11
8: 198, # PG6
10: 199, # PG7
11: 0, # PA0
12: 6, # PA6
13: 2, # PA2
15: 3, # PA3
16: 200, # PG8
18: 201, # PG9
19: 20, # PC0
21: 65, # PC1
22: 1, # PA1
23: 66, # PC2
24: 67 # PC3
}
# 割込発生時の処理
def callback(channel):
print("button pushed %s"%channel)
# 初期設定
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
# 入力の指定
GPIO.setup(8, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(10, GPIO.IN, pull_up_down=GPIO.PUD_UP)
# 信号入力時の動作を指定
GPIO.add_event_detect(8, GPIO.FALLING, callback=callback, bouncetime=300)
GPIO.add_event_detect(10, GPIO.FALLING, callback=callback, bouncetime=300)
# 出力の指定
GPIO.setup(16,GPIO.OUT)
GPIO.setup(18,GPIO.OUT)
# 入力確認
GPIO.input(8)
# 出力と結果の確認
GPIO.output(18,GPIO.HIGH)
GPIO.input(18)
# 1秒待機
time.sleep(1)
# 出力と結果の確認
GPIO.output(18,GPIO.LOW)
GPIO.input(18)
できた〜!