GoPro8剥き時代到来

「剥きプロライフ」はいかがでしょうか。
保護カバーがないわけですから、使っているウチにジャンジャン壊れますね。
撮影できてもジャイロダメになったり、WiFiダメになったり。
まあ様々な壊れ方してます。

ウチの界隈は 6での運用が多いです。
理由は ReelSteadyGo が使えるから。
7は6とSoC同じ(ソシオネクストのGP1←古い)で、基本的なハードウェアに差がない。
7は HypersmoothというEISがチョイよいですが、ReelSteadyGo 使えたほうが使い勝手はいいですかね。
ということで 7 はスルー。

で、8です。
これも SoCは同じ GP1 で、世間的には2世代ぐらい古いのですが、今回もソフトウェアの改良でしのぎました。
それがあってスルーしていたのですが、ココで GoPro LABS が登場。
https://gopro.com/ja/jp/news/gopro-labs-launch
これによりアレコレ改造できるようになった。
有名なのだとWebカメラ化とか。
この中に ReelSteadyGo の対応と、QRコードによる設定変更などがあり、ドローン搭載への便利機能がスゴイ強まった。

そうしたところ GoPro9 販売開始。
GoPro9 はセンサーサイズもあがって、サイズもアップしましたが、またまた SoC は GP1。
もうライバルと比較して3周遅れぐらいになっちゃうんでないでしょうか。
コレである限り電池持ちの改善は期待できそうにないですね。
GoPro の苦しい台所事情が垣間見えます。
いろいろ強まってますが、代わり映えしないともいえる。
ただこれによって GoPro8 も値下がりし始めました。
海外だと新品350ドルぐらいが定価になっているっぽいですね。
安くなったが安くない。でもジャンクの6も取引価格高止まりですし。
あいかわらず評判は悪いですが、BetaFPV から 8向けの BEC も売り出されています。
ということで、今後は GoPro8 を剥きプロのメインにすることにしました。

剥き方についてはコチラを参照。
GoPro Hero8 Black disassembly guide.pdf
https://drive.google.com/file/d/1SbetTFhECogr-prt_DqIpXEdTE3Jd8EF/view?fbclid=IwAR0sOXk296xgcrXXDbRanmnYhMVzmSibe6zTS1s-RfiPeJYQgtsDIv5CQIQ
これを見ながらやるとなにも難しくないです。(いったいなにを紹介する記事なのか)

いよいよ分解する前に、SSIDとPASSは控えておきましょう。
3つ爪を外します。ここまでは簡単。
バリっとへっぱがします。戻したいときは慎重に。(この例はもう戻せない)
カメラのフレキとコネクタが幅広になってますね。
ココらへんは代わり映えしないですね。
3枚におろせました。BECボードも入れて14gぐらいですね。
とりあえず通電チェック。

6も8もあまりかわらないです。
びみょーに形が違うので、これをベースに寸法取りを行ってケース作成を行います。
(続く)

vJoySerialFeederを使ってみる

HOI-LINK はさらに低遅延化して、v2となったようです。
http://www.hoihoido.com/blog/?p=4202
風のウワサに聞くと、ケーブル接続より低遅延になったとか。
まさにプロポ接続界の阿頼耶識システム。
残念ながらココから先は非公開となったそうです。

HOI-LINKを通して、この関係にいろいろ興味が出た。
PCに信号データを入れて、もっとあれこれ活用する方法はないだろうか。
そこで見つけたのが「vJoySerialFeeder」。
https://github.com/Cleric-K/vJoySerialFeeder
海外では2年ぐらい前から使われているし、DonkeyCar界隈でもよく活用されているそうだ。
対象はWindowsとLinuxだ。残念ながらMacはない。
これはなにをするものなのか → シリアルプロトコルをUSB HIDに変換して送り出すもの。
わかりにくいので、絵にまとめてみた。

これが無線でドローンを操縦する仕掛けで、ポイントは2つある。
電波部分と通信部分だ。
これをUSB HIDドングルとかで、PCシミュレータに繋ぐ場合はこうなる。

電波部分はそのままだが、USB HIDの通信部分は工夫で高精度/低遅延になる。
そして今回の vJoySerialFeeder の場合はこうなる。

通信部分はシリアルに統一されるので、電波部分とかの差異も確認しやすくなる。
また実機から MultiWii プロトコルを引っ張れるので、実機のセッテングの差異などもある程度確認できる。
あと通信状況を可視化してくれる機能とかもある。

あんまり日本語記事なかったが、DonkeyCar関連で記事があった。
https://qiita.com/rukihena/items/ed17c2245db504dd263a
必要なことはほぼ書かれているので、コチラを参考にするとできる。
こちらは Linux を対象に書いてあるので、Windows向けに簡単に説明をまとめる。
実機があればコストゼロでできるので、試してみるのもよいでしょう。

■共通項目
vJoyをダウンロードしてインストール。
https://sourceforge.net/projects/vjoystick/
vJoySerialFeeder/releasesからダウンロードしてzip解凍する。
vJoyのバージョンと合わせる必要があります。
https://github.com/Cleric-K/vJoySerialFeeder/releases

■実機を接続する場合(MultiWii)
まず MultiWii での接続例。
これはドローン持ってれば追加投資なしで実施可能です。
Betaflight につなぐように USB で PC につなぎましょう。
この際にレシーバーが機能するようにしてください。
外付けのレシーバーだと電源ないとダメとかありますね。
そこらへんの TinyWhoop が実験にはよいでしょう。
FCを USB HID化(set usb_hid_cdc = on)とは違う手法なので、本体はなにもイジらなくてOKです。

Betaflightとかの接続と同じです。

