Arduino UNO(ATmega328P)では新機能取り組みにメモリー不足なので、基板上のフットプリントのサイズとかコストが同じぐらいのArduino対応と言う安易な選択でESP32-C3 dev kit super miniを選びました。基板を改版し、過去のスケッチを移しつつあります。ESP32-C3 dev kit super miniについて詳しく解説されているブログを参考にさせていただきました。情報提供に感謝します。 たまねぎブログ 【Arduino】ESP32 C3 SuperMiniを使う
私の採用したモジュールはその中でK2に分類されるようです。
今回ESP32化したのはATmega328P(UNOコンパチ)を使っているR909-DSP4と言うエアバンド受信機制御です。これには伏線があり、受信している周波数チャンネル名を漢字表示したいと言うきっかけがありました。この受信機では基板は二枚構成になっており、RF回路が載ったRF基板と、CPU、表示、スイッチが載ったパネル基板です。RF基板とパネル基板を接続するピンヘッダを寸法と位置を互換にしてパネル基板のみを改版しました。
R909-DSP受信機のブログ
GITHUB:現行の基板や回路図やスケッチ
プラットホームは同じArduinoなのでスケッチは簡単に移せるかと思いましたが、ESP32-C3なりにいくつかの注意点があります。気の付いた点をまとめてみます。
R909-DSP受信機のブログ
1. IDEでの設定注意点(ArduinoはV2.3.5で使ってます)
CPUを「board manager」「esp32」「Board "ESP32C3 dev module"」と指定する。デバッグ用モニターなどでシリアルポートを使うなら、[tools」「USB CDC on board」をEnabledにしておかないといけません。ESP32がUSBに接続されているかどうかはIDEウィンドウ右下にメッセージで確認できるのは便利です。コンパイル後アップロードするため、コンパイルの度にESP32-C3 dev kit super mini上のプッシュスイッチを両方押して、先にRESETを外すというおまじないが必要です。
2. ポートや割り込みの変更 [罠1] Rotary Encoder LibraryのGPIO割り込みと移植
当たり前ですが、ポートの割付や割り込みは変わります。ロータリーエンコーダを使っているのですが、Ben buxtonさんのライブラリーはそのまま使えました。割り込みでなくてもまあまあの応答なので、loop内ソフトセンスで使っています。スケッチ事例を次に示します。一度試しにGPIO2の信号変化割り込みでもやってみましたがうまくいきました。
#include <Encoder.h> // Ben Buxton's rotary encoder lib
// Rotary encoder: A=GPIO2, B=GPIO3
Encoder encoder(2, 3);
// Rotary encoder service
void rotary_encoder(void){
re_result = 0;
newPos = encoder.read() / 4; //Sensitivity for encoder responce
if (newPos != oldEncoderPos) {
if (newPos > oldEncoderPos) {
re_result = 0x10; // 25kHz channel step
} else {
re_result = 0x20;
}
oldEncoderPos = newPos;
}
}
3. EEPROMサービス [罠2] EEPROM(NVS)移行時の注意点と、必須のデバッグ設定
AIに聞いたらNVS (non volatile storage)を直接使う方が良いよと教えられましたが、書き換えを楽にするため、EEPROM.hを使い続けています。そのため、EEPROM.begin(EEPROM_SIZE);をsetup();に、書込みputの後には本当に書き込むためのEEPROM.commit()+を入れました。しかし、やっぱりClaudeさんの助言は的を得ていました。デバッグ中にEEPROMが使えなくなり、それはEEPROMへの不正アドレスアクセスが原因だったようです。EEPROMを使えるようにするには「tools」「Erase All Flash Before Sketch Upload」をEnabledにしないといけません。
4. ADCの値 [罠3] ADCの分解能変化(10bit→12bit)とスケッチへの影響
10ビットから12ビットになったので、最大値が1024/5Vから4096/3.3Vになりました。ファンクションスイッチの種別判定がスイッチによりアナログ電圧を変える仕様なので、引っかかりました。

5. キャスト Cast
これはIDEがV1.x.xからV2.x.xに替わったせいだと思いますが、ちょっとうるさくなりました。bool i;でi++;したら怒られました。char x;でx++;したら、結果がおかしくなる場合が発生しました。
6. #include <FreqCount.h>は使えない
PCNTがないらしい(ESP32-S3ならあるらしい)ので、カウンタ機能が簡単に移植できません。なので、LCメータとかGPS較正VFOのスケッチのESP32-C3対応ができず残念です。
そういうことで、エアバンド受信機のスケッチが移植でき、動き始めました。今まで停滞していたRF回路上のバグが浮上してきたので、対策中です。ところで、R909-DSPシリーズではRF基板は5V/3.3V使いの版と3.3V動作の版があります。今回は、ESP32-C3 dev kit super miniと3.3V版を組み合わせ、3.9Vバッテリー駆動にしてみる予定です。
R909-DSP受信機のブログ



