【ESP32】#2: Hello, World! をマイコンから表示させる

ガジェット

プログラミング

サンプルプロジェクトの中身

サンプルプログラムを使用してHello, World!

前回で、ESP-IDFの環境はあらかた整いました。ここからは、あらかじめ用意してあるサンプルプログラムを用いて、マイコンの接続からビルド、書き込み、モニタリングまで進んでいきたいと思います。

プロジェクトのコピー

サンプルは、esp/esp-idf/examples/get-started ディレクトリ内にあります。そこにあるhello_worldディレクトリをそのままespディレクトリにコピーします。

$ cd ~/esp
$ cp -r esp-idf/examples/get-started/hello_world .

ここで、-rは、コピー元ディレクトリ丸ごとをコピーするオプションです。これで、espディレクトリ内にhello_worldディレクトリが複製されました。では、中身を詳細に確認していくことにします。

├── CMakeLists.txt
├── pytest_hello_world.py
├── main
│   ├── CMakeLists.txt
│   └── hello_world_main.c
└── README.md 

CMakeLists.txtは、CMakeが読み込むテキストファイルです。ESP-IDFは、このCMakeを用いてプログラムのビルド、コンパイルおよびソース管理を行います。

pytest_hello_world.pyは、Pythonの実行テスト用に用意されたファイルのようです。筆者もこれはよく分かっていません(汗)

hello_world_main.cは、メインの実行ファイルになります。こちらに、Hello, World!を表示するソースが記述されています。当然ながら(?)、Arduino言語ではなくC言語で書かれています。

ビルドと実行

ESP32ボードの接続

いったん実行ファイルの中身は無視して、実際に書き込む段階まで突っ走ってしまいましょう。ここで用意しなければいけないのが、通信機能がついているUSBのtypeA-microBケーブルです。そのあたりに転がっているのはだいたい通信非対応のものですので、なければAmazonでポチりましょう。私は、有象無象のコードたちの山から、ペンタブに使用していたコードを発見したのでそれを用いました。ではPCに接続!

Ubuntu側で認識させてやる

Powershell側での実行

ここが個人的にいちばん難儀したところです。自分のリサーチ能力の低さにゲンナリしつつも、1日ほどを費やし解決策を発見できました。まあそんなことは置いといて、まずWindows側のPowershellを管理者で実行します。次いで、以下のコードを実行します。usb接続されているデバイスを表示するものです。

> usbipd wsl list

ここで、以下の画像のような情報が表示されると思います。

この一番下、Silicon Labs CP210x USB to UART Bridgeが、USB接続しているESPボードです。この欄の一番左、BUSIDの部分をメモしておきます。この場合は4-3です。この後、このIDをつかってUbuntuに紐づけます。以下のコードを実行します。

> usbipd wsl attach --busid #yourID

#yourIDの部分は、ご自身の環境により異なるので、上のステップで確かめたBUSIDを入力してください。こののち再度> usbipd wsl listを実行し、ESPデバイスが以下のようにattachedに変わっていることが確認できれば、アタッチ成功です。おめでとうございます!

Ubuntu側での実行

追って、Ubuntu側の設定も済ませてしまいましょう。Ubuntuターミナルを開き、udevを起動します。udevとは、Linuxに接続されているデバイスを管理するデバイスマネージャのようなものです。これをもちいて、デバイスへのアタッチや権限管理を行います。以下を実行します。

$ sudo service udev start

起動までに時間を要するのですが、これはキャンセル猶予時間です。

なお、このudevは起動してespをつかうたびに必要になるので、WSLが起動したとき実行されるように、configrationファイルの/etc/wsl.confに以下を記入しておくとよいです。

[boot]
command = "service udev start"

またUbuntuのコンソールに戻ります。アタッチしたボードが認識されているか確認します。以下を実行します。

$ dmesg | grep tty

実行結果はおそらく以下のようになるでしょう。

now attached となっていたら大丈夫です。このデバイスは、私の環境ではttyUSB0として認識されているので、メモしておきます。ついで、/devの中のファイル群を表示して、権限情報を確認します。

$ ls -l /dev

これを実行すると、ずらっとデータが並んでいるのが確認できると思います。ここから先ほどのttyUSB0を発見しましょう。私の場合はこれです。

私の環境では、所有者がroot、グループがdialoutですので、そのグループにユーザーを登録します。

$ gpasswd -a #USER #GROUP

これでUbuntuで実行する環境が整いました!

あとは一直線です。最初のhello_worldディレクトリに移動し、以下のコマンドを実行します。

$ idf.py set-target esp32
$ idf.py build
$ idf.py flash -p /dev/ttyUSB0   # tty~~~はユーザー依存
$ idf.py monitor -p /dev/ttyUSB0

これで通ると思います。実行すると、タイムスタンプやらなにやらとともに、Hello, World!がコンソールに流れると思います。ここまでが一通りの構築になります。お疲れ様でした…

まとめ

書いていてもなかなかまとめるのが難しくて大変でした。これはみんなArduino IDE使うよね、楽だもん、、、。おしまい。コードの解説もいつかやります。いつかね。

Discussion

コメントはまだありません。

ログインするとコメントできます!

新着記事

eyecatch of pipicow_platformio

Raspberry Pi Pico WをPlatformIOでLチカ

by かいと

eyecatch of tocbot

【Tocbot】Next.js+MicroCMSのブログ記事に目次を作る方法が簡単すぎた話

by Yoshi_Zen

eyecatch of dev_pixel_tab

大学生向け Pixel Tablet の使用感

by アンティキラのポンコツ

eyecatch of civil_test

国家公務員総合職試験受験のすすめ

by アンティキラのポンコツ

eyecatch of Civil_Engineering_Soil_mec_4

[土質力学]地盤沈下の区別とその計算

by アンティキラのポンコツ

eyecatch of cpp1

【C++】#0:はじめに

by Yoshi_Zen

すべての記事を見る