2019年8月24日土曜日

四脚歩行ロボットを作る その5 四脚歩行の分析

1.四脚歩行について考察

バンビ1号の完成により、ソフト開発が出来る様になりました。
当初の予定通り、四脚歩行の「モノマネ」をしてみましょう。

まず参考にしたのはこちらの動画です。


本物の犬ではありませんが、モデル化してくれてるので実物よりも判りやすいですね。
正確な理解ではありませんが、歩様によって名前がついており、これはwalk(なみあし)でしょうか。さらに早くなるに従い、trot(はやあし)、canter(駆足)、galop(襲歩)と呼ぶ様です。

簡単に分析してみると、左右の前足はほぼ1/2周期のズレで同時に着地している時間がわずかに存在しています。左右の後足も前足と同様の関係にありそうです。前後の足の周期は微妙なタイミングで、右前脚が着地するよりもわずかに早く左足が持ち上げられています。

全体的に眺めると、常に2本乃至は3本の足が着地しており、左右の足は逆位相、前後の足は3/8とか5/16周期ぐらいの位相のズレが有るイメージですね。

ややこしいので模式図にしてみるとこんな感じでしょうか。簡易的に考えるため、一歩の周期を16分割しています。

walk時の足の状態模式図
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
右前足
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
左前足
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
右後足
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
左後足
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
足が着地している
 
足が浮いている

2.足の動きのモデル

足を動かす際の周期はおおよそイメージが付きました。
続いて、一本づつの足の動きについてですが、バンビ1号は実物に比べると関節を省略した構造になっていますのであまり表現力が有りません(足首の返しとか出来るととてもそれっぽくなりそうですが)。
いきなり複雑な動きを制御するのも難易度が高くなりすぎますので、足先位置の軌跡を次のように単純化します。本来は蒲鉾型に近い軌跡になりそうですが、単純化して三角形として考えます。
一本一本の足はこのモデルの様に動かし、動かすタイミングをずらすことで、四本足の動きを表現してみます。

3.ロボット制御はパラパラ漫画

ロボット制御のサイトをあさるとロボット制御はパラパラ漫画だと言います。ロボットの動きを時間で分解し、ある瞬間ごとのサーボ位置を再現してつなげていくと動的なモーションが完成しているという考え方です。
今回もその方法に沿ってスケッチを書いてみます。

4.足先の座標計算

上で考えた様な足の動きをサーボモーターでトレースしようとするには、
  1. 足先の座標を計算する
  2. 狙いの座標に足先を動かすためのサーボモータの角度を計算する
  3. サーボモータに指令を出す
と言うながれになります。
足先の軌跡は単純化していますので、歩幅と肩位置の高さと、軌跡の最高点を決めてやれば軌跡の形が定まります。
また、座標は時間の経過に応じて定まりますので、歩くスピードと、足先の接地時間、滞空時間の比率を決めると、時間Tでの足先の座標が決まります。

x(T)=x(0)+vx(T)
y(T)=y(0)+vy(T)

式を立てるとすると、こんな感じ。一次元の方程式なのでこれなら中学生レベルの私でも大丈夫です。
実際には三角形の軌跡なので、一歩当たりの周期や肩までの高さ、歩幅、足の振り上げ高さあたりを任意に決めると各頂点ごとにx(0)とy(0)やvx、vyが決まります。

このあたり、計算ばかりであまり面白くないので今回はすっ飛ばします。
機会があれば次の逆運動計算と合わせてまとめるかも。

5.逆運動計算

もう一つ厄介な計算が逆運動計算です。
これは足先の座標を満足するためのサーボの角度を算出する計算です。
今回用いた2関節の足の場合、こちらのサイトに2リンク系の逆運動計算が詳しく紹介されていますので、ほぼそのまま利用しました。
少々ややこしいですが、最後の式を計算させれば、肩位置サーボの角度(θ1)と肘位置サーボの角度(θ2)が求められます。
なお逆運動計算では逆三角関数を利用する為、スケッチを書く際にはmath.hライブラリをインクルードしておきましょう。

6.まとめ

あれやこれやの計算が出てきますが、資料を探してそのまま使っているだけです。時間をかけてブログ等で解説してくださっている先人に感謝です。
次回はいよいよバンビ1号を動かしてみたいと思います。

2019年8月22日木曜日

