SORACOM IoT レシピ:Raspberry Piで作る会議リマインダー
レシピ難易度:★★★☆☆
リモートワークをするときに何かと役に立つのが「リマインダー」。しかし、どの予定もリマインドされてしまうと逆に大切な予定を見逃してしまうということも。そこで、Googleカレンダーと連携し、重要度の高い予定だけを通知する「会議リマインダー」をIoTを駆使して製作します。
全体構成
使用するSORACOMサービス
デモ動画
本レシピを行うのに必要な時間、概算費用
本レシピは以下の通りです。
- 必要な時間: 約90分
- 概算費用: 約28,000円
※ 概算費用: ハードウェアや SORACOM を始めとした各種サービスの概ねの費用 (送料などの付帯費用や無料枠適用は考慮しないものとしています)
このコンテンツの進め方
上から内容を読み進めながら作業を行っていきます。また左サイドに追従する目次からページ内の移動が可能です。
本コンテンツは現状のままで提供され、株式会社ソラコムは、誤りがないことの保証を含め、明示であると黙示であるとを問わず、本コンテンツの記載内容につき、いかなる種類の表明も保証も行いません。
掲載情報の閲覧及び利用により、利用者自身、もしくは第三者が被った損害に対して、直接的、間接的を問わず、株式会社ソラコムは責任を負いかねます。
本コンテンツを実践する中で用意された機器、利用されたサービスについてのご質問は、それぞれの機器やサービスの提供元にお問い合わせをお願いします。機器やサービスの仕様は、本コンテンツ作成当時のものです。
株式会社ソラコムが提供する機器・サービスについてのご質問は、 https://soracom.jp/contact/ をご確認の上、適切な窓口へのお問い合わせをお願いします。機器・サービスご利用前の導入相談は https://soracom.jp/contact/contactsales/ に、機器・サービスご利用開始後のサポートは、SORACOMユーザーコンソール内のサポートサイトから「リクエストを送信」(要ログイン)にてお問い合わせください。
Copyright (c) 2021 SORACOM, INC.
準備
本レシピを行うためには以下のものをご用意下さい。
ハードウェア
品名 | 数量 | 価格 | 備考 |
---|---|---|---|
SORACOM Onyx LTE USB ドングル SC-QGLC4-C1 | 1 | 11,968円 | 1,100円分のSORACOMクーポンを含みます。SIMは同梱されていないため、別途お求めください。サイズはnanoSIMです。 |
SORACOM 特定地域向け IoT SIM (plan-D ナノサイズ) | 1 | 903.1円 | SORACOM Onyx LTE USBドングルが対応しているSIMサイズはナノサイズです。金額は1枚あたりで、決済時に商品の合計金額が1円未満の金額については繰り上げとなります。 |
Raspberry Pi 4(2GB) スターターキット | 1 | 11,300円 | スターターキットには以下のものが含まれています。それぞれを個別に準備しても構いません。 Raspberry Pi本体、MicroSDHCカード 32GB、5.1V/3A Type-C 電源、Micro HDMI to HDMIケーブル、ヒートシンク |
ePaper | 1 | 約3,300円 | リマインド時刻とイベント開始時刻を表示します。 |
スピーカー | 1 | 約500円 | 音声を流すために利用します。 |
3.5mm オーディオケーブル | 1 | ― | Raspberry Pi とスピーカーを接続するために利用します。 |
パソコン | 1 | ― | インターネット接続が可能でサイトへの接続が自由であること。Google Chrome 等の最新ブラウザーが利用可能な事。 |
※ 金額はレシピ作成時となります。金額は税込み・送料別です。その他は参考価格となります。
その他必要なもの
必要なもの | 費用 | 作成方法など |
SORACOM アカウント | 無料※ | SORACOM アカウントの作成 (JP) |
Wi-Fiの設定 | ― | Raspberry Pi OSの設定を行うために利用します。Wi-FiのアクセスポイントをまたいでSSHアクセスができる事を確認してください。(Web画面による認証が入るようなアクセスポイントは利用できません) |
Google アカウント | 無料※ | Google カレンダーを利用するためのアカウントです。無い場合は新たに作成してください。なお、このアカウントはGoogle Cloudにも紐づけを行います。 |
※ アカウント作成・維持の費用の料金です。
ご購入について
ハードウェアは以下よりご購入いただけます。
- SORACOM Onyx LTE USB ドングル SC-QGLC4-C1
- SORACOM 特定地域向け IoT SIM (plan-D ナノサイズ)
- Raspberry Pi 4(2GB) スターターキット
- Waveshare社製 2.7インチePaper
SORACOM Onyx LTE USBドングルが届いたら
Onyx LTE USBドングルは SIM を挿入することでセルラー通信(LTE-M)を通じて、クラウドと連携できるようになります。そのため、まず GPS マルチユニットに同梱されている SIM を SORACOM へ登録をしましょう。
※ すでに登録済み、もしくは登録済みの別の SIM を利用する場合は次へお進みください。
登録の方法は発注済みの SIM を登録する(JP)をご覧ください。約5分で完了します。
登録が完了すると SIM 管理の一覧に表示されますので、確認ください。
SORACOM の便利な使い方: SIM の「名前」機能
SIM には「名前」を付けることができ、これで整理が可能です。特に複数の SIM (ボタン含む) をお持ちの際には、名前を付けることを強くお勧めいたします。
名前の付け方は SIM への名前の付け方をご覧ください。
SORACOM Onyx LTE USBドングルにSIMを取り付ける
SORACOM Onyx LTE USBドングル(以下、Onyx)の “SIM” と書かれた面をスライドすると、カバーを外すことができます。
SIMを挿入した後、カバーを元に戻します。
OnyxのGetting Startedも併せてご覧ください。
Raspberry Pi OSをmicroSDに書き込む
Raspberry Piを動作させるためには、パソコンでOSイメージをmicroSDに書き込み、それをRaspberry Piにセットします。OSイメージのダウンロードと書き込みには、無償で利用できるソフトウェア Raspberry Pi Imager が便利です。
Raspberry Pi Imager をダウンロードします。
Raspberry Pi のダウンロードページを開き、操作するパソコンの OS に合った Raspberry Pi Imager をダウンロードします。
Raspberry Pi Imager をインストールします。
Windows の場合
ダウンロードした imager.exe を実行し、インストーラーの指示に従ってインストールを完了します。
インストール完了時の “Run Raspberry Pi Imager” はチェックを外した状態で[Finish]をクリックします。
macOS の場合
ダウンロードした imager.dmg を実行し、 Raspberry Pi Imager を Applications (アプリケーション) フォルダへコピーします。
インストールが完了したら、Finder のデバイスに表示されている Raspberry Pi Imager ディスクは不要となります。取出しをしてください。
Raspberry Pi Imager を利用して microSD カードに書き込む
以下の場所にダウンロードされている”Raspberry Pi Imager”を起動します。
Windows | [スタートメニュー]> “Raspberry Pi Imager” |
macOS | [Finder]>[アプリケーション フォルダ]> “Raspberry Pi Imager” |
macOS で初回起動時に「インターネットからダウンロードされたアプリケーションです」のダイアログが表示された場合は[OK]をクリックして進めてください。
[OSを選ぶ]をクリックし[Raspberry Pi OS (other)]>[Raspberry Pi OS Lite (64-bit)]を選択します。
次に[ストレージを選ぶ]をクリックし[Generic MassStorageClass Media]を選択します。
次に右下の歯車マークをクリックし各種設定を行います。
macOSでは「Wifiのパスワードをシステムのキーチェーンから読み取って設定しますか?」というダイアログが出てくる場合があります。[Yes]から情報を入力すると、現在使用しているWi-Fiのパスワードが自動で入力されます。
はじめに[ホスト名][SSHを有効化する][ユーザー名とパスワードを設定する][Wi-Fiを設定する][ロケール設定をする]の5項目にチェックをつけます。
その後、以下のように入力してください。
項目 | 入力する内容 |
---|---|
ホスト名 | 初期設定の通り raspberrypi とします。 |
SSHを有効化する | 「パスワード認証を使う」にチェックを入れます。 |
ユーザー名とパスワードを設定する | [ユーザー名]を pi とします。 [パスワード]はこちらから安全なパスワードを生成し入力します。 ※ユーザー名は自由に設定可能です。パスワードは忘れないようにしてください。 |
Wi-Fiを設定する | [SSID]には Raspberry Pi から接続したいWi-FiのSSIDを入力します。 [パスワード]には、SSIDに対応するパスワードを入力してください。 [Wifiを使う国]は「JP」を選択してください。 ※SSIDの初期値には、パソコンで接続中のWi-FiのSSIDが表示されています。そのまま利用する場合には変更不要です。 |
ロケール設定をする | [タイムゾーン]に自分のお住まいの場所(日本の場合「Asia/Tokyo」) [キーボードレイアウト]に「us」が表示されていることを確認してください。 |
特に職場の Wi-Fi を利用する際には、ネットワーク管理者の了解を取るようにしてください。また、Wi-Fi 接続時に Web ブラウザ等による認証が必要なネットワークは利用できません。
以上の設定が終わったら[保存]をクリックし内容を保存します。
[書き込む]から書き込みを行い、完了したら microSD カードを取り出してください。
Raspberry Piの起動とSSHログイン、Raspberry Pi OSのアップデート
Raspberry Piの電源ON
microSDをRaspberry Piに取り付けます
少し残りますが奥までしっかりと刺さっていれば問題ありません。
Raspberry Pi に ACアダプタを接続
USB-CポートにACアダプタのケーブルを挿すと、電源 ON となります。
この状態で2分程度待つと起動が完了し、macOS もしくは Windows 10 から Raspberry Pi へSSH接続出来るようになります。
※図では他のポートにもケーブルが刺さっていますが、この時点では赤枠のケーブルのみで動作できます。
SSH 接続の方法
Windows の場合
スタートメニューを右クリックして「コマンドプロンプト」を起動します。
⚠設定によっては「PowerShell」となっている場合もありますが、本レシピはどちらでも可能です。以下、コマンドプロンプトとなっている部分をPowerShellに読み替えて実行してください。
コマンドプロンプトで以下のように入力して ssh コマンドを実行し、接続します。
ssh pi@raspberrypi.local
Raspberry Pi Imagerでの設定時にhostnameを変更した方は、それに合わせてraspberrypiの部分を変更してください。
(例:hostnameをsoracompiに変えた場合、ssh pi@soracompi.local
となります)
- Are you sure you want to continue connecting (yes/no)? との問いには yes と入力します。
- pi@raspberrypi.local’s password: との問いには、初期パスワードを入力しEnterキーを押下します(入力したパスワードは画面に表示されないことに注意します)。初期パスワードは Raspberry Pi OS のドキュメント に記載されていますので、それを利用してログインしてください。
ssh: Could not resolve hostname raspberrypi.local と表示された場合
Windows 10の以前の場合(Windows 10 の最新版でない場合も同様)では、同エラーが発生し、接続ができない場合があります。(原因は mDNS という名前解決のシステムが必要です。iTunes をインストールすることで解決します。 また、セキュリティソフトによって通信ブロックがされている場合も考えられます。すべての設定を見直しても通信ができない場合は、PCの管理者にご相談ください。
macOS の場合
[Finder]>[アプリケーション]>[ユーティリティ]>[ターミナル]を起動します。
Spotlight (検索) から “Terminal.app” を探して起動する方法もあります。
Terminal.app で以下のように入力して ssh コマンドを実行し、接続します。
ssh pi@raspberrypi.local
Raspberry Pi Imagerでの設定時にhostnameを変更した方は、それに合わせてraspberrypiの部分を変更してください。
(例:hostnameをsoracompiに変えた場合、ssh pi@soracompi.local
となります)
Raspberry Pi OS のアップデート
以降はRaspberry Pi上での作業となります。Raspberry Pi へ SSH 接続でログインしたあと、Raspberry Pi 側で以下を実行します。
sudo apt update && sudo apt upgrade -y
Raspberry PiにOnyx LTE USBドングルを接続する
Raspberry Piの設定が終わったら、先ほどSIM登録が完了したUSBドングルをRaspberry PiのUSBポートに差し込みます。以下のようにシリアルポートとして認識されていることを確認します。
ls /dev/ttyUSB*
実行例です。
pi@raspberrypi:~ $ ls /dev/ttyUSB* /dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3
パッケージのインストールから 3G/LTE 接続に利用する PPP の設定を一括して行うスクリプトsetup_air.sh
をダウンロードし、実行します。一行ずつ実行してください。
curl -O https://soracom-files.s3.amazonaws.com/setup_air.sh sudo bash setup_air.sh
plan-DUをお持ちの場合
plan-DUはAPNが異なるため setup_air.sh 実行時に
sudo bash setup_air.sh du.soracom.io
と引数に “du.soracom.io” を付けて実行してください。
以下は実行例です。スクリプトが正常に動作すると以下のようなメッセージが出力されます。
pi@raspberrypi:~ $ sudo bash setup_air.sh bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8) --- 1. Check required packages wvdial is not installed! installing wvdial... ... # please ignore message above, as /etc/wvdial.conf will be created soon. ok. --- 2. Patching /lib/systemd/system/ifup@.service ok. --- 3. Generate config files Adding network interface 'wwan0'. Adding udev rules for modem detection. ok. --- 4. Initialize Modem /bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8) ok. Now you are all set. Tips: - When you plug your usb-modem, it will automatically connect. - If you want to disconnect manually or connect again, you can use 'sudo ifdown wwan0' / 'sudo ifup wwan0' commands. - Or you can just execute 'sudo wvdial'.
以上で SORACOM Onyx LTE USB ドングルが初期化され Raspberry Pi が SORACOM 経由でインターネットに接続されるようになりました。OS 再起動時や SORACOM Onyx LTE USB ドングルを接続した際にも自動的に接続されます。
接続を確認する
SORACOM Air による接続の状況を確認します。以下のコマンドをRaspberry Pi上で実行してください。
ping -c 4 pong.soracom.io
実行の結果が以下のように表示されれば、 SORACOM Onyx LTE USB ドングルによるSORACOM Airの接続は成功しています。
$ ping -c 4 pong.soracom.io PING pong.soracom.io (100.127.100.127) 56(84) bytes of data. 64 bytes from 100.127.100.127 (100.127.100.127): icmp_seq=1 ttl=64 time=361 ms 64 bytes from 100.127.100.127 (100.127.100.127): icmp_seq=2 ttl=64 time=341 ms 64 bytes from 100.127.100.127 (100.127.100.127): icmp_seq=3 ttl=64 time=320 ms 64 bytes from 100.127.100.127 (100.127.100.127): icmp_seq=4 ttl=64 time=309 ms
もし “Name or service not known” といった表示になった場合は、SORACOM Onyx LTE USB ドングルによるSORACOM Airの接続が失敗しています。以下の対処を行ってみてください。
- ping コマンドのアドレス “pong.soracom.io” の記述を確認する (pong.soracom.ioです)
- SORACOM Onyxを抜き挿しする (Raspberry Pi の電源はONのままで大丈夫です)
- SORACOM Onyx内のSIMを再度付け直す (この時はRaspberry Pi からは取り外して行ってください)
- SORACOM ユーザーコンソールで当該SIMを明示的に「使用開始」する (操作方法はユーザードキュメントをご覧ください)
また、Raspberry Pi (Raspberry Pi OS) の設定 もご覧ください。
ePaperを設定する
Raspberry Pi OS側のセットアップ
I2Cの設定
Raspberry Pi にログインをしてから、ターミナルに以下のコマンドを1行ずつ入力します。2行目で電源OFFとなります。
sudo raspi-config nonint do_i2c 0 sudo systemctl poweroff
この時点で、一度Raspberry Pi から電源ケーブルを抜いてください。
ePaperをRaspberry Piに接続
Raspberry PiのGPIOにePaperを接続します。
Raspberry Piに直接ドッキングする形でも、横から出ている6本のジャンプワイヤで接続する形でも大丈夫です。写真はジャンプワイヤで接続している様子です。
接続が完了したら、再度電源を入れ、PCからSSH接続します。
ジャンパワイヤで接続する場合は、以下を参考にしてください。
ePaperのピン | Raspberry Pi のピン番号(機能名) |
---|---|
BUSY | 18番(GPIO 24) |
RST | 11番(GPIO 17) |
DC | 22番(GPIO 25) |
CS | 24番(GPIO 8) |
CLK | 23番(GPIO 11) |
DIN | 19番(GPIO 10) |
GND | 20番(GND) |
VCC | 17番(3.3V) |
Googleカレンダーから予定を取得する
今回、Googleカレンダーから予定を取得するにあたってGoogle Cloud Platformを使用する必要があります。
Google Cloud Platformでの作業:認証情報の作成と取得
Google Cloud Platformにアクセスして、以下の手順を進めてください。
はじめてGCPを使う場合(アカウントを所持している場合はスキップ可)
Terms of Serviceにチェックを入れてAGREE AND CONTINUEで次へ進みます。(Email updatesは任意)
プロジェクトを作成
▼マークをクリック>[新しいプロジェクト]をクリック
- Project name
- Organization
- Location
を入力・選択し[CREATE]のボタンをクリック
Google Calendar APIを有効にする
左のタブから[APIとサービス]をクリック>[ダッシュボード]をクリック
[+ APIとサービスの有効化]をクリック
検索窓に「Calendar」と入力し、Google Calendar APIをクリック
その後、[有効にする]ボタンをクリックして有効化
Credentials(認証情報)を作成
GoogleカレンダーにアクセスするにはCredentialsが必要となります。
左のタブから[認証情報]をクリック>[+認証情報を作成]>[OAuthクライアントID]
[同意画面を設定]をクリック
[内部]を選択して[作成]ボタンをクリック
各種項目を入力して[保存して次へ]をクリック(ここでの入力内容は今後特に影響しません)
[スコープを追加または削除]ボタンをクリックし、表れたタブの中から
- API: Google Calendar API
- 範囲: …/auth/calendar.readonly
- ユーザー向けの説明: Google カレンダーを使用してアクセスできるすべてのカレンダーの参照、ダウンロード
にチェックを入れ[更新]ボタンをクリック
[保存して次へ]>[ダッシュボードに戻る]でOAuth同意画面の作成作業が完了
もう一度[認証情報]をクリック>[+認証情報を作成]をクリックした後、[OAuthクライアントID]へと進み、[アプリケーションの種類]で「テレビと入力が限られたデバイス」、[名前]を任意(ここではRaspberry Pi)に設定し、[作成]ボタンをクリックします。
ダッシュボードに戻ったら、右にあるダウンロードボタンをクリックすると “client_secret_XXX-YYY.apps.googleusercontent.com.json” (XXXやYYYは環境によって変化します) という認証情報が入ったファイルがダウンロードできます。このファイルは漏洩しないよう保管してください。
以上でGoogle Cloud Platform での作業は終了です。
SORACOMでの作業:認証情報をメタデータサービスへ保管する
SORACOMでは「SORACOM Air メタデータサービス」を有効化し、その中に Google Cloud Platformで入手した認証情報が入ったファイルの内容を保管します。
SORACOM Air メタデータサービスを利用する背景
認証情報が入ったファイルはRaspberry Piに保存をして、APIの呼び出し時に利用するのが一般的です。
しかし、この認証情報が入ったファイルはmicroSDという誰でも読み取れるメディアに保管されるため、例えばmicroSDをRaspberry Piから抜き取って認証情報が入ったファイルをコピーすることで、不正なAPI呼び出しが可能となってしまいます。
不特定多数がアクセスできてしまうような場において、microSDに認証情報を保管するのは危険が伴います。この「現場での読み取り」を防ぐには、メディアの暗号化やセキュアエレメントへの保存といった方法がありますが、手間や費用がかかります。
SORACOMでは、SIM自体が「通信回線の認証ができるセキュアエレメント」という特性を活かし、通信回線に紐づいた情報を「タグ」や「ユーザーデータ」とった形で、読み書きできる仕組みがあります。これが「SORACOM Air メタデータサービス」です。
このサービスを利用すると、「その通信回線でアクセスした時のみ得られるデータ」をSORACOM上に設定できます。ここにGoogle Cloud Platformで入手した、認証情報が入ったファイルの内容を保管しておくことで、通信を利用して認証情報を得ることができます。Raspberry PiのmicroSDに認証情報が入ったファイルを保存する必要が無くなるわけです。
SIMグループの作成と所属
まずはグループの作成と、作成したグループへ SIM を所属させる事から始めます。
グループとは?
SORACOM サービスのほとんどがグループという単位に対して設定するようになっています。SORACOM Harvest Data 等、SORACOM サービスのほとんどが SIM に直接設定をするのではなくグループに設定をします。そして、SIM をグループに所属させることで SORACOM サービスが利用できるという間接的な仕組みです。
グループを作成してから SIM を所属させる方法の他、グループの作成と SIM の所属を同時に行う方法もあります。本レシピでは後者の「同時に行う」手順で進めていきます。
SORACOM ユーザーコンソールにログインした後[Menu]>[SIM 管理]とクリックして SIM 管理画面を開きます。
メタデータの設定を行いたいSIMにチェックを付け、[操作]>[所属グループ変更]とクリックします。
「SIMの所属グループ変更」ダイアログでは、[新しい所属グループ]をクリックした後[新しいグループを作成…]をクリックします。
「グループ作成」ダイアログでは、グループ名を以下のように設定します。
設定名 | 内容 | 備考や注意事項 |
---|---|---|
グループ名 | metadata | 名前は任意です。設定内容や目的がわかりやすい名称が良いでしょう。 |
設定したら[グループ作成]をクリックします。
「SIM の所属グループ変更」ダイアログに戻ってきます。ここでは “新しい所属グループ” が、先ほど設定したグループ名になっていることを確認してください。
確認したら[グループ変更]をクリックします。
SIM管理画面に戻ります。ここでSIMの “グループ” に、先ほど設定したグループ名が表示されていればグループへの所属が完了となります。
SORACOM Air メタデータサービスの設定
先ほど設定したSIMグループにSORACOM Air メタデータサービスの設定を行います。
SIM管理画面から、設定したいSIMの “グループ” をクリックします。
「SIM グループ」の画面では、[SORACOM Air for Cellular 設定]をクリックします。すると設定項目が展開します。その中で以下の設定を行います。
設定名 | 内容 | 備考や注意事項 |
---|---|---|
メタデータサービス | ON | クリックすると ON になります。 |
ユーザーデータ | (備考参照) | Google Cloud Platformから得た “client_secret_XXX-YYY.apps.googleusercontent.com.json” の内容を入力します。 |
JSON 形式で保存 | ON | このチェックを付けると、サーバー側からの応答に “Content-Type: application/json” が付与されるようになります。 |
最後に[保存]をクリックしてください。 “Soracom Air 設定が更新されました” と表示されたら設定完了です。
設定を確認する
SORACOM Air メタデータの設定状況を確認します。以下のコマンドをRaspberry Pi上で実行してください。
curl -w "\n" metadata.soracom.io/v1/userdata
curlコマンドの ‘-w “\n”‘ の意味は?
curlコマンドの出力結果の末尾に ‘-w’ で指定した文字を付与する指示です。'”\n”‘ は改行文字を表しているため、curlコマンドの出力結果に改行を加えることになります。これはcurlで取得した結果に改行文字がついていない場合で、コンソールの表示の乱れを防ぐものです。
実行の結果が以下のようにユーザーデータに設定したJSONの内容が表示されれば、SORACOM Air メタデータサービスの設定は成功しています。
$ curl -w "\n" metadata.soracom.io/v1/userdata {"installed":{"client_id":"257376685887-etgsitu0i3kt9dcmt9ut8jm1h02sbai1.apps.googleusercontent.com","project_id":"iot-recipe-meeting-calendar0","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://oauth2.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_secret":"dOTWyAa7fpJd36Ay3kIv0loZ","redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"]}}
もしJSONが表示されない場合は、以下の対処を行ってみてください。
- “Could not resolve host” と表示された : SORACOM OnyxをRaspberry Piに接続してください。メタデータサービスにはSORACOM AirのLTE通信経由でのみアクセス可能です。
- “You are not allowed to access Metadata Server.” と表示された : メタデータサービスの設定が OFF となっています。[保存]のし忘れにご注意ください。
以上でSORACOM Air メタデータサービスの設定は終了です。
Raspberry Piでの作業:Raspberry PiからGoogle Calendar APIにアクセスできるようにする
ライブラリや必要ファイルの取得と、初回の一時認証情報(以下、トークン)を取得する
Raspberry Piで利用するライブラリやファイルはGitHubにまとめましたので、こちらを利用します。
git cloneやpip installはインターネットからファイルを取得するため通信が発生します。SORACOM Onyxを接続した状態ですと、SORACOM Airを経由した通信が発生する可能性があるため、通信量を確実に抑制した場合はRapsberry PiからSORACOM Onyxを取り外した状態で git clone や pip instal を行ってください。なお、SORACOM OnyxはRaspberry Piの電源がONの状態で抜き差しが可能です。
実行時ディレクトリや venv 環境下での実行
今回利用するPythonコードは実行時ディレクトリの依存は無いため、git cloneの実行ディレクトリは不問です。また、Pythonの実行環境仮想化 “venv” 環境下での実行も可能です。
git clone https://github.com/ma2shita/iot-meeting-reminder.git cd iot-meeting-reminder pip install -r requirements.txt curl -L -O https://soundeffect-lab.info/sound/anime/mp3/tirin1.mp3 curl -L -O https://soundeffect-lab.info/sound/button/mp3/decision47.mp3
続いて、Google Calendar API にアクセスするための初回のトークンの取得を行います。
ここからはSORACOM Air メタデータサービスに保管した情報を利用するため、SORACOM OnyxをRapsberry Piに取り付けてください。
以下をRaspberry Pi上で実行してください。
phthon3 quickstart.py
実行の結果、以下のように表示されます。
$ phthon3 quickstart.py ## Get the credential from Metadata(userdata) instead of credentials.json Please visit this URL to authorize this application: https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=257376685887-etgsitu0i3kt9dcmt9ut8jm1h02sbai1.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar.readonly&state=1vtRaUXfE2J60JT8je9eR7ncdoh48q&prompt=consent&access_type=offline Enter the authorization code:
ここでは「”Please visit this URL …” で提示されたURLへアクセスする」「ブラウザ上でGoogle Calendar APIへのアクセスを許可する」「許可時に発行されたコードを “Enter the authorization code:” に入力する」という作業を行います。
まず “Please visit this URL … ” で提示されたURLを、ブラウザのアドレスバーに入力して開いてください。
以下のようにアクセス許可を求めるページが表示されたら[許可]をクリックします。
このページの前にGoogleアカウントを選択するページが表示されたら、Google Calendar APIにアクセスしたいアカウントを選択してください。
「ログイン」というページにコードが表示されます。このコードをRaspberry Pi側の “Enter the authorized code:” へ入力し、最後にEnterを入力します。
コードの入力が成功すると “Getting the upcoming 10 events” という表示と共に、Google カレンダーから最新の10件の予定が表示されます。
ブラウザの「ログイン」のページは、この時点で閉じてしまって構いません。
トークンは quickstart.py と同じディレクトリにある token.json に格納されます。token.jsonを削除する、もしくはファイル内の “expiry” に指定された時間までにトークンを更新できなかった時は、再度 quickstart.py を利用してトークンを手動で取得します。
“expiry” で指定された時間内であれば、トークンを利用してトークン自身の有効期限を更新できます。
以上で、ライブラリや必要ファイルの取得と、初回のトークンの取得は終了です。
リマインダーを実行する
最後にスピーカーを接続し、リマインダーを動かしてみます。
Raspberry Piとスピーカーを接続する
以下のように、Raspberry Pi とスピーカーを接続してください。
リマインダーを実行する
以下をRaspberry Pi上で実行してください。
phthon3 main.py
実行の結果、以下のように表示されます。
$ python3 main.py pygame 1.9.4.post1 Hello from the pygame community. https://www.pygame.org/contribute.html INFO:googleapiclient.discovery_cache:file_cache is only supported with oauth2client<4.0.0 DEBUG:googleapiclient.discovery:URL being requested: GET https://www.googleapis.com/calendar/v3/calendars/primary/events?timeMin=2021-04-28T08%3A23%3A23.179603Z&maxResults=2&singleEvents=true&orderBy=startTime&alt=json 最新の予定: 2021-04-28 17:30:00+09:00 表示テスト用イベント 次の予定: なし INFO:root:init and Clear DEBUG:root:e-Paper busy DEBUG:root:e-Paper busy release DEBUG:root:e-Paper busy DEBUG:root:e-Paper busy release DEBUG:root:Horizontal DEBUG:root:e-Paper busy DEBUG:root:e-Paper busy release RemindTime < dt_now < StartTime
Raspberry PiのePaperには以下のように表示され、また、スピーカーからも音が出ます。(音量にはご注意ください)
実行時に IOError:[Errno 2] No such file or directory と表示された場合は?
ePaperを接続しているSPIについて、アドレスが異なる場合(製品ロットによって)があります。epdconfig.pyの74行目をself.SPI.open(0, 1)と変更してから実行してください。
予定の取得頻度は?
最後の予定の終了時刻から次回の情報取得タイミングが設定されるため、予定の量に連動することになります。
あとかたづけと注意事項
本レシピでは費用がかかるサービスを利用しています。
本項をよく読み、必要な操作や解除作業を行うようにして、想定外の費用が掛からないようにしてください。
費用について
ここで記載している金額は全て税込み、送料別となります。
SORACOM プラットフォームの利用料金
サービス/機能 | 料金 |
SORACOM Air (plan-D) | 基本料: 11円/日、通信料: 0.22円~/MB(今回の利用であれば 3~5MB/日 以内で収まる範囲) SORACOM Air メタデータサービスは無料のサービスです。 |
※ 費用詳細はリンク先をご確認ください。
無料利用枠について
SORACOM サービスでは一部サービスにおいて無料枠が設定されています。たとえば SORACOM Air for セルラーであればアカウント毎で30円/月の通信分です。料金詳細に「無料利用枠」として掲載されていますので、ご確認ください。
Raspberry Pi の 電源 を OFF
電源を OFF にする場合は SSH リモートログインした後、Raspberry Pi 側で以下を実行します。
sudo systemctl poweroff
この後 1分ほど経過して緑色 LED の点滅が止んだら microUSB ケーブルを抜きます。これで OFF にできます。