takashiskiのブログ

覚書の殴り書き

引っ越し手続きのときのあれこれ

引っ越ししないといけなくなりそうなので必要そうな手続きを書き出す。他に何かあったら教えて。

[toc]

役所系

大体平日しか受け付けていないので休みとっていかないといけない。クソ。

転出/転入(マイナンバー)

運転免許証住所変更

所得税の納税地変更届

  • 現在の納税先税務署に提出する
  • 新しい納税先では手続き不要
  • 写しをもらうために2部用意することを忘れずに

[手続名]所得税・消費税の納税地の変更に関する届出手続|国税庁

自立支援

  • 新しい受給先自治体の保健所等でやり取りを実施
  • 仕事が変わる場合は新しい保険証が必要

持ち物

  • 保険証
  • 最新の課税証明書
  • 受給証
  • 印鑑
  • マイナンバー
  • (診断書写し)

インフラ系

立ち合いが必要なのは退去時立ち合いくらいだと思う。

退去立ち合い

水道

ガス

電気

インターネット

  • 大体期間縛りがあるので違約金がいる...
  • 回線が引き込み済みであっても、大手プロバイダはアカウント発行まで2週間程度時間かかるので引っ越し一月くらい前から新しい契約考えないと入居後にしばらくネットがつかえない。クソ。
  • 繋ぎのプロバイダに、アカウント即発行してくれる府中インターネットがある。基本的にはクソ遅いのでひと月くらいのつなぎにのみ有効。

クレジットカード

  • 住所変更してないと転送不可でどっかとんでいったりする

郵便物

たいていの郵便物は郵便局への転居届で転送される。ただし、転送不可の郵便物が届きそうなクレカなどはきっちり住所変更すること。

ヤマトの荷物はヤマトのメンバーズに加入しておくと転送してくれることがある。佐川はだめっぽい。

楽天はクソ。明示的に会員情報を変更しないと旧住所に荷物送ってしまう。

amazonは注文したときで変更受けられる。

郵便局

e転居

ヤマト

amazon

楽天

ヤフーショッピング

モノタロウ

aliexpress

その他会員登録したもの

  • 大体はDMだとか会員証だとか送ってこないし、送ってきても転居届出してれば届くし、発送時に住所聞かれるので思い出したときに変えればよい

ロータリーエンコーダーを使う

ロータリーエンコーダーを使うことになった。ライブラリを使うほどではないだろうということで自分で書いたけどなかなかめんどくさかった。

ロータリーエンコーダー

くるくる回すとカチカチ言いながら無限に回るやつ。

www.marutsu.co.jp

接点が二つずれておいてあるらしい(AとB)。 ずれていることにより正転・逆転でハイローの立ち上がりタイミングがずれるので、それを監視して、正転もしくは逆転に1段階分動いたと判断する。

一段階回すと以下の図のように立ち上がるらしい。1がハイ、0がローとする。

f:id:takashiski:20180630212700j:plain

考え方

AかBに変化が生じたときに、前の状態に対して今の状態がなんであるか、を読むことで状態が判断できる。 例えば、平常時は A : 0, B : 0だが、正転するとA : 1, B : 0になる。これらをそれぞれ組であらわすと、それぞれ2ビットで表現できる([0,0]->[1,0])。上位2ビットを前の状態、下位2ビットを現在の状態にすることで4ビットで表現できる([0,0,1,0])。

上の図を使って状態を確認すると、正転逆転それぞれ4状態ある。

状態を常に監視してもよいが、マイコンには割り込みという便利な機能があるのでせっかくだから使ってみる(使ったことなかった)。

割り込み

特定のピンの状態を監視して、指定した変化が起きたときにだけ特定の処理を呼ぶ方法。Arduinoだと、setup内でattachInterrupt(digitalPinToInterrupt(pin),ISR,mode)を呼ぶことで設定できる。

https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/

注意点としては2点、使用できるピンとISRだ。

ISRは制限がいくらかある。例えば引数と戻り値が設定できない、delayやmillisが動かない(らしい)などである。

使用できるピンは非常に大事である。上記URLから確認してほしい。

UNOは2,3のみ、MEGAでも2,3と4ピンしかない。これ以外のピンを指定するとどれだけ待っても永遠に動いてくれないので辛い。

また、pinは数値で指定してもよいが、割り込みで使う番号とピン番号が異なるのでdigitalPinToInterrupt(pin)で変換して突っ込むことが推奨されている。対応表は上記URLの最後に書いてある。2,3ピンに関してUNOとMEGAは一緒の割り込み番号だが、Leonardoは逆である。歴史的理由らしい(For historical reasons)。