vJoySerialFeeder を起動します。
Profileをテキトウに書いて、Protocol を MultiWii に。
Port を Refresh すると、ドローンが接続されている COM ポートを見つけてくれると思うので Connect します。
Add Axis を4つ押して4ch。スイッチ関係使うなら Add Button で必要な数入れておきましょう。
Add Bit-mapped をいれると信号を見える化してくれます。他にも機能盛りだくさんですね。
いろいろできますが、シミュレータ側で調整できるので、とりあえず割り当てられてるといいみたいです。
なにが正しいかはわからないですが、とりあえず画像を参考に設定してみてください。

左上に「vJoy – Virtual Joystick」が認識されています。

あとはシミュレータ(今回はVeloci)を立ち上げると、コントローラとして Assign されていると思います。
いつもどおり設定してもらえばOK。
SPI接続の内臓受信機の場合は、低遅延って話題の RedPine と比較してみるのもいいかもしれんですね。

■受信機直結の場合(SBUS)
受信機からチョクに取りたい場合。
つまるところ、受信機にUSBシリアル変換基盤をつけて、PCにシリアルを流し込むわけです。
今回はいつもの SBUS ですが、IBUS や DSM もできます。
SBUS というと、HOI-LINK の時にもありましたが、信号が反転している(Inverted)問題です。
前回は反転回路を組みましたが、今回は USBシリアル変換基板に反転機能があるので、それを利用しましょう。
USBシリアル変換基板はコチラです。
FT234x
https://akizukidenshi.com/catalog/g/gM-08461/
USBシリアル変換基盤ならなんでもいいんですが、安くて小さいというメリットがあります。
XM+とかだと幅がほぼ同じであるため、おなじスミチューブに入れられます。
こちらの Rx を Inverted に FT_PROG というツールを使って切り替えます。
FT_PROG
https://www.ftdichip.com/Support/Utilities.htm#FT_PROG

普通に接続します。FT234xはちっこいですね。
Scan and Parse します。
Invert RS232C Signals のところで RxD を反転にします。
Program を押す。
Program で完了。
配線してみました。

配線は 5v/GND はそのままで、SBUS は Rx に接続します。
あとは MultiWii の時と同じ流れになります。
Protocol を SBUS にしてください。
細かい設定もいろいろありますが、デフォ設定あるのでとりあえずそれで。
あとはシミュレータで設定すれば完了です。

まあ設定はそれぞれがもがいてください。(まだよくわかってない)

駆け足ですがこんな感じです。とりあえずまとめてみた感じです。いつもの拙速主義です。
長時間の運用に耐えるのかとか、遅延とか、その他問題はないのかとかは、これからしばらく使ってやってみます。
今回のはシリアル処理が PC 内に入っちゃうので、仮想シリアルを挟むといろいろ応用できる。これは夢広がる。
あんまり日本で使われていない感じなので、この機会にいろんな活用例が出るといいなと思っています。

Fireworks!

人間が長い間飛べなかったのは空を飛べるわけがないって考える人が圧倒的に多かったからなんだ。うまく言えないけど、人間は、鳥にだってなれたんじゃないかと思うんだ。そして、今だって鳥になれると思うんだ。人間の格好をしたままでさ。
大事なのは、やる気みたいなもので、ちゃんと空を飛ぶ方法というのはあって、それを学んだり勉強したりしようとする気持ちが大事なんだと思うね俺は。

リチャード・バック「イリュージョン」/村上龍訳

リチャード・バックは「FPVドローン」という、彼らの時代には想像のつかないチートみたいな方法で空を飛ぶことを、どう思うだろうか。
リチャード・バックというと「かもめのジョナサン」が有名。
当時はグルイズム的なところはヒッピーに担ぎ上げられた過去がある。
オウムでも同じようなこと言っていたのがいるな。
他の作品を見ると、とにかく飛行機で飛びたかっただけの人であることがわかる。
結婚した「One」あたりから、なんつうか普通になり、挙句の果てに「かもめのジョナサン」に最終章を足してしまった。
それでもリチャード・バックには正直でリアルな男の生きざまを感じる。

今回「花火撮影の手伝いしない?」ということで呼ばれてみた。
暗闇での位置確認は必要だろうなあと思い一工夫。
FAI DTRC2019 で使った Neopixel を引っ張り出して設営。サイズは10mぐらい。
当初は線香花火をイメージして設置したのだが、動画を見ると、葉っぱもついて花のような、打ち上げ花火のような。
急場しのぎにしてはいい感じになり、実際かなり活躍し、いい感じに動画で拾ってもらえた。
準備が十分だったところも、足りないところもあったりして、それでもなんとか無事完了して。
そしてまた次の課題が見えてくるドローンはホント飽きないな、と思うのです。

なんせ空を飛べる。

続・HOI-LINK HR を作ろうぜ

前回記事からの続き。
https://papalagi.org/blog/archives/1523

ほいほい堂さんで改良版リリースの情報をいただきました。ありがとうございます。
■HOI-LINK-HR の遅延を減らせるか試す。
http://www.hoihoido.com/blog/wp/?p=4158
低遅延化とSBUS区切り検出の改善が行われ、新しいHex(20200822版)が配布されています。
http://www.hoihoido.com/HOI-Link/HOI-LinkHR20200822.zip
今回のやつは、前回のショートカット版では動きません。
お作法通りブートローダから焼いていかないとダメなので、そのあたりの説明を書いてみます。
ブートローダの役割や構成の仕方などは、ほいほい堂さんの記事をよーく読み込んでもらうとして、作成する手順だけまとめます。

