はじめに
こんにちは。@o_chicchi こと、おおぐちさとるです。
本記事は、SORACOM Advent Calendar 2019 の 12月10日(火)の記事です。昨日の SORACOM explorer 2019 のスタッフの木澤さんからの記事を受けて、翌日とは、なかなかのプレッシャーであります。
内容ですが、先日の SORACOM UG explorer 2019 で、LTさせていただいた内容の紹介と、その裏話、盛り込めなかった内容について解説します。
LT資料
登壇資料を以下にアップロードしました。天気の子とパトレイバーは見逃して下さいw
SORACOM UG explorer 2019
先に、SORACOM UG explorer 2019 の話を。
私は、このアドベントカレンダーの昨日の記事を書かれた木澤さんからの強いお誘いもあって、LTも含めて参加させていただきました。
今回の最大の収穫は、SORACOM 玉川社長の人柄が会社にとても出ているということを知れたことかもしれません。
懇親会のビールを自ら配って回るとか、政治家になるべきだというネタに対して、ちゃんと返してくれるところとか、この人あっての会社だなと。
あんまり言いたくないですが…弊社と違いすぎます(苦笑)
SORACOM UG explorer 2019 のスタッフの皆様、登壇者の皆様、SORACOM社員の皆様、お疲れさまでした。おかげさまで楽しく過ごさせていただきました。
気圧測定の話
台風19号の時に気圧を測った話をさせていただきました。M5Stack に、3Gボードを付けて測定をしました。
既にお気づきかと思いますが、台風の時は、外出なんてできないので、3Gボードを使う必然性が、ここには全くありません(笑) Wi-Fi でいいのです。
ただ、以前、デモ用に作成した環境がありまして、それを使いたかったのです。ちなみに、Amazon Connect を使って値を電話で聞けるようになっています。
Youtube に、当時、作成したデモ動画があるので、是非みてみてください。
この時の環境は、WioLTE と、M5Stack の両方が選べるようになっています。ただ、WioLTEは、別のテストに使いたかったので、現在は、改造されていて、M5Stack のデータしか聞けません。
ただ、測定して出てきた結果はとても興味深かったです。他の低気圧とか台風でも測ったことがあるのですが、961ヘクトパスカルという極めて低い値になった記憶ないですね。私は半分、値を見ながら気持ち悪くて寝てました。
時刻表示の話
データ測定している中で、こんなアラートが飛んできているという話をしました。
これは、この時だけでなく、以前から気になっていました。WioLTE では、時刻を簡単にとることができたので、10分に1回の測定データを送る仕様に変えていたのですが、M5Stack は、この 3G モデムを使った場合、いろいろ試行錯誤していたのですが、時刻が標準の仕組みでは取れなかったんですよね。
なんとなく理由は分かっているのですが、細かいところまでは解析できてないので、うまくは説明できないです(苦笑)
ただ、3G(UMTS)モデムである以上は、携帯電話網に時刻の情報があるということになっています。なので、網から取りたいなと思ったのが、もともとのきっかけです。
なので、TinyGSM のライブラリのリポジトリを見ていて、他のモデムのソースコードを眺めていてコメントに気づきました。
// This is only supported on SIMxxx series // String gsmLoc = modem.getGsmLocation(); // DBG("GSM location:", gsmLoc); // This is only supported on SIMxxx series // String gsmTime = modem.getGSMDateTime(DATE_TIME); // DBG("GSM Time:", gsmTime); // String gsmDate = modem.getGSMDateTime(DATE_DATE); // DBG("GSM Date:", gsmDate);
なので、ATコマンドを直接叩けないか調べていて、サンプルコードに、AT_Debug があることに気づいたので、これでいろいろ調べてみました。
LTでは省略していますが、改造点について解説すると、#include に以下を追加すること、
#include <driver/dac.h> #include <M5Stack.h>
あと、Serial が被っているので以下のようにします。
// Set serial for debug console (to the Serial Monitor, speed 115200) #define SerialMon Serial // Set serial for AT commands (to the module) // Use Hardware Serial on Mega, Leonardo, Micro #define SerialAT Serial2
このくらいで使えると思います。
実は、資料上では、ATコマンド、4つくらいしか取り上げていませんが、他にもいろいろ叩いてみています。データシート見て叩くと面白いです。
ソースコードの改造ですが、TinyGSMのライブラリのsrcのディレクトリにある TinyGsmClientUBLOX.h を書き換えています。
以下の部分を、496行目あたりに追加しています。
/* * Time functions */ String getGSMDateTime(TinyGSMDateTimeFormat format) { sendAT(GF("+CCLK?")); if (waitResponse(2000L, GF(GSM_NL "+CCLK: \"")) != 1) { return ""; } String res; switch(format) { case DATE_FULL: res = stream.readStringUntil('"'); break; case DATE_TIME: streamSkipUntil(','); res = stream.readStringUntil('+'); break; case DATE_DATE: res = stream.readStringUntil(','); break; } return res; }
こうすることで、以下のようにすると日付、時刻がとれるようになります。
String gsmDate = modem.getGSMDateTime(DATE_DATE); String gsmTime = modem.getGSMDateTime(DATE_TIME);
私のプログラムの中では、TimeLib.h を使って内部の時計を補正して使っています。
そのようにすると、以下のような表示ができる状況になりました。
最後に
重ね重ねですが、登壇する機会をいただけたことに感謝申し上げます。
最近、違うことにも取り組んでいたりするので、またアウトプットできたらと思います。
それから、いつも一緒に遊んでくれる皆さんにも感謝です。ここ、2〜3年くらいの僕にとってのネットワークの広がり方は大きくて、今まで何やっていたんだろうというくらいのスピードです。
また、本記事を見て、#SORACOM や、M5Stack に少しでも興味持ってくれたら幸いです。
明日は、 IoTLT vol.56 @SCSK、SORACOM UG explorer 2019 での LT の MVP とも言える 樋口さんの「モテモテスイッチの作り方」です。
これを作ると、あなたもモテるようになりますよ!!
(樋口くん、がんばれー)
コメント