このハンズオンでは、SORACOMとRaspberry Piと超音波センサを用いてクラウドにデータを送り可視化したり、IFTTTを利用してデータ転送からTwitterへの呟きに連動させます。
\n\n
目次
\n- \n
- 1章 ユーザーコンソールを使用してAir SIMを管理する\n\n \n
- 2章 Raspberry Piへの接続\n\n \n
- 3章 Air SIMを使って、インターネットに接続する\n\n \n
- 4章 ユーザーコンソールによる通信の確認\n
- \n
- データ通信量と利用料金の確認 \n
- 監視機能の確認 \n
\n - 5章 超音波センサーを使って距離を計測する\n
- \n
- 超音波センサーの動作原理 \n
- 配線 \n
- センサーをテストしてみる \n
\n - 6章 SORACOM Harvest で可視化してみる\n\n \n
- 7章 Twitterと連携してみる\n\n \n
- おわりに \n
\n\n
ここでは、SORACOM ユーザーコンソール(以降、ユーザーコンソール)を使用して、SORACOM AirのSIM (以降、Air SIM)をSORACOMのユーザーアカウントに登録します。ユーザーコンソールを使用するために、ユーザーアカウントの作成、および、支払情報の設定(クレジットカード情報)の登録を行います。
\n\nユーザーコンソールを使用するためには、SORACOMユーザーアカウント(以降、SORACOMアカウント)の作成が必要となります。アカウントの作成には、メールアドレスが必要となります。
\n\nユーザーコンソールをご利用いただくためには、まずSORACOM アカウントを作成してください。
\nhttps://console.soracom.io/#/signup にアクセスします。\n使用する SIM の種類を選択します。日本向けの SORACOM Air SIM を利用する場合は、カバレッジタイプ Japan を選択します。
\n\n「アカウント作成」画面が表示されますのでメールアドレスおよびパスワードを入力します。\nまた、契約者が個人であるか法人であるかを選び、法人の場合はさらに契約者の情報を入力します。\n最後に規約に同意するためのチェックボックスを入れ、「アカウントを作成」ボタンを押します。
\n[アカウントを作成] ボタンをクリックします。
\n\n複数人でAir SIMの管理を行う場合は、事前にメーリングリストのアドレスを取得するなど、共有のメールアドレスをご利用ください。\n下記の画面が表示されるので、メールを確認してください。
\n\nメールが届いたらリンクをクリックしてください。
\n\n自動的にログイン画面に遷移しますので、メールアドレスとパスワードを入力してログインしてください。
\n\nログイン画面が表示されるので、アカウント作成時に登録したメールアドレスとパスワードを入力し、 [ログイン] ボタンをクリックしてください。(ログイン画面が表示されない場合はブラウザで https://console.soracom.io にアクセスします。)\n
\n以下のような「SIM管理」画面が表示されたらログイン完了です。引き続き、支払情報の設定に進みましょう!\n\n\f
\n\n通信料の支払い方法はクレジットカードになります。クレジットカードの情報を登録するには、メイン画面上部のユーザー名から[お支払い方法設定]を開きます。
\n\nお支払方法で各情報を入力し、支払い方法を登録します。
\n\n\nユーザーコンソールにログインして、Air SIM の登録を行います。左上の [SIM登録] ボタンをクリックします。\n
\n「SIM登録」画面で、Air SIM の台紙の裏面に貼ってある IMSI と PASSCODE を入力してください。
\n\n名前、グループは空欄のままでも構いません。\n「技術基準適合証明等について確認しました」チェックボックスを付けてください。\n[登録] を押して SIM 登録を完了してください。(複数の Air SIM を続けて登録することも可能です。)
\n\nAir SIM を登録した直後の状態は「準備完了」と表示され、通信可能な状態になっています。ただし、まだセッションは確立されていないので、セッション状態は「オフライン」になっていることを確認してください。
\nSORACOMではSIMの登録や「使用開始」「休止」「解約」といったモバイル通信の状態の更新をユーザー自身がユーザーコンソールを使用して、実施することが可能です。
\nなお、初めての通信、もしくは、ユーザーコンソール/APIで使用開始処理を行うことで、状態は「使用中」に変わります。 まだ通信を行いたくない場合は、ユーザーコンソールもしくはAPIで休止処理を行ってください。これにより「休止中」の状態となり通信は行われません。
\n\f
\n\nSORACOMが実施するハンズオンでは、事前にOSを初期化した Raspberry Pi を用意してあります。\n割り当てられたRaspberryPiと、そのIPアドレスをご確認ください。\n使用する Raspberry Pi のアドレスは、 192.168.123.ドングルの番号 です
\n\n\n\n例: 5番のドングルであれば、 192.168.123.5
\n
自分の端末からRaspberry Piに接続(SSH)します。\nターミナルを立ち上げ、以下のコマンドを実行してください。
\n\nssh pi@192.168.123.xxx (割り当てられたIPアドレスを指定してください)\nyes (初回接続時のみ)\nraspberry
~$ ssh pi@192.168.123.xxx (割り当てられたIPアドレスを指定してください)\nThe authenticity of host '192.168.123.xxx (192.168.123.xxx)' can't be established.\nECDSA key fingerprint is db:ed:1b:37:f2:98:c6:f4:d8:6d:cf:5c:31:6a:16:58.\nAre you sure you want to continue connecting (yes/no)? yes\nWarning: Permanently added '192.168.123.xxx' (ECDSA) to the list of known hosts.\npi@192.168.123.xxx's password: (raspberry と入力)\n\nThe programs included with the Debian GNU/Linux system are free software;\nthe exact distribution terms for each program are described in the\nindividual files in /usr/share/doc/*/copyright.\n\nDebian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent\npermitted by applicable law.\nLast login: Thu Sep 24 15:51:43 2015 from 192.168.123.yyy\npi@raspberrypi ~ $\n
Windowsの場合には、TeraTerm等を使ってログインしてください。その際、ユーザ名に pi、パスワードに raspberry を指定する必要があります。
\n\n\n\nここでは、先ほど登録したSORACOM AirのSIM (以降、Air SIM)を使用して、Raspberry Piからインターネットに接続します。
\n\n\nAir SIMを取り外します。Air SIMの端子を触らないように気をつけます。
\n\n\n\n\n\n\n\nここから先の作業は、Raspberry Pi にログインした状態でコマンドを実行してください
\n
以下に、モデムの初期化、APNの設定、ダイアルアップなどを行うスクリプトが用意されています。
\nhttps://soracom-files.s3.amazonaws.com/setup_air.sh
\n以下のコマンドを実行し、このスクリプトをダウンロードし、接続用シェルスクリプトを作成します。
\n\ncurl -O https://soracom-files.s3.amazonaws.com/setup_air.sh\nsudo bash setup_air.sh\n
pi@raspberrypi:~ $ curl -O https://soracom-files.s3.amazonaws.com/setup_air.sh\n\n % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n100 4040 100 4040 0 0 17211 0 --:--:-- --:--:-- --:--:-- 17264\npi@raspberrypi:~ $ sudo bash setup_air.sh\n--- 1. Check required packages\nwvdial is not installed! installing wvdial...\n :\n :\nok.\n\n--- 2. Patching /lib/systemd/system/ifup@.service\nok.\n\n--- 3. Generate config files\nAdding network interface 'wwan0'.\nAdding udev rules for modem detection.\nok.\n\n--- 4. Connect\nFound un-initilized modem. Trying to initialize it ...\nNow you are all set.\n\nTips:\n - When you plug your usb-modem, it will automatically connect.\n - If you want to disconnect manually or connect again, you can use 'sudo ifdown wwan0' / 'sudo ifup wwan0' commands.\n - Or you can just execute 'sudo wvdial'.\n
これで、自動的に 3G モデムが初期化され、Raspberry Pi が SORACOM 経由でインターネットに接続します。 また、再起動時やモデムを接続した際にも、自動的に接続されるようになっています。
\nこのスクリプトをインストールするとRaspberry Pi が起動すると自動的にAir SIMでネットワーク接続が行われるようになります。データの送受信には通信料金が発生しますのでご注意ください。
\n\n接続が出来ている時は、ppp0インターフェースが存在しているはずなので、以下のコマンドで接続状況を確認出来ます。
\n\nifconfig ppp0\n
pi@raspberrypi:~ $ ifconfig ppp0\nppp0 Link encap:Point-to-Point Protocol\n inet addr:10.xxx.xxx.xxx P-t-P:10.64.64.64 Mask:255.255.255.255\n UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1\n RX packets:133 errors:0 dropped:0 overruns:0 frame:0\n TX packets:134 errors:0 dropped:0 overruns:0 carrier:0\n collisions:0 txqueuelen:3\n RX bytes:2092 (2.0 KiB) TX bytes:4039 (3.9 KiB)\n
\"inet addr\" の後ろに表示されているのが、デバイスに割り当てられた IP アドレスとなります。
\n次に、インターネットへの疎通が出来るかどうかを確認しましょう。
\nGoogle Public DNS (8.8.8.8) への到達性を ping コマンドで調べます。
\n\n※下記コマンドは、一行ずつ実行してください
\nping 8.8.8.8\n(Ctrl+C で止める)\n
pi@raspberrypi:~ $ ping 8.8.8.8\nPING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.\n64 bytes from 8.8.8.8: icmp_seq=1 ttl=55 time=343 ms\n64 bytes from 8.8.8.8: icmp_seq=2 ttl=55 time=342 ms\n64 bytes from 8.8.8.8: icmp_seq=3 ttl=55 time=361 ms\n64 bytes from 8.8.8.8: icmp_seq=4 ttl=55 time=340 ms\n^C\n--- 8.8.8.8 ping statistics ---\n4 packets transmitted, 4 received, 0% packet loss, time 3002ms\nrtt min/avg/max/mdev = 340.908/347.329/361.814/8.434 ms\n
ping コマンドの応答からインターネットへの疎通が取れていることが確認できました。
\n\nインターネットに接続できましたので、ユーザーコンソールからデータ通信量、利用料金を確認して、監視機能を設定しましょう。
\n\n\nユーザーコンソールでは、データ通信量をSORACOM AirのSIM(以降、Air SIM)ごとにチャート形式で確認することができます。
\nデータ通信量を確認したいAir SIMにチェックを入れ [詳細] ボタンをクリックします。\n\n[SIM 詳細] ダイアログが表示されますので、[通信量履歴] タブを開きます。 データ使用量は、表示期間を変更することもできます。
データ通信量が反映されるまでに5〜10分かかります。\n
先ほどのデータ通信が反映されていない場合はしばらくお待ちください。
\n\n\nユーザーコンソールからデータ通信料金と基本料金を確認できます。\nメイン画面左上部のボタンを押してメニューを出してから [課金情報] を選択します。
\n\n表示されている時間時点の課金情報を確認することができます。
\n\nまた、画面下部にある [データ使用量実績データを CSV 形式でダウンロード] から、期間を選択して [ダウンロード] ボタンをクリックすることで、基本料金、転送データ量などの詳細を確認することができます。
\n \t請求額詳細のCSVには、IMSIごとに以下の項目が記載されています。\n✓\tdate (日付)\n✓\tbillItemName (basicCharge は基本料金、upload/downloadDataChargeは転送データ量に対する課金)\n✓\tquantity (数量: upload/downloadDataChargeの場合の単位はバイト)\n✓\tamount (金額: 日ごとの料金。この項目の総合計が、月額請求額となります)\n✓\tタグ、グループ\n
通信量にしきい値を設定し、超えた場合にメールでの通知と通信帯域制限をすることができます。監視できる項目は以下のとおりです。
\n- \n
- 各 SIM の日次通信量 \n
- 各 SIM の今月の合計通信量 \n
- 全ての SIM の今月の合計通信 \n
例えば、全ての Air SIM の合計通信量が5000MB以上になった場合にメール通知を受けたい場合や、ある Air SIM の日次通信量が100MB以上になった場合にはその日の通信速度を制限するというような処理を行いたい場合に、この機能を利用することができます。
\n通信量はメガバイト単位(1以上の整数値)で入力できます。メールの宛先は登録されているメールアドレスです。通信速度を制限した場合は s1.minimum になり、解除された際は、 s1.standard に復帰します。 (APIを用いた場合には、制限時の通信速度、制限解除時の通信速度を任意に設定することも可能です)
\nAir SIMに監視の設定をしましょう。当ハンズオンの間に通知がくるように、1MiBで設定します。
\n「SIM詳細」画面で [監視] タブを開き、[SIM] をクリックして、監視設定を行ったら [設定を更新] ボタンをクリックして保存します。
\n\nここでの設定は、対象のAir SIMごとに有効になります。
\n監視の設定は、以下の3つを対象することができます。
\n- \n
- Air SIM \n
- (Air SIMの所属する)グループ \n
- (登録した)全てのSIM \n
すぐに、メール通知を確認したい場合は、Raspberry Piから以下のコマンドを実行して、1MiBのダウンロードを実施してみてください。
\n\ncurl -o /dev/null http://soracom-files.s3.amazonaws.com/1MB\n
pi@raspberrypi:~ $ curl -o /dev/null http://soracom-files.s3.amazonaws.com/1MB\n % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n100 1024k 100 1024k 0 0 512k 0 --:--:-- --:--:-- --:--:-- 512k\n
以下のような通知が届きます。(通知は最大で5分程度かかります。)
\n\nここまでで、1〜4章までが完了しました。
\n●\t1章 ユーザーコンソールを使用してAir SIMを管理する
\n●\t2章 Raspberry Piのセットアップ
\n●\t3章 Air SIMを使って、インターネットに接続する
\n●\t4章 ユーザーコンソールによる通信の確認
超音波の反射時間を利用して非接触で測距するモジュールです。外部からトリガパルスを入力すると超音波パルス(8波)が送信され、出力された反射時間信号をマイコンで計算することによって距離を測ることができます。\n
\n- \n
- 具体的にはセンサーの Trig ピンにパルス(短い時間)電圧をかけて測定を開始 \n
- EchoピンがHIGHである時間の長さを計測 \n
1.必要なパーツが揃っているか確認しましょう
\n- \n
- \n
超音波センサー HC-SR04 (スピーカのような形の青い基板)
\n \n - \n
ブレッドボード(穴がたくさん空いた白い板)
\n \n - \n
ジャンパーコード(オス-メス/赤黒黄青の4本)
\n \n
2.最初に、センサーをブレッドボードに刺します(端から2列目に刺すと安定します)
\n\n3.ジャンパーコードを刺していきます(センサーの表面のVCC→GNDの順に、赤・青・黄・黒)
\n\n4.ラズパイにケーブルを刺します
- \n
- 赤いケーブルを最後に接続してください \n
- 刺すピンを間違えると故障の原因になるので、十分気をつけてください \n
以下のコマンドで、プログラムをダウンロード・実行し、正しくセンサー値が読み出せるか試しましょう
\n\ncurl -O http://soracom-files.s3.amazonaws.com/sensor_test.py\npython sensor_test.py\n
pi@raspberrypi:~ $ curl -O http://soracom-files.s3.amazonaws.com/sensor_test.py\n % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n100 1197 100 1197 0 0 17386 0 --:--:-- --:--:-- --:--:-- 17602\npi@raspberrypi ~ $ python sensor_test.py\n距離: 40.8 cm\n距離: 40.4 cm\n距離: 39.8 cm\n :\n(Ctrl+C で止めることができます)\n
何も画面に出力されない場合は、接続するピンを間違えている可能性が高いですので、もう一度ケーブルを接続する位置を確かめましょう。
\n\nSORACOM のサービス、Harvest を体験してみましょう。
\n\nSORACOM Harvest(以下、Harvest) は、IoTデバイスからのデータを収集、蓄積するサービスです。
\nSORACOM Air が提供するモバイル通信を使って、センサーデータや位置情報等を、モバイル通信を介して容易に手間なくクラウド上の「SORACOM」プラットフォームに蓄積することができます。\n保存されたデータには受信時刻や SIM の ID が自動的に付与され、「SORACOM」のユーザーコンソール内で、グラフ化して閲覧したり、API を通じて取得することができます。なお、アップロードされたデータは、40日間保存されます。
\n\n\n\n\n注意: SORACOM Harvest を使うには追加の費用がかかります
\n
\n書き込みリクエスト: 1日 2000リクエストまで、1SIMあたり 1日5円
\n1日で2000回を超えると、1リクエスト当り0.004円
SORACOM Harvest を使うには、Group の設定で、Harvest を有効にする必要があります。
\nグループ設定を開き、SORACOM Harvest を開いて、ON にして、保存を押します。
\n\n\n\nsudo apt-get update\nsudo apt-get install -y python-pip\nsudo apt install python-requests\ncurl -O http://soracom-files.s3.amazonaws.com/send_to_harvest.py\npython send_to_harvest.py\n
pi@raspberrypi:~ $ sudo apt-get install -y python-pip\n :\npi@raspberrypi:~ $ sudo pip install request\n :\npi@raspberrypi:~ $ curl -O http://soracom-files.s3.amazonaws.com/send_to_harvest.py\n % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n100 2443 100 2443 0 0 3966 0 --:--:-- --:--:-- --:--:-- 3972\npi@raspberrypi:~ $ python send_to_harvest.py\n- 距離を計測します\n距離: 15.1 cm\n- データを送信します\n<Response [201]>\n\n- 距離を計測します\n距離: 4.4 cm\n- データを送信します\n<Response [201]>\n
\n\n\n正常にデータが送信されたらレスポンスコードが 201 になります
\n
コンソールから、送信されたデータを確認してみましょう。
\nSIMを選択して、操作から「データを確認」を選びます。
\n\nグラフが表示されていると思います。
\n\nスクリプトのデフォルト設定では5秒に一度データが送信されるので、自動更新のボタンをオンにすると、グラフも自動的に更新されます。
\nとても簡単に可視化が出来たのがおわかりいただけたと思います。
\n\nIFTTTというサービスを使うと、デバイスから簡単に様々なサービスと連携を行う事が出来ます。\nこの章では、センサーで障害物を検知した際に、SORACOM Beam 経由で IFTTT の Maker Channel を呼び出し、Twitter へとリアルタイムに通知を行ってみましょう。
\n\nIFTTT(https://ifttt.com/) とは、IF-This-Then-That の略で、もし「これ」が起きたら「あれ」を実行する、つまり「これ」がトリガーとなって、「あれ」をアクションとして実行する、サービスとなります。\n様々なサービスや機器と連携していて、何度かクリックするだけで簡単な仕組みを作る事が出来ます。\n今回のハンズオンでは、HTTPSのリクエストをトリガーとして、アクションとして Twitter につぶやくために、IFTTT を使います。
\n\nまずアカウントをお持ちでない方は、IFTTT のサイト https://ifttt.com/ で、Sign Up してください。
\n\n\n次にサービス同士の組み合わせ(Applet=アプレットと呼ばれます)を作成します。
\nSign up 後の上部のメニューから My Applets を選択し、New Applet ボタンをクリックするか、 https://ifttt.com/create にアクセスすると Applet の新規作成画面が表示されます。
\n\n表示された文字列から this をクリックし、表示された検索ボックスで webhooks 検索します。次に表示された Webhooks のパネルを選択してください。
\n\nIFFFT のアカウント内で初めて Webhook を利用する場合は Connect ボタンが表示されるのでクリックします。
\n\nトリガーとして Receve a web request が書かれたパネルを選択します。
\n\nEvent Name を設定します(ここでは、sensor とします)
\n\nこれでトリガーの設定は完了です。次にアクションとして、Twitter の設定を行います。\nthat をクリックし、テキストボックスに twitter と入れ、Twitter チャンネルを選び、Connect を押します。
\n\n\nIFFFT のアカウント内で初めて Twitter 連携を利用する場合は Connect ボタンが表示されるのでクリックします。
\n\nTwitter の認証画面になるので、ご自身のアカウントでログインして認証を完了してください。
\n\nアクションは左上の、Post a tweet と書いてあるパネルを選択してください。
\n\nTwitter の Tweet text には、例えば下記のような文言を入れてみてください。グレーの Value1
などの文字は Add ingredient ボタンをクリックすることにより選択して入力することも可能です。
\n\nセンサーの状態が \"{{Value1}}\" に変化しました(前回からの経過時間:{{Value2}}秒) 時刻:{{OccurredAt}} #soracomhandson
\n
Finish をおして、アプレットの作成が完了します。
\n\n最後に Webhooks のページ https://ifttt.com/maker_webhooks を開いて、右上の Documentation ボタンをクリックします。
\n\nURL の中の key を確認します(後ほど使いますので、どこかにメモしておいてください)
\n\n\nIFTTTへのデータ転送を設定します。IFTTTへのデータ転送は[HTTPエントリポイント]を使用します。[SORACOM Beam 設定] から[HTTPエントリポイント]をクリックします。
\n\n表示された画面で以下のように設定してください。
\n- \n
- 設定名:IFTTT(別の名前でも構いません) \n
- エントリポイントパス: / \n
- 転送先プロトコル:HTTPS \n
- 転送先ホスト名:maker.ifttt.com \n
- 転送先パス: /trigger/sensor/with/key/{maker_key} \n
\n\n\n{maker_key} は、Webhooks にコネクトすると発行される文字列です。以下のページから確認できます。\nhttps://ifttt.com/maker_webhooks
\n
[保存]をクリックします。\n以上でBeamの設定は完了です。
\n\n\n\nここで設定した通り、IFTTTへのアクセスURLは、{maker_key}を含んでいますが、Beamを使用することで、デバイスに認証情報をもたせる必要がなくなります。
\n
\nこれにより、認証情報が盗まれるリスクを回避できます。また、変更になった場合もたくさんのデバイスに手を入れることなく、変更を適用することができます。
IFTTTへの送信をおこないます。\n以下のコマンドを実行し、プログラムをダウンロード・実行し、Beamを経由して正しくデータが送信できるか確認しましょう。
\nESの場合と同様に、Beamを使用する(「send_to_ifttt.py」の実行時)には、SORACOM Airで通信している必要があります。
\n\ncurl -O http://soracom-files.s3.amazonaws.com/send_to_ifttt.py\npython send_to_ifttt.py\n
pi@raspberrypi:~ $ curl -O http://soracom-files.s3.amazonaws.com/send_to_ifttt.py\n % Total % Received % Xferd Average Speed Time Time Time Current\n Dload Upload Total Spent Left Speed\n100 2925 100 2925 0 0 36564 0 --:--:-- --:--:-- --:--:-- 37025\npi@raspberrypi ~ $ python send_to_ifttt.py\n- 条件設定\n障害物を 10 cm 以内に 3 回検知したら IFTTT にデータを送信します\nセンサーを手で遮ったり、何か物を置いてみたりしてみましょう\n- 準備完了\n距離(cm): 5.3 <= 10 , 回数: 1 / 3\n距離(cm): 5.6 <= 10 , 回数: 2 / 3\n距離(cm): 5.2 <= 10 , 回数: 3 / 3\n- ステータスが 'in'(何か物体がある) に変化しました\n- Beam 経由でデータを送信します\nstatus changed to 'in' : {\"value3\": \"\", \"value2\": \"5\", \"value1\": \"in\"}\n<Response [200]>\n距離(cm): 54.9 > 10 , 回数: 1 / 3\n距離(cm): 55.2 > 10 , 回数: 2 / 3\n距離(cm): 55.3 > 10 , 回数: 3 / 3\n- ステータスが 'out'(何も物体がない) に変化しました\n- Beam 経由でデータを送信します\nstatus changed to 'out' : {\"value3\": \"\", \"value2\": \"9\", \"value1\": \"out\"}\n<Response [200]>\n
\n\n正常にデータが送信されたらレスポンスコードが 200 になります
\n
すると、下記のようなツイートが行われます。
\n\nハッシュタグで検索してみましょう
\nhttps://twitter.com/search?f=tweets&q=%23soracomhandson&src=typd
\n\nおめでとうございます!皆さんは、SORACOM x RaspberryPiハンズオン〜超音波センサー編〜を完了しました。SORACOMを使ったハンズオンを楽しんで頂けましたでしょうか?
\nさらにSORACOMに興味を持っていただいた方は、以下の Getting Startedもご覧ください!
\n\n\nSORACOM Getting Started\nhttps://dev.soracom.io/jp/start/
\n