■ファイルを集める
http://www.hoihoido.com/OpenStick/index.html
HOI-LINK HRのそもそものベースである、OpenStick のページです。
ブートローダ焼付後は、USB接続だけでファームを焼けるようになります。
焼き付けるツールが「MybootOS(64bitOSも使用可能なバイナリ) MybootX86-bin-160725.zip」になります。
http://www.hoihoido.com/OpenStick/MybootX86-bin-160725.zip
加えて「UBW用inf(ドライバ)MCHP-USB.zip」が必要ですが、残念ながらリンク切れ。
ココに落ちているのを見つけました。
https://www.microchip.com/forums/m836237.aspx
ココからダウンロードです。(MCHPUSB+Driver.zip)
https://www.microchip.com/forums/download.axd?file=0;836237
続いてブートローダのファームですが、ブートローダ単体より「ブートローダ+OpenStickLiteのセット」を焼いて動作確認し、その後 HOI-LINK HR のファームを焼き直したほうが、間違いないかもしれないです。
http://www.hoihoido.com/blog/wp/?p=1764
ココからダウンロード。
http://www.hoihoido.com/OpenStick/OpenStickLiteBinary161011.zip
この中の「Bootloader18F14K50+OpenStickLite.hex」を使いましょう。

■作成手順
まず前回同様の手順で、PICKit3 でファームを焼き付けます。

前回と同じ方法です。

最初に焼き付けるのは「Bootloader18F14K50+OpenStickLite.hex」です。
PICKit3 で焼き付けましょう。
USBでつないだら「JOYSTICKmini」というデバイスが見えると焼付成功。

次にブートローダ用のドライバを入れます。
「MCHPUSB+Driver.zip」の「Realease」の中にこんなファイルが並んでいます。

「mchpusb.inf」というファイルを右クリックし「インストール」。

次にPICをブートローダモードで立ち上げます。
VPP(PICKit3をつなぐ左端の端子)をGNDに落とした状態にして、USBを接続し電源オンします。
これでブートローダモードになります。
この状態から焼き込みツールで焼き付けます。
「MybootX86-bin-160725.zip」の中にある「Myboot.exe」を立ち上げます。
この際に、Defender から怒られるとおもいます。

「詳細情報」を押すと実行できるようになります。

あとは「Open Hex」で、20200822版の「HOI-LINK.hex」を指定して「Write Verify」すれば焼付完了。

VPP→GNDを外して、USBを接続し直すとデバイスに出てくると思います。
SBUS反転回路とかの接続は前回と同じですので、そちらを参照してください。

ブートローダを一度焼いたあとは、PCからUSB経由で焼付可能になります。
次回からの更新はラクチンですね。(最初からそうしようよ)
いずれにしても最初はブートローダ焼付に PICKit3 が登場することは避けられないので、ブートローダごとまとまったバイナリがあったほうが新しいのを作るときには便利です。
その場合は PICKit3 でコチラから吸い出して保存することができます。

■さいごに
今回でちゃんとお作法通りに作成することができました。
そして低遅延化の効果ですが、これは確かに効果出てるように思います。
FrskyのUSB接続だと、「遅延ゼロで11bit」という実環境以上に恵まれた環境になっており、ゲームとしてのプレイ環境としては一番理想なのかも。
しかしながらシミュレータという観点から見ると、実際に発生するであろう無線プロトコルの遅延も含めてよりリアルな操作環境がシミュレートできる。
そうした中で、HOI-LIK HR の低遅延化はさらに高い効果が得られそうです。

こういう「体感できる」っておもしろいですねえ。
ほいほい堂さん今回もありがとうございました!
さらなる改善も期待しております!

HOI-LINK HR を作ろうぜ

これはプロポを USB 経由でPCに接続する、高分解能な無線ドングル。

8/22追記。
正しい手順通りの作成方法を続編でまとめてあるので、そちらも確認推奨。
続・HOI_LINK HR を作ろうぜ
https://papalagi.org/blog/archives/1566

プロポは USB-HID で接続され、PC側の扱いはそんなに難しくない。
中華のプロポはファームアップ用途で USB 端子が大体ついており、そこにつなぐと使える。
Futaba のヤツはめんどくさいらしく、無線ドングルのニーズが高いらしい。
無線ドングルは売られているものもあるし、古いFCを再利用(set usb_hid_cdc = on)とかがある。
かなりニッチな、ドローン用プロポ接続状況はそんな感じ。

プロポの受信機は SBUS という規格で接続されるのだが、こちらは 11bit 通信する。
しかしながら、一般的な無線ドングルからは 8bit に低分解能化されているらしい。
ということから、ほいほい堂さんで 11bit を再現するデバイスの作成記事がある。
■HOI-LINK高分解能化
http://www.hoihoido.com/blog/wp/?p=4118
さらに HOI-LINK HR として販売もされてる。
https://nonsaya.thebase.in/items/30961376
詳しく説明されているので一読。
ありがたいことに、ほいほい堂さんでは、ソースもHexも配布されています。
これを使って私も作ってみました。
販売とかされているものなので、作成ガイドはどうかなと思い、ほいほい堂さんに確認したところ、快諾いただいたので今回まとめてみました。
アチコチの加工とか、あれやこれや悩むことを考えたら、買ったほうがよさげです。
でも作ると楽しいですし、理解も進むし、改造とかもできるし、受信機を選べるなどのメリットがあるので作ってみてはどうでしょう。
おもしろいぜ。

部品構成については大きく分けて3つ。
1.PIC
PIC焼くのなんてプレステのレッドハンド以来っすよ。(おっさんホイホイ)
こちらは、ほいほい堂さんでも開発に使われたコチラを使います。
■AE-PIC18F14K50
http://akizukidenshi.com/catalog/g/gK-05499/
これのいいところは、USB周りとオシレータ周りが実装されているというところで、自作組はラクでいいです。
これにファームを焼き付けるのですが、「PICKit3」というのを使います。
純正は5000円するみたいですが、アマゾンでパチが2000円ぐらいで売られています。
Microchip というメーカのものなのですが、回路図も公開してて海賊版上等な姿勢らしいです。よく知らんですが。
動かないこともあるかもしれないので、そのあたりは自己判断で。
とりあえず私はガンガン動いています。

