2019年1月10日にスイッチサイエンスで購入できるようになった、気圧を高精度に計測することのできるオムロン絶対圧センサ2SMPB-02Eを搭載した評価用モジュール(Groveコネクタ付き)を、RaspberryPiに接続して気圧データの可視化をやってみます。

事前準備

必要なモノ

  • Raspberry Pi 3B/3B+
  • microSDカード
  • GrovePi+
  • 2SMPB-02E(絶対圧センサ、Groveコネクタ付き)

だいたい1万5000円くらいで揃えることができます。

※ isaax勉強会では必要なライブラリのインストール時間を節約するためにあらかじめ用意したSDカードを使用します。公式のRaspbianを使って1からセットアップする場合はこの記事の最後にある付録をご覧ください。

必要なアカウント

必要な知識

  • CUIの操作の基礎知識
  • プログラミングの基礎知識

PythonとJavascriptの知識があるとより深く内容を理解できますが、この記事は初心者向けなので無くても大丈夫です。

ハードウェアのセットアップ

GrovePi+とRaspberry PiのUSBが直接触れてしまうと、故障の原因になりますのでマスキングテープを貼りました。

完成形

勉強会に参加している方は、Raspberry Piの電源を入れたらisaaxのスタッフがIPアドレスを調べるのでメモしておいてください。

絶対圧センサの接続確認

Raspberry Pi –> GrovePi+ –> センサーと接続するものが多いので、先にハードウェアの問題がないか確認します。

SSHでRaspberry Piにログインする

ターミナルを開いてssh pi@xx.xx.xx.xx(xx.xx.xx.xxの部分はRaspberryPiのIPアドレス)を実行し、Raspberry Piにログインします。

Windowsの場合はGoogle Chrome拡張機能のSecure Shell Appを使うことをおすすめします。

