今回はarduino unoではなくesp32で自走ロボットカーを自作してみた。
esp32は32 bits risc dual core cpuをコアにしてEspressif社が開発したSoCで
wi-fi, bluetooth, A/D, D/A, i2c, i2s, シリアル通信, 多機能I/Oが1チップに内蔵されている。
arduino unoなどのようにセンサーシールドボードなどを使わなくても、ほとんどの機能が実現できる組み込み用マイコン。
演算処理能力もけた違いに高速なのは、かってのSun Micro社のワークステーション用のCPUの後継版だからかな。
開発環境はarduio ideを使用した。Windows10とUbuntu 22.04でやってみたが、今はubuntuをメインにしてる。
最初につまずきやすいのは、esp32ボードの選択だろう。ピン数やピン配置の異なる様々な製品が出ている。
esp32開発ボードはarduino unoボードとはピン、ソケットが異なるので、開発、組み込み用のボードの選択が重要。
国内でも安心して使える技適取得済みボードを選択した。
拡張ボード上にESP32-DevKitC(30 PIN)を重ねて差し込むだけなので楽に使える。
拡張ボード上にはよく使う、電源、GND、主要I/O、特別なI/O端子が出ている。
また拡張ボードでは3種類のDC電源入力が使える。
自走ロボット時には、18650充電式バッテリを2個直列に接続して、DCソケットプラグに入力している。
電源入力は、ESP32-DevKitC上のUSB Type Cソケットを含めて4種類だが、一度に使えるのは1つだけなので注意したい。
複数の電源を同時に入力すると、最悪、ボード破損につながる。
まずarduino ideのインストール方法
Windows10の場合は
Windows appWin 8.1 or 10
をダウンロードしてインストール。
ubuntu 22.04の場合は
Linux64 bits
インストール後にarduino ideを起動して
ファイル->環境設定で追加のボードマネージャのURLを以下のように入力する。
追加のURLの2行目はesp8266用なので、省略可。
次にツール->ボード->ボードマネージャでesp32の最新版をインストール。
これでIDEの準備完了。
Windowsの場合はDocuments\Arduinoフォルダに
Arduinoフォルダにインストールされる。
ubuntuの場合はここを参考にして更に追加作業が必要。
それでは早速IDEでLチカプロジェクトを作ってみる。
ボードとPCを以下の写真のようにUSB Type-Cケーブルで接続。ケーブルは上に乗ってる開発ボードに。下の拡張基板ではなく。
ツールメニューで以下のように設定。
USBケーブルが正常につながってればシリアルポートが選択できる。
Windowsの場合はデバイスマネージャーで確認できて、COM1以外が選択できるはず。
ubuntuでは以下のように表示される。
IDEを起動してファイル->新規ファイルで以下のように入力する。
メニューの右矢印(マイコンボードに書き込む)をクリックすると、コンパイル後にプログラムがボードに書き込まれる。
書き込みが開始されたら開発ボード上の、小さなBOOTボタンを押すと書き込みが完了できる。
書き込み完了後に、小さなEN(RESET)ボタンをクリックすると書き込まれたプログラムが起動する。
開発ボード上にビルトインされてるD2 LEDが青く点滅すれば成功。
これでスタートアップ終了。
次に1.3" カラーIPS LCDディスプレイ240X240解像度ST7789表示器を付けて、サーボモーターやDCモーターを動かしてみる。
Arduino IDEにTFT_eSPIライブラリをインストールする。
Arduino/libraries/TFT_eSPI/examples/PNG Images/Flash_PNGプロジェクトを試してみる。
まず、Arduino/libraries/TFT_eSPI/User_SEtup_Select.hを開いて
#include <User_Setups/Setup24_ST7789.h> // Setup file for DSTIKE/ESP32/ESP8266 configured for ST7789 240 x 240
行を有効にする。
User_Setups/Setup24_ST7789.hを以下のように編集して表示器とESP32-DEV拡張ボードの各ピンを以下のように接続する。
表示器のVCCピンは拡張ボードの3.3V電源に接続する。
// Generic ESP32 setup
#define TFT_MISO -1// Not connected
#define TFT_MOSI 23
#define TFT_SCLK 18
#define TFT_CS -1 // Not connected
#define TFT_DC 19
#define TFT_RST 5 // Connect reset to ensure display initialises
結果はパンダの画像が表示できた。実際の表示はへたな写真の画像よりきれいです。
次に、DCモーターとサーボを動かしてみた。
おまけに、setup()でESP32のベンチマークとして100万までの整数中の素数を求めるプログラムの計算時間を測定した。
約2.7秒で78498個の素数を発見した。
MCUのシングルコアによる結果としてはかなり高速だと思う。
ちなみにArduino Mega 2560では10万までで60秒かかった。
演算性能は圧倒的に違う。