Raspberry-pi-picoでI2Cアドレススキャナー2

Raspberry-pi-picoでI2Cアドレススキャナー2

Raspberry-pi-picoでI2Cアドレススキャナー2

4年前に作成したI2Cのアドレス確認治具は便利に使えてましたが、複数のアドレスを持つモジュールを使用したので、治具も複数アドレスに対応させました。ハードウェアは以前のRaspberry-pi-picoでI2Cアドレススキャナー」のままでソフトウェアだけの変更です。

 

# I2Cインターフェース アドレススキャナー
# Raspberry pi pico, SSD1306
# Micro Python
 
from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
import utime
WIDTH  = 128					# OLED表示サイズ設定
HEIGHT = 32

reset = machine.Pin(15, machine.Pin.OUT)	# GPIO15をスキャン対象デバイスのリセット信号に使用
reset.value(1)					# GPIO15をハイレベルにセット。
												# GPIOはPicoリセットから約300ms後にHiになる(実験で確認) 

i2c0 = I2C(0, scl=Pin(1), sda=Pin(0), freq=100000)	# OLED用I2C0のGPIOピンとF設定
i2c1 = I2C(1, scl=Pin(11), sda=Pin(10), freq=100000)	# スキャン用I2C1のGPIOピンとF設定

print("OLED I2C0 Configuration: "+str(i2c0))		# I2C0の設定確認
print("OLED I2C0 Address      : "+hex(i2c0.scan()[0])) 	# OLED I2Cアドレスの確認

oled = SSD1306_I2C(WIDTH, HEIGHT, i2c0)			# OLEDの表示サイズを設定

while True:				# I2Cアドレスを変更できるデバイス用に連続動作にする
    adrlist = i2c1.scan()		# 対象デバイスのI2Cアドレスをスキャン
    if not(adrlist):			# 対象デバイスが検出できなかった場合はnot found
        oled.fill(0)					
        oled.text("I2C Addr. Scan",0,5)	
        oled.text("No device found!",0,25)	 
        oled.show()						
    else:
        print("I2C1 Configuration: " + str(i2c1))	# スキャン対象 I2C1の設定確認
        i = 0
        for adr in adrlist:			# スキャン結果をadrllistより順にadrに取り込み
            i += 1
            adr = hex(adr)				
            print("I2C Address Device " + str(i) + ": "  + adr)	# スキャン結果の確認
            oled.fill(0)						# OLED 表示をクリア
            oled.text("I2C Addr. Scan",0,5)			# 1行目にタイトル書込み
            oled.text("Device " + str(i) + ": " + adr,0,25)	# 2行目にスキャン結果書込み
            oled.show()						# OLED 書き込み値を表示する
            utime.sleep_ms(800)					# 表示時間設定(800+200ms)
            oled.text(".",120,25)		# 繰返し動作中サイン:2行目末尾にドット表示
            oled.show()
            utime.sleep_ms(200)					# ドット表示時間設定

約1秒毎に各デバイスのアドレスを表示します。