Raspberry Pi Zero + L-05A + SORACOM Air + GPSモジュールでFind My HogeHogeをつくる 〜その1〜

この記事は[岩手県立大学 Advent Calendar 2015](http://qiita.com/advent-calendar/2015/ipu)の15日目です.

去年に引き続き, 岩手県立大学を卒業しました門脇と申します.

今回の記事については, ほぼ自分用のメモとして残しておく予定のものだったので, 適当なところはお許し下さい泣

# はじめに
最近Raspberry Pi Zeroが発売されたということで海外の[サイト](https://shop.pimoroni.com/)で購入しました.
<img src="https://qiita-image-store.s3.amazonaws.com/0/61124/527df50a-7a44-ba7e-5c80-8741a4f49e66.jpeg" width="240">

野望としては, かつてなくした4万弱の財布みたいに, 大事なものをなくした時にどこに置いてあるかを知りたい, ということになります.

安価にBeacon(BLE)で, スマホから数メートル離れたら音が鳴るとか通知が来るとか対策がありますが, 若干頼りない気がしてます.

自分としてはFind My iPhoneみたいなことができたらもっと安心かなと思って, 大事なものにGPS機能を持たせてやろうという試みをしたかったのです. 無くなった場所を記録するためのデバイスはもう世にあります. しかし, なんといっても財布などの貴重品は盗まれる可能性がありますから, なくした場所を知ったとしても, その場所からは無くなってしまうことはあるでしょう.

ということで「なるべく安価で最小かつスマホを使わないでGPSのログをとるIoTデバイスを作ろう」というテーマで何回かに分けて記事を書こうかと思います(2回目以降はいつ書くか未定ですがｗ).

1回目の範囲は, 「必要なものをそろえる 〜 3G回線に繋げる」という感じです.

普通のRaspberry Piとかでこれを既にやってる記事が結構あると思いますので, 今回重要になる点は, Raspberry Pi Zeroに必要なものかも知れません笑

しかし, パーツの調達は自分が一番はまったところになるので, それの共有も兼ねて目を通して貰えればと思います.

# Raspberry Pi Zeroの構成
Raspberry Pi Zeroは以下の図のように,
<img src="https://qiita-image-store.s3.amazonaws.com/0/61124/b9acb569-2653-5f41-74d4-9966f175b8cc.png" width="276" height="256">
- 電源用miniUSB
- miniUSB
- miniHDMI
- microSD
の口しかついていません.
そのため, 様々なデバイスに繋ぐには何が必要かを考えてから作業に取り組まないと困ります.
(自分は研究室で作業してたので探したら色々あったためにラッキーでしたが...)

特に, ネットワークの設定をしたいと思った時, LANケーブルさせる口もなければ, miniUSBに無線LANアダプタさそうとしたらキーボード接続できなくなるなど, USBハブが必要不可欠になります.

ということで自分が使用したコネクタやらアダプタやらを記していきます.

# 必要なもの
- Raspberry Pi Zero
- microUSBケーブル(電源用)
- microUSBオス・USBメス変換アダプタ(USBハブのオスがmicroUSBになってればいりません)
- miniHDMIオス・HDMIメス変換アダプタ
- USBハブ(口があればあるだけいいと思います)
- 電源・USBコネクタ(iPhoneとかAndroidの充電に使うやつ)
- キーボード
- ディスプレイ
- HDMIケーブル
- 無線LANアダプタ(USB型)
- microSD
- microSD → SDアダプタ(パソコンにmicroSDがそのままさせればいらない)
- L-05A(USBモデム)
- SORACOM Air(nanoまたはmicro)
- nanoSIM → microSIMアダプタ(SORACOM Airがnanoの人はmicroSIMのいれものが必要になります)
- モバイルバッテリー (まぁいらないかも)

多分これで全部です.

キーボード, ディスプレイ, HDMIケーブルを除くとして, 総額1万強くらいかなぁと思います(結構安いですよね!). なんといってもL-05AがAmazonで新品同様なのに1000円以下で手に入れられたことが大きいですね!

# イメージ作成
以下はMacBook Pro Retina, Mac OS X Yosemiteでおこなった作業です.
Windowsの方は専用ソフトがあるっぽいのでそれで書き込めるかと思います.
Linuxの方は大体同じ手順で書き込めると思います.

イメージは最新版(2015年12月14日現在)のRaspbian Jessieを入れることにします.

1. microSDをパソコンに接続
2. ディスクユーティリティでmicroSDをフォーマット
3. ターミナルで以下を実行

```
$ diskutil unmountDisk /dev/disk2s1 (パソコンによるかも, 'df -h' あたりで調べてみてください)
$ sudo dd if=Downloads/2015-11-21-raspbian-jessie.img of=/dev/rdisk2 bs=1m
(disk2s1のs1を削らないといけません & disk2の先頭に'r'をつけると早くなるようです)
```
イメージまでのパスは適宜書き換えてください

# 初期設定
Raspberry Pi Zeroを起動していきます.

1. HDMI, マウスorキーボード, 電源を接続
2. デスクトップが表示されたらMenu → Preferences → Raspberry Pi Configurationを開く
3. Systemで以下を書き換える
 - Hostname: 自由
 - Boot: To CLI
 - Auto Login: チェックを外す
 - Network at Boot: 自由 (公式によると, チェックを外すとbootが早くなるけど, ネットワーク接続処理がboot時におこなわれない?)
4. 再起動(上記の設定が終わった後のダイアログで選択)
5. ログインする. ログイン情報は以下のとおり(デフォルト)
 - ユーザ名: pi
 - パスワード: raspberry

以降, CLIで操作していきます.

# 無線LANネットワーク設定
今回の主旨にはあまり関係ないですが, ssh使って作業したい人はやっておくと良いかもしれません.

1.　無線LANのUSBアダプタをRaspberry Piに接続
2.　以下を実行
 - lsusb (アダプタを認識しているか確認)
 - wpa_passphrase ルータのSSID ルータのPassword >> passphrase.txt
 - sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
(passphrase.txtの内容をコピーして, 末尾に貼り付けてください)

 ```
 sudo vim /etc/wpa_supplicant/wpa_supplicant.conf
 ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
 update_config=1
 network={
         ssid=SSID
         #psk=Passphrase
         psk=生成されたやつ
         key_mgmt=WPA-PSK (追加)
         proto=WPA2 (追加: ネットワークのセキュリティに合わせる)
         pairwise=CCMP (追加)
         group=CCMP (追加)
         priority=2 (追加)
 }
 ```
3.　再起動
4.　ifconfigでwlan0の接続確認
5.　sudo vi /etc/network/interfaces

```
source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

# iface eth0 inet manual
iface eth0 inet static
address 192.168.0.196 (ifconfigで出てきたinet addr)
netmask 255.255.255.0
gateway 192.168.0.1 (Macのネットワーク設定とかで確認)

auto wlan0
allow-hotplug wlan0
# iface wlan0 inet manual
iface wlan0 inet static
address 192.168.0.196
netmask 255.255.255.0
gateway 192.168.0.1
  wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

(以下省略)
```
6.　sudo /etc/init.d/networking restart
7.　sshとかで確認

# やっておいた方がいいやつ
1. sudo apt-get update
2. sudo apt-get upgrade

# L-05A & SORACOM Air設定
ここが本質のところですが, [このブログ](http://akms.hateblo.jp/entry/2015/12/06/090000)を参考にしています.
なのでちょっと雑ですが, 多分以下の手順でいけると思います笑

1.　Raspberry Pi ZeroにL-05Aを接続
2.　sudo apt-get install pppconfig
3.　sudo apt-get install minicom
4.　sudo apt-get install eject
5.　dmesgでL-05Aが接続されていることを確認 (多分下の方に表記されてます)
6.　eject /dev/sr0 (エラーが出ても取り外されているはず)
7.　もっかいdmesgしてttyACMがあることを確認 (多分下の方に表記されてます)
8.　minicom -D /dev/ttyACM0
9.　minicomの中で AT+CGDCONT? を入力してエンターすると, 登録されているAPNリストが表示される
10.　`CGDCONT:1,"soracom.io",,0,0` 的なやつがなければ `AT+CGDCONT=n,"IP","soracom.io"` と入力 (nはAPNリストで使われていないCID)
※ 消したいときは `AT+CGDCONT=n` で消せます
11.　Ctrl-a + x で終了し, sudo pppconfig
12.　Create ~ を選択
13.　以下の情報を入力していく

```
Provider Name：soracom
Configure Nameservers(DNS)：Dynamic
Authentication Method：CHAP
User Name：SIMのパッケージに記載されているもの
Password：SIMのパッケージに記載されているもの
Speed：115200
Pulse or Tone：Tone
Phone Number：*99***n#（nはminicomで登録したCID）
Choose Modem Config Method：いいえ
Manually Select Modem Port：/dev/ttyACM0
```

14.　Finished write ~ を選択
15.　sudo /etc/ppp/peers/soracom
以下を最後の行に挿入

```
replacedefaultroute
```
16.　sudo pon soracom
17.　終了したいときは sudo poff soracom

これで多分, L-05Aの回線部分の光が緑から青に変わると思います.
ならない時はminicomで登録されてる"soracom.io"を全部消して再度試してみてください.

# ここまでの状態
以上をやって, 最低限の装備でRaspberry Pi Zeroが3G回線につながっている状態ができあがりました.
<img src="https://qiita-image-store.s3.amazonaws.com/0/61124/ddfdd048-4294-4177-77f6-840253fe4318.jpeg" width="240">

ほぼ普通のRaspberry Piくらいの大きさになってしまいましたね笑
といっても厚さが1cmくらい?なので, バッグに入れても全然かさばらないくらいのサイズですよね!
普通のやつでこれやろうとしたらでかすぎていれたくないですからね〜

ちなみに黒いカードみたいなのが<a rel="nofollow" href="http://www.amazon.co.jp/gp/product/B00SO46KQ2/ref=as_li_qf_sp_asin_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B00SO46KQ2&linkCode=as2&tag=gateside-22">モバイルバッテリー(2500mA)</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=gateside-22&l=as2&o=9&a=B00SO46KQ2" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />です.
正直ほぼすぐに電力尽きると思いますが笑, [このサイト](http://www.midwesternmac.com/blogs/jeff-geerling/raspberry-pi-zero-power)によると, Wi-Fi繋いだ状態でアイドリングしていると120mA消費するので, まぁお出かけしてる間はもつんじゃないですかね?

もし大きくていいのであれば違うモバイルバッテリー買うといいです!

# おわりに
とりあえず第一回はここまでです.
今度はGPSモジュールを取りつけてデータを取得するところまでの内容を記事にできたらと思います.

明日, 16日目のCalendarは@n0bisukeさんです!
お楽しみに〜!