shotaTweetこんにちは、shotaです。前回の記事ではGPIOとADCを使って物体検出センサを動かしました。msecのdelayができていないという問題がありました。delayを実現します。ブロクで書いたサンプルコードはGitHubに公開しています。delayが正しく動いたかどうかをオシロスコープで確認します。menuconfigを実行するとsdkconfigという設定ファイルが生成されます。delayが実現します。---より簡単なsdkconfigの編集方法テキストエディタでsdkconfigを編集するのは面倒ですよね。設定を書き間違える可能性もあります。menuconfigコマンドを実行すると設定画面が表示されます。終了すれば、sdkconfigの編集完了です。簡単なsdkconfigの編集方法プロジェクトを作るたびにmenuconfigでFreeRTOSの設定をするのは面倒ですよね。こんなときは、sdkconfig.defaultsファイルを作成しましょう。menuconfigでsdkconfigファイルを生成するときに読み込まれます。sdkconfig.defaultsに書いた設定項目が、sdkconfigファイルに上書きされるのです。詳細はこちらに書かれています。Guide例えば、Especialのプロジェクトにあるsdkconfig.defaultsはつぎのように書かれています。https://github.com/ShotaAk/especial/blob/master/sdkconfig.defaultsCONFIG_PARTITION_TABLE_CUSTOM=yCONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions_example.csv"CONFIG_PARTITION_TABLE_CUSTOM_APP_BIN_OFFSET=0x10000CONFIG_PARTITION_TABLE_FILENAME="partitions_example.csv"CONFIG_APP_OFFSET=0x10000CONFIG_ESP32_DEFAULT_CPU_FREQ_240=yCONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ=240CONFIG_FREERTOS_HZ=1000パーティションテーブルや、CPU動作周波数、FreeRTOS動作周波数の設定値を書いています。それでは、前回の物体検出センサのプロジェクトにsdkconfig.defaultsファイルを追加しましょう。追加したファイルがこちらです。https://github.com/ShotaAk/especial/blob/master/examples/3_object_detector/sdkconfig.defaultsCONFIG_FREERTOS_HZ=1000本当にsdkconfig.defaultsが機能するか心配な人は、次の手順で試してみてください。delayが動作するのか、前回のプログラムとオシロスコープを使って確認します。プログラムと回路図についてはこちらを参照してください。GPIOとADCで物体検出センサを動かすmain.cには次のように書かれています。msec待機し、赤外線LEDを消灯しています。msec待機しています。それでは、GPIO_L_FRの接続先のFETのゲート波形を見てみましょう。物体検出センサの入力信号計測まずは、波形の全体像から。msec毎にパルスが出ていることがわかります。msec間信号が出ていることがわかります。delayが正しく動いているようですね。そもそもvTaskDelayとは何なのかここまで何も説明なしに使用しているvTaskDelayですが、そもそもこの関数は何なのでしょう?ESP-IDF公式マニュアルで調べてみます。period.ふむふむ・・・tickやらblockやら知らない単語が出てきましたね。vTaskDelayは、何msec間停止する、のではなく、何tick間自身のタスクをブロック状態にする、という関数です。msec毎にtick割り込みが発生します。msec)になります。msec毎にtick割り込みが発生します。msecのdelayを発生させることはできません。途端に話がややこしくなりましたね。FreeRTOSに慣れている人は、この物体検出センサのプログラムがそのうち期待通りに動かなくなることを見抜いているかもしれません。FreeRTOSについては、もっと先のブログ記事に書きます。Especialの周辺機能(モータやエンコーダ)について記事を書き続けます。次はモータを回します。PWM機能の登場です。