前回は、Seeeduino Xiao(SAMD21版)にmicroSDカードスロットを接続しアクセスできることを確認。Arduinoのサンプルスケッチを動かすだけ。今回は同じXiaoでもESP32C3版にmicroSDカードを接続して動作確認してみたいと思います。差し替えるだけ、とおもったらそうでもなかった。
※「IoT何をいまさら」投稿順Indexはこちら
Xiaoシリーズ
「切手サイズ」といわれるSeeed社Xiaoシリーズの超小型マイコンボード、結構ラインナップが増えてます。当方手元には、前回動かしてみたMicroChip社のSAMD21マイコン搭載版のXiaoと、今回同様なことを行ってみるつもりのEspressif社ESP32C3マイコン搭載のXiaoの2種類があります。SAMD21はArmコアの典型的な組み込みマイコンですが、ESP32C3はRISC-Vコア搭載です(ESP32シリーズはTensilica Xtensaコアが主力なので、RISC-Vコア搭載は最近でてきた変種?みたいです。)
冒頭のアイキャッチ画像に2種を並べたとおり、フォームファクタ、ピン配は「ほぼほぼ」互換です。その上、ソフトウエア的にはどちらもArduino環境でビルドできるので、ソースの互換性が高いです(CPUコアは全く別物なのでオブジェクトコードレベルでの互換性はなしです。)
ってことは、差し替えてオブジェクトをビルドしなおすだけで動く?まあ、やってみたらば、雰囲気はでてるのだけれど、ちょいと違う部分もアリと。
Arduino IDEでESP32C3用のサンプル・スケッチを探す
今回、パーツの動作確認だけなので「ソフトウエア」はまったく書かない、1字も書き換えない方針であります。そこで「出来合いの」サンプル・スケッチを探しました。こういうことがやりやすいのでArduinoはお楽。
以下のようにスケッチ例から、「XIAO‗ESP32C3用のスケッチ例」をたどり、その下のSDのカテゴリから「SD_Test」というスケッチを選択してみました。SAMD21版と同じソースがあるとよかったのですが、微妙に違います。こちらの方がファイルの読み書きなどして負荷かけてる感じ。
さてハードウエアの方は、前回使ったブレッドボードに刺さっているSAMD21版のXiaoを「抜いて」、ESP32C3版のXiaoを差し込んで動かすつもりでした。しかし、サンプル・スケッチのコメントを参照して、「結線」の確認をばいたしました。こんな感じ。
MOSI、SCK、MISOなどのSPIの端子はハードで結線決まっているので問題ない筈。しかし問題はSS端子です。こいつはソフト制御だよね。そこまで端子配列を互換にしてくれていれば、即差し替えOKだけれど。
SSと呼ばれている端子が、ハードウエア上はどの端子であるのかは、Arduinoの「パッケージ」のインストールパスにある以下のファイル内を確認するのが確実だと思います。
/esp32/hardware/esp32/2.0.6/variants/XIAO_ESP32C3/pins_aruduino.h
以下のように定義されていました。
static const uint8_t SS = 20;
ピン番号20番とな。あれれ、SAMD21版とはチト違う気がする。以下のSeeed社のページのPinoutを見てみます。
Getting Started with Seeed Studio XIAO ESP32C3
ESP32C3ではD7端子がGPIO20、つまりはSS端子であることがわかりました。ソフトは「そのまま」の方針なので、ハードの方を1端子変更します。こんな感じ(気になる方は前回の回路図と比べてくだされや。まあ、ソフト制御なので自分でココと決めてしまえばピン配互換も可能ではあります。後でそうする予定。)
ブレッドボード上は、Xiaoを一端子分上にシフトして「線一本分の隙間」をつくり、XiaoのD7端子からSDカードスロットのCD/DAT3端子に接続しました。こういうことができるのでブレッドボードはお楽。
動作確認
後はビルドしたオブジェクトをESP32C3版のXiaoに書き込めば、自動的に立ち上がり、シリアルモニタに動作結果が出力されます。出だしはこんな感じ。ちゃんとSDHCカードだと認識されてるみたい。
途中いろいろファイルを書いたり、読んだり、デリートしたりと忙しいのですが、最後はこんな感じです。
動いておるよな。これまた当たり前か。