LuckFox Pico ProでUbuntuを使ってみる

Pythonからのデバイス制御

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

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



LED

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


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


GPIO


以下のコマンドでGPIO54に繋いだLEDが1秒周期でブリンクします。
GPIO番号が54/55/64/65/66/67/68/69/70/71/72/73のポートが通常のGPIOとして使えます。
これ以外のGPIOはUART/i2c/SPI/ADCなど、通常のGPIO以外にアサインされていてLチカできません。
$ sudo -E python3 gpio.py --gpio 54


PWM

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


chip番号とGPIOの対応はこちらに 有ります。
GPIO番号が72/73/54/55のポートはPWM出力の機能を持っています。
以下のコマンドでGPIO54に繋いだLEDの輝度が徐々に変わります。
$ sudo -E python3 pwm.py --chip 10


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を接続し、以下のコマンドで正しく読み出せる ことを確認しました。


ピン番号=55(SCLK)/54(MOSI)/68(CS)/69(MISO)にBMP280を接続し、Software SPIを使って温度と湿度を読み出してみました。
正しく読み出せています。




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側に表示されます。


続く....