LuckFox Pico Miniでbuildrootを使ってみる

Pythonからのデバイス制御

私は新しいボードのデバイスを調べるときには、いつもこちらの python-peripheryライブラリを使います。
python-peripheryはLinuxの汎用デバイスを使うライブラリで、ほとんど全てのLinuxで使うことが出来る汎用性の非常に高 い ライブラリです。
そこで、このライブラリとこちらの ソースを使ってPico Miniのデバイスを調べてみました。
Pico Miniのピンマップはこちらに 公開されて います。
Google Cloudで提供されているbuildrootのイメージではpython3がインストールされていて、
python-peripheryライブラリもインストールさ れています。


RNDISによるリモートファイル転送が使えるようになったので、こちらの サンプルコードを母艦側に一式クローンします。
$ git clone https://github.com/nopnop2002/python-periphery-example

次にRNDISを使って、一式Miniボード側に送り込みます。
$ scp -r python-periphery-example root@172.32.0.93:/root

Miniボード側に一式揃いました。
# ls -l python-periphery-example
total 68
-rw-------    1 root     root          1088 Jan  1 00:20 LICENSE
-rw-------    1 root     root          1650 Jan  1 00:20 README.md
drwx------    2 root     root          4096 Jan  1 00:20 bmp180-i2c
drwx------    2 root     root          4096 Jan  1 00:20 bmp280-i2c
drwx------    2 root     root          4096 Jan  1 00:20 bmp280-softspi
drwx------    2 root     root          4096 Jan  1 00:20 bmp280-spi
drwx------    2 root     root          4096 Jan  1 00:20 gpio
drwx------    2 root     root          4096 Jan  1 00:20 hc595
drwx------    2 root     root          4096 Jan  1 00:20 hdd44780
drwx------    2 root     root          4096 Jan  1 00:20 hdd44780-hc595
drwx------    2 root     root          4096 Jan  1 00:20 hdd44780-pcf8574
drwx------    2 root     root          4096 Jan  1 00:20 i2cscan
drwx------    2 root     root          4096 Jan  1 00:20 leds
drwx------    2 root     root          4096 Jan  1 00:20 mcp23017
drwx------    2 root     root          4096 Jan  1 00:20 pcf8574
drwx------    2 root     root          4096 Jan  1 00:20 pwm
drwx------    2 root     root          4096 Jan  1 00:20 uart

デバイスファイルを確認します。
とりあえず必要なデバイスはそろっています。




i2c

i2cデバイスとしてこれらが定義されています。


BMP280の温度センサーを使用してi2cデバイスの動作を確認してみました。
BMP280は4ピン仕様(i2c専用)と6ピン仕様(i2c/SPI兼用)のモジュールが有ります。
4ピン仕様のモジュールのi2cアドレスは0x76固定となっています。
6ピン仕様のモジュールをi2cで使うときは以下の結線でi2cモジュールとして使うことができます。
BMP280 Host
VCC 3V3
GND GND
SCL SCL
SDA SDA
CSB 3.3V
SDO i2cアドレス選択
Gnd=0x76/3.3V=0x77

GPIO番号=58(SDA)/59(SCL)にBMP280を接続し、以下のコマンドで正しく読み出せることを確認しました。
/dev/i2c-3だけが使えるようです。



SPI

SPIデバイスとしてこれらが定義されています。


同じ、BMP280の温度センサーを使用してSPIデバイスの動作を確認してみました。
BMP280には4ピン仕様のモジュールと、6ピン仕様のモジュールが有ります。
SPIで使うときは6ピン仕様のモジュールを使う必要が有ります。
6ピン仕様のモジュールのピンマーキングは向って左から
SDO CSB SDA SCL Gnd Vcc
となっていますが、SPIで使う場合
MISO CS MOSI CLK Gnd Vcc
となります。
BMP280 Host
VCC 3V3
GND GND
SCL SPI SCLK
SDA SPI MOSI
CSB SPI CS
SDO SPI MISO

GPIO番号=48(CS)/49(SCLK)/50(MOSI)/51(MISO)にBMP280を接続し、以下のコマンドで正しく読み出せる ことを確認しました。



UART

UARTデバイスとしてこれらが定義されています。


/dev/ttyはデバッグポートでTX=42/RX=43です。
/dev/ttyS3はTX=56/RX=57にアサインされています。
GPIO番号=56(TX)/57(RX)にUSB-TTLコンバータを接続し、WindowsのTeraTermを使って通信してみました。
以下のコマンドで、TeraTerm側に「Hello World!」が表示され、TeraTermで入力した文字がpico側に表示されます。


/dev/ttyS4はTX=53/RX=52にアサインされています。
ピン番号=53(TX)/52(RX)にUSB-TTLコンバータを接続し、WindowsのTeraTermを使って通信してみました。
TeraTerm側に「Hello World!」が表示され、TeraTermで入力した文字がpico側に表示されます。



LED

LEDデバイスとしてこれらが定義されています。


以下のコマンドでオンボードにある赤のLEDが1秒周期でブリンクします。
# python3 leds.py --device work


GPIO


以下のコマンドでGPIO4に繋いだLEDが1秒周期でブリンクします。
やはり予想通り通常のGPIOとして使えるのはGPIO番号が4/54/55の3本だけです。
# python3 gpio.py --gpio 4


PWM

PWMデバイスとしてこれらが定義されています。


GPIO番号が54/55の2本はPWM出力の機能を持っています
以下のコマンドでGPIO54に繋いだLEDの輝度が徐々に変わります。
# python3 pwm.py --chip 10

続く....