2.SBUS 反転回路
SBUSは100MHzの反転信号(Inverted)で通信する。
マイコンとかラズパイとかに入れるときは、UnInverted(反転しない←ややこし)にする必要がある。
反転回路は、ほいほい堂さんにあるとおり、2SC1815と、51KΩ、5.1kΩ の3つあればできます。
受信機が UnInverted SBUS を出力できれば、この回路は必要ないです。
NewBeeDrone の BeeCieverV2 とかできますね。
あれは D16 と SFHSS も使えるし小型なので余ってればよいかも。
それ以外も基板からチョクに信号をとることも可能です。
https://oscarliang.com/uninverted-sbus-smart-port-frsky-receivers/

3.受信機
SBUS のものなら、なんのプロトコルでもいけると思います。
とりあえず手持ちにあった XM+ で構成してみました。
Frsky の近距離で切れちゃう問題にあたったので、なんか工夫がいるかも。

では早速作ってみましょう。
1.PICの焼付
PICKit3 を利用します。
こちらから該当の MPLAB X IDE をダウンロードしてインストールしましょう。
https://www.microchip.com/mplab/mplab-x-ide
コンパイラあるとソースからビルドできますが、Hex焼くだけなら IDE だけでOK。
Hex はほいほい堂さんで配布されている 6/15版を使います。
http://www.hoihoido.com/blog/wp/?p=4118
ソースも公開されていますし、ビルドして焼くのが正当派ですが、まあまずは Hex を焼いてみっか。

AE-PIC18F14K50 と PICKit3 と PC を接続。
コネクタは左詰めで右端が1本余ります。
焼くためのポイントは電源供給。
AE-PIC18F14K50 の MiniUSB をつないで 5v くれてやればよさそうですが、これでは焼けない。
VDDとGNDにチョクで電源を入れてやりましょう。
手持ちにあったブレッドボード向けの 5v 供給 MicroUSB をつかってみた。
みんな持ってる 5v BEC とかでもいいと思う。

焼付作業です。
MPLAB X IDE で、File → Import → Hex で Hexファイルを指定。
その後、こちらのように対象 PIC の種類と焼くツールを指定。

こちらのボタンを押すとサックリ焼いてくれます。

右下にログが出ますが、赤字が出てると焼付失敗です。
基盤構成してからつながらないとヘコむので、がんばって焼き切りましょう。

こんな感じになると焼けているハズです。

2.反転回路の作成
焼けたなら配線ですね。配線は主に反転回路です。ココが一番手間。
Uninverted なレシーバーならこのあたりは必要なく、PICにそのままつないで終わり・・だと思います。(試してない)
PIC側の配線は VDDとGNDとSBUS(UnInverted)の3ヶ所です。

反転回路に必要なのは、トランジスタ 2SC1815 と、抵抗51kΩ、抵抗5.1kΩ の3つです。
http://akizukidenshi.com/catalog/g/gI-06475/
http://akizukidenshi.com/catalog/g/gR-16513/
http://akizukidenshi.com/catalog/g/gR-16512/
fritzingでいい感じに書けなかったですが、トランジスタの E(GND)を一列横にずらして、端子を4列に並べると使い勝手がよいかもしれんです。
私も実際のはそうしています。

3.動作確認
ブレッドボードの試作回路を作りました。
数作るときには PIC の確認するとかにも使えます。
動いたらハンダしてフリスクにまとめました。
この手の電子工作はフリスクに入れ込むのがよくあります。
基盤はフリスクサイズのが秋月電子で売られています。
http://akizukidenshi.com/catalog/g/gP-12188/
60円のと70円のがあって、60円はタダのハンダ穴が並んでて、70円はブレッドボード的な接続になっています。
これ店頭でも横に並んでて、間違えて混在購入とかして、チョイチョイ間違えて悩んだりあります。
よくチェックしましょう。

上が試験用。フリスクは高さがギリで要工夫。

色々悩んだ結果、後日のファームアップデートに対応できるように、基盤を二分割した。

8/6追記:フリスク基板側の反転回路の説明図作ったんで貼っときます。

上の写真とセットで判断してみて。

あとは PC に接続して、デバイスに「HOI-LINK」が出ていることを確認しましょう。
受信機のバインドを忘れないでやって、あとはシミュレータで再設定すればOKです。

で、実際使ってどうか。
私は一緒に充電できるのもあって、有線USB接続でずっと使ってきた。
これは 11bit なのか、はたまた 8bit なのかわからないのですが、まあ変わらない操作感でした。
7/29 の夜にあった WTWONLINE はコレでやっていたのですが、タイムに貢献できていないのは参加者の皆様が知っている。
複数作って周囲のドローンシミュ廃人に配布して確認してみようと思っています。

繰り返しになりますが、素晴らしい情報を公開いただいた、ほいほい堂さんに感謝いたします。
改良版にも大いに期待しております!

追加作成中。慣れると簡単に作れます。反転回路とケース加工以外は。

8/2追記。
ほいほい堂さんから情報いただきました。
上記の記事は最短で動かす方法をいろいろ試した結果で説明していますが、正しくはブートローダーを焼いて、その後ファームを焼くのが正道とのことです。
ほいほい堂さんで説明されています。
http://www.hoihoido.com/blog/wp/?p=1764
ブートローダーを焼くと、USBからファームの焼き込みができたりします。
一発目のブートローダー焼き込みにはPICKit3等の焼き込みツールが必要なので、必要な道具はおなじです。
時間できたらブートローダー版もやってみます。(続・HOI-LINK HR を作ろうぜ、にまとめました)

