<第二回> ラズパイ搭載　長距離無線通信ドローンの作成とアドホックネットワークの構築

-----------------------WARNING---------------------------------
こちらは現在作成進行中の(完成するかわからない)プロジェクトです。
完成したものが見たいわボケみたいな人はブラウザバック推奨です。
あと、当方電子工作が超のつくほどの初心者です。許してくれる人だけ見てください。

どうぞ、読み物感覚でお読みください。

##初めに
今回は注文していた電子部品がスイッチサイエンスさんから届いたので、セットアップと仮組みの設定をしていきたいと思う。
予定的には
第二回:セットアップと仮組みの作成
第三回:ドローンtelloのMacからの操作
第四回:ドローン操作プログラムとラズパイのドッキング
第五回:無線通信の実装(簡単に)
ぐらいまでやっていけたらいいと思っている。
第五回終了している段階でPCからラズパイに無線通信して、それを受けてラズパイがドローンに離陸命令を出す、というところまでできたらいいかなって思っている。
慎重派なので基本動作が実装できたところで本格実装していければいいな...

メルカリで定価の二分の一で買ったドローンも届いた。バッテリーが今にも爆発しそうだけど、金欠の僕には背に腹はかえられない。こんな値段で動くモノ売ってくれただけでも感謝せねばならない。ありがとうございます。
##プロトタイプの検証
とりあえず適当に組んでみた。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/718725/37cff60c-94b4-605f-0827-70f18779918f.jpeg" width=50%>

第一回で言っていたような、ドローンとラズパイの融合(物理)は結果こんな感じになりそう。

しかし、実際この形じゃ動かないと判明。
ドローン下面で下からの距離を測るセンサがあるので、それを隠してしまうと無限に上に飛んでいってしまうか、飛ばない。部屋で飛ばしたため、事無きを得たけれどもこのようにドローンに何かを融合させる人は是非とも注意されたい。

___空に飛び立ったドローンはきっとあなたの元には帰ってこない。___

最終的には3Dプリンタで簡単なケースを作ってドローン上面に設置することになりそう。


###モノ乗せて飛べるの？
一番気になっていたので、すぐに実行。
いきなりラズパイを載せられないので、その辺にあったどこのご家庭にもあるチョコラBB錠を載せる。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/718725/d31ad733-a883-1533-10b2-c352a8f61696.jpeg"width=50%>
飛んだ。
姿勢がちょっとぶれてたりするので不安があるけれど、重心を調整すれば問題ないかな。
重さが重くなってきたらどうなるか分からないから少し不安ではあるけど、電子部品をわりと小さくまとめれそうなので、このまま進めていく。ラズパイzeroと普通のラズパイ、全然大きさ違うんだと実感。

#Raspberry pi zeroのセットアップ
渋々マイクロSDカードを買いに行き、最近新しくなったという、Raspberry Pi OS(旧ラズビアン)を導入。
説明書が不要なぐらい簡単にメモリ書き込みが終わった。メモリフォーマットとかも自動。
お金がないので当然ディスプレイなんて準備はできない。リモートでSSH接続する方針をとる。

やり方は調べれば出てきたが、個人的に少し詰まったのが
1.
Wi-Fi情報を格納するwpaなんとかconfファイルをSSIDを名前間違って記述したりしてると、起動してるのにSSH接続できなくなる
(Wiresharkでパケットキャプチャして、Wi-Fi接続できていないことにようやく気づいた)
2.
後から簡単にSSHログインするために、IPアドレスを固定したりするとき、UnixベースのOSを使っていると、DNSサーバ、DHCPサーバのアドレスを探すのが大変。(調べれば出てくる)

もし詰まったらこれらの二つを思い出して欲しい。あとはGoogle先生と優秀なQiita投稿者様達が解決してくれる。ログアウトする前にsshサーバーを起動時に自動的に立ち上げる処理を忘れずに。

#MONOSTICKの設定
MONOSTICKをPCに差し込むと勝手にドライバインストールされる。
Ubuntuだと/dev/ttyUSB0  (1個目のUSBの場合)にMONOSTICKが認識される。
これに[MONOWIRELESS公式](https://mono-wireless.com/jp/products/TWE-APPS/App_Twelite/python_twelite/index.html)にあるPyhonスクリプトを実行。
Pythonだけはとりあえず入っているので以下の二行を実行.

```
pip install  PySerial
Python script.py /dev/ttyUSB0
```

一行目はPyserialのインストール。pipすら入っていなかったらそれも先にインストールする必要がある。
二行目は公式サイトにあるPythonスクリプトをホームディレクトリ直下にscript.pyという名前にして保存。ここで、注意なのがUSBポートをオープンする条件として管理者権限が必要な場合があるということ。
二行目がエラーが出ても落ち着いてsudoで実行してやれば難なく実行できた。

#TWELITE DIPの組み込み
一番専門外の電子工作。
今回はラズパイ電源接続、双方向の全二重通信を実現したいので、連続モードにしたい。
[公式](https://mono-wireless.com/jp/products/TWE-APPS/App_Twelite/step2.html)によると、VCCとGNDをそのままラズパイのピンに繋げばいい。子機の中継モードは後で実装する。
ここで一番怖かったのが
__電源を5V接続してはいけないこと__だった。
TWELITE DIPのページの動作電圧の項には3.6V以上を超えると過電圧で発熱し始めるらしい。
怖い。TWELITE DIPの組み込みをするときは要注意。ラズパイにもarduinoにも3.3VのGPIOピンがあるのでこれに繋ぐようにする。
もう片方はGNDに接続する。
ということで中学校以来のはんだづけ
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/718725/c7318498-94fc-07c8-1678-1f5d75e85545.jpeg" width=60%>
(※特記不要ですが、ネタ。わかんない人ははんだ触らないほうがいいと思う。)
いきなりユニバーサル基盤の裏に配線。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/718725/0b4cddec-1243-e209-37de-27ba98370de6.jpeg" width=50%>
この基板は1,2列目にあるラズパイのGPIOピンを3,4列目に増築してくれるありがたい基盤だったので、四列目上部を3.3V、それの繋がる先としてDIPのVccピン、四列目下部のGPIOのGNDからDIPのGNDに繋ぐだけ。
イメージするのは難しいかもしれないが、手元にあるとすぐにわかる。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/718725/4b1e2b7c-1f06-3277-730d-fed62b762719.png"  width=80%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/718725/c1e9c551-0ae8-6894-e033-ab6462c5ccfd.png"  width=50%>

早い話画像一枚目の一番上のピンを2枚目の3.3Vって書いてあるとこと、GNDって書いてあるところにぶち込むだけ。

#接続確認テスト
TWELITE DIPとラズパイをドッキングした瞬間、Pythonスクリプトを実行したコンソールに異変が!
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/718725/7252ff7c-1e1b-03fb-57e0-2a5745c7825e.jpeg"  width=50%>
パケットを受け取って状態を表示するスクリプトが動き出した。接続成功らしい。

#今後
ここまでくれば後は早い。
次はpythonでドローンを操作する。
あとはそのプログラムをラズパイに移植し、ラズパイからドローンを操作。
最後にラズパイに手元の親機から信号を出し、その信号に応じてドローンを操作するプログラムを書けば前半の目標である___長距離無線通信ドローン___の作成は完成する。
その後はパケットをいじりながらアドホックネットワークの開発をしていけばいい。
個人的にはパケットinパケットみたいに、IEEE802.15.4で規定されたデータフレームパケットの中にIPパケットを格納して、インターネットと接続とかできたらすごい面白いと思う。

それでは次回会いましょう