四脚歩行ロボットを作る その4 図面も書かずに組立

1.ブラケット類は簡単プラ製

ロボット製作の醍醐味はソフト製作でしょうかハード製作でしょうか?
正解は両方です!

ということでロボット本体の製作に取り掛かります。基本構造は前回の通り。骨格はサーボブラケットと兼用です。
材質は、かっこいいアルミ製などにトライしたいのですが、加工手段を持っていなためまずは樹脂製でやってみます。今回のロボットはサーボが小さく、重量やトルクも大したこと無いなんとかなるでしょう。

図面引いて3Dプリンタって方法もありますが、CADも3Dプリンタも持ってないのでアクリル板を手加工してみます。

2.現物合わせに四苦八苦

樹脂製のブラケット製作ですが、廃材再利用のアクリル板を活用してみました。
5㎜厚と3㎜厚のアクリル板を細く切断したり削ったりして、必要な幅の角棒に加工します。


サーボの取付け向きなどに合わせた長さにカットし、にネジ穴をあけてサーボと締結します。
サーボ本体の取付けはM2ネジを使います。下穴はφ1.5。
サーボホーンの取付けはM1.2で下穴はφ1.0。

ネジを取り付けるためにタップも買ったのですが、タップ加工無しの方ががっちり締結出来たので不要でした。タッピングネジじゃなくても、下穴だけでネジが効きます。

3.サーボホーン取付け時の注意点

今回使用するSG90は、作動範囲が180°しかありません。サーボホーン取付け位置には注意しないと、動かしたい範囲で動かせません。

サーボホーンを取り付ける際にはサーボをセンター位置(0~180°の90°)にセットした上で、サーボホーンを関節可動範囲の中央位置になる様取り付けます。ただしサーボの歯車位置の都合でちょうど90°には出来ないケースがほとんどです。この様な場合はソフト的にトリムを掛けましょう。幸いなことにSG90の作動範囲は180°とされていますが、実際には200°くらいは動きます。

4.とにかく形になりました。

加工にはそれなりに手間がかかりましたが、なんとか形になりました。





形になって分かったのですが(組み立てながらうすうす気付いてはいましたが)、圧倒的強度不足&加工精度不足です。
加工の手間を減らすため、サーボブラケットは、サーボホーン側のみの片支え構造にしています。この構造は、軽量化や脚の可動範囲の確保にも役立つと考えて採用しました。

強度不足対策のため、厚さ5㎜のアクリル板を使い、十分な剛性を持たせていたのですが想定していなかった弱点はサーボホーンの強度でした。ブラケットはがっちりしてますが、サーボホーンの付け根がグニャグニャ曲がっています。。。内蔵ギヤの軸も動いているのかな?


アルミ製のサーボホーンでもあればとも思ったのですが、安物サーボのSG90にそのようなアフターパーツは出てない様ですね。もしアルミ製に変えても内蔵の樹脂ギヤに負荷が集中してしまいそうな気もします。
2号機では、サーボホーンの反対側にフリーホーンを取り付けるのが無難ですね。

また、加工精度不足、サーボのトリム不足、剛性不足もろもろ相まって、4本脚を同じ姿勢にすると同時に着地出来ていない模様。そもそも剛性不足のフニャフニャくんなのでどの程度の寸法誤差がでているのかよく判りませんが。

5.まとめ

勢いで作った初号機ですので不具合が出るのは想定内です。
それにしても剛性不足でろくに立つことも出来ない姿はまさに生まれたての子鹿の様相です。改めて命名「バンビ1号」。

とは言え、2号機製作に向けてのノウハウはいろいろ獲得できたように思います。
バンビ1号君も無駄にはせず、歩行動作プログラムの検証用に利用したいと思います。

四脚歩行ロボットを作る その3 構造を考える

1.犬だか馬鹿だか

更新が停滞していたよつあしロボットの(ひと月ほど前の)進捗です。

今回はロボットの構造とおおよその寸法についてです。
憧れの大先輩Spot Miniさんは、とてもすらっとした体形をされています。

スレンダーな胴体とほっそりした脚ですが、引っ張られても蹴られても軽やかなステップで決して倒れる事は有りません。
見れば見るほど洗練された機能美を感じますが、良く見ると犬?では無い様な気がします。

