TOPに戻る

CircuitPython 10行プログラミング Step5 (8) Raspberry Pi PicoのI2C ② 温湿度センサ

 I2Cバスには、複数のデバイスをつなげて利用できます。Picoをマスタ、デバイスをスレーブと呼びますが、昨今の用語の使いかたの変更により、将来は呼び方が変わるかもしれません。Picoはマスタが複数いてもかまいませんが、通常一つです。スレーブ・デバイスは複数がつなげられ、スレーブ・アドレスで区別されます。

 PicoのGPIO信号レベルは3.3Vなので、スレーブ・デバイスもSCL/SDA信号は3.3Vにします。データ転送速度は通常デフォルトが100kHz、少し速いのが400kHz、Picoは1MHzまで対応しています。

 SDA/SCL信号はデフォルトHIGHレベルなので、プルアップしておきます。PicoをC言語のハイレベルAPIでは初期設定時にプルアップ指定をします。CircuitPythonでも、インスタンスを宣言した時点で、プルアップされているようです。推定ですが50kΩぐらいなので、スレーブ・デバイス側に10kΩが入っていても、合成抵抗は十分大きいので、動作に支障は出ないと思われます。

OLEDディスプレイとセンサをつなげる

 AdafruitのSTEMMA QTシリーズは、I2C専用のコネクタが二つついているので、I2Cバスをどんどんつなげて利用するのがとても簡単です。もちろん、ケーブルが長くなって負荷容量が増えるので、何十もつなげれられません。

OLEDボードの端子 SHTC3ボードの端子 Picoの端子(GPIO) 名称
GND GND GND GND
Vcc Vcc 3.3V 3V3(OUT)
SCL SCL GP21 I2C0 SCL
SDA SDA GP20 I2C0 SDA


from board import *
from busio import I2C

i2c = I2C(GP21, GP20)

while not i2c.try_lock():
    pass

print('addr 0x{0:x}'.format(i2c.scan()[0]))
print('addr 0x{0:x}'.format(i2c.scan()[1]))
i2c.deinit()

 0x3c(OLED)と0x70(SHTC3)を見つけてきました。

●温湿度センサSHTC3のおもなスペック

  • 電源電圧  1.62~3.6V
  • 湿度 確度±2%RH、分解能0.01%RH
  • 温度 確度±0.2℃(0~90)、分解能0.01℃
  • インターフェース I2C(0~1MHz)
  • スレーブ・アドレス 0x70(固定)

ライブラリをコピー

 ダウンロードしたlibのフォルダからadafruit_shtc3.mpyをCIRCUITPYドライブのlibフォルダにコピーします。

プログラム

 examplesフォルダに入っているshtc3_simpletest.pyを開き、必要な部分を前回のプログラムにコピーします。

 I2Cの転送速度を400kHzにしました。


from board import *
import busio
import adafruit_ssd1306
import time
import adafruit_shtc3

i2c = busio.I2C(GP21, GP20, frequency=400_000)

display = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3c)
sht = adafruit_shtc3.SHTC3(i2c)
print('start')
t0 = time.monotonic()

while 1:
    display.fill(0)
    display.text(str(int(time.monotonic() - t0)), 3, 3, 1)
    display.text("Temperature: {:0.1f} C".format(sht.temperature),3,15,1)
    display.text("Humidity:    {:0.1f} %".format(sht.relative_humidity),3,27,1)
    display.show()
    time.sleep(3.14)

 実行中の様子です。

連載 CircuitPython 10行プログラミング Step5

(1) Raspberry Pi Picoの準備と動作確認

(2) Raspberry Pi Picoのdigitalio

(3) Raspberry Pi Picoのmicrocontroller

(4) Raspberry Pi Picoのアナログ入力

(5) Raspberry Pi PicoのPWM出力

(6) Raspberry Pi PicoのI2S出力

(7) Raspberry Pi PicoのI2C ① OLEDディスプレイ

(8) Raspberry Pi PicoのI2C ② 温湿度センサ

(9) Raspberry Pi PicoのI2C ③ 気圧センサ

(10) Raspberry Pi PicoのSPI ① TFTディスプレイ


連載 CircuitPython 10行プログラミング Step4

(1) Adafruit Feather nRF52840 Senseの準備 (2) Lチカ (3) 搭載センサ (4) BLE①ペリフェラル (5) BLE②セントラル


連載 CircuitPython 10行プログラミング Step3

(1) Metro M4 Express AirLift (WiFi)の準備 (2) ロータリ・エンコーダ (3) eInk/ePaper (4) Wi-Fi その1 接続 (5) Wi-Fi その2 ソケット (6) Wi-Fi その3 電圧測定 (7) 気圧センサLPS25HB (8) サーミスタ


連載 CircuitPython 10行プログラミング Step2

(1) Grand Central M4 Expressの準備 (2) グラフィック・ディスプレイOLED (3) RTC DS3231 (4) モジュール/SDメモリ (5) 複合センサ BME680 (6) ロードセル+ADS1220 (7) サーボ・モータ① (8) サーボ・モータ② (9) I2S UDA1334A (10) D-Aコンバータ


連載 CircuitPython 10行プログラミング

(1) Trinket M0の準備 (2) ディジタルI/O (3) アナログ入出力 (4) I2C 温湿度センサSi7021 (5) SPI 熱電対+MAX31855 (6) UART 距離センサTFMini (7) 1-Wire 温度DS18B20 (8) ロータリ・エンコーダ (9) 7セグメントLED (10) FANコントロール (11) UART GPS (12) I2C Lチカ MCP23017