最新鋭のマイコンESP32でロボットカーを自作する方法

今回は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)を重ねて差し込むだけなので楽に使える。
ESP32 DevKitC 32 1
拡張ボード上にはよく使う、電源、GND、主要I/O、特別なI/O端子が出ている。
ESP32 expansion board 1
また拡張ボードでは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を以下のように入力する。
esp32 board
追加のURLの2行目はesp8266用なので、省略可。
次にツール->ボード->ボードマネージャでesp32の最新版をインストール。
esp32 lib
これでIDEの準備完了。
Windowsの場合はDocuments\Arduinoフォルダに
Arduinoフォルダにインストールされる。
ubuntuの場合はここを参考にして更に追加作業が必要

それでは早速IDEでLチカプロジェクトを作ってみる。

ボードとPCを以下の写真のようにUSB Type-Cケーブルで接続。ケーブルは上に乗ってる開発ボードに。下の拡張基板ではなく。
blink led photo
ツールメニューで以下のように設定。
USBケーブルが正常につながってればシリアルポートが選択できる。
Windowsの場合はデバイスマネージャーで確認できて、COM1以外が選択できるはず。
device manager
serial port

ubuntuでは以下のように表示される。
blink setting

IDEを起動してファイル->新規ファイルで以下のように入力する。
メニューの右矢印(マイコンボードに書き込む)をクリックすると、コンパイル後にプログラムがボードに書き込まれる。
書き込みが開始されたら開発ボード上の、小さなBOOTボタンを押すと書き込みが完了できる。
書き込み完了後に、小さなEN(RESET)ボタンをクリックすると書き込まれたプログラムが起動する。
blink led

開発ボード上にビルトインされてる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
IMG 0519 small
結果はパンダの画像が表示できた。実際の表示はへたな写真の画像よりきれいです。 

次に、DCモーターとサーボを動かしてみた。
おまけに、setup()でESP32のベンチマークとして100万までの整数中の素数を求めるプログラムの計算時間を測定した。
約2.7秒で78498個の素数を発見した。
MCUのシングルコアによる結果としてはかなり高速だと思う。
ちなみにArduino Mega 2560では10万までで60秒かかった。
演算性能は圧倒的に違う。
IMG 0508 small