続・M5StickCでGoProリモコン

前回はコチラ。
https://papalagi.org/blog/archives/1477

反応がよかったので、気を良くして続編登場。
剥きプロは脆弱なので、多頭飼育はあたりまえ。
まあウチの界隈も片手では足りないぐらいある。
沼の中にあるさらに深い沼なのだ。
リモコンが複数対応したいのは、あるよなーとは思う。

最初は ArduinoIDE 使って ATOM Lite あたりのシンプルなの作ろうと考えていた。
「WiFiMulti.h」というクラスがあって、複数リストから電波強度強いのをつなげるみたいなの。
「あれ使えるじゃん!」でピーンとなってゴソゴソ始めた。
WiFiつながるところまで進めて、コマンドを作り込むあたりまで進んだ。
そんな時に、コザックさん(いつもお世話になっております)から、APP.List でスクリプト増やせばいいんじゃね?というアイデアが出た。
それが一番簡単じゃないか。なぜ気づかなかった。

UIFlowはハタからはわからないが、「/flash」の下に Python(厳密にはMicroPython)に拡張子pyスクリプトが並んでおり、そこにスクリプトを置けば「APP.List」に並ぶ。
至極簡単な話なんだけど、標準のツールにそのあたりをどうこうする機能が「ない」。
Linux だと pip から ampy 引っ張ってサクっといけるが、あんま一般的でないかんじ。
なんかもっとないかなーとおもったら VSCode でやる方法が比較的簡単?っぽいのでまとめてみた。

■Microsoft Visual Studio Code
https://azure.microsoft.com/ja-jp/products/visual-studio-code/
マイクロソフトだー。
いろんなところに対応しているので、自分の環境にあわせてインストール。
続いて「Extentions」から「M5Stack」(M5Stickではないので注意)を検索すると、連携する拡張が出てくる。

これをインストールして、割り当てられたCOMポートを指定してつなぐ。
ただし。
つなぐ前に M5StickC 側におまじないがいる。
通常は Internet 経由の接続になっていますが、これを USB に変更。
そういえばさりげなく7/24に更新されて V1.6.1 になってます。

M5ボタンを押しながら起動。
Switch mode
USB
戻って Reboot
USBモードでたちあがる

その後、VSCode に戻って、エクスプローラから COM をリロードすると、ファイルの中身が見えるようになると思う。

「apps」の中にお好みの「スクリプト名.py」を「+」で追加。スクリプト名は日本語ダメよ。
そして例のスクリプトをコピペ。SSIDとPASSは各GoProに変更しよう。
ココからも実行できるので、GoPro に接続するのを確認しても良いと思う。

これで APP.List から選ぶことで切り替えることができます。やれやれっすね。

初心者に簡単な機能ブロックな UIFlow。
凝ったことをするにはめんどくさいという、人生において何度も経験したヤツ再び。
まあでも機能的には困らなくなった。
解像度とFPSのメニュー作るぐらいか?
電池残量は電池の管理チップ撤去してるから動かないんでないかな。
あと教えてもらった GoPro API を見る限りでは、WiFi のオフとかなかった。
https://github.com/KonradIT/gopro-py-api
ステータスもざっくりjsonで吐き出されるので、なんかそういうの得意な人にまかせたい。

ロクにテストしてない上に急いで作ったので、うまくいかなかったら連絡ください。
一緒に頑張るぐらいはやってみますよ。

7/28追記。
GoPro6 Black のWiFiコマンド一覧あった。
https://github.com/KonradIT/goprowifihack/blob/master/HERO6/HERO6-Commands.md

Turn WiFi OFF: http://10.5.5.9/gp/gpControl/setting/63/0

WiFiオフある!と思って試してみたけど、Bad Request で通過せず。残念。
あとスクリプトの最後にコレを追加すると、自動でWiFiに接続して動画メニューに遷移します。

buttonB_pressFor()
buttonB_wasPressed()
buttonB_wasPressed()

8/13追記。
https://twitter.com/papalagiorg/status/1289861400374865920
8/3ぐらいにやって追記忘れてた。
剥きプロは電源切ると初期化されて、細かい設定したいとなるとスマホ使うしかない。
M5StickCのリモコンでも同様の設定を流し込むことで実現可能。
こ汚いサンプルも上記リンク先に置いておきました。
各コマンドはコチラにまとまっている。
https://github.com/KonradIT/goprowifihack/blob/master/HERO6/HERO6-Commands.md

あとSDカードに「gpauto」というテキストファイルを置くことで、アレコレを自動実行してくれる。
WiFiオフとか、SSID変更とか、自動録画開始とかできる模様。
https://github.com/konradit/gpauto
1台ずつの運用ならSSIDとPASSを共通にしちゃうのもありですね。
元ネタはさすがのoscarliangから。
https://oscarliang.com/naked-gopro/

M5Camera WiFi ストリーミングをやってみた

FPVドローンをやるようになってから、なんとか 5.8GHz 使わずに無免許でできる方法はないかを考えてきた。
5.8GHz はそこそこ安いし、簡単だし、まあ便利なんだけど、免許とか業務利用とか同時利用3機までとか心底めんどう。
低遅延で、5.8GHz VTX システムと同じように、複数の環境で受信できるのが望ましい。

