電流センサーObnizでセンサーデーターを取得しAmbientに送るまた面白いIoT端末が登場しました。「Obniz(オブナイズ)」です。今回はObnizで環境センサーを制御し、センサーデーターを取得してAmbientに送り、可視化します。64ドットの小型ディスプレイを搭載したボードマイコンです。特徴の一つは12本のIOピンです。各ピンの使い方はプログラムで設定でき、それぞれのピンには1Aまで電流を流すことができます。ショートした場合の保護回路も組み込まれています。これにより、センサーだけでなく、ステップモーターなどのデバイスも直接接続できます。一つの特徴はプログラミングです。Obnizはプログラムをブラウザー(の動作しているPC)やサーバーで動かし、PCやサーバーからObnizに接続されたセンサーなどのデバイスを制御します。充実したJavascriptのプログラミング環境が提供されています。WebページのJavascriptからObnizを制御でき、例えばWebページ上のボタンでObnizにつなげたLEDをon/offするなどの制御が可能になっています。Web系のエンジニアの方がIoTを始めるには最適な端末ですし、IoTの教育やプロトタイピングにも非常に適しています。ライブラリーも、温度、距離などの各種センサーやディスプレイ、サーボモーターなどを制御するものが多数用意されており、これを使うことで簡単にIoT端末のプロトタイプを動かすことができます。全体の構成Obnizに温湿度・気圧センサーのBME280をつないでセンサー端末にします。Piで動作させ、5分に1回センサーデーターを取得し、Ambientに送信します。端末の準備Obnizの初期設定からプログラミングまではクイックスタートのページに丁寧に書かれているので、これに沿って初期設定と動作確認をおこなってください。今回、BME280モジュールはスイッチサイエンスのものを使いました。このモジュールにはI2C通信のSCLとSDA(基板上ではSCKとSDIと表記)にプルアップ抵抗が搭載されていません。Obnizなどで使われているマイコンのESP32はプログラムでプルアップする機能があるのでそれを使えば問題ありませんが、ObnizのBME280ライブラリーの説明では、外部抵抗でプルアップすることが推奨されているので、それに従いました。写真のように「両方長いピンヘッダー」を使ってObnizをブレッドボードにつなぎ、BME280とプルアップ抵抗(4.7kΩ)もブレッドボードにつなぎます。Piをサーバーにして、そこでNode.jsのプログラムを動かし、Obnizを制御します。Node.jsのバージョンはv10.6.0を使いました。PiのNode.jsを最新版にしてください。Pi上のコマンド実行です。initでNode.jsを使う環境を作り、obnizとAmbientのnode.jsライブラリーをインストールします。Ambientのライブラリーはambient-libです。ambientというライブラリーがありますが、別物なので注意してください。Pi上で動かし、ObnizとBME280の接続を確認します。Obnizサイト上のBME280のサンプルプログラムとは、BME280を逆向きに接続しています。obniz.wired()のピン番号がサンプルプログラムと違っているので、ご注意ください。今回はいろいろな都合でObnizサイトのサンプルと逆向きにBME280を接続したのですが、そのような場合でもIOピンの設定をプログラムで変更できるので、非常に便利です。このプログラムを動かして、次のように温度、湿度、気圧が表示されれば、ObnizとBME280はちゃんと接続されています。この時Obnizのディスプレイには、上の写真にあるように各IOピンがどのように設定されたかが表示されます。これを見ることでプログラムの設定が正しいかを確認できます。いった工夫も動作確認のためには便利です。}次にBME280から取得したデーターをAmbientに送ります。Ambientのユーザー登録や基本的な使い方はAmbientのチュートリアルをご覧ください。プログラムは次のようになります。このプログラムもobniz.wired()のピン番号がサンプルプログラムと違っているので、ご注意ください。8行目からのget_data_send()がBME280のデーターを取得し、Ambientに送信する関数です。BME280のデーターを取得する時にawaitで同期をとっているので、関数にasyncをつけています。25行目からのsetInterval()で300秒(5分)ごとにget_data_send()を呼んでいます。setInterval()は指定した時間経過した後に指定した処理を実行し、それを繰り返します。経過時間を5分と指定すると5分後に1回目の処理を実行します。処理がうまくいっているか5分経過しないと分からないのは不便なので、24行目でsestInterval()の前にget_data_send()を1回呼んでいます。このプログラムを動かすと、5分毎に温度、湿度、気圧の値をコンソールに出力し、Ambientにも送信して、Ambientで可視化されます。Piからログアウトしてもプログラムが終了しないようにできます。&まとめObnizはObnizクラウドというサービスが用意されています。1台ずつにクラウドの利用ライセンスがついていて、クラウドを利用することができます。Obnizクラウドを使うと、プログラムをクラウド上で管理したり、公開することができます。サーバーレスイベントと言ってWebhookや決められた時刻などの条件でプログラムを起動する仕組みも提供されています。いった仕組みを使うことで、比較的簡単に定期的に動作するようなアプリケーションが作れます。対応するセンサーライブラリーも随時追加されています。簡単にIoTのアイデアを具体化して検証できる端末の一つとして期待できます。