ラズパイを10分間隔で起動して3G経由でツイートさせてみた

  • 24
    いいね
  • 0
    コメント

前回からだいぶ時間が空いてしまいました、メカトラックスの永里です。
今回、フリーランスエンジニアの大嶺さんのご協力を頂き、3GPI(ラズパイ用3G通信モジュール)とslee-Pi(ラズパイ用電源管理モジュール)を使用した、ラズパイの間欠動作&3G通信についてまとめて頂きました。3GPIとslee-Piの連携動作の記事は殆ど無いのでご参考になれば幸いです!

尚、文中の機材一式(IoTスタータキット)は近日中にハッカソン等イベントへの無償貸し出しならびに一般販売を予定しています。詳細はしばしお待ちください。。。


はじめまして。フリーランスエンジニアをやっていますタイガースターの大嶺と申します。
今日はメカトラックス社様から、近日リリース予定のIoTスタータキットを借りる事ができたので軽く触ってみようと思います。
IoTスターターキット内容
IoTスターターキットを開封したところ

キットの内容

IoTスターターキットは下記の機材で構成されています。
今回は同梱されている3GPIとslee-Piを使って簡単なアプリを作ってみます。

  • Raspberry Pi3本体
  • 3GPI(Raspberry Pi 向け3G通信モジュール)
  • slee-Pi(Raspberry Pi 向け電源管理モジュール)
  • SDカード(OS等インストール済)
  • ACアダプタ、コード、ネジ等備品

IoTスターターキット組立
工具等は必要なく、ポン付けでOKです。
特に説明なくとも組み立ては問題ないかと思います。何かレゴみたいですね。

3GPIでネットに接続する

まずは3GPIを使ってネットへ接続できるよう設定を行います。
(補足)以下のSIMカード挿入、SDカード挿入は電源を入れない状態で行ってください

まずは、SIMカードを挿入します。今回はSORACOM社のSORACOM Air SIMを使用しました。

SIMカード挿入
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

再起動したら新しくつぶやきが追加されている事を確認します。

つぶやき2
つぶやきました!

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

電源ON
5分後、slee-Piにより自動的に電源が投入されました!

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にすることが出来るので限られたバッテリー等で稼働させる場合、消費電力をギリギリまで抑える事ができそうです。

ソーラーパネルやカメラ、各種センサー等と組み合わると非常に面白いキットなのではないかと思います。


以上です、大嶺さんありがとうございました。
基本的に原文そのままですが、一部斜体にて永里より補足を入れさせてもらってます!