こんにちは、shotaです。
社員研修として、オリジナルマウスを製作しました。
全国大会で完走したので研修は終わりましたが、本ブログはプログラムの説明が終わるまで続けます。
今回の記事では、ESP32を搭載したマウスでHello World!を実行する方法を書きます。
ソースコードは公開してますが・・・
制作したESP32マウスEspecialのソースコードはGitHubに公開しています。
このコードでマウスを動かし、全国大会の迷路を走らせたのですが、Hello World!を説明するにはコード量が多くて複雑です。
そのため、一からプログラムを作成して説明します。
ESP32初心者の方でも理解できるように書きます。(がんばります)。
ESP32でHello World!
それでは始めます。
ESP32の開発環境の選択
私のマウスEspecialには、ESP-WROOM-32Dモジュールを搭載しています。
世の中にはESP32の開発ボードESP32-DevKitC-32Dがあります。
こちらのほうがメジャーだと思いますが、載っているモジュールは同じなので心配ありません。
開発ボードはUSBコネクタや電源IC、USB-シリアル変換ICを搭載しているので、手早くESP32を動かしたい!という方にはこちらがおすすめです。

http://akizukidenshi.com/catalog/g/gM-13628/
開発環境は色々ありますが、ESP-IDFとarduino-esp32の2つが有名です。
大雑把に言うと、ESP-IDFはC/C++で開発し、arduino-esp32はArduinoで開発します。
私はESP-IDFで開発したので、これからの記事はESP-IDFのプログラムの説明を書きます。
ESP-IDFの環境構築
ESP-IDFのマニュアルはこちらのページです。
Get Started(安定版) – ESP-IDF Programming Guide
Get Started(最新版) – ESP-IDF Programming Guide
安定版と最新版がありますが、私は最新版を選択しました。
まず、Step 1. Install prerequisitesで必要なソフトウェアをインストールします。
私は開発用PCにUbuntu 18.04 (Linux)を使用しているので、Linux -> Ubuntu and Debianのページに進み、マニュアル通りに次のコマンドを実行します。
$ sudo apt-get install git wget flex bison gperf python python-pip python-setuptools python-serial python-click python-cryptography python-future python-pyparsing python-pyelftools cmake ninja-build ccache libffi-dev libssl-dev
ついでに、ページ下のPermission issues /dev/ttyUSB0に進み、シリアルポートの権限も変更します。
これを実行しないとUSBで接続したESP32と通信できません。
Step 2. Get ESP-IDFに戻り、GitHubのESP-IDFをダウンロード(git clone)します。
まず、espディレクトリを作成し、その後ダウンロードします。
$ mkdir ~/esp $ cd ~/esp $ git clone --recursive https://github.com/espressif/esp-idf.git
続いて、Step 3. Set up the toolsに進み、ESP-IDFで使うツールをセットアップします。
$cd ~/esp/esp-idf $ ./install.sh
最後に、Step 4. Set up the environment variablesで環境変数をセットアップします。
$ . $HOME/esp/esp-idf/export.sh
もし、IDF_PATH must be set before sourcing this script とエラーが出た場合は、環境変数IDF_PATHを設定した後に、もう一度export.shを実行します。
$ export IDF_PATH="$HOME/esp/esp-idf"
Hello World!の実行
Step 5. Start a Projectに進み、hello_worldサンプルをコピーします。
もともとのサンプルコードを壊さないために、ESP-IDFのサンプルを試すときは、サンプルのディレクトリをコピーするのがおすすめです。
cd ~/esp cp -r $IDF_PATH/examples/get-started/hello_world .
次に、ESP32(ESP32マウス)を接続します。
Step 6. Connect Your Deviceに書いてあるとおり
デバイス名/dev/ttyUSB0が表示されていることを確認します。
$ ls /dev/ttyUSB0 /dev/ttyUSB0
その後、Step 7. ConfigureでHello Worldプロジェクトの設定をします。
次のコマンドを実行すると設定画面が表示されます。
$ cd ~/esp/hello_world $ idf.py menuconfig
今回は何も変更せず、Exitに進み、設定を保存して終了します。
最後に、Step8,9,10より、Build, Flash, Monitorを実行します。
まずはBuildです。
$ idf.py build ... 以下略 ... Project build complete. To flash, run this command: ../esp-idf/components/esptool_py/esptool/esptool.py -p (PORT) -b 460800 --after hard_reset write_flash --flash_mode dio --flash_size detect --flash_freq 40m 0x1000 build/bootloader/bootloader.bin 0x8000 build/partition_table/partition-table.bin 0x10000 build/hello-world.bin or run 'idf.py -p (PORT) flash'
次にflashコマンドで、生成したバイナリデータをESP32に書き込みます。
$ idf.py -p /dev/ttyUSB0 flash ... 以下略 ... Leaving... Hard resetting via RTS pin... Done
最後にmonitorコマンドでESP32のシリアル出力を表示します。
$ idf.py -p /dev/ttyUSB0 monitor ... 以下略 ... Hello world! This is ESP32 chip with 2 CPU cores, WiFi/BT/BLE, silicon revision 1, 2MB external flash Restarting in 10 seconds... Restarting in 9 seconds... Restarting in 8 seconds... Restarting in 7 seconds... Restarting in 6 seconds... Restarting in 5 seconds... Restarting in 4 seconds...
無事、Hello world!が表示されました。
次回の記事
Hello world!のプログラムを編集する記事を書きます。