LuckFox Pico MiniでUbuntuを使ってみる

Pythonからのデバイス制御

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


RNDISによるネットワーク共有を有効にして、python-peripheryライブラリをインストールします。
$ time python3 -m pip install python-periphery
Defaulting to user installation because normal site-packages is not writeable
Collecting python-periphery
  Downloading python_periphery-2.4.1-py2.py3-none-any.whl.metadata (1.5 kB)
Downloading python_periphery-2.4.1-py2.py3-none-any.whl (36 kB)
Installing collected packages: python-periphery
Successfully installed python-periphery-2.4.1

real    1m17.286s
user    0m8.215s
sys     0m2.365s

これでpython-peripheryライブラリが使えるようになります。


こちらの サンプルコードを一式クローンします。
$ git clone https://github.com/nopnop2002/python-periphery-example

Picoボード側に一式揃いました。
$ ls -l python-periphery-example
total 68
-rw-rw-r-- 1 pico pico 1067 Jun 23 03:46 LICENSE
-rw-rw-r-- 1 pico pico 1612 Jun 23 03:46 README.md
drwxrwxr-x 2 pico pico 4096 Jun 23 03:46 bmp180-i2c
drwxrwxr-x 2 pico pico 4096 Jun 23 03:46 bmp280-i2c
drwxrwxr-x 2 pico pico 4096 Jun 23 03:46 bmp280-softspi
drwxrwxr-x 2 pico pico 4096 Jun 23 03:46 bmp280-spi
drwxrwxr-x 2 pico pico 4096 Jun 23 03:46 gpio
drwxrwxr-x 2 pico pico 4096 Jun 23 03:46 hc595
drwxrwxr-x 2 pico pico 4096 Jun 23 03:46 hdd44780
drwxrwxr-x 2 pico pico 4096 Jun 23 03:46 hdd44780-hc595
drwxrwxr-x 2 pico pico 4096 Jun 23 03:46 hdd44780-pcf8574
drwxrwxr-x 2 pico pico 4096 Jun 23 03:46 i2cscan
drwxrwxr-x 2 pico pico 4096 Jun 23 03:46 leds
drwxrwxr-x 2 pico pico 4096 Jun 23 03:46 mcp23017
drwxrwxr-x 2 pico pico 4096 Jun 23 03:46 pcf8574
drwxrwxr-x 2 pico pico 4096 Jun 23 03:46 pwm
drwxrwxr-x 2 pico pico 4096 Jun 23 03:46 uart

デバイスファイルを確認します。
とりあえず必要なデバイスは揃っています。
i2c、SPI、UARTとして定義されているポートはGPIOとして使えないので、どうもGPIOとして使えるポートはあまり無いように見えま す。



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秒周期でブリンクします。
$ sudo -E python3 leds.py --device work


GPIO


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


PWM

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


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



buildrootはきびきびと動きますが、Ubuntuは全体的にもっさりした感じです。
デフォルト状態のbuildrootとUbuntuの機能面での比較です。
buildrootはpipがインストールされていません。カスタマイズでpipを有効にすると、デバイスファイルが無くなってしまうのが致命的 です。
buildrootでpipは最初からインストールしておいて欲しいです。
Ubuntuのaptはかなりの確率で失敗するので、動けばラッキーぐらいに考えた方がいいです。

buildroot Ubuntu
apt
python3
pip
gcc

g++


続く....