前回からだいぶ時間が空いてしまいました、メカトラックスの永里です。
今回、フリーランスエンジニアの大嶺さんのご協力を頂き、3GPI(ラズパイ用3G通信モジュール)とslee-Pi(ラズパイ用電源管理モジュール)を使用した、ラズパイの間欠動作&3G通信についてまとめて頂きました。3GPIとslee-Piの連携動作の記事は殆ど無いのでご参考になれば幸いです!
尚、文中の機材一式(IoTスタータキット)は近日中にハッカソン等イベントへの無償貸し出しならびに一般販売を予定しています。詳細はしばしお待ちください。。。
はじめまして。フリーランスエンジニアをやっていますタイガースターの大嶺と申します。
今日はメカトラックス社様から、近日リリース予定のIoTスタータキットを借りる事ができたので軽く触ってみようと思います。
IoTスターターキットを開封したところ
キットの内容
IoTスターターキットは下記の機材で構成されています。
今回は同梱されている3GPIとslee-Piを使って簡単なアプリを作ってみます。
- Raspberry Pi3本体
- 3GPI(Raspberry Pi 向け3G通信モジュール)
- slee-Pi(Raspberry Pi 向け電源管理モジュール)
- SDカード(OS等インストール済)
- ACアダプタ、コード、ネジ等備品
工具等は必要なく、ポン付けでOKです。
特に説明なくとも組み立ては問題ないかと思います。何かレゴみたいですね。
3GPIでネットに接続する
まずは3GPIを使ってネットへ接続できるよう設定を行います。
(補足)以下のSIMカード挿入、SDカード挿入は電源を入れない状態で行ってください
まずは、SIMカードを挿入します。今回はSORACOM社のSORACOM Air SIMを使用しました。
SIMカード挿入
SIMカードの差し込み口だけ少し戸惑いました。
カバーが開くようになっていますので、開いた後SIMカードを差し込みます。
SIMカード止める
SIMカードを差し込んだ後はパチンと閉じましょう。
大きさは標準SIMなので購入時にはサイズに注意してください。
同梱されているSDカードには既にOS(raspbian)と必要なソフトがインストールされていますので、SDカードをラズパイに差し込んで電源を入れます。
USB接続の3Gモデム等を使う場合、モデムを繋いだ後ドライバを入れたり設定をあーだこーだする必要があるのですが、3GPIを使用する場合は下記の設定1つで済みます。
(補足)後述のとおり、SORACOM Air SIMを使用する場合、この設定も不要です
3GPI接続設定
APN設定
今回はSORACOM Airを使用したのでAPN設定は下記になります。
- APN: soracom.io
- ユーザー名: sora
- パスワード: sora
メカトラックス社の3GPIドキュメントのアクセスポイントの設定を参考に、以下のように設定します。
sudo nmcli con add type gsm ifname "*" con-name soracom apn soracom.io user sora
(補足)SORACOM Airに関しては、同梱SDカードにて、既に上記APN設定が済んでおり、ここに記載されているAPN設定は不要です
接続確認
設定が終わったらifconfigを叩いて確認します。
ifconfig
eth0 Link encap:Ethernet HWaddr b8:27:eb:b9:70:7a
inet addr:192.168.1.17 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: 2001:a43d:2133:0:ba27:ebff:feb9:707a/64 Scope:Global
inet6 addr: fe80::ba27:ebff:feb9:707a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1185 errors:0 dropped:0 overruns:0 frame:0
TX packets:241 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:65972 (64.4 KiB) TX bytes:27276 (26.6 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
ppp0 Link encap:Point-to-Point Protocol
inet addr:10.131.223.78 P-t-P:10.64.64.64 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:152 errors:0 dropped:0 overruns:0 frame:0
TX packets:195 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
ppp0にIPが割り振られていれば成功です。組み立て後コマンド一発で3G接続ができるようになりました!
他にも安いUSBモデム等も沢山ありますが、市販されているUSBモデムは大抵がWindowsのノートパソコン用に作られており、ラズパイで使用する場合は頑張れば使える類のものです。
ネットを漁れば色々と文献は出てきますが、型番やバージョン違いで上手くいかなかったりで時間を取られる事も珍しくありません。
その点3GPIは完全にラズパイ専用に作られていますので、ほぼ悩む事ないでしょう。
値段は少しお高いですが検討する価値は十分にあると思います。
(補足)値段は少しお高いですが。。。orz
IPv6を止める
aptで何かインストールしたりする時、IPv6を見に行って遅かったりするので無効にしてしまいます。
sudo vi /etc/sysctl.conf
下記設定を追記
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
設定を反映
sudo sysctl -p
ツイッターでつぶやいてみる
ネット接続ができようになりましたのでラズパイからツイッターでつぶやいてみます。
まずはtwitter gemをインストールします。
sudo gem install twitter
つぶやきを行うrubyプログラムを作成します。
vi tweet.rb
require 'twitter'
# ツイッターのAPIキー
CONSUMER_KEY = "xxxxxx"
CONSUMER_SECRET = "xxxxxx"
ACCESS_TOKEN_KEY = "xxxxxx"
ACCESS_SECRET = "xxxxxx"
begin
client = Twitter::REST::Client.new do |config|
config.consumer_key = CONSUMER_KEY
config.consumer_secret = CONSUMER_SECRET
config.access_token = ACCESS_TOKEN_KEY
config.access_token_secret = ACCESS_SECRET
end
# ツイート
client.update("テストなぅ #{Time.now.strftime('%Y-%m-%d %H:%M:%S')}")
rescue => e
STDERR.puts "[EXCEPTION] " + e.to_s
exit 1
end
ツイッターのAPIキー取得方法については割愛しています。
ファイルを保存したら一度実行してみます。
ruby tweet.rb
起動時につぶやく
ラズパイ起動時に自動的につぶやくよう設定します。
sudo vi /etc/rc.local
sleep 30
ruby /home/pi/tweet.rb
ここで少しハマったのですが、起動時にノータイムでつぶやくスクリプトを実行するとネットワーク設定が有効になっていないようでネット接続エラーとなります。
3GPIの起動が結構時間かかるようなので、かなり多めに30秒ほどsleepを入れます。
(補足)キャリアとの通信セッション確立に所要の時間が必要となってます
sudo reboot
再起動したら新しくつぶやきが追加されている事を確認します。
slee-Piを使って電源をON/OFFする
次にslee-Piを使ってラズパイ本体の電源をON/OFFしてみます。
メカトラックス社のslee-Piドキュメントに従って必要なソフトをインストールします
sudo bash -c 'echo "deb http://mechatrax.github.io/sleepi ./" > /etc/apt/sources.list.d/sleepi.list'
sudo apt-get update
sudo apt-get install sleepi-archive-keyring
sudo apt-get install sleepi-firmware sleepi-utils sleepi-monitor
sudo reboot
ソフトのインストールが終わったらslee-Piの時計を合わせます。
sudo hwclock -w
sudo reboot`
次にコマンドラインで5分後に電源を入れるようアラームを設定してシャットダウンしてみます。
sudo sleepictl --set alarm "+5min"
sudo poweroff
3GPI + slee-Piを使ってツイッターでつぶやき続ける
3G接続と電源の操作が出来るようになりましたので、10分毎に自動ツイートを行いシャットダウンするよう設定してみます。
電源入れっぱなしで10分毎にプログラムを動かすのはcronなりを使えばすぐ出来ますが、今回はつぶやく時だけ電源を入れる事で電力消費を抑える事を目的とします。
起動時のスクリプトを修正します
sudo vi /etc/rc.local
sleep 30
ruby /home/pi/tweet.rb &
sleepictl --set alarm "+10min"
sleep 90 #←重要
poweroff
まず起動時につぶやきを行い、10分後に電源を再投入するようアラームをセットした後シャットダウンを行います。
注意点はラズパイ起動後、自動的にシャットダウンするスクリプトになっていますのでシャットダウン前に少しスリープを入れておきましょう。
スリープが無い場合、起動と同時にシャットダウンし続けるラズパイになってしまいます。
やらかしてしまった人はシングルユーザーモードで/etc/rc.localを修正してください。筆者も一度やらかしました。
設定できたら再起動します。
sudo reboot
再起動後、暫く放っておくと10分おきにつぶやいてる事を確認できました
まとめ
以上で3G回線によるネット接続と、電源操作をカンタンに行える事を確認できました。
必要な時だけ電源ONにすることが出来るので限られたバッテリー等で稼働させる場合、消費電力をギリギリまで抑える事ができそうです。
ソーラーパネルやカメラ、各種センサー等と組み合わると非常に面白いキットなのではないかと思います。
以上です、大嶺さんありがとうございました。
基本的に原文そのままですが、一部斜体にて永里より補足を入れさせてもらってます!