コード

ざーっと書いてたぶん動いた。A,Bどちらかの状態が変化するごとに正転/逆転の判定をして、カウンターを加算/減算している。

単純に、割り込み受けて条件判定だけをするとAとBで同じ状態を見てしまうどころか同じピンに対する割り込みで同じ状態なのに割り込まれてる。

対策として、割り込み検出しても、前の状態と現在の状態が同一だったらreturnするようにした。

for using rotary encoder on Arduino without librar ...

反省・課題

常に4ずつ加算/減算されるはずなのだが、たまに2ずれる。早く回すと取りこぼしがあるっぽい?

もうちょっとうまい状態判定の方法がありそうだけどよくわからなかったので愚直に書いた。最低でもifかswitchで書くべきだった気がする。

初期化関数と割り込み関数用意してライブラリ化すべきなきがする。

チャタリング対策はコードでは最小限にして、回路で工夫したほうがいい気がする。コンデンサ突っ込むとか。

8ビットのうち上位4ビットがどうせ余っているので、prevは<<2した上で+=currentしてもよかったかもしれない。そうすれば過去3状態も監視できる。

どうやら4単位で動くのはクリックタイプで、ノンクリックタイプもあるらしい。

最初、「ロータリーエンコーダーってなんだ...なにもわからない...」というときに色々な実装例をみたけれども、割り込みで片側のピンしかみてない、そもそも割り込み使ってない、一部状態しか監視していないなど色々なバリエーションがあった。流石にごっそり間引くのはよくないと思う...

参考文献

Arduino Unoでロータリーエンコーダを使う – 桜のはなびらどっとねっと

kokensha.xyz

ロータリーエンコーダーを使ってみる - 忘れないページ

www.arduino.cc

イベントでハッシュタグツイートを促す方法を考える

イベントで毎度思うのだけど、まだ誰もやってるのを見たことがないので書く。

背景

SNSでイベントの感想を探すのは難しい。イベント名はユニークでないと検索がしづらいが、ユニークでも誤字により引っかからなくなってしまう。

twitterでの解決策としてイベントの専用ハッシュタグを設定するということがある。イベントが設定していなくても、一部のユーザーが独自に設定して呟いてくれることもある。

現在までに見たことがある告知方法を列挙する。

  • 募集ページ(atnd、compassなど)に記載する
  • 開会や発表の頭に告知する
  • 入口や会場内に掲示する

これはどれも「投稿者がハッシュタグを入力しなければならない」という問題がある。

イベントのたびに毎回なんでやらないんだろう、と思っていた解決案を手元で試してみたので書く。

提案法

web intentsを呼び出すQRコードを作成・掲示/配布する、というものである。

web intents

web intentsとは、ダイレクトリンクからツイートなどの動作を行える仕組みである。例えば https://twitter.com/intent/tweet?text=これをツイートします というリンクを呼び出すと、「これをツイートします」という文字列がすでに入力された投稿準備画面が開かれる。ユーザーは投稿ボタンを押すだけでツイートができるのだ。以下のリンクを踏むことで確認ができる。

Post a Tweet on Twitter

ハッシュタグhashtags で設定できる。カンマ区切りで複数設定することが可能である。

QRコードの作成

今回は以下のURLを利用する

https://twitter.com/intent/tweet?text=〇〇さんのブース最高だったのでみんな言ったほうがいいよ。%0aスペースは東あ01aね。&hashtags=ステマ用ツイート&url=https://google.co.jp

今回は以下のサービスでQRコードを作成した。

QR Code Generator - Erstellen Sie hier kostenlos QR Codes

作成したQRコードは以下である。 これをQRコードリーダーアプリか、twitterのフォロー用QRコードリーダーを利用して読み込むことで、概ね想像した通りのツイートができる状態にできる。

f:id:takashiski:20180630182246j:plain

twitterアプリからの利用は以下。

help.twitter.com

狙い

ハッシュタグはある程度投稿があると、ツイート投稿時に#を打ち込むだけでサジェストされるようになる。 すぐにハッシュタグを付けてツイートできる方法を用意することで利用をしやすくするということが狙いである。

また、ハッシュタグだけ乗せたweb intentsだけでは、序盤のツイート数が増えないことが予想される。 解決方法として、例えばネタ感が強いステマ的定型web intentsのQRコードと「写真とって一緒にツイートしよう!」という文面を併記するというものを提案する。 実質定型文をそのままツイートするだけにも拘わらずイベントに参加しているという印象を強く得ることができるのではないだろうか。

