« CircuitPython/MicroPythonに温度センサーTMP102(i2c)を接続する | トップページ | RaspberryPiのpython3でneopixelを動かす »

2020年3月25日 (水)

RaspberryPiのpython3でCircuitPythonのAPIを使用する

2020/3/31
2020/3/29
2020/3/25+

Rpi adafruit_blinka install

Rpi adafruit_blinka install

概要

RaspberryPiのpython3でCircuitPythonのAPIを使用する。 ここでは、python3にCircuitPythonのAPIを提供するために、以下のリンクにあるadafruit_blinkaのインストール方法について説明する。これをインストールすることによって、RaspberryPiのpython3とcircuitpythonのハードウェア周りに関して互換性が保てる。 また、i2cに関して、CircuitPythonとMicroPythonに共通してあるi2c.writeto,i2c.readfrom_intoのみを使用すれば、 CircuitPythonとMicroPythonの間の互換性も保てる。 (ホストPCとしてはubuntuを想定している)

CircuitPython on Linux and Raspberry Pi

事前準備

(1)I2C/SPIを有効にするためにRaspberryPiのブートSDの/boot/config.txtの末尾に以下の行を追加する。

# enable I2C/SPI dtparam=i2c_arm=on dtparam=i2s=on dtparam=spi=on dtoverlay=spi1-3cs

「dtoverlay=spi1-3cs」の行は第2のSPIを有効にするので 不要であれば追加しない。(第1のSPIを表示用に使っている時に必要となる)

コンソール用シリアルも必要であれば、さらに以下を追加する:

enable_uart=1

(2)ブートSDをRaspberryPiに刺して起動する。

インストール方法

ブート後、以下を実行する:

# I2C/SPIが有効であることの確認 ls /dev/i2c* /dev/spi* # 以下が出力されればOK /dev/i2c-1 /dev/spidev0.1 /dev/spidev1.1 /dev/spidev0.0 /dev/spidev1.0 /dev/spidev1.2 # システムのアップデート sudo apt-get update sudo apt-get upgrade sudo apt-get install python3-pip sudo pip3 install --upgrade setuptools # adafruit-blinka関連のインストール sudo apt install libgpiod2 pip3 install RPI.GPIO pip3 install adafruit-blinka pip3 install --upgrade adafruit_blinka # 外部モジュールのインストール方法 # 使用したいモジュールxxxx.pyをpython3のカレントディレクトリかlibsに置く # または、pip3 installでインストールする # (インストール例) pip3 install adafruit-circuitpython-gps # これで、python3のスクリプトの中でadafruit_gpsがimport可能になる

動作確認用テストスクリプト

blinka_test.py

import board import digitalio import busio print("Hello blinka!") # Try to great a Digital input pin = digitalio.DigitalInOut(board.D4) print("Digital IO ok!") # Try to create an I2C device i2c = busio.I2C(board.SCL, board.SDA) print("I2C ok!") # Try to create an SPI device spi = busio.SPI(board.SCLK, board.MOSI, board.MISO) print("SPI ok!") print("done!")

テスト・スクリプトの実行

python3 blinka_test.py Hello blinka! Digital IO ok! I2C ok! SPI ok! done! #以上のようになればOK

I2Cにデバイスを接続して以下を実行すると デバイスのアドレスが返ってくる:

python3 >>> import board >>> import digitalio >>> import busio >>> i2c = busio.I2C(board.SCL, board.SDA) >>> i2c.try_lock() True >>> i2c.scan() [72] >>>

blinky.py

import time import board import digitalio print("hello blinky!") led = digitalio.DigitalInOut(board.D18) led.direction = digitalio.Direction.OUTPUT while True: led.value = True time.sleep(0.5) led.value = False time.sleep(0.5)

「board.D18 == BCM_18」の関係にあるので 出力ピンは、BCM_18になる。そのため、LEDをBCM_18に接続する。

TMP104温度センサー

Module Install:

以下のリンクにあるtmp102_cpy.pyをpython3を実行するディレクトリに置く。
CircuitPython/MicroPythonに温度センサーTMP102(i2c)を接続する

Demo Script:
TMP102_demo.py

import time import busio import board i2c = busio.I2C(board.SCL, board.SDA) i2c.try_lock() from tmp102_cpy import Tmp102 sensor = Tmp102(i2c, 0x48) while True: print('Temperature: {0:.1f}'.format(sensor.temperature)) time.sleep(2)

実行例:

$ python3 TMP102_demo.py Temperature: 23.6 Temperature: 23.6 Temperature: 23.6 Temperature: 23.6 Temperature: 23.6

DHT11温度/湿度センサー

Module Install:

pip3 install adafruit-circuitpython-dht

Demo Script:
DHT_test.py

import time import board import adafruit_dht # DHT11 need VCC=5V dhtDevice = adafruit_dht.DHT11(board.D18) while True: try: # Print the values to the serial port temperature_c = dhtDevice.temperature temperature_f = temperature_c * (9 / 5) + 32 humidity = dhtDevice.humidity print("Temp: {:.1f} F / {:.1f} C Humidity: {}% " .format(temperature_f, temperature_c, humidity)) except RuntimeError as error: # Errors happen fairly often, DHT's are hard to read, just keep going print(error.args[0]) time.sleep(2.0)

