コントローラーを受信してみよう
今回は、今までのアクチュエーターとは打って変わって通信系です。
コントローラーで操作するために信号を受信します。
わが部では現在、コントローラー通信にはESP32-DevKitC-32Eを使用しており、これに下駄基板のEveryday Shumai Party!を履かせています。
ファームウェアとしてESP32-DS4を書き込んだ状態でロボットに設置し、UART1の端子から制御用基板に接続します。
制御用基板側ではESP32-DS4-driverを使うことでデータを扱いやすくしてます。
~(ちなみに次のシーズンからこれまた拙作の別の通信系統に置き換わる予定なんだけどとりあえず一旦置いとく)~
ほいじゃ、概要はこのぐらいにして実際に配線しようか。
配線上のアリア
今回はPC10とPC11を通信用に割り当てています。…なーんて言われても分かりづらさこの上ないと思うので画像を持ってきました。

赤で囲ったところです。丁度隣り合ってたのでありがた〜く使わせてもらいました。見ての通り青いボタンに最も近い列ですね。
ここにEveryday Shumai Party!を繋げます。

Everyday Shumai Party!のUART1端子から伸ばしてきたDF1Bコネクタ(4ピン)をNUCLEO-F446REに繋げるんですが、
その前にピンアサイン確認しときましょう。
画像の向きにDF1Bコネクターを向けた時、右2つは電源供給(5V)用となっています。コイツのおかげで別電源が要らないんですね。
一方左側は本命のUART通信線となってます。
緑で示した真ん中寄りの方はEveryday Shumai Party!のRXと外部基板のTXを繋ぐ線となっていて、
反対にシアンで示した外寄りの方はEveryday Shumai Party!のTXと外部基板のRXを繋ぐ線となっています。
なのでこの画像のコネクタ線の場合、灰色を+5Vに、白色をGNDに、ピンク色をPC10に、水色をPC11にそれぞれ挿せばいいわけです。
線を経由せず直接ピンからジャンパーワイヤーで配線する場合、TX同士やRX同士を繋がないようにしましょう。たまにやりがち。
ちなみに、今回はESP32とSTM32との通信なので大丈夫ですが、特にArduino UNOなどを使う場合には注意が必要です。
というのも、UARTの信号の電圧が違うのです。(ハァ?)
ESP32とSTM32は、というか基本的には信号は3.3Vなのですが、
どういうわけかArduino UNOはUART信号に 5 V を 使 い や が る のです。
この場合、別途電圧変換基板を噛ます必要があるのでご注意を…(n敗)
~(てかArduino UNOぐらいしか5VのUART見ない希ガス)~
毎日焼売パーティ!32日目
で、コントローラーの信号を受け取るために、まず先述の通りESP32-DevKitC-32Eにファームウェア(ESP32-DS4)を書き込みます。
これはPlatformIOプロジェクトです。まずサクッとPlatformIOをインスコしちゃいましょう。(もちろんもう持ってるんなら飛ばして諸手)
公式を参照…してもらいたい所さんですが公式サイトそのまま進むともれなくVSCode向け拡張機能を入れさせられるのでここで解説します。
まずget-platformio.pyを落とします。見ての通りインストール用のPythonスクリプトですね。
落としたらこれをPythonで実行します。…って言うだけだと詰まる事が多いので手順を。
まずテキトーにCLI開きます。DOS窓(cmd.exe)でもPowerShellでもbashでも何でもいいんですけど、Pythonが使える事が大事です。
例えば、インストーラーでPATHを通すチェックを入れずにインスコしたAnaconda環境でPython使ってるんであればAnaconda Promptとかね。
不安ならpython -Vとかpython3 -Vとか実行してバージョン番号がちゃんと返ってくれば無問題。
「Pythonねぇぞコンニャロ」的なエラー吐いたらまぁ、適宜入れてください。(投げやり)
で、ここまで来ればもうPythonが使えるので、get-platformio.pyがあるディレクトリに移動してもらって、
python get-platformio.pyだのpython3 get-platformio.pyだのって実行すればいーわけです。
実行が終わってなんかSuccessとかなんかそんな感じの成功してそうな雰囲気の単語があったら勝ちです。
その場合一緒に「このディレクトリをシステムのPATHに追加してねー」って感じの文言とともにインストール先ディレクトリが示されてるはずなので、
これをPATHに追加します。PATHってなんやねんって人とかどーやって追加すんねんって人はggってください。たぶん秒で引っ掛かります。(投げやり)
追加し終わった後はどこででもplatformioコマンドが使えるはずなので実行してみてください。なんかサブコマンドの一覧とか出てきたらいいと思います。
閑話休題。
さて、PlatformIOも入った所でカキコしましょっか。
ESP32-DS4をお手元のGitでクローンするなりGitHub上でZipに固めて落とすなり色々方法はありますがまぁお好みで。
落としたらそのままそのディレクトリに行って、platformio run -t uploadを実行します。これでいーはず。
ソース書ク丼
最近新潟のソースカツ丼食ったんだけどアレめっちゃうまい(語彙力)。ってのは置いといて。
ソース書いてくんすが、その前にESP32-DS4-driverをプロジェクトに導入しもす。
まず、プロジェクトルート(<プロジェクト名>.iocとかCMakeLists.txtあるトコ)に行ってもらって、
そこにESP32-DS4-driverって名前のディレクトリの中に内容が入ってるように落としてきてください。
例えばGitリポジトリで管理してるならgit submodule add https://github.com/ms0503/ESP32-DS4-driver.gitでいいし、
Gitリポジトリじゃないなら単にgit clone https://github.com/ms0503/ESP32-DS4-driver.gitだし、
ダウンロードしてきたんならESP32-DS4-driver-main.zip/ESP32-DS4-driver-mainを持ってきてESP32-DS4-driverにリネームすればいいし、
まぁ各自いい感じにヨロシク。(投げやり)
で、次にCMakeLists.txtを開いて、40行目とかなんかその辺に、
add_subdirectory(cmake/stm32cubemx)
って書いてるんでその下にでも
add_subdirectory(ESP32-DS4-driver/c)
って書いといてください。これでCMakeくんがESP32-DS4-driverを認識します。
あとは70行目とかその辺に
# Add user defined libraries
ってあるのでその下(言わずもがなカッコ内)に
esp32-ds4
って追加しといてください。そうすればそのセクションは
# Add linked libraries
target_link_libraries(${CMAKE_PROJECT_NAME}
stm32cubemx
# Add user defined libraries
esp32-ds4
)
みたいになってるはず…ですよね?そうなってればおk。
(TODO: ESP32-DS4-driverのC向け実装待ち)
次回予告
今回まででロボットを最低限動かすための知見が溜まったと思います。
次回はこれまでの内容を元に、足回りを動かします。