本記事の内容
Raspberry Pi PicoとSeeeduino xiaoにアナログJoystickを接続して、Joystickを倒した方向を読み取ってみました。
Seeeduino xiaoではSSD1306有機ELディスプレイを利用して、Joystickの入力値をリアルタイムで表示する装置を作製しています。
必要なもの

- Raspberry Pi Pico、もしくは、Seeeduino xiao RP2040
- Analog thumb Joystick
Jotstickは、スターターキットに付属するものになります。そのため、オンラインショップなどで検索しても、このタイプの単品はなかなか見つかりません。
配線


X方向、Y方向のJoystickの傾きはアナログ値で読み取るため、Raspberry Pi PicoでADCが使用できる26ピンと27ピンに接続します。SWはJoystickの押しボタン判定なので、適当なGPIOに繋げば問題ありません。
Joystickの5VとGNDは、Raspberry Pi PicoのVBUSとGNDに繋ぎたいところですが、5Vを入力すると、なぜかJoystick直立状態でも入力値がずれて表示されます。。。
(0-65535で読み込むため、倒していない状態は中央値の32767付近となるはず。)

そのため、5Vは3V3(OUT)に接続することをお勧めします。
プログラムコード
Raspberry Pi PicoでADCを利用して、26ピンと27ピンの入力値を読み取るコードになります。
from machine import Pin, ADC
import utime
xAxis = ADC(Pin(27))
yAxis = ADC(Pin(26))
button = Pin(16,Pin.IN, Pin.PULL_UP)
while True:
xValue = xAxis.read_u16()
yValue = yAxis.read_u16()
buttonValue = button.value()
print("X: " + str(xValue) + ", Y: " + str(yValue) + " -- button " + str(buttonValue))
utime.sleep(1)
上記コードを実行することで、JoystickのX軸とY軸の傾きと押しボタン判定が、Shell上に表示されます。

【おまけ】Seeeduino xiaoでJoystickの入力値をディスプレイに表示
Seeeduino xiao RP2040はMicroPythonでコードを書き込めるので、Raspberry Pi Picoと同じ要領で開発できます。以下ではSeeeduino xiaoとSSD1306有機ELディスプレイを使用して、リアルタイムでJoystickの入力値をディスプレイ表示させてみました。
配線
接続先は以下の通りです。配線図は割愛させていただきます。
Seeeduino xiao | SSD1306 | Joystick |
P6_SDA | SDA | |
P7_SCL | SCL | |
3V3 | VCC | 5V |
GND | GND | GND |
P27_ADC1 | VRX | |
P26_ADC0 | VRY | |
P28 | SW |
Seeeduino xiao RP2040でSSD1306有機ELディスプレイを使用する方法は、前回の記事を参考にしてください。
プログラムコード
前回の記事と同様に、ssd1306.pyをアップロードして、読み込んでいます。
from machine import Pin, ADC,I2C
from ssd1306 import SSD1306_I2C
import utime
i2c = I2C(1, scl=Pin(7), sda=Pin(6), freq=200000)
display = SSD1306_I2C(128, 64, i2c)
xAxis = ADC(Pin(27))
yAxis = ADC(Pin(26))
button = Pin(28,Pin.IN, Pin.PULL_UP)
while True:
xValue = xAxis.read_u16()
yValue = yAxis.read_u16()
buttonValue = button.value()
print("X: " + str(xValue) + ", Y: " + str(yValue) + " -- button " + str(buttonValue))
display.text("X: " + str(xValue), 0, 0, 1)
display.text("Y: " + str(yValue), 0, 10, 1)
display.text("button: " + str(buttonValue), 0, 20, 1)
display.show()
utime.sleep(1)
display.fill(0)
display.show()
実行結果

配線はこんがらかっていますが、リアルタイムでJoystickの傾きをディスプレイに表示させることができました。
まとめ
Raspberry Pi PicoとSeeeduino xiaoでJoystickを使用して、倒した方向の入力値を読み取る方法をまとめました。
JoystickとRaspberry Pi Pico、Seeeduino xiaoを活用して、クレーンゲームのミニおもちゃが作れそうですね。
コメント