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]
>>>
blink
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
以上
| 固定リンク
「RaspberryPi」カテゴリの記事
- Headless RaspberryPi(64bits)インストール方法(USB/SSD boot)(2021.06.16)
- Arduino-IDEでPicoを動かす(2021.04.01)
- Headless_RaspberryPiでSambaサーバーを動かす(2020.11.23)
- Headless_RaspberryPiでPirateAudioを使用する(2020.11.14)
- Headless_RaspberryPiをVolumioをインストールする(2020.11.08)
「MicroPython」カテゴリの記事
- microbit-v2にMicropythonをインストールする(2021.05.06)
- PicoボードのMicroPythonをVS_CodeのextensionのPico-Goでプログラミングする(2021.02.10)
- MicroPython/CircuitPython Performance Test(2021.02.07)
- PicoボードにMicropython/CircuitPythonをインストールする(2021.02.03)
- MicroPython(F767ZI) Network Samples(2021.01.03)
「CircuitPython」カテゴリの記事
- MicroPython/CircuitPython Performance Test(2021.02.07)
- PicoボードにMicropython/CircuitPythonをインストールする(2021.02.03)
- XIAOでMPL3115A2(気圧・高度・気温センサ)を使用する(CircuitPython版)(2020.07.02)
- XIAOでMCP9808(温度センサ)を使用する(CircuitPython版)(2020.07.02)
- XIAOにCircuitPythonをインストールする(2020.06.09)
この記事へのコメントは終了しました。
コメント