そうなるとまあ WiFi ベースなんですね。
なんかねえかと探した先に見つかったのが WebRTC。
■WebRTC Native Client Momo がスゲエ
https://papalagi.org/blog/archives/635
Momoスゴイ。解像度高く低遅延でオープンソース。
ラズパイのGPUを使って H264 をエンコして転送する。
ドローンの FPV カメラとして利用するには、H264 はあまり適さず、VP8 か VP9 が必要な感じ。(ハードウェアエンコ効かなくなってしまう)
そこそこの解像度欲しいとなると、Jetson nano を積みたくなり、それだとちっこいドローンには難しい。
たしかに DokeyCar のたぐいはみんな Jetson nano とかですね。
85mmクラスのドローンでラズパイゼロが載せられる限界。
搭載してみた。

愛すべき雑な仕事。
そういえばカッコイイマウンタも作ったような…

遅延は200msぐらいで、解像度も720pぐらいだが、まあなんとか実用というレベルにはなった。
しかしラズパイは Linux なんでブートの時間長い。電源ブチ切りもちょっと気になる。
なお余談ですが、ラズパイゼロに 1S Lipo から電源供給する時は、電子工作とドローン界隈逆なので注意。
https://papalagi.org/blog/archives/740

もっと軽い WiFi カメラないものか。
で、今回 M5camera(わずか5g)を活用する方法が盛り上がっていたので試したみた。
M5camera は ESP32 に OV2640 という2万画素のカメラモジュールをつけたもの。
解像度はそこそこ、MotionJpeg になっちゃうが、パッケージがシンプルだし、軽いし、安い。(2000円弱)

果たしてやり方とは。ズバリこちら!
■LovyanGFXとJpgLoopAnimeでM5StackとM5Cameraの全画面WiFi動画ストリーミング実験
https://www.mgo-tec.com/blog-entry-lgfx-jpgloopanime-m5stack-m5camera01.html
mgo-tecさんは M5 を始めとするマイコンを使って様々な作例を作られる方で、いつも参考にさせてもらっている。
M5camera が出てからストリーミングができないか、いろいろやられていた。
LovyanGFXはらびやんさん作成の M5 向けグラフィックライブラリで、界隈ではスゴイスゴイと繰り返し聞いていた。
この両名が悪魔合体して、M5camera のストリーミングをいっきに実用レベルに引き上げた形だ。

さあやってみよう。
M5cameraがストリームサーバになって、M5Stackが表示します。
M5Stackで素早く描画するために LavyamGFX が活躍するという構成です。
リンク先はあらためてコチラで補足することはないぐらい丁寧に書かれているので、上記リンクを熟読して作成してください。
jpgWriteRow は 1.0.6 だと 203行ですかね。(動きました)
あと先日のライブラリアップデートで 「WiFi.h」が 2つになってどっちやねん!エラーがあるので、ESP32用でないのは消すなりするといいです。(雑)

早速動かしてみました。想像以上によく動く。
M5Stackの画面にグリグリ動くとちょっと感動しますね。
だいたい遅延は100msぐらいでしょうか。この手のモノとしては少ない遅延です。
やはり動き速くなると時折コマ落ちが発生するようです。
なおストリームの出力先はPCのブラウザでもいけます。
ドローンに載せてどんな感じか後日検証してみましょう。

ブラウザはM5cameraのIPアドレス叩けば出ます。

M5StickCでGoProリモコン

https://twitter.com/jesuslg123/status/1280909172264099842
UIFlowで作ってる人を見かけた。コードはコチラ。
https://github.com/jesuslg123/gopro-remote-stickC
M5StickC は EPS32 ベースで、ArduinoとかUIFlowとかいろいろ使える。
UIFlowは機能ブロックを並べるタイプの初心者向けっぽい言語。
今回使ってみたら、よかったので導入方法も含めて紹介。
リモコンですが、先に断っておくとGoPro純正のヤツとは比較にならない面倒さ。
ただ機能的には十分で、改造もアリアリですし、今後の機能追加も検討されているそうで、加えて楽しい!ということで試す価値アリです。

なんでGoProリモコンが欲しいのか。
BetaFPVの GoProLite BEC基板の問題。
あの BEC基板は設計的に問題があって、表面実装のコネクタ3個所を、別の基板で立体につなぐというのになってる。
基板の精度が違うので、歪んだりとか衝撃があると外れやすい。
特に電源ボタンと録画ボタンがBEC基板上にあり、強く押すとコネクタに負担がかかる構造で気持ち悪い。
そのあたりを理解してポチっとしないといけない。
まあでもスマートにまとまって便利なんで。なんとか他に対策できないかと考えた。
まずは電源ケーブルは標準のJSH3端子は細すぎるし、ポロっと抜けそうなので、2Sでもいけるぜって BT2.0 に変更した。

CineWhoopTokyoさんオマージュな構成。

電源は BEC基板上の MODE と GND をショートしてオートスタートに改造。
RECボタンは FC のポートから取るのが BetaFPV推奨だけど、複数機体に使い回すときに不便。
それでスマホからという運用になった。
でもスマホ持ってる人がそこにいないとできないので、なんか方法ないのか。
ついでに録画をしてるしてないが確認できないのか。
GoPro純正のリモコンとかもあるのだけど、そのためだけになー。
ということで今回のコチラで解決だ。さあやってみよう。

UIFlowの導入についてはココの説明がすばらしいです。
https://lang-ship.com/blog/work/m5stickc-uiflow-l01/
内容についてはよーく読んでもらうとして、オススメのやり方としては以下の流れです。

1.M5StickCに UIFlow のファームを焼く
https://m5stack.com/pages/download
M5Burnerというので焼きます。
後ほどコードを転送するIDEとバージョンがあってないとダメです。
とりあえず最新の1.6.0を焼いてみよう。
焼く際にはデバイスのCOMポートを指定。
ドライバとか必要ですが、ドローン野郎にはおなじみの CP2104 と VCP なので、そのままでもつながるかも。
あと自宅WiFiのSSIDとパスワードも忘れずに。
Obniz みたいにクラウドにつながってやるタイプなんですね。