運用案

A4用紙にステマ用とハッシュタグ用のQRコードと説明を併記し、クリアファイルに挟んで吊るす、という運用はどうだろうか。

クリアファイルだと反射して認識しづらい可能性があるので、平置きも用意しておくのがよいのかもしれない。

また、A-oneの名刺用紙などに印刷し、配布するということも考えられる。

課題

QRコードリーダーにもよるが、twitterアプリでなくブラウザで開かれてしまうことがある。モバイルでログインしていないユーザーの場合はログインというステップが必要になってしまうため煩雑である。

twitterのフォロー用QRコードリーダーを使えば上記は回避できることが分かっているが、知名度が低く、すぐに選択できるユーザーは少ない。

help.twitter.com

参考文献

qiita.com

blog.yuhiisk.com

Overview — Twitter Developers

blog.twitter.com

誘導ミサイル完全マスターを見ている

メモを見ながら適当にしている。まだ33分/50分くらいまでしか見てない。

www.youtube.com

ホーミングレーザー

運動方程式から「ある時刻にある地点に到達するための加速度」を求める 加速度を運動方程式に適用する 時間を勧める を繰り返すと絶対に着弾するミサイルができあがる 加速度に上限を設けると、ぎりぎりまで引き付けることで避けることができるようになる

線形補完でも実現できるが、着弾時間と運動方程式を使うほうが応用が利くので良い ex1. 飛び初めに別方向への速度を持たせる ex2. 最初に遊びをもたせる ex3. 着弾後にスクロールさせる

PvEでは自分の弾は必中であるべき。ロックオンして発射したにもかかわらず避けられると理不尽

誘導ミサイル

等速で角度調整だけで突っ込む感じ? Quaternion.Lerpはやめとけ(応用効かない) バネトルクがお勧め バネトルクはUnite2017の講演みてね バネトルク適用するとちょっと遅延して角度が追従する AngularDragを大きくすると敵にあたるようになるけど大きくし過ぎると同じ動きになる 同じ動きにならないようにゆらぎを突っ込む

トレイルの描画

  • テクスチャの両端ドットは透過にする

    トレイルねじれ問題はたいへん

  • 発生条件

  • ノード間の間隔がせまい(みさいるがおそい)
  • トレイルの幅が広い
  • スクリーン上の2d座標で内積求めて角度が大きいところの透過度をあげて解決させた

昔話

  • 整数のみ、割り算が重くて使えないハードウェアがあった
  • 4096を1.0とする
  • 掛け算をするたびに4096で割る
  • 割り算は使わないよりほかにない...

運動方程式の適用

  • 1秒60fの場合、1秒を60とすればdeltaTimeは1
  • 加速度の再計算は2のべき乗時間のみに間引き。ビットシフトのみで割り算できる 神は二階微分に宿る

コンピュートシェーダー

  • 二つの命令をCPUからGPUへ送る
    • SetData
    • Dispatch
  • CPUはGPUの結果を待たない。めいれいするだけ
  • 通常シェーダーもコンピュートシェーダーも呼び出されるタイミングは一緒なので特に遅延は考えなくてよい
  • [numthreads(8,8,8)]を関数の前につけると512並列
  • 並列数は超えると実行時エラー吐く
  • ミサイルの位置情報をCPUに置かないことを目標にしてコンピュートシェーダー実装

課題1:ターゲット情報はCPUで枚フレーム更新

ターゲットバッファを256バイト用意して毎フレームSetData

課題2 : ミサイルの管理

  • ミサイル生成関数をミサイルの誘導関数の前に置く
  • オブジェクトプール的なミサイル配列
  • 初期位置・初期角度・ミサイルID・生死に加えて乱数を付加しておくと便利

課題3 : ミサイル描画

IMUのデータをBLE notifyで受けてCubeを回す

以下の記事の応用です。

takashiski.hatenablog.com

やってること

  • IMU(慣性計測装置)で姿勢(Quaternion)を求めてBluetoothモジュール経由でBLE notifyで投げる
  • BLEで飛んできた姿勢を受けてCubeに反映する

動画

  • 任意向きを正面とした回転ができるように変更

www.youtube.com

* 初期位置の北向きが正面になるらしく(今回の場合)、西向きなので正面が右になってしまっている

www.youtube.com

コード

github.com