センサーのSIGピンは、BCM_18(D18)に接続する。

実行例:

$ python3 DHT_test.py Temp: 60.8 F / 16.0 C Humidity: 24% Temp: 60.8 F / 16.0 C Humidity: 24% Temp: 60.8 F / 16.0 C Humidity: 24% Temp: 60.8 F / 16.0 C Humidity: 24% Temp: 60.8 F / 16.0 C Humidity: 24% Temp: 60.8 F / 16.0 C Humidity: 24%

Adafruit_CircuitPython_Bundleのモジュールのインストール方法

# MODULEというモジュールをインストールする場合、以下を実行する: pip3 install adafruit-circuitpython-MODULE # python3でimportする場合のスクリプト import adafruit_MODULE # ダッシュ(-)とアンダースコア(_)の使い分けに注意すること # 実例: pip3 install adafruit-circuitpython-neopixel_spi # スクリプト例: import adafruit_neopixel_spi # インストールしたモジュールは以下のディレクトリに置かれる $ ls $HOME/.local/lib/python3.7/site-packages/*.py /home/pi/.local/lib/python3.7/site-packages/adafruit_gps.py /home/pi/.local/lib/python3.7/site-packages/adafruit_hts221.py /home/pi/.local/lib/python3.7/site-packages/adafruit_lps2x.py /home/pi/.local/lib/python3.7/site-packages/adafruit_lsm9ds1.py /home/pi/.local/lib/python3.7/site-packages/adafruit_pypixelbuf.py /home/pi/.local/lib/python3.7/site-packages/analogio.py /home/pi/.local/lib/python3.7/site-packages/bitbangio.py /home/pi/.local/lib/python3.7/site-packages/board.py /home/pi/.local/lib/python3.7/site-packages/busio.py /home/pi/.local/lib/python3.7/site-packages/digitalio.py /home/pi/.local/lib/python3.7/site-packages/micropython.py /home/pi/.local/lib/python3.7/site-packages/neopixel_spi.py /home/pi/.local/lib/python3.7/site-packages/neopixel_write.py /home/pi/.local/lib/python3.7/site-packages/pulseio.py

CircuitPythonボードで、これらのモジュールを使用する場合、上のファイルをボードのflashにコピーすることになる。

上の例は、Rpi上での場合だが、通常のPCの場合、以下のようになる:
CircuitPythonボードへのインストール

# ホストPC上(CircuitPythonボードが接続されている前提) # パス設定 export CPY_LIB=$HOME/.local/lib/python3.5/site-packages # 上の「python3.5」の部分は、自分の使用している(ホストPCの)python3のバージョンに合わせる export CPY=/media/$USER/CIRCUITPY # モジュールのCircuitPyyhonボードへのインストール pip3 install adafruit-circuitpython-MODULE cp $CPY_LIB/adafruit_MODULE.py $CPY/lib/ # 具体例: pip3 install adafruit-circuitpython-mpl115a2 cp $CPY_LIB/adafruit_mpl115a2.py $CPY/lib/

Adafruit_CircuitPython_Bundleアーカイブのダウンロード方法

アーカイブ全体をダウンロードする場合は以下のやり方がある:

# 以下の手順でダウンロードする: git clone https://github.com/adafruit/Adafruit_CircuitPython_Bundle.git cd Adafruit_CircuitPython_Bundle ./update-submodules.sh # 以下の中から使いたいモジュールxxxx.pyを探して、 # python3のプログラムを置いているディレクトリのlibsの中にコピーする: # Adafruit_CircuitPython_Bundle/libraries/driver # Adafruit_CircuitPython_Bundle/libraries/helper cp Adafruit_CircuitPython_Bundle/libraries/driver/xxxx/xxxx.py ~/py_ws/lib/

libにモジュールxxxx.pyに置いた場合、import時はpathの設定が必要なので以下のスクリプトを実行するか、次をシェル上で実行してpathを設定する。

export PYTHONPATH=lib # .bashrcに登録することをすすめる
import sys sys.path.append('lib') import xxxx

サポートされていない機能

以下にあるように、AnalogInとPWMはサポートされていない。

https://learn.adafruit.com/circuitpython-on-raspberrypi-linux/faq-troubleshooting All Raspberry Pi Computers Have: 1 x I2C port with busio (but clock stretching is not supported in hardware, so you must set the I2C bus speed to 10KHz to 'fix it') 2 x SPI ports with busio 1 x UART port with serial - note this is shared with the hardware console pulseio.pulseIn using gpiod neopixel support on a few pins No AnalogIn support (Use an MCP3008 or similar to add ADC) No PWM support (Use a PCA9685 or similar to add PWM)

参照情報

CircuitPython on Linux and Raspberry Pi
CircuitPython 5.0.x - I2C

以上

|

« CircuitPython/MicroPythonに温度センサーTMP102(i2c)を接続する | トップページ | RaspberryPiのpython3でneopixelを動かす »

RaspberryPi」カテゴリの記事

MicroPython」カテゴリの記事

CircuitPython」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« CircuitPython/MicroPythonに温度センサーTMP102(i2c)を接続する | トップページ | RaspberryPiのpython3でneopixelを動かす »