ArduinoのスケッチをPlatformIOにインポートしてESP32をBluetoothキーボードにするプロジェクトを動かす

タイトル

Androidのカメラのシャッターリモコンが必要になりました。リモコンを買ってもいいのですがESP32をBluetoothキーボードにするプロジェクトがあったので使ってみます。
PlatformIOでArduino IDEのスケッチをインポートして動かします。

ESP32をBluetoothキーボードにするプロジェクトがあったので使ってみます。サンプルのスケッチを動かそうと思うのですが今どきArduino IDEとか使いたくありません。PlatformIOで動かしたいです。スケッチをPlatformIOで動かす手順の紹介です。
自分でマイコンのプログラムをする時の最初の一歩としても良いでしょう。

準備

開発環境を整えます。最近は統合開発環境 IDEが整っているので簡単に行えます。Arduino IDEは学習用に良いIDEでした。しかし最近はPlatformIOでの開発が主流です。初心者の方でArduino IDEから始めた方は今すぐPlatformIOへ切り替えましょう。
ここではPlatformIOでの環境を整えます。

Visual Studio Codeのインストール

PlatformIOはVisual Studio Code(VS Code)の拡張機能として動きます。VS Code自体はコードエディタでしかありません。プログラムを書くことに特化したテキストエディタです。VS Codeは拡張機能でさまざまな機能を追加できます。
Visual Studio Code
https://code.visualstudio.com/
Windows, mac OS, Linuxで動きます。

PlatformIO

VS Codeをインストールしたら動かします。VS Codeの拡張機能でインストールします。
拡張機能でPlatformIOをインストール
インストールには数分かかります。少し気長に待ちましょう。

PlatformIOでArduinoのスケッチを開いてみる

PlatformIOでのプログラムはAruduinoのスケッチの書き方とほぼ同じです。スケッチでは拡張子が"ino"でした。スケッチの文法はC++言語とほぼ同じです。PlatformIOでは拡張子が"cpp"になり文法は完全にC++と同じになります。スケッチよりも厳密に書かなくてはなりません。

PlatformIOのNew Projectからプログラムを始めます。Lチカとかから始める記事はいくらでもありますね。初心者の方は何かサンプルのスケッチから始めた方が安心感があるでしょう。

ESP32 BLE Keyboard library

ここでは小型マイコンESP32をBluetoothキーボードにするライブラリのサンプルプログラムを動かしてみます。Arduinoのスケッチで書かれています。
T-vK/ESP32-BLE-Keyboard
ESP32 BLE Keyboard library
This library allows you to make the ESP32 act as a Bluetooth Keyboard and control what it does.
最新のリリースからzipでソース・ファイルをダウンロードします。zipファイルを回答すると中にexampleフォルダがあります。そこにサンプルスケッチがあります。これを好きな場所へコピーします。

PlatformIOでインポート

コピーしたフォルダの中にスケッチがあります。拡張子が"ino"のファイルですね。これをPlatformIOでインポートします。
スケッチのインポート
インポートの時にあなたがこれからこのプログラムを書き込むマイコンボードが何なのかをあなたがPlatformIOへ教えなくてはなりません。PlatformIOは多くのマイコンボードを扱えます。マイコンボード毎に配線の違いや固有のハードウエアを持っています。それらに合わせてさまざまなプログラムが必要です。あらゆるマイコンボードに対応したプログラムを事前にPlatformIOが持っていたとする大量のファイルと大容量のストレージが必要になります。それは無駄なのであなたが使うと言ったマイコンボードで使うファイルだけをネットから取ってきてくれます。

今回は小型マイコンESP32用のプログラムです。ESP32とはワンチップマイコンの名前です。ESP32を搭載したたくさんの種類のマイコンボードが存在します。
ESP32が載った製品 https://amzn.to/3QkjuwB

ESP32と言うだけでは何のことか判りません。あなたが使うマイコンボードを正しくPlatformIOへ教えなくては何のライブラリを使えば良いのかPlatformIOが判りません。
今回 私はATOM Matrixを使います。以後ATOM Matrixで話を進めますが違うマイコンボードを使う方はそれぞれのマイコンボードに読み替えてください。


とりあえずビルド

インポートが終わったらとりあえずビルドしちゃいます。

サンプルプログラムの場合、まだ何が書かれているか何をするプログラムなのか分かっていないでしょう。インポートして文法が合わず修正しなくてはならないかも知れません。どこの何を直せばいいのか?それすら知らない状態です。どこを直せばいいのかを知る簡単な方法はビルドすることです。エラーの場所があれば教えてくれます。

エラーの表示に従って何が悪いのかを考えます。最初は必要なプログラムが見つからないと怒られる場合が多いでしょう。マイコンボード用のライブラリやサンプルプログラムで使うライブラリが入っていない場合が多いです。

ですが必要なライブラリが何か?初心者は良く判りませんよね。経験者でも初めて使うマイコンボードの場合は判りません。これは使うマイコンボードが何者なのかをまだ理解していない段階だからです。マイコンボードのメーカーが提供する資料の全てに目を通すなどの隠れた作業が発生します。これで必要なライブラリを自分で見つけられるようになると初心者卒業です。

ライブラリの追加

インストールしなければならないライブラリが分かったらPlatformIOでライブラリを追加します。今回使うのは
ESP32 BLE Keyboard
です。
PlatformIOでライブラリを追加
ライブラリ名を検索してインストールします。サイズの大きなライブラリだと時間がかかるでしょう。
PlatformIOを使わず自分でライブラリのファイルをダウンロードして使うこともできます。そんな手順を解説しているサイトもあるでしょう。しかし、バージョンの変更など面倒なライブラリの管理も簡単なのが統合開発環境です。PlatformIOからライブラリを入れるようにしましょう。

