CircuitPython 10行プログラミング Step9 (3) I2Cとセンサ
ここでは、マイコン・ボードESP32-S3-DevKitC-1-N8のI2Cバスを使います。CircuitPython は8.0.0-beta.4です。
●ピン番号
ピン配置図にはI2Cバスの信号であるSCLやSDAはありません。SPIバスの信号らしきものは見られますが、一般的な名称は見つかりません。
●ESP32-S3で使えるモジュール
REPL でhelp("modules")を実行します。
REPL でdir(board)を実行します。
ピンの名称がわかりました。
●scanプログラム
I2Cバスには、二つのデバイスをつないでいます。これらを探し出すのが、scan()関数です。
ピンの名称は、GPIOxをIOxと読み替えます。
試したピンの組み合わせは、連番になるものを選びました。そうでない組み合わせもできると思います。
IO4,5 IO5,6もOK
IO6,7
IO15,16 IO16,17もOK
IO17,18
IO9,10 IO10,11もOK
IO11,12 IO12,13もOK
IO13,14
右の列です。
IO1,2
IO42,41
IO39,40
以下略
このプログラムがうまく動かないときがあります。ベータ版なので、まだ不安定なようです。
from board import *
from busio import I2C
i2c = I2C(IO6,IO7)
while not i2c.try_lock():
pass
print("\n")
for i in i2c.scan():
print('addr 0x{0:x}'.format(i))
print("\n")
i2c.deinit()
実行例です。
●つながっている温湿度センサAHT20のプログラム
ダウンロードしたexamplesに入っているahtx0_simpletest.pyをエディタMuに読み込み、修正します。
# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT
from board import *
from busio import I2C
import time
import adafruit_ahtx0
i2c = I2C(IO4,IO5) # uses board.SCL and board.SDA
sensor = adafruit_ahtx0.AHTx0(i2c)
while True:
print("\nTemperature: %0.1f C" % sensor.temperature)
print("Humidity: %0.1f %%" % sensor.relative_humidity)
time.sleep(2)