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)