2.ブラウザ版のUIFlowIDEからコード焼く
http://flow.m5stack.com/
今回は1.6.0なので、Betaの方を使います。
M5StickCの画面に出るAPIコードを使って接続しましょう。
githubからダウンロードした「ESPRemote.m5f」を読み込むわけですが、なんかバグなのかうまく読み込みません。
しゃーないのでデスクトップ版をダウンロード。
https://m5stack.com/pages/download
こっちは読み込めました。
でもデスクトップ版は1.4.5なんですよ。
さっき焼いたファームとバージョンあわない。
ファームを1.4.5.1にするのもありですが、今後もこういうのありそうなので乗り切る方法。
デスクトップ版の python メニューに移動し、そのコードをコピーして、ブラウザ版に貼り付け。

手間ですが、これでブラウザ版にコードを流し込めます。
pythonの場合、最後のあたりに SSID とパスワードを設定する所あると思います。

機能ブロックの場合はこのあたり。

これにつなぎたいGoProの SSIDとパスワードを入力しましょう。
GoPro側で「接続」→「新デバイスの接続」→「GoPro アプリ」です。
あとは右上にある再生ボタンを押せばコードが M5StickC に転送されて完了。

おお動くぞ。

M5StickCの基本的な使い方簡単に説明。
左横下(A)、上部M5ボタン(B)、右横上(C)の3つあります。
Aで電源オン。長押しで電源オフです。短く押すとリセットです。
Bボタンをおしながら電源オンすると、UIFlowメニューになります。
この状態でCボタンを押すとメニューが変わります。
APPListで今回のコードを指定しましょう。(temp.py)
これでリモコンが立ち上がる。

つづいてアプリの使い方です。
Cボタンを長押しでGoProのWiFiにつなぎます。今のは自動接続でないので注意。
つながったあとはCボタンのクリックとロングクリックで移動。
Bボタンでスタート/ストップ。
Bボタンをダブルクリックでモード変更です。
命令が通ると「200」が帰ってきます。

さてシカケを確認してみましょう。
GoPro内にhttpdがあって、そこにコマンド送ることで切り替えるようですね。
「http://10.5.5.9/gp/gpControl/command/mode?p=0」で、動画モード。
「http://10.5.5.9/gp/gpControl/command/mode?p=1」で、写真モード。
「http://10.5.5.9/gp/gpControl/command/shutter?p=0」で、ストップ。
「http://10.5.5.9/gp/gpControl/command/shutter?p=1」で、スタート。
おもったより簡単なシカケ。
https://android.benigumo.com/20180116/gopro-hero6-wifi/
なんかこういうことみたい。ffmpegでストリームデータも引っ張れる模様。
内容を理解すれば他に転用も可能だ。ブラウザとかな。
他のコマンドも調べると出てくるでしょう。

その他、そのスジのみなさまが気になるポイントはコチラにまとまっています。
https://qiita.com/nagase/items/96e87b3c91a0c820e002

そういえば、初代THETA出た時、ESP8266 で似たようなの作ったっけな。時代は繰り返す。
作者の方は ToDo にて機能追加を検討されているようなので今後に期待だ。
複数カメラを一個でやりたいとかの改造もしたいね。
機能を絞って ATOM Matrix に移植してもよいかもな。
マイコンいじりも楽しいのでこの機会にやってみるのもよいかと。
なお M5StickC は 2000円しないぐらいの値段で売られています。

ATOM Matrix よいかんじ

M5Stackシリーズに新しいのが出た。
むっちゃ小型の ATOM Matrix。
https://www.switch-science.com/catalog/6260/
今年の頭ぐらいに出ていたが、技適の関係で最近で回るようになった。
5x5LED はいつもの Neopixel ベースで、パネルがボタンになっている。
SoC は ESP32 のデュアルで 240MHz。よって WiFi も Bluetooth も使える。
ジャイロとして MPU6686 がついてて、地味に赤外線LED(発信)もついている。
で、千石電商で1500円だった。やっすい!
ジャイロ使った倒立振子とかの作例もおもしろい。
モータードライバあったら、もう構造としてはドローンもできるつうことか。
5x5LEDとジャイロを省いた ATOM Lite というのもあって、こちらは1000円。
https://www.switch-science.com/catalog/6262/
電池の類はついていないので、USB-C を挿して使う。

電源は USB はもちろん、GPIO とか Grove の 5v に Lipo の 3.7v 入れても動くらしい。
いっぽう省電力は苦手で、ディープスリープにしても 20mAh ぐらいは必要とのこと。
SPIFFSで内蔵フラッシュも利用可能。おもったよりいろいろできる。

いつものArduinoIDEとかで使う。ライブラリもボード情報も出ている。
サンプルスケッチは Typo とか、バグとかチラホラある雑さ加減。
こちらのCOCOAカウンターの作例がよかったので、こちらを試してみた。
https://qiita.com/coppercele/items/fef9eacee05b752ed982
「FastLED」と「BLEDevice」と「M5Atom」のライブラリを入れる。
追加ボードマネージャに「https://dl.espressif.com/dl/package_esp32_index.json」を追加。
ボードの設定は画像の通り。「ESP32 Pico Kit」にしてシリアル速度を「115200」にする。

すっかりおなじみの ArduinoIDE。

あとは記事のとおり焼き付ければできあがる。