Unity側

  • android8.0でのみ動作確認済み
  • Bluetooth LEを利用しているため、EditorやUnity remoteでは通信部の動作確認不可
  • ストアアセット"Bluetooth LE for tvOS, iOS, android"を利用

ESP32側

機材

  • Feather ESP32(ESP-WROOM-32)
    • LiPo用PH2端子と充電回路が載っている
    • Devkit-Cでも可
  • GY-BNO055(BNO055)
    • bno055が載っていればなんでもよい
    • 処理を書き換えれば別のIMU(MPU6050など)でも可能
  • ブレッドボード
  • ジャンパ線
  • LiPo電池
  • マスキングテープ(LiPoの簡易固定用)

開発環境

  • Arduino core for ESP32 WiFi chipsを使用
  • 導入は過去記事参照

github.com

takashiski.hatenablog.com

注意

  • ESP32にヒートシンクを追加するか、使用していないときは電源を落とすこと
    • BLEのadvertizeやnotifyが実行されたままだとESP32が発熱する
    • 冷えるまで動作が不安定になることがある

課題

[解決]姿勢の基本向き設定

  • 座標系がちょっと違う。今回はIMU:(x,y,z,w)->Unity:(x,z,y,-w)と変換した。
  • ある時点のIMUの逆回転を保存しておいて、最初に反映させると 、任意の向きを(0,0,0,1)にすることができる。 * 上記座標系変換をした場合、姿勢が北向き基準になる。
  • 単純に逆回転のQuaternionを掛ければ基準向き変えれるかな?と思ったけどうまくいかなかった。

IMU以外のデータ送信

  • ボタンのオンオフはbit立てることで実現できそう
  • 追加で数値送るのは厳しいかもしれない

データ送信長

  • BLE notifyの送信可能データ長はデフォルトが実質20octetsだそう。
  • Quaternionを送る場合は16octets占有されるのであと4octetsしか空きがない。
  • ネイティブコード側で設定を変更すれば拡張できそう
    • 送信時間長くなるから何か影響がある気がする...

https://qiita.com/hituziando/items/50c7ba7fb9f8917e1ebfqiita.com

iOSやAndroid上のUnityとBLEで繋がるセンサー付コントローラを作る

概要

Unity製のiOS,AndroidアプリとBluetoothで繋がる自作専用ハードウェアを作りたい。 と言うシチュエーションは最近増えてきました。こうした場合はBLE(Blutooth Low Energy)経由で接続することが多いです。

過去の例だと BLE NANO RedBearLab BLE Nanoキット V2 - スイッチサイエンスiOSのネイティブ実装例が見つかります。

しかし現在はWifi+Blutoothに両対応した安価なESP32ボードが手に入ります。 もし安価なESP32ベースで専用BTコントローラを仕立てて、iOSAndroidと(Unityから)繋ぐことが出来ると、変なゲームやインスタレーションが作れそうです。

本エントリではUnity製アプリ内でESP32に繋いだジャイロセンサの値を反映する。というサンプルを作成します。 (端末の近くにある該当のESP32を名前決め打ちで引当て(Scan)、ESP32を発見したら自動で接続を行い、ESP32はデータをiOS,Androidに送りつけて、iOS,Android端末側で画面に表示する、というのをやります)

BLE自体の仕組みについては くらげのIoTテクノロジーさんが詳しいので、一読をおすすめします。

クラゲのIoTテクノロジー

実例

IMUからQuaternionを受け取ってCube回してます。

takashiski.hatenablog.com

本エントリで解説しないこと

お願い

  • 手元にiOS開発環境がないのでiOSの動作確認がとれません。動いたら教えてください。

執筆時の環境

  • Windows10 april 2018
  • Android8.0(XperiaXCompact)
  • Unity2018 1.0b13
  • ArduinoIDE1.8.0

必要なもの

  • ESP32 dev kit
  • microUSBケーブル
  • 後述のアセット

amazonから買うときは、primeのものを買うようにしましょう。そうでないと中国発送で届くまでに2週間かかります。

amazon以外だと秋月電子あたりで買えるんじゃないでしょうか。

準備

  1. PCにUnityのandroid/iOSのビルド環境を用意する
  2. PCにESP32の開発環境入れる
  3. BLEをUnityのiOS,Androidで動かすための ネイティブプラグイン アセットを買う

PCにUnityのandroid/iOSのビルド環境を用意する

androidに関しては参考文献を参照してください。 参考文献通りに進めれば基本的に問題ないですが、一点変更がありました。