いろんな犬と比較すると、犬の方が短足気味な気がします。大体の犬では、つま先から肩や股関節までの長さ(脚の長さ)(H)と、肩から股関節の長さ(胴の長さ)(L)を比較すると、L>Hとなっている様です。一方でわれらがSpot先輩は、L=H寄りのL≦Hの様に見えます。

前肢の関節の向きは異なりますが、足の長さだけなら、馬とか鹿寄りなんですね。
構造を考えるうえで、軽やかに見えるスタイルも重要ですので、可能な限り足長にしておきたいと思います。

2.基本構造

一肢につき3自由度を与える事は以前にも述べましたが、関節の配置も何通りか選択肢があります。いくつか案をかんがえたのですが、今回は下図の通りとしました。力学的には少し無理のある形状ですが小型軽量なため、少々の無理は効きそうだと判断しています。座標計算が少し簡単になる構造を選びました。

ちなみに今回は3DCADでの設計は行いません。
工作精度も強度もそこそこで良いので、サクサク組んで早く試してみたいので。

3.実寸法の検討

基本構造と全体のバランスイメージが固まったので、実際のサーボサイズに合わせて脚と胴の長さを決定します。
サーボサイズを考慮した構造は次の通りです。側面から見た図となります。

配置の都合で、胴の長さはサーボサイズでほぼ決まっています。前肢から後肢の間の距離は約110㎜となります。
脚の長さはL≦Hから、110㎜以上。とはいえ、あまり長くするとサーボへの負荷が大きくなりすぎますのでH=110㎜としました。計算の簡略化のため、肩から肘、肘から足先の長さは1:1としました。

4.トルクの確認

さて、何となくの形状バランスだけで形を決めてみましたが、サーボモータのパワーについても考察しておく必要が有ります。
4脚ロボットですのでロボットの自重を4本の足で支えなければなりません。ではロボットの重量は?と考えるとまだまだ決まってないのですが、現在判明しているだけでも次の重量がかかります。

単4エネループ×4本=13g×4本=52g
サーボ×12個=9g×12個=108g

あとは電池ボックス、基板、ブラケット、マイコンボード、圧力センサー、ジャイロセンサー、PWM増設基板等です。
おそらくこれらで100g程度にはなりそうですので暫定目標は体重250gとしておきます。

サーボの回転方向へかかる負荷は、脚に掛かる負荷を回転方向のベクトル成分に分解してやる必要がありますが、最悪の場合100%がサーボへの負荷となります。仮に250gの負荷が11cmの長さの足一本に掛かった場合、最大で2750g・cm=2.75kg・cmとなり、SG90のストールトルク1.8kg・cmを大きく超過してしまいます。
しかしながら、一本脚に、体重と同荷重以上の負荷がかかると言う状況は(飛んだり跳ねたりしなければ)まずありえません。常に2本以上の脚が接地してなおかつ関節の角度も適切であれば、体重の20~30%程度の負荷に収まるのではないかと予測しています。

ちなみに高トルクタイプのSG92Rであれば、ストールトルクは2.5kg・cmですのでまだトルクが足りませんが、基本2本の脚で支えると考えて1.375kg・cm。衝撃荷重や安全率を考慮するとまだ足りませんね。

4.まとめ

こまごま考えてみましたが、初号機はいろんな問題を探すべきテストベッドですので、あまり深く考えすぎずに手を動かしてみましょう。

ESP32でスマホとシリアル通信(Arduino IDE編)

1.Bluetoothの種類

Bluetoothには種類があるそうです。
ひとつは通常のBluetooth、二つ目は省電力用のRedtooth、三つ目はカレー好きのYellowbooth。。。嘘です。

本当は、従来からあるBluetooth Basic Rate/Enhanced Data Rate (BR/EDR) と、IoT機器向けに省電力通信が規定された Bluetooth Low Energy (LE) 、通称BLEがあるそうです。

ESP32自体が、IoT機器等の通信用途が想定されているためか、ブログ等をしらべてもBLEの記事がほとんどだったのですが、サンプルスケッチ等を見ても難しくて自分では応用出来そうにないので、シンプルな従来のBluetoothでシリアル通信を行ってみます。

2.Bluetooth通信用のライブラリ導入

さて、Arduino IDEでESP32のBluetooth通信を行うには、ライブラリを導入しなければなりません。良いライブラリがGitHubのこちらにありますので、さくっとClone or DownloadでDownload ZIPです。

