Raspberry Pi PicoでAS5600の角度をSSD1306に表示する
昨日AS5600の角度が取得できたので、それをSSD1306のOLEDに表示するのを試した。『Raspberry Pi PicoでAS5600から角度を取得する』IIDX Picoが使っているAS5600でRaspberry Pi Picoから値をどうやると取得できるのか確かめた。まずはファームウェアをきちんと書き換…ameblo.jpRaspberry Pi PicoとAS5600の配線は同じまま、SSD1306を配線する。1 → SDA2 → SCL3 → GND36 →VCCなのでSSD1306にもSDA,SCL,GND,VCCを同じように接続する。続いて以下のようなコードを書く。with open('ssd1306.py', 'w') as f: f.write(''' ここにssd1306.pyのコードをコピペする ''')micropython-ssd1306/ssd1306.py at d1fea2a454ffcdd676e4590d28c5fc250e06661c · stlehmann/micropython-ssd1306A fork of the driver for SSD1306 displays to make it installable via upip - stlehmann/micropython-ssd1306github.com続いて以下のようなコードを書く。これもAIに書いてもらった。from machine import Pin, I2Cimport ssd1306import timei2c = I2C(0, scl=Pin(1,Pin.OPEN_DRAIN,Pin.PULL_UP), sda=Pin(0,Pin.OPEN_DRAIN,Pin.PULL_UP), freq=400000)AS5600_ADDR = 0x36oled = ssd1306.SSD1306_I2C(128, 64, i2c)def read_angle(): raw_data = i2c.readfrom_mem(AS5600_ADDR, 0x0C, 2) angle = ((raw_data[0] & 0x0F) << 8) | raw_data[1] return angledef convert_to_degrees(raw_angle): return (raw_angle / 4096) * 360while True: raw_angle = read_angle() angle_in_degrees = convert_to_degrees(raw_angle) print("Angle in degrees:", angle_in_degrees) oled.fill(0) oled.text("Angle:", 0, 0) oled.text(str(angle_in_degrees), 0, 10) oled.show() time.sleep(1)freqの値が大事で、100000にしていたらライブラリがETIMEDOUTを投げるのでOLEDに文字が表示できなかった。これに2時間くらいハマった。いよいよ実行するのだがmacOSなので以下のコマンドでscreenで標準入力と標準出力を接続する。$ screen /dev/tty.usbmodem1101接続したら、Control-Dでとりあえずリロードする。Control-Eでペーストモードにして、先にssd1306.pyのコードを貼り付ける。貼り付けたらControl-Dをすると貼り付けたバイト数?が表示される。続いてControl-Eでまたペーストモードにして、メインのソースコードを貼り付ける。貼り付けたらControl-Dをするとプログラムが実行される。表示できた。