電源が入っていると、Bluetoothを使って周囲にCOCOAが何個あるのかをカウントする。
アチコチで電源入れて、どれぐらいユーザがいるのか確認してみたい。体感したい。
COCOAの利用状況が芳しくないってニュースが連日流れてる。
こんなおもしろネタ、参加するしかなかろうと思うけど、世間はそうでもないらしい。
個人的には悪くないと思うんだけどなー。まあ人生こういうギャップはちょいちょい感じる。
ここから怒涛の大逆転でみんな使うようになるのか、それともこのまま収束なのか。

M5Stackファミリーもなんだかんだで集まってきた。
初代のヤツは一通りついて多機能だけど、ボタンとか華奢でポロっと壊れる。
それからいくと、最近の小型版は割り切りよくて逆にいい感じだ。
これから始めるのなら、ATOM Matrix がいいと思う。
画面使いたいなら M5StickC(オレンジ)のやつがよいかも。

ラズパイ4BにElastic Stackを組む

ものすごいボロな x86鯖で Elasticsearch + kibana + Fluentd + Mosquitto な IoTデータ収集をやってる。
いつ壊れるんだろうなーという状態になって4年ぐらい経過した気がする。
実験用でクリティカルでないし放置気味。
先日ちょっと刺さって、じゃ終わりにしますか!としたら「データをサルベージしてくれ!」とかになって。
つぶれから気づく、ごんぎつねの存在。
なんとか復帰して今回はことなきを得たのだが、懲りずに使い続ける。
これまで何度こういうことを繰り返しただろうか。

もうこの手のヤツをシングルノードでゴリゴリやるのとかもう流行らない。
さりとて x86 をいっぱい揃えるとお金もさることながら場所リソース確保が悩ましい。
ということで「貧者の味方ラズパイ」で動かんかなーとなるのだけど、3B+ ぐらいまではメモリ1GBしかなくてちと足りんかった。
ところがココに至って、ラズパイ4B登場。
2GB/4GBが販売されてて、さらに8GBが登場するという。
これはイケるやん!と調べたらガッチリやってる人がいた。

■Raspbian buster でElastic Stack 7.5.1 を動かす
https://qiita.com/Y-Shikase/items/7e6025855454c443f620
OpenJDKとNodejsのバージョンがキモとのこと。
Elastic 6.xの頃に 3B+ に組んだ頃も、同梱されている OpenJDK が x86バイナリで、入れ替えとかやったような記憶がある。
最近は ARM 運用も視野に入ったのか、そのあたりが整理されつつあるとのこと。
OpenJDKは11を使う。
Logstashが OpenJDKの8シバリで、かつてはインストール時には8を使いましょうとか言われていたが、今は同梱されて配布されるようになってるらしい。
Machine Learning のところに x86バイナリあるので、そこは false。
これだけでいいらしい。single-node 設定も入っているので単体で動く。
kibana の方は Nodejs のx86バイナリが同梱されてくるので、それを ARM と差し替えればよい、とのこと。

さっそく手元にあったラズパイ4B(2GB版)に、Raspbian 最新版(5/27版)に入れてみた。
32bit版だけど、そのうち64bit版も出るだろう。なんならubuntuって選択もある。
本番運用は64bitで構成したほうが先が長くていいかもな。
上記記事との違いは、Elasticは最新の 7.8.0 をインストールした。
あと Nodejs のバージョンにこだわりなかったので、ツルシで入った v10.21.0 を使った。
この違いでも問題なく動いた。やったー。

またUI変わったね。

1回目起動してほっとしたが、再起動で動かず。
kibanaのフォルダにヘンなコントロールコードのファイルができるってのは、コチラでも再現した。

なんだこれ?

リンク先の記事あるとおり、コントロールコードのファイルを消すスクリプトを追加する。
この情報ありがたい。これ気づかないと思う。
これなかったらおそらく「動かんなあ」とくじけていたこと間違いない。

Fluentdは手で組み上げすれば動く。
td-agentが更新とかも手軽だけどx86版しか配布してない。
先日どこかで 3.8.0 のARM版みたいのも見かけた気がするんだけどな。

まあ今のボロ鯖の代替ができるようにはなった。
バージョン依存とかあって、たくさんのラズパイに組み上げるなら、Docker イメージにした方がいいよね。
とおもったら、同じ人がやっていた。すごい!
■Raspberry Pi 4Bのdocker上でElastic Stack 7.6.0/7.7.x/7.8.0 を動かす
https://qiita.com/Y-Shikase/items/d162805aebb3a1a8447f
公式からも AArch64(ARM64bit)の Dockerイメージ配布はじまっとる。
https://www.elastic.co/jp/blog/elasticsearch-on-arm
64bitなので、今の Raspbian だとダメだし、kibana は配布されていないらしい。
だがこれは確実に ARM版配布の流れだな。

Dockerまで行ったならば、Kubernetes で組み上げたいよね。
とおもったら、そちらも実現したとのこと。
いやー在宅の暇つぶしにすごいいいネタのような気もする。
問題はx86に比べれば安いといえ、たくさんのラズパイ買ってくれるかなー。

8/20追記。
7.9 の Elastic Stack で、ARM64bit(AARCH64)に対応。
https://www.elastic.co/jp/downloads/elasticsearch
これで導入もラクチンになりましたね。
なおkibanaはARM版ないです。
コントロールコードのワケわからんファイルの処理があるんで、こっちも公式パッケージほしいですね。
Fluentd の ARM 向けパッケージはココにありました。
https://td-agent-package-browser.herokuapp.com/3/ubuntu/bionic/pool/contrib/t/td-agent
よーくみると、arm64 があります。(3.8.0)
ubuntu Bionic 向けのパッケージですが、試して見るとインストーラがちゃんと読み替えてくれて Buster にも入りました。(キケン)
ご参考まで。