android studioインストーラのインストール項目のandroid SDKをチェックしていることを確認するよう書いてありますが、2018/05/15次点では一覧に表示されませんでした。

無視してそのままandroid studioをインストールしたのちにandroid studioを起動すると「SDKが見つからなかった」と表示がでてそのまま半強制的にSDKをインストールすることになりました。(r25 系である必要がありそうです)

https://qiita.com/relzx/items/7f8e7817c9edd11c5023qiita.com

framesynthesis.jp

PCにESP32の開発環境を入れる

別記事に書いてあるので参考にしてください。

takashiski.hatenablog.com

基本的に公式に書いてある通りの手順に沿って手を動かすだけです。

github.com

BLEをUnityのiOS,Androidで動かすための ネイティブプラグイン アセットを買う

買ってください。20ドルです。

Unity自体はBLEの処理を持っておらず、デバイスごとにネイティブで書く必要があります。

以下のアセットを購入すると、20ドルでiOS, tvOS, androidでBLEが取り扱えるようになります。

ネイティブの処理を自前で書いて連携できるなら買わなくても大丈夫です。がんばってゴリゴリ書いてください。

実装方針・概要確認

この記事では動確程度のため、サンプルコードを最小限の改変で動かすことを目標にします。

Unity側のBLEアセットのSimpleTestというサンプルシーンがScanとnotifyの受け取り・表示をするので使います。

ESP32側はSimpleTestにあうように実装を決めます。BLE_notifyというサンプルスケッチを使います。

SimpleTestがやってること

  1. BLEデバイスをScanする
  2. Scanで見つかったデバイスのうち識別情報が一致したデバイスに自動的に接続する
  3. 接続したデバイスから受け取ったバイト列を表示する(BLE notify)

BLE_notify.inoがやっていること

  • 次の処理を繰り返す
    1. notifyで1バイトの変数valueの値を投げる
    2. valueをインクリメントをする
  • 受信デバイスから見ると、0, 1, 2, ..., FF, 0, 1, ....という順番でデータが飛んでくる

やらなければならないこと

識別情報を一致させないといけません。一致さえさせれば動作確認は取れます。

今回識別情報と呼称しているのは以下の三点の組です。

  • Device Name
  • Service UUID
  • Characteristic UUID

UUIDとして今回は16bit UUIDと呼ばれるHEX4桁のものを利用します。 実際利用する際は16bitではなく、以下のXXXXに16bit UUIDを埋め込んだほとんどが共通部のUUIDを埋め込みます。

//16bit
XXXX

//full length
0000XXXX-0000-1000-8000-00805F9B34FB

今回はそれぞれ以下のように設定します

  • Device Name : MyESP32
  • Service UUID : 2220
  • Characteristic UUID : 2221

ESP32

ファイル > スケッチ例 > ESP32 BLE Arduino > BLE_notifyを開きます。 今後も改造することとしますので、適当な名前で別名保存してください。私はBLE_Unity.inoにします。

変更箇所は35, 36行目です。

#define SERVICE_UUID        "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"
#define SERVICE_UUID        "00002220-0000-1000-8000-00805F9B34FB"
#define CHARACTERISTIC_UUID "00002221-0000-1000-8000-00805F9B34FB"

Device NameはデフォルトがMyESP32なので変更は不要です。

これをビルド・書き込みしたら完了です。 そのまま電源を入れたままにしておけば、Unity側のインストールが終わり次第すぐに確認できます。

Unity

新規プロジェクトを作成し、android(もしくはiOS)をビルド対象にして、その他の設定を済ませてください。

アセット Bluetooth LE for iOS, tvOS, androidをインポートします。

Example>SimpleTest>SimpleTestシーンを開いてください。

ヒエラルキーのMain cameraを選択し、インスペクターの項目を設定します。Device Name以外は初期値を使っています。

  • Device Name : MyESP32
  • Service UUID : 2220
  • Subscrive Characteristic UUID : 2221
  • Write Characteristic UUID : 2222(今回は使わないのでHEXなら何でもよい)

SimpleTest.csを開いて以下の項目を編集します。具体的にはWriteCharacteristicを使わないように書き換えます。

  • 159行目 if文
if (_foundSubscribeID && _foundWriteID)
if (_foundSubscribeID)

もしくはWriteCharacteristicを使って評価してる部分を削除すればよいです。

最後に、スマートフォンをPCにデバッグモードで接続して、ビルドアンドランで書き込みましょう。