ダウンロードしたZIPファイルは、Arduino IDEを開いて[スケッチ]→[ライブラリをインクルード]→[.ZIP形式のライブラリをインストール...]を選択して、ファイルマネージャから指定しましょう。

3.サンプルスケッチ

Bluetoothのテストは、ライブラリに付属のサンプルスケッチで即実行可能でした。
サンプルスケッチの読込は、Arduino IDEから[ファイル]→[スケッチ例]→[BluetoothSerial]→[SerialtoSerialBT]を選択します。


このままマイコンボードに書き込めば、ESP32はBluetooth通信を始めます。

以下、サンプルスケッチの必要部分のみ書き出しています。


#include "BluetoothSerial.h"

BluetoothSerial SerialBT;

void setup() {
  Serial.begin(115200);
  SerialBT.begin("ESP32");

 //デバイス名は"ESP32"としました。サンプルスケッチではESP32testとなっています。

  Serial.println("The device started, now you can pair it with bluetooth!");
}

void loop() {
  if (Serial.available()) {
    SerialBT.write(Serial.read());
  }
  if (SerialBT.available()) {
    Serial.write(SerialBT.read());
  }
  delay(20);
}

4.スマホ側の準備

今回、スマホ側のシリアル通信にはSerial Bluetooth Terminalというフリーのアプリを使いました。Google Playからさくっとインストールしましょう。※iphone持ってないのでandroid前提です。ごめんなさい。

インストール後の設定も以下の通りとてもシンプルです。
  1. スマホとESP32をペアリングする。androidの設定画面→[機器接続]→[新しい機器とペア設定する]→[ESP32(スケッチで設定したデバイス名)を選択する]
  2. Serial Bluetooth Terminalを立ち上げ、接続先としてESP32を選択する。左上のメニューアイコン→[Devices]→[ESP32(スケッチで設定したデバイス名)]
  3. 画面上部のコネクタ形状のアイコンを押し、Connectedと表示されれば接続完了

5.いよいよ通信テスト

通信テストは簡単です。Arduino IDE側でシリアルモニタを開き、入力窓から何か文字を入力してみましょう。
ここでは、"test ESP32 to Smart Phone"と入力してみました。


スマホのSerial Bluetooth画面に受信したテキストが表示されました!

次に、Serial Bluetooth Terminalの入力窓に、"test Smart Phone to ESP32"と入力して送信ボタンを押すと、Arduino IDEのシリアルモニタにテキストが表示されました。双方向通信成功です。

6.まとめ

ESP32を使ったBluetoothシリアル通信は、非常に簡単に接続できました。
BluetoothでのLチカ制御も出来ましたが、長くなったのでまた次回。

2019年8月21日水曜日

Arduino IDEでESP32の動作テスト

1.やっぱりArduino IDEが簡単!

前回の記事では、MicroPython使うぞ的な事言ってましたが、とりあえず動作確認のLチカはArduino IDEでやってみました。


で、無事成功。

基本的な動きを確認するために、
  1. 入出力の両方を確認するためにタイマーじゃなくてスイッチで点滅させた
  2. ついでに内部PULLUP抵抗があることも確認
  3. 外部電源の動作確認のため、電池ボックスから給電
てな感じです。

2.ESP32 DEVKIT V1 の PINOUT


ESP32 DEVKIT V1のピンアウトは上図の通りです。
光らせるLEDは開発ボード上に実装されてる青色のLED(LED0)です。出力がD2と共有されているので、D2にHIGHを出力すると点灯します。
使用したパーツは次の通りシンプル構成です。
  1. ESP32 DEVKIT V1
  2. 適当なプッシュボタン
  3. 適当なブレッドボード
  4. 単4電池×4本 電池ボックス
  5. 単4eneloop×4本
配線は、電池ボックスの+をVINへ、-をGNDへ。プッシュボタンの片方をGNDへ、もう片方をD12へ接続するだけです。

eneloop×4本は、実測で4.8Vです。こちらのサイトによるとInput Voltageは7~12Vとなっていますが、4.8Vでも元気に動きました。後日Bluetooth接続による制御を試したところ、4.8VではLチカはできたもののBluetooth接続ができませんでした。eneloop×6本、実測8Vにすると問題なく動作しました。3本電池ボックスの実測3.6Vだと電圧不足で不安定な感じでした。

