はじめに
最近Seeed Studioから出ているSeeed studio XIAOをよく使うようになり、そこからESP版であるSeeed studio XIAO ESP32C3を多用するようになりました。ただESP版ということもあって色々と忘れがちなハマりポイントがあるので、ここにまとめていこうと思います。
基本的なピン配置
ピン番号指定TIPS
-
pinMode設定は必須
入出力ピンとして使う場合は、必ずpinMode設定が必要。
これがないと入出力の司令を書いても、反応しない。 -
アナログピンの番号指定は「A」が必要
ピンの番号指定はデジタル端子の場合は番号のみでOK(D0なら「0」)だが、アナログで使う場合は、「A0」のように頭にAをつける必要あり。 ※デジタルピンはなくても動く -
WakeupピンはGPIOの番号で指定
DeepSleepなどのWakeupピンとして指定する際のピン番号は上図の「GPIO」で書かれたピン番号を指定する。(D0を使いたいならGPIO2なので「2」)
使い方を注意すべきピン
D6 : TX
- UART出力に設定され、起動直後に出力される1st/2nd stage bootloaderの動作状況信号のせいで、起動時にHIGH/LOWしてしまう。
- 通信していない待機時は常にHIGH。
- 入力で使うと起動時のUART信号出力が入ってしまうため、出力で使うのがおすすめ。
D8 : SCK
- プログラムの書き込みモードにした際に、HIGHになっている必要がある。書き込みモードへの移行(Bootボタンを押しながらリセットする)を行う場合は、プルアップ抵抗をつけておくのがベターだそうです。
(GPIO8 = 0 & GPIO9 = 0 になると予期せぬ動きをする模様)
D9 : MISO / BOOT
- D9はGPIO9とプルアップ抵抗、BOOTボタンに繋がっており、BOOTボタンを押すとD9がGNDに接続してしまうため、用途は限定的。スイッチ入力に使うのがおすすめ。
アナログ入力
pinMode(A0, INPUT);
val = analogRead(A0);
- 利用可能ピン:A0-A3
- 入力(測定)最大電圧:3.3V
- 分解能:12bit(0~4095) -> 出力値は最大4095
アナログ出力(PWM)
色んな方の記事を見ていると、なぜかESP32-WROOMシリーズでは使えないanalogWriteと、その代替として用意されたledcWriteの両方が使えるらしい。
analogWrite
pinMode(0, OUTPUT);
val = analogRead(0); //0-255
- 利用可能ピン:D0-D10
- 分解能:8bit(0~255)。出力最大値は255。
- 周波数はおそらく490Hz固定?
ledcWrite
pinMode(D5, OUTPUT); //PWM用のピンにD5を設定
ledcSetup(1, 39000, 10); //チャンネル1、39000Hz、分解能10bitで設定
ledcAttachPin(D5, 1); //チャンネル1の出力をD5に
ledcWrite(1, 1023); //10bitの場合は最大1023
- 利用可能ピン:D0-D10
- 出力は最大16チャンネル(0-15)
- 分解能と最大出力周波数は反比例
例 16bit:最大1.22kHz
8bit:最大312.5kHz
※その分解能の最大周波数を周波数以上を指定しても、最大周波数にしかならない