#1.始めに
DabbleAppを使って、ESP32開発ボードを利用した4WDカーを作ろうとしましたが、スケッチのサンプルプログラムはモータ制御とGamePadの事例が分かれており、統合する必要がありました。そこで、スマートホンを使用して、4WDカーを動かし、他のボタンでヘッドライトやブザーを鳴らせるように追加変更した方法を順を追って説明したいと思います。
#2.目次
3.Arduino IDEの開発環境の構築
4.開発ボードとの接続
5.スマートホンへのDabble Appのインストール
6.プログラムの作成
7.GamePadキーの操作説明
8.配線
9.駆動系の電装部品
#3.Arduino IDEの開発環境の構築
##1)Arduino IDEのインストール
https://www.arduino.cc/en/software
からダウンロードしてください。
私が使っているバージョンは、Arduino IDE 2.3.2です。
下記ホームページが参考になると思います。
https://burariweb.info/electronic-work/arduino-development-environment-install.html
##2)WEMOS D1 R32開発ボード用のESP32ボードサポートのインストール
下記ホームページからESP32用のサポートソフトをインストールしてください。
https://ai.thestempedia.com/docs/getting-started-with-esp32-on-arduino-ide/
開発ボードは、事例ではESP32DevModuleを選択していますが、私の場合はWEMOS D1 R32開発ボードを使用していますので、WEMOS D1 R32を選択しています。
##3)Arduino IDE–ESP32用Dabbleライブラリのインストール
ライブラリーには、DabbleライブラリとDabble-ESP32ライブラリの2種類が有りますので、Dabble-ESP32ライブラリをインストールします。
ダウンロード先は、下記ホームページの最後の方のArduino IDE – ESP32用と記述されている所からダウンロードできます。
ダウンローしましたら、中間ぐらいの場所のハードウェア用のDabbleライブラリを入手するというDabbleライブラリの入手方法を参考にしてダウンロードしたライブラリーを取り込んでください。
https://ai.thestempedia.com/docs/dabble-app/getting-started-with-dabble/
#4.開発ボードとの接続
Arduino IDEとESP32開発ボードと接続した時に、エラーが出ましたので、参考までに記述しておきます。
##1)開発ボードへコンパイルデータを転送するときに、
A fatal error occurred: Failed to connect to ESP32: No serial data received.
のアラームが出て、転送できない。現象として、デバイスマネージャーのポートに、CH430用のポートが表示さなかった。
⇒原因としは、ケーブルを変えることにより、CH430comポートが表示されるようになった。
##2)開発ボードへコンパイルデータを転送するときに、
This error originates from pySerial. It is likely not a problem with esptool, but with the hardware connection or drivers
のアラームが出て、転送できない。
⇒原因としては、2年前の古いWEMOS D1 R32ボードで接続した時のエラーで、新しく購入したボードでは、WEMOS D1 R32ボードでも書き込みが可能でした。
##3)開発ボードへコンパイルデータを転送するときに、下記エラーメッセージがでる。
Compilation error: 'ledcSetup' was not declared in this scope
⇒原因は分かりませんが、一度Arduino IDEをアンインストールして再インストールした所、正常にコンパイルすることが出来ました。
#5.スマートホンへのDabble Appのインストール
##1)アイホンへのインストール
①App Storeを開いて検索欄にDabble入力すると、インストール候補欄にDabble-bluetooth controller表示されるので選択する。
②Dabble-Bluetooth Controllerを選択してインストールする。
詳細は、下記ホームページを参照してください。
https://apps.apple.com/jp/app/dabble-bluetooth-controller/id1472734455
##2)アンドロイドのインストール
①Playストアを開いて検索欄にDabble Appと入力すると、インストール候補欄にDabbleAppが表示されるので選択する。
②Arduino ESP Bluetooth-Dabbleを選択してインストールする。
詳細は下記ホームページを参照してください。
https://play.google.com/store/apps/details?id=io.dabbleapp&hl=en_US
#6.プログラムの作成
##1)DabbleAppの説明
Dabble Appは、スマートフォンを仮想I / Oデバイスに変換し、Bluetoothを使用してハードウェアを制御し、
それと通信し、加速度計、GPS、近接、およびスマートフォンの他の機能などのセンサーにアクセスできるようにします。
詳細な説明は、下記ホームページで確認ください
https://ai.thestempedia.com/docs/dabble-app/getting-started-with-dabble/
##2)ESP32 BLUETOOH CAR (DABBLE)ソフトの利用
ソフトウェアーは、オープンソフトのESP32-DABBLE-BLUETOOTH-CONTROLLED-CARをベースに作られています。
サンプルプログラムでは、Switch ModeはJoystick Mode用で書かれていますので、動かすときにはJoystick Modeで動かす必要があります。
下記ホームページからダウンロードして使用しています。
https://github.com/THEIOTGUY/ESP32-DABBLE-BLUETOOTH-CONTROLLED-CAR
##3)プログラムの紹介
#define l1 16 //←①27left motor 1
#define l2 27 //←②26left motor 2
#define r1 25 //←③33right motor 1
#define r2 17 //←④32right motor 2
#define e1 26 //←⑤14right enable pin for left motor
#define e2 14 //←⑥25left enable pin for right motor
#define buzzerPin 5 //←⑦追加 the buzzer pin
#define led_l 18 //←⑧追加 right light
#define led_r 19 //←⑨追加 left ligth
int lm = 0; //speed of left motor
int rm = 0; //speed of right motor
#define CUSTOM_SETTINGS
#define INCLUDE_GAMEPAD_MODULE
#include <DabbleESP32.h>
const int freq = 1000; //←⑩変更30000
const int pwmChannel = 0;
const int pwmChannel2 = 1;
const int resolution = 8;
int dutyCycle = 200;
void setup() {
Dabble.begin("MyESP32"); //←⑪小文字に変更”ESP32”
pinMode(l1, OUTPUT);
pinMode(l2, OUTPUT);
pinMode(r1, OUTPUT);
pinMode(r2, OUTPUT);
pinMode(e1, OUTPUT);
pinMode(e2, OUTPUT);
pinMode(buzzerPin, OUTPUT);digitalWrite(buzzerPin, HIGH); // ←⑫追加 Set as output
pinMode(led_l, OUTPUT);digitalWrite(led_l, LOW); // ←⑬追加 Set as output
pinMode(led_r, OUTPUT);digitalWrite(led_r, LOW); // ←⑭追加 Set as output
ledcSetup(pwmChannel, freq, resolution);
ledcAttachPin(e1, pwmChannel);
ledcAttachPin(e2, pwmChannel2);
}
void loop() {
Dabble.processInput();
ledcWrite(pwmChannel, lm);
ledcWrite(pwmChannel2, rm);
float xval = GamePad.getXaxisData();
float yval = GamePad.getYaxisData();
if (GamePad.isCirclePressed()) // ←⑮追加 〇ボタン確認
{
digitalWrite(buzzerPin, LOW); // ←⑯Set to HIGH to make the buzzer sound
}
else digitalWrite(buzzerPin, HIGH); //←⑰LOW to turn off the buzzer
if (GamePad.isTrianglePressed()) // ←⑱追加 △ボタン確認
{digitalWrite(led_l, HIGH);
digitalWrite(led_r, HIGH);
}
if (GamePad.isCrossPressed()) // ←⑲追加 ✖ボタン確認
{digitalWrite(led_l, LOW);
digitalWrite(led_r, LOW);
}
if(yval < 0){
digitalWrite(l1, HIGH);
digitalWrite(l2, LOW);
digitalWrite(r1, HIGH);
digitalWrite(r2, LOW);
lm = map(yval, 0, -7, 0, 200);
rm = map(yval, 0, -7, 0, 200);
}
else if(yval > 0) {
digitalWrite(l1, LOW);
digitalWrite(l2, HIGH);
digitalWrite(r1, LOW);
digitalWrite(r2, HIGH);
lm = map(yval, 0, 7, 0, 200);
rm = map(yval, 0, 7, 0, 200);
}
else {
lm = 0;
rm = 0;
}
if(xval < 0) {
int xMapped = map(xval, 0, -7, 0, 200);
lm = lm - xMapped;
rm = rm + xMapped;
if(lm < 0) {
lm = 0;
}
if(rm > 200) {
rm = 200;
}
}
if(xval > 0) {
int xMapped = map(xval, 0, 7, 0, 200);
lm = lm + xMapped;
rm = rm - xMapped;
if(lm > 200) {
lm = 200;
}
if(rm < 0) {
rm = 0;
}
}
}
##4)ベースプログラムからの修正箇所の説明
ブザーとヘッドライト用のプログラムは、Arduino IDEソフトのスケッチ例のDabble-ESP32ライブラリのGamePadプログラムを参考にしています。
GamePadプログラムでは、ボタンが押されると、押されたボタンの名称が表示されるプログラムですので、一度動かしてみると理解できると思います。
変更プロブラムでは、△が押された時にヘッドライトON、✖が押された時にヘッドライトOFF、〇が押された時にブザーON,離したときにブザーOFFになっています。
変更箇所には①から⑲まで番号を振っておきました。
●①から⑥は、ドライバーとの配線をし易くするためにピン番号を変更しています。
●⑦から⑨は、ヘッドライトのON,OFFとブザーのピン番号を決めています。
●⑩はPWM 1サイクルの周期[sec]の逆数ですが、値を下げています。この数値の方が滑らかに動いています。(他の事例に従っています)
●⑪はコンパイル時に”ESP32”のダブルコーテーションが大文字で記載されていたためにエラーが出ていました。半角に修正した所、正常にコンパイルされました。
●⑫から⑭は、ヘッドライトのON,OFFとブザーのピン番号を出力ピンに定義しています。
●⑮から⑲は、ヘッドライトのON,OFFとブザーのピン番号をGamePadから取り込まれたボタンにより、ON,OFFをコントロールしています。
#7.GamePadキーの操作説明
##1)スマートフォンにインストールしたDabbleのアイコンをダブルクリックします。
##2)Dabbleの機能選択画面が表示されますので、GamePadを選択します。
##3)GamePadの操作画面が表示れますので、モード選択アイコンを押します。
##4)SwitchModeの選択画面が表示れますので、Joystickを選択します。
##5)GamePadの操作画面に戻りますので、BLUETOOH選択アイコンを押します。
##6)BLUETOOH選択画面が表示されますので、”MyESP32"を選択します。もし、表示さない場合は、D1 R32 ESP32ボード側を一度電源を切って、再入力してください。
##7)JoystickモードのGamePadの操作画面が表示れます。BLUETOOH選択アイコンが接続表示されています。
##8)Joystickボタンの操作説明
・△を押すとヘッドライトがONします。
・✖を押すとヘッドライトがOFFします。
・〇を押したときにブザーがONになり、離すとブザーがOFFになります。
・JOGボールを上にスライドさせると前進します。
・JOGボールを下にスライドさせると後退します。
・JOGボールを左にスライドさせると左旋回します。
・JOGボールを右にスライドさせると右旋回します。
##1)L298nハイパワードライバーボードモジュール↔モーター間接続
OUT1↔モータA1
OUT2↔モータA2
OUT3↔モータB1
OUT4↔モータB2
##2)L298nドライバーボードモジュール↔ESP32開発ボード間接続
①回転指令接続
ENA↔14ピン
IN1↔27ピン
IN2↔16ピン
IN3↔17ピン
IN4↔25ピン
ENB↔26ピン
②電源供給接続
+5V端子↔5Vピン
GND端子↔GNDピン
##3)ESP32開発ボード↔led警告灯間接続
12ピン↔+側LED端子1
13ピン↔+側LED端子2
GNDピン↔-側LED端子1と2
##4)ESP32開発ボード↔ブザー間接続
5ピン↔I/Oピン
GNDピン↔GNDピン
3Vピン↔VCCピン
##5)L298nドライバーボードモジュール↔バッテリーホルダーケース間接続
+12V↔+バッテリー
GND↔-バッテリー
L298nハイパワードライバーボードモジュールの配線情報は下記ホームページが参考になります。
https://aisumegane.com/l298n/
#9.駆動系の電装部品
##1)D1 R32 ESP32 wifiワイヤレスbluetooth開発ボード
##2)L298nハイパワードライバーボードモジュール
##3)インテリジェントカーロボット用モーターモジュール 4個
##4)金属製led警告灯6mm 2個
##5)アクティブブザーモジュール 1個
##6)ミニ押しボタンスイッチ 1個
##7)抵抗 220Ω 2個
##8)18650 用電池バッテリーホルダーケース
##9)ケーブル類
##10)18650バッテリー 2個
#10.おわりに
私の趣味は、工作機械を使って木工製品を作ることです。
若いころはZ80等のマイコンを使ってソフト開発していましたが、Arduinoのソフトを最初から勉強して自作することは気が進みませんでした。
DabbleAppを見つけて、このソフトを使えば、私でもソフト開発ができると思い、挑戦しました。
おかげさまで、木工製品に動きを加えることが出来ました。