ちなみに、3V3ピンに3本電池ボックスの実測3.6V直結でも正常に動作しましたが保護回路が無いはずなので破損の恐れありです。未確認の情報によると駆動電圧は2.3~3.6Vだそうですが、2本電池ボックスの実測2.4Vだと動作が非常に不安定でした。

3.Arduinoの基本コマンドは使えた

今回のLチカ用スケッチも非常にシンプル。
以下の通りです。

//ESP32 Lチカスケッチ

int outpin = 2;  //DEVKIT上のLEDとD2ピンのOUTPUTが共有されている
int inpin = 12;  //インプットスイッチ用ピン

void setup() {
  pinMode(outpin, OUTPUT);
  pinMode(inpin, INPUT_PULLUP);  //ESP32でもPULLUP抵抗内蔵されてました
  Serial.begin(115200);
}

void loop() {
  int SW = digitalRead(inpin);

  if (SW == LOW){
    digitalWrite(outpin,HIGH);
    Serial.println("on");
  }

  else {
    digitalWrite(outpin,LOW);
    Serial.println("off");
  }
}

4.まとめ

今回は非常に簡単な回路とスケッチでESP32の動作確認ができて満足です。次は通信のテストを行いますがもうしばらくArduino IDEでいきます。
WiFiも必要ですが、スマホからのロボット制御も想定してるのでBluetoothのテストかな。できればAndroidのアプリ制作にもトライしたいところです。

2019年8月20日火曜日

ロボット用マイコンにESP32はいかが?


1.ESP32入荷

Aliexpressはとても便利なのですが、納期の遅さだけがいただけません。だいたい2~3週間で到着しますので、面白いデバイスを見つけて注文してもすぐには使えません。また、追加でもう一つ欲しいとなったときもまた3週間待ちです。
待ってる間に他の事に興味が移ったりもしますので、なにか面白そうなものを見つけるととりあえず注文! というような運用になってます。

前ふりが長くなりましたが、とりあえず注文して積んであったのがESP32とESP8266。
良くわからずに注文したのですが、ポイント次の通り。

①Arduino IDEで開発出来るマイコンボード
②Arduinoに使われているATMega系のマイコンより処理が早い
③Wi-fiとBluetoothに接続可能なので、無線でロボットをコントロールできるらしい

届いてから2週間ほど放置でしたが、ようやく開発環境を整えるところまでの目処がついたのでまとめてみます。

ESP系のボードとArduinoのスペック比較をするとこんな感じ。
これだけ見ると圧倒的にESPが良いのですが、Arduinoは開発環境や先人の開発例が多くあるので初心者がとっつきやすいと言う大きなメリットがあります。

 
ESP8266
ESP32
Arduino 
Pro 2560
Arduino
Pro Micro
CPU
Tensilica LX106
Tensilica Xtensa
Dual-Core LX6
ATmega2560
ATmega32U4
動作周波数
80/160MHz
160/240MHz
16MHz
16MHz
RAM
36KB
520KB
8KB
2.5KB
Flash
最大16MB
最大64MB
256KB
32KB
WiFi
802.11n 最大65 Mbps
802.11g 
最大54 Mbps
802.11n 最大150 Mbps
802.11g 
最大54 Mbps
無し
無し
BlueTooth
無し
有り
無し
無し
GPIO
最大17
最大32
最大54
最大16
I2C
最大1
最大2
最大1
最大1
PWM
最大4
最大8
最大15
最大5
UART
最大2
最大3
最大3
最大1
※ArduinoはUNOでは無くて私が好むPro 2560とPro Micro

2.ESP32、ESP8266とは

今回はろくにスペックも調べずに買ったのですが、ESP32、ESP8266はどちらもWi-Fiが使えるマイコンです。
改めて調べてみるとESP32はESP8266の進化版で、Bluetoothも使えたり諸々の機能が少しずつ向上していると言う事で、とりあえず手元のESP8266はもう少しお休み頂いて、当面はESP32のみ触ってみます。