PlatformIOのプロジェクトの設定は"platformio.ini"ファイルに描きます。ライブラリを追加すると依存ライブラリが追加されます。
間違えて関係ないライブラリを使うと微妙に動くけど何か違う・・・という動作をする事があります。違うライブラリでも同じ名前の関数があり何となく動く場合があります。こういう間違えは見つけるのがとても難しいです。

プログラムのアップロード

ビルドに成功したらいよいよマイコンボードへプログラムを書き込みます。マイコンボードへプログラムを書き込むにはシリアル通信を使います。昔はマイコンICとパソコンを繋ぐ専用のハードウエアを別に用意する必要がありましたが、最近はその専用ハードウエアもIC化されてUSBケーブルをつなげば開発できるマイコンボードが増えました。楽ちんです。

パソコンとマイコンボードをUSBケーブルでつなぎます。初めてつなぐとドライバをインストールしなくてはなりません。Windowsの場合はWindows Updateでほぼ入ります。

マイコンボードとはシリアル通信でつながります。シリアル通信のCOMポート番号をおぼえておきます。PlatformIOのDevicesでもシリアルポートの一覧が見れます。複数ある場合はどれがマイコンボードなのか調べましょう。USBケーブルを引っこ抜いて消えてしまうのがマイコンボードでしょう。

PlatformIOの左下にある”➔”アイコンをクリックするとアップロードが始まります。
複数のマイコンボードを使っているとCOMポート番号がいくつもできて間違ったCOMポートでアップロードしようとして停まってしまう場合があります。こんな時はPlatformIOにCOMポート番号を教えてあげます。
platformio.iniファイルにシリアル通信の条件を追記します。
monitor_speed = 115000
monitor_port = COM7  ;あなたのCOMポート番号に変更します
upload_port = COM7   ;あなたのCOMポート番号に変更します
アップロードが成功するとマイコンボードはすぐにプログラムを実行します。成功すればプログラムはもう動き出しています。

デバッグ

アップロードできないうちのデバッグは簡単です。パソコン上に全ての問題があります。アップロードしてマイコンが動き出した後のデバッグはとても厄介です。ほとんどのマイコンにはディスプレイもLEDもスピーカーも付いていません。何が起きているのかわかりません。
プログラムの問題なのか?マイコンに不具合があるのか?マイコンにつないだハードウエアが原因なのか?自分の頭の中の設計が間違っているのか?どれほど簡単なプログラムであっても不具合の考えられる原因が爆発的に増加します。

この時に頼りになるのがシリアル通信です。多くのサンプルプログラムではシリアル通信で現在の状況を送るように書かれているでしょう。これがマイコンの状態を知る唯一の手がかりになります。
PlatformIOの左下の”🔌”アイコンをクリックすると通信が始まります。ポート番号や通信速度設定を間違えていると通信できません。

サンプルプログラムなどは問題なく動いてしまうので気づかないかも知れませんが、自分でプログラムを開発する場合は、シリアル通信ができるか?が最重要です。これが最初の一歩です。何が起きているかわからない暗闇の迷宮の中の灯火です。ここからがダンジョン攻略の始まりです。

Bluetoothでつなぐ

今回はESP32をBluetoothキーボードにするプログラムを動かしました。マイコンが動き出したらパソコンかスマートフォンでBluetoothを有効にしてBluetoothデバイスを検索します。
ESP32 Keyboard
というデバイスがそれです。
ペアリングするとキー操作が送られてきます。キー入力がわかるようテキストエディタにカーソルを置くと文字列が現れるでしょう。

マイコンボードの開発で考えること

マイコンボードもPlatformIOもあなたが教えてくれた事しか知りません。あなたが指示したことを忠実に実行するだけです。忖度などありません。すべてを理解しているのはこれからプログラムやハードウエアを作る設計者のあなただけです。

マイコンボードが異なるとあなたが作るプログラムの命令も変えなくてはなりません。マイコンボードのライブラリはマイコンボード特有の機能に合わせた特有の命令を用意してくれています。特有の機能を簡単に使えるようになりますが動くのはそのマイコンボードだけで汎用性は無いのです。
検索した情報で真似をしようとしてもマイコンボードの違いでサンプルプログラムが動かない場合が多いでしょう。そして情報過多です。同じマイコンボードでも時代遅れのやり方、たまたま動いているだけの危うい情報などいくらでもあります。唯一頼れるICメーカーの情報が間違っている事も頻繁にあります。

普通のソフトウエア開発も基本的に同じですがハードウエアの違いはOSが面倒を見てくれるので違いを意識する事が少なくプログラムの汎用性があります。マイコンボードにはOSがありません。OSなどという大飯食らいを養うメモリーもストレージも無いのです。OSのドライバーがやってくれていた事も含めすべてあなたが面倒見なくてはならないのがマイコンボードの開発です。ライブラリをうまく使って作りましょう。

大昔のマイコンICだったらソフトウエアで入力と出力を間違えて動かしたらマイコンが壊れるくらい当たり前でした。最近のICは回路の設計が良くなって壊れにくくなりました。
ですから脅し文句が多くなりましたがマイコン開発入門がお気楽にできる良い時代になりましたのでぜひ挑戦してください。

ビデオ



コメント

最近のコメント

Threaded Recent Comments will be here.