RPi PicoでロータリーエンコーダーとOLED液晶表示の連動
せっかく、ロータリエンコード(I2C)を試したので、同じくI2Cで動く128x32のOLED液晶のssd1306を連動してみる。
それぞれの記事はこれ。
I2C 接続
I2C は、同じバス上に複数のデバイスを接続することができる。
試しに、I2Cのテストプログラムでデバイスを検出してみる。
i2c_test.py
from board import *
import busio
import displayio
import adafruit_ssd1306
sda = GP2
scl = GP3
i2c = busio.I2C(scl, sda)
while not i2c.try_lock():
pass
print(i2c.scan())
実行
$ ampy -p /dev/tty.usbmodem14123301 run i2c_test.py
[54, 60]
あらかじめ資料でみていたので、正しく検出できたことがわかった。
- ssd1306 60=0x3C
- Adafruit I2C QT Rotary Encoder with NeoPixel - STEMMA QT / Qwiic 54=0x36
表示の仕様
ロータリーエンコーダーのドライバは、初期値 0
で時計回りで+
、 逆統計まわりで -
に変化した値を返す。
ということで、Volumeとして棒グラフ的なものを表示してみる。
ローターリーエンコーダの押し込みボタンは、押したら付属のLEDが赤く光るようにする。
program
- SDA = GP2
- SCL = GP3
実行
ampy -p /dev/tty.usbmodem14123301 run volume.py
ローターリーエンコードがグルグル回すと、Volume 表示も動く。