田んぼIoT in 2018 その3

今回は SORACOM Advent Calendar 2018 19日目の投稿も兼ねています

当初の予想通り、話が長くなってしまって今回で3回目の投稿になります。

ウィルドの豊田です。こんにちは。

現在ウィルドで取り組んでいる田んぼIoTの1年を振り返った記事を書いています。超大作なので何回かに分けて投稿してます。

過去の記事はこちらから
田んぼIoT in 2018 その1
田んぼIoT in 2018 その2

前回は実際に田んぼで長期間稼働させるための課題と解決までの試行錯誤について書きました。

今回は、もう少し脱線(?)して、課題ではないけれど大変だったこと(主にWioLTE関連)編として書きたいと思います。


過去の記事でも書いていますが、田んぼIoTプロジェクトの目的となる「田んぼの温度を計測し、その結果をサーバーに蓄積させることができる」要件を満たすハードとして、WioLTE JP Versionを選定しました。

WioLTE(ワイオ エルティーイー)とは

Seeed社が開発しているマイコンモジュール。
Groveコネクタを搭載してるので、センサー類の接続がとても簡単。
nano SIMを挿入することで、携帯電話回線を利用した通信を行うことが可能。

今回は株式会社SORACOMのIoT向けSIM「Air SIM」を利用しました。


C言語が書けない(読めない)と大変だよ事件

のっけから、そもそもの話になってしまうんですけども。

WioLTEを動作させるには、もちろんプログラミングが必要です。
WioLTEのプログラミングには、IDE(統合開発環境)が利用できます。

統合開発環境とは、ソフトウェアの開発において用いられるエディタ、コンパイラ、リンカ、デバッガ、その他の支援ツールなどを統合・統一化した開発環境のことである。

Weblio辞書「統合開発環境」より抜粋

難しい単語が並んでますが、、、ざっくり言うとこれがないと開発ができないってことです。
WioLTEはオープンソースハードウェアマイコンとして有名なArduinoのIDEを利用できますので、これをパソコンにインストールしてプログラミングするわけです。

プログラミングにはC言語(厳密には”Arduino言語”として一部拡張されています)を使います。
つまりC言語を書けないと本格的なプログラミングは難しいです。

※もちろんサンプルプログラムなどが付属しているので、それをつなぎ合わせたりするだけで最低限の動作は可能(それでも読むスキルは必要)ですが、改造する場合はやはり最低限の知識は必要になります。

私自身は、かつて仕事でC言語の業務に携わったこともあり、(昔のことなので忘れている部分はありますが)プログラムを書くことができました…大変だった…

IoTに興味がある人へのハードルを上げるつもりは無いんですが、必要最低限のC言語に関する知識は必要になりますので、プログラミング未経験の方は注意が必要です。
(詳しい人からは細かいツッコミがあるかもしれませんが、かなり簡単にまとめてますのでご了承ください)

最初から堅い話になってしまいました。すみません。


D20番ポートはそのままだと電力供給されない事件

気を取り直して行きましょう。
タイトルでネタバレしてますけどね(笑)

悪戦苦闘しながらも温度を計測するためのサンプルプログラムを書いたので、早速温度を計測するところまできました。

温度計測にはDS18B20という防水タイプのデジタル温度センサーを使用しました。

この温度計をD38番ポートとD20番ポートに差し込んで…

スイッチオン!

…んー??D20番ポートの温度計だけ計測できません。

D38番ポートに接続した温度計は正常に温度計測できているようです。
温度計を入れ替えても相変わらずD20番ポート側は正常に動作してくれません。

どうやら、原因は温度計ではなくWioLTE側にありそう…

WioLTEのライブラリ周りをいろいろ調べた結果、D38番ポート以外は電力供給するための宣言をプログラムに明記しないといけないそうです。

これをプログラムの中で実行することで、無事D20番ポートでも正常に温度が計測できるようになりました!

公式ドキュメントを読むのは大事ですね。。。


SDカードどこに挿すの?事件

正直こっ恥ずかしいミスだったんですが、いい思い出なので書きます。

今回はWioLTEで温度を計測して、携帯電話回線を使ってサーバーに温度を送信する仕組みなんですが、

何かしらの原因でサーバーにデータが送信できなかった場合の保険(バックアップ)の仕組みを考える必要がありました。

WioLTEにはmicroSDカードスロットが搭載されているので、計測データをサーバーに送る処理とは別で、SDカードにも温度を書き込んでおくことで、データの消失対策ができると考えたんです。

俺マジ天才じゃね?(盛大な振りです

と思いながら手元のmicroSDを差し込もうと思ったところで事件は起きたんです。

SDカードスロットどこ???

本体を見回しても、SIM用のスロットしか見つかりません。
2枚目の写真の左下にスロットらしきものがありますが、ここはSIMを挿すところなので違います。(盛大な振りです

これではSDカードが挿せないので、当初考えていたSDカードへのデータ蓄積ができないことになってしまいます。これは困りました。

最終的には外付けのSDカードシールドを買ってきて、接続しようと試みる事態に。

そんな時、ふとSeeedさんのWioLTEハードウェア仕様を見ていたら、ある文字が目に飛び込んできました。

TFカード (2 in 1 socket)

Seeed WioLTEハードウェアwiki

TFカード(=microSDカード)2 in 1socket…???

その時嫌な予感がしました。
恐怖に震えながらWioLTEのSIM用ソケットをよーーーーーーく見てみると…

あああ!!!震えてしまって写真がッ!!!!

ありました。SDカードスロット(笑)
なんとSIMとの2階建て構造とは想定外でした。

よーく見れば、ちゃんと本体にも書いてある始末…

やっぱり、公式ドキュメント(略


USBケーブル選定は大事だよ事件

(他にもたくさんドラマがありましたが一気に飛ばして…)紆余曲折ありながらも諸々の課題をクリアして、とうとう田んぼに設置するところまで来ました。

設置に際し、電源(バッテリー)とWioLTEが物理的に少し離れた場所になりそうだったので、USB延長ケーブル(某有名メーカー品)を用意していきました。

田んぼの中で設置作業を進め、バッテリーから延長ケーブルを経由してWioLTEを接続させます。

これで万事うまく行くと思ってたんですが、ここに来て何故かWioLTEが起動しなくなる事態に。
もう少し厳密には、起動しようとするけど電力(電圧?)が足りずに落ちてしまっているように見えます。

問題を切り分けるために、一度延長ケーブルを取っ払って(無理やりWioLTEをバッテリーの近くに持ってきて)起動したところ、正常に稼働しました。

どうやら延長ケーブルに問題がありそうな感じ。
ただ、その当時は何が原因なのかハッキリと特定できず、とりあえず延長ケーブルを使わないように配置を工夫することで問題を回避しました。

後日、Seeedさんの公式ハードウェア仕様を閲覧していた時に、こんな一文が。

USBケーブルの抵抗が大きい場合、LTEモジュール電源をONしたときに再起動してしまう事象が発生しています。

Seeed WioLTEハードウェアwiki

どうやら、延長ケーブル(結構長いタイプ)を使ったために、バッテリーからWioLTEまでの電気抵抗が増大し、WioLTEに十分な電力が届かず起動失敗してしまったようです。(最新モデルではこの問題は解消されているようです)


最後に

今回は、過去2回の記事よりも長くなりました(汗)
もっと細かいことを上げれば、まだまだネタはありそうですが(私の体力と時間の限界で)今回はこの辺にしたいと思います。

次回は(まだあるのか!)田んぼで稼働させたプログラムをmruby/cで動かそうと試行錯誤したお話を書く予定です。
多分これで最後かな?