パスワードを聞かれるので、Raspberry Piのパスワードを入力します。(デフォルトではraspberry

以下は、IPアドレスが192.168.1.37の場合の例です。

$ ssh pi@192.168.1.37
pi@192.168.1.37's password: 
Linux raspberrypi 4.14.79-v7+ #1159 SMP Sun Nov 4 17:50:20 GMT 2018 armv7l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Feb  5 16:23:48 2019 from 10.0.1.11
pi@raspberrypi:~ $

Secure Shell Appの場合は、sshコマンドを入力する代わりにこのようになります。

 

GrovePi+と絶対圧センサの接続を確認する

Raspberry PiとGrovePi+、絶対圧センサはI2C(アイ・スクエア・シー)という方式でシリアル通信をしています。i2cdetectコマンドでセンサが認識できているかを確認できます。RaspberryPi 3を使っている場合のコマンドと実行結果は以下のようになります。

pi@raspberrypi:~ $ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- 04 -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- 56 -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --

04がGrovePi+、56が絶対圧センサのアドレスです。この2つが表示されなかった場合、ハードの接続が正しくできていないのでスタッフのサポートを受けてください。

サンプルプログラムを動かそう

続いて、isaax UGのスタッフが用意したサンプルプログラムを動かしてみましょう。

大まかな手順は、以下のとおりです。

  1. Githubのリポジトリをフォークする
  2. isaaxプロジェクトの作成
  3. isaaxdをRaspberry Piにインストール

isaaxdをRaspberry Piにインストールすると、自動的にアプリケーションが起動し、isaaxのダッシュボード上で動作確認ができます。(そういうサンプルコードを用意しました)

サンプルプログラムのフォーク

Gitリポジトリ(以下、リポジトリ)で管理したプログラムは、isaaxを使ってデバイスに配信されます。今回はあらかじめ用意したサンプルコードをフォークして使います。

リポジトリとは、ファイルやディレクトリの変更履歴を保持したプログラムファイルの集合です。Gitを使って開発する場合、大抵は1つのアプリケーションごとに1リポジトリ作成します(もちろん例外もあります)。

isaaxプロジェクトの作成

前節で自分のGitHubアカウントにフォークしたリポジトリを使ってisaaxにプロジェクトを作成します。isaaxアカウントをまだ作成していない場合はこのタイミングで登録しましょう(GitHubアカウントを使って登録すると便利です)。

isaax ダッシュボード

新規プロジェクト追加 をクリックし新しいプロジェクトを作成します。

isaax 新規プロジェクト追加リポジトリ名のyutashi/envsensor-ambientは、{あなたの名前}/2smpb02e-with-isaaxに書き換えてください

プラットフォームは GitHubを選択し、上記図のように設定し保存ボタンをクリックします。

isaaxdのインストール

作成したプロジェクトにデバイスを登録します。Raspberry Pi側にisaaxdというエージェントをインストールすことで、デバイス登録が完了します。

isaaxdはRaspberry Piなどのデバイス上で動作するソフトウェアです。isaaxクラウドとの通信とユーザーアプリケーションの管理を担っています。
isaaxdとはより引用

プロジェクトの作成後、このような画面が表示されます。

プロジェクトトークンはデバイスの認証を行うのに必要となります。インストールスクリプトはそのトークンを引数としてisaaxdのインストールをワンコマンド実行するためのスクリプトです。下側のインストールスクリプトの文字列をコピーしてください。

コピーしたコマンドはラズベリーパイ上で実行します。WindowsならSecure Shell App、macやLinuxならTerminalを使ってラズパイにSSH接続しましょう。

ユーザー名はpi、初期パスワードはraspberryです。

Raspberry Piのログ

上図のようにisaaxd installation completeが表示されればインストール成功です。

先ほどフォークしたリポジトリのプログラムがRaspberry Piに配信され、自動的にアプリケーションを起動してデータの収集をはじめました。

動作の確認

サンプルコードは、絶対圧センサから気圧と温度を取得し、その値を標準出力するシンプルなスクリプトです。isaaxdはこのアプリケーションの標準出力と、標準エラー出力を監視してクラウドにログデータとして送信します。

isaaxのダッシュボードに戻り、登録したデバイスの状態を確認しましょう。

isaax クラスター

プロジェクトトークンのモーダルを閉じ、DEFAULTクラスターをクリックします。

クラスターはIsaaxにおいてデバイスをグルーピングします。1つのプロジェクトに対して複数のクラスターを作成でき、それぞれのクラスターは料金プランに応じたデバイスを登録できます。ただし、1つのデバイスが登録できるクラスターは1つまでです。
プロジェクトとクラスターより

isaax クラスターページ

クラスターページを開くと「最近のデバイス」に先ほど登録したデバイスが表示されます。「バージョン」はインストールされているisaaxdのバージョンを、「リビジョン」はインストールされているアプリケーションのコミットID(Gitで作成した履歴ごとに付与されるID)をそれぞれ示しています。

デバイスをクリックしましょう。

こちらがデバイスの詳細ページです。

画面左側には、デバイスに割り当てられているローカルIPアドレスの確認やアプリケーションの起動・停止などの機能を備えています。

画面右側で、インストールしたアプリケーションのログを確認できます。ラズベリーパイが期待する動作をしないときなどはこちらにエラーログが上がっている可能性が高いので確認しましょう。

うまく動いている場合は、気圧と温度が表示されています。

センサーを手で包んで温度変化が起きるか確認たり、センサーの位置を上下に動かして気圧の変化が起きるか確認してみましょう。

プログラムを変更してデータを可視化しよう

続いて、アプリケーションの更新方法について説明します。本日の勉強会はこの節をクリアすることが目標です。

Raspberry Piからログアウトし、PC上で先ほどフォークしたリポジトリのisaax.jsonを編集します。

編集方法は主に2つあります。

  • GitHubのリポジトリをローカルPCにクローンし、編集してPushする
  • GitHubのウェブサイト上で直接編集する

今回は簡単な後者の方法で編集します。

コラム

今回の方法は簡単なのですが、複数ファイルを変更したり、変更回数が多くなる場合は非常に手間がかかります。好みのエディターが使えないため、エラーにも気づきにくくなります。

前者の方法は初心者にとっては難易度は上がりますが、複数のファイルを同時にpushし変更記録をスッキリさせたり、エディターのエラー検出機能を使えばpushするまでに間違いに気がつき簡単に修正できます。実際の開発現場ではこの方法を使います。

変更前の状態を確認

これから行うのは、アプリケーションが動いていないことを確認する作業です。エラーが起きることが前提なので慌てないでください。

ブラウザの新しいタブを開きアドレスバーに<Raspberry PiのIPアドレス>:5000を打ち込みます。

何も表示されませんね?何も表示されないことが確認できたら成功です。

今から、このアドレスにセンサーデータを表示するようにアプリケーションを変更します。

isaax.jsonの修正

isaax.jsonを編集しましょう。

鉛筆アイコンをクリックすると編集可能な状態になるので、isaax.jsonの9行目のstartスクリプトの内容を以下のように変更します。

{
    "name": "2SMPB02E with isaax",
    "version": "0.0.1",
    "description": "",
    "author": "tomotomo",
    "license": "MIT Lisence",
    "language": "Python",
    "scripts": {
        "start": "python3 -u flask_app.py"
    }
}

画面下方の「Commit changes」ボタンをクリックして保存ます。(正確にはコミットです!)

数秒待ったのち、ブラウザで先ほど何も表示されなかった画面<Raspberry PiのIPアドレス>:5000にアクセスします。

気圧データらしきものが表示されましたね。ですが値はずっと1です。今は実際のデータではなくダミーデータを表示しています。

flask_app.pyの修正

それでは、実際のデータを表示するように修正します。flask_app.pyの21行目を削除し、22行目のコメントを外し下記のコードにし保存します。(正確にはコミットです!)

@app.route('/sensor')
def cpu():
    press, temp = sensor.readData()
    return jsonify(temperature=round(temp,2), pressure=round(press,2))

するとisaaxがGitHub上の変更を検知して、自動的に最新のアプリケーションをRaspberry Piに配信します。

では三度、ブラウザで先ほどの画面<Raspberry PiのIPアドレス>:5000にアクセスします。

気圧データのグラフが表示されたでしょうか?

うまくできない方は、完成形のコードをご確認ください。

このようにisaaxを使えば、デバイスがネットワークに繋がっていれば、遠隔でもデバイスのアプリケーションを容易に更新することが可能です。たとえそのデバイスが、オフィスの外や外国にあっても同じように更新することができます。

時間に余裕がある方は…

勉強会の内容は以上ですが、時間がある方は下記課題に取り組んでみましょう。

課題1. データの取得間隔を変更する

最初の状態は3000ミリ秒毎にデータを取得するようになっているので、static/script.jsを編集して1秒間隔にしたり、10秒間隔にしてみましょう。

農場のような実際のIoTの現場ではそこまで頻繁にデータを取得する必要がないので、5分に一度など通信頻度を制限することで、通信費を抑える工夫をします。

課題2. 温度をデータを表示する

static/script.jsを編集すると、気圧データの代わりに温度データを取得することができます。

実装例

こちらに実装例を用意しました。参考にしてください。

課題3. クラウドサービスを使って可視化する

データをクラウドに送信して、インターネットでどこからでも見えるようにしてみましょう。(難易度高めです。)

使うサービス

過去の勉強会のテキストを参考にしてください。

Ambient Pythonモジュールの使い方は公式ドキュメントをご確認ください。勉強会で配布したSDカードにはAmbient Pythonモジュールがインストール済みです。

https://ambidata.io/refs/python/

付録1. SDカードのセットアップ

勉強会で使用したOSはRaspbian Stretch Liteをベースに作成しました。下記ページよりダウンロードしてください。

Raspbian – ダウンロードページ

サンプルコードを動作させるには下記の手順に習ってRaspberry Piの設定をしてください。

GrovePi+の設定

$ sudo curl -kL dexterindustries.com/update_grovepi | bash
$ sudo raspi-config
I2CとSPIを有効にする
$ sudo reboot

Pythonライブラリのインストール

matplotlibsmbus2をインストールします。

$ pip3 install matplotlib
$ pip3 install smbus2

matplotlibモジュールは今回の勉強会では使用しませんでしたが、sample_gui_2smpb_02e.pyのサンプルを実行するのに必要です。

Ambientを使う場合にはambientモジュールもインストールします。

$ pip install git+https://github.com/AmbientDataInc/ambient-python-lib.git

事後学習のために

isaaxについてより深く知るためには、公式のドキュメントを読んだり、コミュニティで質問してみましょう。

無料の勉強会も開催しているので、ハンズオンしたい方はこちらにもご参加ください。

本格的にIoTの開発を学びたい場合は、有料の講座もご利用ください。

SNSでもIoTに関する情報を発信しています。フォローお願いします。


Tomoyuki Sugita

Chief Product Officer of XSHELL Inc.

Leave a Reply

Your email address will not be published. Required fields are marked *