AIの片隅で(38) Googleの生成AI、Gemini、ESP32にタイマ割り込みかけて

Joseph Halfmoon

このところ何とかの一つ覚えで、生成AI、Gemini様に「タイマで割り込みをするプログラムを書いて」とお願いしております。現在までに三機種について試行、勝手ながら結果を判定させていただくとGemini様の1勝2敗という感じ。さて今回はESP32に対してプログラムを書いてくださいとお願い。結果はどうなるのか?

AIの片隅で 投稿順index

※Google様の生成AI、Gemini(無料プランだけれども)を使ってソフトをコーディングしてもらっています。

プロンプトへの問いかけ

プロンプトへの問いかけはいつもの茫漠とした問いかけです。

ESP32で1ms毎にタイマで割り込みをするプログラムを書いて

上記のような茫漠とした問いかけに対し、Gemini様が

    1. ESP32でもどんな機種向けに回答してくるか
    2. ESP32向けの開発環境でもどれ向けのソースを作製していただけるか

という点に最初の興味があります。多分、Gemini様がお答えいただけるのは「ポピュラー」な機種で「ポピュラー」な環境であるハズ。

Gemini様からのご回答

Gemini様のご回答、いつものように3案を見比べると以下のようでした。

    • 案1)ターゲット機種はESP32 DevKitC、開発環境はArduino
    • 案2)ターゲット機種は特に規定なし、開発環境はArduino
    • 案3)ターゲット機種はESP32 DevKitC、開発環境はArduino

ESP32でも最近は品種が増えているのですが、Gemini様のご回答はスタンダードな品種で、かつ一番お手頃な ESP32 DevKitCを想定しているようです。ここは想定通り。何と言っても手元にもDevKitCがあるので、実機動作確認できるというもの。案3に高らかにDevKitC対応がうたわれているのでその部分を掲げます。A3notes

 

なお、今回も「割り込みハンドラ」の記述が必要になる、ということでESP32のハードウエアを使いきれる

ESP-IDF

のソースが生成されるか?とも思っていたのです。しかし、生成されてたのはArduino環境向けのコードでした。でもね、

Arduino環境のESP32のボードパッケージ内にIDFのHAL相当のライブラリが含まれる

ことになっているので、骨格はArduino、コマケー話はIDFのHALというスタイルも可能なハズ。そして生成されたソースを拝見してみると実際そのような感じになっていました。

そのまま、あるいはチョイ変程度で実機上で走るんじゃね。

という感じ。しかし、老人の期待は打ち砕かれます。

ボードパッケージのライブラリが勝手に?進化していた

Gemini様のご回答は、以下のページなどみると動きそうな感じなのです。

techtutorialsx

実際、上記のページでタイマを使うために呼び出している

timer = timerBegin(0, 80, true);

というコード(に似た行)がGemini様のご回答にも登場するだけでなく、Web上の複数ページで発見できました。でも手元の環境ではこれがエラーになるのです。

手元の環境のArduino IDEのバージョンは、2.3.2です。割と新しめ。そしてそこにインストールしてあるESP32のボードパッケージは以下のものです。ESP32boardPackageVersion

3.0.0-alpha3 だと。どうもEspressif社提供のボードパッケージそのものが「進歩」しており、以前とパラメータなど異なっている、というのが真相のようです。以下にタイマ関係のAPIのドキュメントがあります。

https://github.com/espressif/arduino-esp32/blob/master/docs/en/api/timer.rst

そして手元のArduino環境のpackage内の以下のところに上記のAPI使ったソースも準備されてました。

インストールフォルダへのパス\packages\esp32\hardware\esp32\3.0.0-alpha3\libraries\ESP32\examples\Timer\RepeatTimer\RepeatTimer.ino

上のソースはTimerだけではなくてFreeRTOSなども使ってちょっとカッコつけてる?のですが、Gemini様生成のソースと上記Exampleのタイマ設定部分だけ取り出して見比べると以下のようです。TimerSettingEC

やー、昔のバージョンとの互換性なさすぎ 3.0.0-Alpha。

一応、ExampleのソースをArduino環境でビルドしたら、ESP32 DevKitCの実機上でちゃんと動きましたぞ。こんな感じ。timerExampleRuns

 

今回は、Gemini様はそれらしく動きそーなコードを生成できたのだけれども、ライブラリの方がそれを置き去りにして勝手に進化していたという感じ。多分Gemini様はその変化に追いつけてない。。。まあね、ライブラリの変化も互換性抜きにトートツな感じなので、引き分けか。甘いな。

AIの片隅で(37) Googleの生成AI、Gemini、STM32にタイマ割り込みかけて へ戻る

AIの片隅で(39) Googleの生成AI、Gemini、ラズパイPicoタイマ割り込み1 へ進む