ちなみにESP32を調べてると、ESP-WROOM-32とかESP32 DEVKITとかいろんな名前が出てきますが、このシリーズに使われているSoCの名前がESP32でその中に、LX6っていうCPUが入ってるみたいですね。このESP32いい感じで動かすためのフラッシュメモリやらなんやらを基板に並べたパッケージの名前がESP32-WROOM-32で、DEVKITやなんやかんやつくのは開発ボードの名前ってことらしいです。
今回購入したボードはESP32 DEVKIT V1 30PINタイプでした。


こんなイメージ:DEVKIT V1⊃ESP32-WROOM-32⊃ESP32⊃LX6

開発ボードにもたくさんのバージョンがあってややこしいのですが、いつもお世話になっているこちらのサイトに詳しく記載されています。(DEKOのアヤシいお部屋)

3.ESP32の開発環境を整える前に

ESP32にはもともとファームが入ってるらしいです。
ArduinoなりMicroPythonなりのファーム入れる前に試してみるのと、吸い出して保存しておく方が良さそうです。(私は知らずに消してしまいました)
自分では動作確認できてないですがこちらのサイトで紹介されてます。

4.Arduino IDEでの環境作成

Arduino出身の電子工作初心者としてはとてもありがたい事に、ESP32はArduino IDEで開発可能です。
Arduino IDEをインストール済みであれば、新たなボードのライブラリを追加します。

  1. Arduino IDEを開き、[ファイル]→[環境設定]→「追加のボードマネージャのURL:」の入力ボックスの右のアイコンを押して、次のアドレスを追記します。https://dl.espressif.com/dl/package_esp32_index.json
  2. [OK]ボタンで環境設定を抜けて、[ツール]→[ボード:(現在選択しているボード名)]→[ボードマネージャ]→[esp32 by Espressif Systems]→[インストール]→[閉じる]
  3. [ツール]→[ボード:(現在選択しているボード名)]→[ボードマネージャ]→[ESP32 Dev Module]

だいたいこのサイトを参考にしました。これでArduino IDEからESP32が開発可能となりました。
でもね、ESP32ではArduinoのライブラリの多くが使えないらしいです(servo.hとか・・・)マイコンが違うので当然なのかもしれませんが。。。

5.MicroPythonでの環境作成

ESP32用のライブラリもいろいろ出ている様なのですが、ESP32開発するならMicroPythonが良いらしいとのうわさを聞いたので、MicroPythonの環境も整えてみました。

手順は次の通り。
  1. まずはこのサイトのFlash Download Tools (ESP8266 & ESP32)をダウンロード
  2. 次にこちらのサイトからFirmware for ESP32 boardsをダウンロードします。複数のバージョンがアップされていますので、最新の一つ手前の安定板をダウンロードします。私はesp32-20190529-v1.11.binをダウンロードしました。
  3. 1でダウンロードしたflash_download_tools_v3.6.6を解凍し、flash_download_tools_v3.6.6.exeを実行します。
  4. [ESP32 DownloadTool]を選択し、5~7に従ってDownload(ESP32にファームをDownloadする)条件を入力します。
  5. [...]を選択して、2でダウンロードしたファームを選択
  6. [...]@の右に[0x1000]と入力
  7. CrystalFreq:40M、SPI SPEED:40MHz、SPI MODE:DIO、FLASH SIZE:32Mbit、COM:接続しているポート、BAUD:115200
  8. 今入っているファームを削除するため、[ERASE]を押す。※DEVKIT V1の場合、自動書き込み出来ないので、SYNCと表示されたらボードのBOOTボタンを長押しする。
  9. 新しいファームを入力するため、[START]を押す。※DEVKIT V1の場合、自動書き込み出来ないので、SYNCと表示されたらボードのBOOTボタンを長押しする。
おもにこちらのサイトを参考にしました。

6.うまくファームが入らない場合

・通信速度は115200bpsにしましょう
・CrystalFreqは24Mの方がよいのかも。私はどちらでもいけます。
・DEVKIT V1は、ファームを書きこもうとし始めたらボード上のBOOTボタンを長押し。
 書き込みが始まったら離してOK

7.まとめ

とりあえず開発始めるまでのまとめです。
いまからPythonの勉強を始めます。

ESP32でスマホとシリアル通信 その2 BluetoothでLチカ

1.BluetoothでLチカ制御 前回、Bluetoothでの双方向通信に成功しましたので、ついでに少しスケッチを修正してスマホからESP32のLチカを制御した様子が以下の動画です。 撮影が悪くて画面が良く見えませんが、"1"を送信...