ESP32の準備が済んで電源がはいっているのであれば、起動次第すぐに見つけられて、数値がインクリメントされ続ける様子が見れるはずです。

まとめ

便利なアセットと便利なBTモジュール付きマイコンを使うことで、BLEでデータのやり取りができました。

notifyではデフォルトだと20バイトのデータが送れるそうです。今回は1バイトのみですが、任意バイトをおくって表示するなどしてみてはいかがでしょうか。

発展として、ESP32でセンサの値を読み取り、Unityに投げてUnity内のオブジェクトに反映させる、というのをこのあとやります。

補足

コントローラに相当するESP32側でセンサーやボタンの値を監視して、変化があった時だけ接続先の iOS,Android端末にデータを送る、という事を実現するためにBluetooth LEのnotifyを使います。 http://jellyware.jp/kurage/bluejelly/notify.html

参考文献

Unity

https://qiita.com/relzx/items/7f8e7817c9edd11c5023qiita.com

framesynthesis.jp

nn-hokuson.hatenablog.com

https://forum.unity.com/threads/build-failure-unable-to-retrieve-device-properties-in-unity-4-2-1.213178/

answers.unity.com

ESP32

yegang.hatenablog.com

BLE

jellyware.jp

謝辞

記事の内容をよくするためにご意見いただいたようてんさんとizmさんに感謝を申し上げます。

ArduinoIDEにESP32のボード定義やライブラリをいれる

経緯

ESP32の開発環境の一つとしてArduinoIDEがあります。Arduinoは散々使われているため、大抵のセンサのライブラリが容易されているので非常に便利です。

一方で、てきとーにネットを参考にしてやると地雷踏むことが分かったので怪しいとこだけ書きます。

世間では「gitよくわかんねーし、zipでダウンロードしてきて使えばいいじゃん」な風潮なようです。

その証拠に、ESP32 開発環境 あたりでググると平然と「download ZIPからダウンロードしたファイルを解凍して配置します」とか「BLEフォルダは空っぽなので別に用意されてるリポジトリの中身をダウンロードしてBLEフォルダにコピーしてきます」なんて書いてある記事が上位に出てきます。しかも、割と有名な人が書いています。複数。

「ダウンロードして配置すれば動く」は大嘘です。動かないです。動くケースもあるんでしょうが、私は以下のエラーで悩みました。半年くらい前に突っ込んだESP32環境に最新のBLEリポジトリを突っ込んだからな気がします。

https://github.com/espressif/arduino-esp32/issues/1299

大嘘と強い言葉を使っていますが、あながち間違いではないです。なぜならば、公式が提示している導入方法と異なるからです。少なくともarduino-esp32のリポジトリWindowsへの導入説明には、 git cloneして入れた後にgit submodule updateしてね と書いてあります。

github.com

ESP32は結構な頻度で更新されている上に、ArduinoIDEの機能では自動更新されません。git cloneコマンドで入れていれば、git pullなどのコマンドで比較的容易に更新ができます。「git...わからん...」な人も、これを機会に導入しましょう。よくわからんの人でも、公式はすごい少ない手順に死ぬほど丁寧にスクリーンショット貼りつけて説明してくれていますので順にやっていけばできるでしょう。英語なので無理と思う方は基本的に英語の情報しかないので諦めたほうが良いかと思います。

本題

以下は公式に書いてある内容を適当にメモしたものです。Windowsの手順です。それ以外のOSの人は適当に補完するか公式の導入手順を読んでください。 1. また、gitはコンソール版で、powershellで実行するものとします。ArduinoIDEは1.8.0です。

最初に、Powershellを起動します。

Arduinoのスケッチやライブラリが設置されているフォルダに移動します。Windowsだとデフォルトは~/Documents/Arduino/です。

cd ~/Documents/Arduino

次にその下にフォルダを作成します。~/Documents/Arduino/hardware/espressif/ としてください。

mkdir hardware/espressif

作成したらespressifフォルダに移動して、以下のgit cloneコマンドを実行します。

cd hardware/espressif
git clone https://github.com/espressif/arduino-esp32 esp32

作成されたesp32フォルダに入って、git submodule updateをします。このコマンドにより、適切なBLEライブラリが導入されます。

cd esp32
git submodule update --init --recursive

最後に、esp32以下のtoolsに入ってget.exeを実行します。

いま入れたばかりなので更新手順の確認ができませんが、たぶんgit pullすれば完了すると思います。ダメならget.exeをさらに実行すればよい気がします。