概要
1.0.6と2.0.6を比べて変更があった場所などを確認してみました。気になったものだけピックアップして紹介したいと思います。
アナログ電圧取得
まだanalogRead()のADC値を電圧変換して消耗しているの?
analogReadMilliVolts()を使いましょう。
(ちなみにこの関数は1.0.6時代にはありましたので結構古い関数になります)
利用例
uint16_t analog_adc = analogRead(15);
uint32_t analog_mv = analogReadMilliVolts(15);
Serial.printf("analog_adc=%d, analog_mv=%d\n", analog_adc, analog_mv);
結果
analog_adc=707, analog_mv=672
analog_adc=677, analog_mv=651
analog_adc=385, analog_mv=434
analog_adc=0, analog_mv=128
analog_adc=4095, analog_mv=3148
えーっと、GND直結の時に128mVになるんですね。。。3.3Vを入力してADCは最大値の4095ですが、3.148Vとなっています。。。
どうせ補正しないといけないのでanalogRead()でいいかな、、、
RGB LED
まだFastLEDで消耗していませんか?
void neopixelWrite(uint8_t pin, uint8_t red_val, uint8_t green_val, uint8_t blue_val);
ただ1つのRGB LEDにしか対応していません。最近のDevKitには1つだけ搭載しているのでそこに対応したのだと思います。
個人的FastLEDはESP32向きではないのでもう少し軽いライブラリを使いたいです。
昔に検証したので、小さいライブラリにまとめ直そうかな。。。
DAC出力停止で0か中間値を出力していませんか?
void dacDisable(uint8_t pin);
無効化する関数が増えていました。
TONE
ESP32にはTONE関連の関数がないのでledc(PWM)を使うと思っていませんか?
void setToneChannel(uint8_t channel = 0);
void tone(uint8_t _pin, unsigned int frequency, unsigned long duration = 0);
void noTone(uint8_t _pin);
なんと関数が追加されています。スケッチ例はありません。。。
I2Cスレーブ
独自実装したライブラリを利用していませんか?
ただし、利用しているコードを発見することができませんでした。
UARTのループバック
void uart_internal_loopback(uint8_t uartNum, int8_t rxPin);
関数が追加されています。
上記とかで使っています。
割り込み
IRAM_ATTRをまだ使っていませんか?
void ARDUINO_ISR_ATTR isr(void* arg) {
Button* s = static_cast<Button*>(arg);
s->numberKeyPresses += 1;
s->pressed = true;
}
IRAM_ATTRの変わりにArduino互換のARDUINO_ISR_ATTRを使うようになりました。
#define ARDUINO_ISR_ATTR IRAM_ATTR
上記でARDUINO_ISR_ATTRをIRAM_ATTRに置換しているので互換性もばっちりです。
I2Sがスッキリと
I2Sクラスができたので、かなりすっきりと、、、したのですが、、、
typedef enum {
I2S_PHILIPS_MODE,
I2S_RIGHT_JUSTIFIED_MODE,
I2S_LEFT_JUSTIFIED_MODE,
ADC_DAC_MODE,
PDM_STEREO_MODE,
PDM_MONO_MODE
} i2s_mode_t;
設定できるモードでADC_DAC_MODEが使いにくいです。このクラス当初はADCとDACをサポートしていなかったと思いますが、追加されたみたいです。しかしADCを使おうとするとDACも初期化されるので25と26も使えなくなります。
#define PIN_I2S_SD_IN 35 // Pin 35 is only input!
DACを使おうとすると、上記の設定により35がデフォルトで利用されることになります。
まとめ
いろいろ変わってはいますが、実用性があるのはtone()関連ぐらいでしょうか。あとかなり違うのはUSBとかESP32-S3関連の機能になっていました。
いかがだったでしょうか?
コメント
いつも記事を参考にさせていただいています。
ひとつ質問をさせて頂きたいのですが、現在使用しているボードはM5StackCore2なのですが、先日、Windows10で使用しているarduinoIDEを1.8.x から最新の2.0.3へバージョンアップしたところ、AquesTalkの発話が異常になってしまいました。
そこで参考にさせていただいている、こちらの関連サイトからダウンロードした、hello_aquestalk_i2s_M5StakCore2.inoのスケッチを書き込んだ所、音声は綺麗なのですが、異常に早口になっていて、int iret =の数字を100から変更しても反映されていない感じです。
IDEを過去の物を使ってみたのですが、こちらはコンパイルエラーになってしまいます。
当方ではどうにも原因が判らず、何等かのアドバイスが頂けると大変助かります。
// Set Speed(8000:Yukkuri, 12000:Normal)
DAC_Create(8000);
速度はたしかここだと思います。
ご指摘ありがとうございます。
下記の二つのパラメーターを変更しても発話速度に変化がありませんでした。
arduino IDEを2.0.3にバージョンアップするまでは何も弄らずに問題がなかったので、
何か当方の環境の問題かもしれません。
もう少し原因を探ってみます。ありがとうございました。
発話速度について
int iret = CAqTkPicoF_SetKoe((const uint8_t*)koe, 100, 0xffffU);
上記の100が速度で50-300(%)が指定できます。
// Set Speed(8000:Yukkuri, 12000:Normal)
DAC_Create(8000);