SolidRun AMD HAILO Marvell NXP
Renesas TexasInstruments
  • ホーム
  • アーティクル★
  • 製品情報
  • イベント情報
  • Petapico コラム
  • ダイレクトショップ
  • DL
  • 英徳社について
  • 問い合わせ

HummingBoardでGPIO,I2C,SPIを使う

  (6) HummingBoardをクラウドサービスMyThingsにつなぐ 

 IoTが話題になっています。HummingBoardは、IoTのような用途に向いています。さっそくセンサーのデータをクラウドにあげてみることを検証してみます。サーバー側のソフトで集計をして、Webからのアクセスでそのデータをグラフにして表示をみたり、ある温度を超えるとMyThingsからお知らせが届くということを検証してみます。

今回はMyThings-IDCFクラウドのサービスを使います。クラウドサービスを提供するIDCFのサイトでは、「標準」の開発環境となるボードを用意していますが、HummingBoardでも同じことができることを見ていきます。


 以前のコラムで、温度センサーの値をHummingBoardのI2Cポートから読み出し、HummingBoard内にWebサーバーを組み込んで、温度データをWeb上でグラフを表示することを紹介しています。この時は、HummingBoardをプライベートクラウドのように扱い、クライアントであるWebサーバーから直接読みだすような仕組みとしていたわけですが、今回は、データをIDCFのサーバーに一旦あげて、そのサーバーへクライアントからアクセスするようになるわけです。何故クラウドにデータを上げるといいか、というところがIoTの一番大事なところです。データとしてあげておくと、以前のコラムで紹介したようにグラフ表示としてしか情報を提供できないのに対し、クラウドからデータとして取ってこれれば、違うアプリケーションからそのデータが利用できるということです。それが、統計データとしてや、同様のデータを全国レベルで集計することもあり得ることでしょう。


 今回の例では、IDCFが始めたばかりのサービスでもあり、すぐにインタフェースを含めて変更が入ることでしょう。なので、この記事もすぐに時代遅れになってしまうことでしょう。ですが今はこのアイデアを感じていただければ幸いです。


ADT7410使用 高精度・高分解能 I2C・16Bit 温度センサモジュール
ADT7410使用 高精度・高分解能 I2C・16Bit 温度センサモジュール

[温度センサーモジュール]

 

 今回使用した温度センサーは「ADT7410使用 高精度・高分解能 I2C・16Bit 温度センサモジュール」です。株式会社秋月電子通商から購入することができます。

◆主な仕様

・温度精度:±0.5℃@-40℃~+105℃(2.7V~3.6V)

      ±0.4℃@-40℃~+105℃(3.0V)

・温度分解能:0.0078℃(16ビット設定時)/0.0625℃(13ビット設定時)

・温度校正および温度補正、直線性補正等は不要

・動作/測定温度範囲: -55℃~+150℃

・電圧範囲:DC+2.7V~+5.5V

・I2C互換インターフェース

・消費電流(@VDD=3.3V、TA=+25℃)

   ノーマル・モード:210μA(typ)

   パワーセービング・モード(1サンプル/1秒):46μA(typ)

   シャットダウン・モード:2μA(typ)

・基板サイズ:15×11ミリ

・基板上の入出力端子:4個(VDD,GND,SCL,SDA)

[配線]


 HumminBoardとの接続表です。今回の実験では、前回までと同じGPIO 拡張ボードとブレッドボードを用いています。

I2C Signal 対応表 

GPIO Signal Comparison                    
GPIO Signal pin# HB Signal Sensor-PIN   GPIO Signal pin# HB Signal Sensor-PIN
7 CE1 26 ECSPI2_SS1     17 P0 11 GPIO 73  
8 CE0 24 ECSPI2_SS0     18 P1 12 GPIO 72  
11 SCLK 23 SPI_SCLK     27(21) P2 13 GPIO 71  
9 MISO 21 SPI_MISO     22 P3 15 GPIO 10  
10 MOSI 19 SPI_MOSI     23 P4 16 GPIO 194*  
15 RXD 10 UART RX     24 P5 18 GPIO 195*  
14 TXD 8 UART TX     25 P6 22 GPIO 67  
3(1) SCL 5 I2C_SCL CLOCK   4 P7 7 GPIO 1  
2(0) SDA 3 I2C_SDA DATA     GND      
                     
  GND 1   GND            
  3.3V 25   VCC            

[OS]

 

 HummingBoardのGPIOの検証に使っているDebianを用います。v2.6(2015年2月時点で最新)以降のものを使ってください。(SPIのバグフィックスが入っているので重要)

http://www.igorpecovnik.com/2014/08/19/cubox-i-hummingboard-debian-sd-image/

http://mirror.igorpecovnik.com/Cubox-i_Debian_2.6_wheezy_3.14.14.zip

 Debian v2.6 / 5.2.2015 

 Kernel 3.14.14

 Fixed bug in SPI. Display works now

 XBMC upgrade ready / tested.


 

温度センサーが認識できるかチェックします


# i2cdetect -y 2

 

 

 

下のように、ADT7410のアドレスが 0x48 し表示されればOKです。

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f

00: -- -- -- -- -- -- -- -- -- -- -- -- --

10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --

50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

 

70: -- -- -- -- -- -- -- --

 

 


 

 

 

 

 

 

 

 

 

 

温度を計測するために、下のようなPythonのファイルを作成します

 

/root/adt7410ディレクトリを生成して、ファイル名はadt7410.pyでセーブしてください。

(母艦のPCでadt7410.pyファイルを作成して、SDをマウントしてコピーする方が簡単でよいでしょう。以下、様々なテキスト・ファイルの作成・設置については同様に考えてください。)


#!/usr/bin/python

# -*- coding: utf-8 -*-

import smbus

import time

i2c = smbus.SMBus(2)

address = 0x48

while True:

    block = i2c.read_i2c_block_data(address, 0x00, 12)

    temp = (block[0] << 8 | block[1]) >> 3

    if(temp >= 4096):

        temp -= 8192

    print("Temperature:%6.2f" % (temp / 16.0))

    time.sleep(10)

 


 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

温度測定をしてみます

 

次のようにPythonスクリプトを実行してください。

# python /root/adt7410/adt7410.py

 

 


 10秒ごとに温度が表示されます。

ここまでは、前回のものを繰り返して掲載しました。

[IDCFクラウドサービスの準備]


IDCFサイトに解説があるのでこれに従ってサーバーの準備をします。「IDCF」チャンネルは、IoTのためのメッセージングプラットフォームのMeshbluを使いやすくするためにDocker Composeにまとめられています。

Ayla, EVRYTHNG, Electric Imp, ARRAYENT などの商用クラウドサービスと比べると、MQTT、RESTインタフェースを利用するところでは同じですが、サービス項目・コンセプトが異なっていて、リアルなシステムを組むには物足りないものとなる。ここでは、クラウド利用の手始めと考えてやってみましょう。サイトのマニュアルに従ってサーバーを作り、インストールスクリプトを走らせます。

http://www.idcf.jp/cloud/iot/detail01.html#post01

「Part2プログラミング

Raspberry Pi 2からBME280環境センサのデータ送信」

の部分がHummingBoardに置き換わるだけで、他は全く同じ手順となります。


 IDCFの自分で構築したサーバーにアクセスするために、ポートの設定などを行います。セキュリティを考えてアクセス可能なIPを制限するなど工夫します。

[IDCFクラウドサービスにつなぐ]

 

まず最初は、IDCFのページで参考に書かれていることを踏襲して動作の確認を検証してみます。これまでの手順でMeshbluサーバーの構築とuuidが登録されています。この登録してある10個のuuidから以下の3つを次のような割り当てをしてみます。


trigger-1 : HummingBoardからADT7410の温度データを送信するuuid

action-1 : Dockerホスト上で、MQTT subscribeするuuid

action-2 : Browserで、WebSocket subscribeするuuid


それぞれのtokenとuuidをlistコマンドから確認します。

$ cd ~/iot_apps/meshblu-compose

$ docker-compose run --rm iotutil list

 

> iotutil@0.0.1 start /app

> node app.js "list"

 

 

│ keyword   │ token    │ uuid                                 │

│ trigger-1 │ 3879e7e2 │ 278ffd74-e413-4419-aa95-2841a761876b │

...

│ action-1  │ e9a80da4 │ f596c777-a620-4c06-983d-fabb833b753b │

│ action-2  │ 65d6646b │ 553b9d58-a3cf-4e3c-8843-e4be9abbb280 │

 

...

 

 


 

 

 

 

 

 

 

 

 

 

 

 

trigger-1からaction-2へメッセージが送信できるように設定します。


$ docker-compose run --rm iotutil whiten -- -f trigger-1 -t action-2


> iotutil@0.0.1 start /app

 

> node app.js "whiten" "-f" "trigger-1" "-t" "action-2"

 

 


 

 

 

trigger-1 can send message to action-2

Dockerホストに別のシェルを開きmosquitto_subコマンド使います。action-2のuuidをトピック名に指定して、action-2のuuidへのメッセージをsubscribeします。


$ mosquitto_sub \

    -h localhost \

    -p 1883  \

    -t  f596c777-a620-4c06-983d-fabb833b753b   \

    -u  f596c777-a620-4c06-983d-fabb833b753b   \

    -P e9a80da4  \

    -d

 

 


 

 

 

 

 

 

uuidとtoken情報を入力します。IDCF_CHANNEL_URLのアドレスは環境にあわせて設定します。


TRIGGER_1_UUID (trigger-1のuuid) : 278ffd74-e413-4419-aa95-2841a761876b

TRIGGER_1_TOKEN (trigger-1のtoken) : 3879e7e2

ACTION_1_UUID (action-1のuuid) : f596c777-a620-4c06-983d-fabb833b753b

ACTION_2_UUID (action-2のuuid) : 553b9d58-a3cf-4e3c-8843-e4be9abbb280


~/python_apps/ADT7410-meshblu-py/config.py

conf = {

     "IDCF_CHANNEL_URL": "210-140-66-232.jp-east.compute.idcfcloud.com",

     "TRIGGER_1_UUID": "278ffd74-e413-4419-aa95-2841a761876b",

     "TRIGGER_1_TOKEN": "3879e7e2",

     "ACTION_1_UUID": "f596c777-a620-4c06-983d-fabb833b753b",

     "ACTION_2_UUID": "553b9d58-a3cf-4e3c-8843-e4be9abbb280"

}

 

 


 

 

 

 

 

 

 

それでは、先のプログラムをクラウドへデータを送り込むように改造をしてみます。上のconfig.pyと同じディレクトリに置きます。

 

def main():

    client = mqtt.Client(client_id='',clean_session=True, protocol=mqtt.MQTTv311)

    client.username_pw_set("xxxxxxx","yyyyyyy")

    client.connect("MESUBLU_BROKER", 1883, 60)

    client.on_publish = on_publish

    

    while True:

        block = i2c.read_i2c_block_data(address, 0x00, 12)

        temp = (block[0] << 8 | block[1]) >> 3

        if(temp >= 4096):

        temp -= 8192

        sensing_value = temp / 16.0

        sensing_message = json.dumps({"devices":"sensing-dev",

                                     "payload":{"temperature":sensing_value}

                                     })

                                     client.publish("message",sensing_message)

            message = json.dumps({"devices":

                              [conf["ACTION_1_UUID"],

                              conf["ACTION_2_UUID"]],

                             "payload": retval})

            print(message)

            client.publish("message",message)

                                         sleep(10)

if __name__ == '__main__':

    main()

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 上のプログラムをADT7410_publish.pyとして、root権限で実行します。10秒間隔で指定した2つのuuidにメッセージをpublishします。

コンソールにmessageが同時に表示されて確認できます。

 [Dockerホストで確認]


Dockerホストのmosquitto_subが起動しているシェルに戻ります。HummingBoardから環境データのメッセージをsubscribeできました。

[MyThingsを連携して使う]

 

MyThingsアプリは、「トリガー」に対して「アクション」を組み合わせることのできるアプリです。入力はチャネルと呼ばれ、好きなチャンネルを選択して、自分の好みの組み合せを作成することができます。天気がよかったらiPhoneで通知を受ける。お買い得な情報が更新されたら逃さず知ることができる。

プログラマ的にいうとif ~ then ~ の組み合わせを作るということです。

「IDCFチャンネル」を利用して、IoTプロトタイプ開発をすることができます。

自作ガジェットとチャンネルを組み合わせることに応用ができます。


以下のコマンドを実行して認証tokenを確認します。この例ではmeshblu_auth_token列のb8c55ad8が認証tokenになります。


このuuidとtokenを認証用のHTTPヘッダに使います。以下のように{idcf channel url}/data/{uuid}のURLにデータをPOSTします。REST APIでHTTPS通信は自己署名の証明書を使っているため、curlコマンドの場合は--insecureフラグが必要です。HTTP通信も使えます。

 



# ~/python_apps/w1therm-mqtt-publish.py

# -*- coding: utf-8 -*-

import paho.mqtt.client as mqtt

from time import sleep

import json

import smbus

i2c = smbus.SMBus(2)

address = 0x48


def on_publish(client, userdata, mid):

    print("publish: {0}".format(mid))


def main():

    client = mqtt.Client(client_id='',clean_session=True, protocol=mqtt.MQTTv311)

    client.username_pw_set("xxxxxx","yyyyyyy")

    client.connect("MESUBLU_BROKER", 1883, 60)

    client.on_publish = on_publish

    

    while True:

        block = i2c.read_i2c_block_data(address, 0x00, 12)

        temp = (block[0] << 8 | block[1]) >> 3

        if(temp >= 4096):

        temp -= 8192

        sensing_value = temp / 16.0

        sensing_message = json.dumps({"devices":"sensing-dev",

                                     "payload":{"temperature":sensing_value}

                                     })

                                     client.publish("message",sensing_message)

                                     

                                     if sensing_value > 25.0:

                                         threshold_message = json.dumps({"red":"on"})

                                             client.publish("data",threshold_message)

                                         sleep(10)


if __name__ == '__main__':

    main()


 

 


 

 

 


                                                                   


次はIDCF cloudのトリガーをMyThingsで受けるようにします。

スマホからMyThingsアプリをダウンロードしてきます。

設定で「チャネル一覧」の中に「開発者向け」に「IDCF」があります。IDCFにチャンネルの認証を行うには、IPアドレスと認証tokenを入力して「利用を開始する」。

ホーム画面に戻り、右上の「プラス」をタップして組み合わせを作成します。「トリガー」をタップして『「IDCF」チャンネル』を選択、「条件を満たしたら」をタップし、「trigger-1」を選択し「OK」します。次に「アクション」をタップして「Slack」を承認します。チャットチャンネルの選択と、「IDCF」チャンネルのトリガーが「条件を満たした」ときにSlackに表示されるメッセージを入力し、「OK」をします。最初の組み合わせ作成画面で「作成」します。


 「IDCF」チャンネルのトリガーが「条件を満たした」状態をテストします。「IDCF」チャンネルの仮想マシンにログインして、以下のコマンドを実行します。

 

$ curl -X POST 

  "https://210.140.66.232/data/f547..." 

  --insecure 

  -d 'led=on' 

  --header "meshblu_auth_uuid: xxxx" 

  --header "meshblu_auth_token: xxxxx"

 

 

 

 

 

 

 

 

 

 


  • HomeBridgeとSiriで irMagicianを使う
  • Deep Learning on CuBox-i
  • HummingBoard-GateとMikroBUS クリックボード
  • HummingBoardをクラウドサービスMyThingsにつなぐ
  • Android+ WiFi Mini PCI カード
  • HummingBoard + WiFi Mini PCI カード
  • セキュアな無制限ストレージ ownCloud を CuBox-iで動かす
  • Android Appプログラミング入門
  • CuBox-iで動く各種サーバー
  • DebianをmSataから起動する
  • HummingBoardのaudio jackをAndroidから使ってみる
  • オフィシャル版Android4.4(Kitkat)のroot取得の仕方
  • HummingBoardのI2Cに温度センサーをつなぎデータをグラフ表示する
  • CentOSの兄弟 RedSleeve Linuxでサーバーを作る
  • Cu-Box-i/HBにmjpg-streamerストリーミング配信を載せる
  • SoftEther VPNで外から irMagician を制御してエアコンをつける
  • CuBox-i Androidのroot取得とadbの使い方
  • HummingBoardのSPIでLCDパネルへの表示をする
  • 旧CuBoxのメンテナンス情報について
  • 小型赤外線リモコン irMagician をつなぐ
  • wiringXをインストールする
  • kali linuxでセキュリティスキャンマシンにする
  • Debianでmicro-home-serverを作る(1)
  • 電子工作キットとGPIOピンアサイン
  • ArchLinuxにLXDEデスクトップを載せる
  • CuBox-i/HummingBoardの簡単インストーラー Ignition が登場
  • HummingBoardでUbuntu12.04(Linaro)
  • CuBox-i にUbubtu14.04, LXDEをインストールする
  • SqueezeboxでPandoraを聴こう(2)
  • SqueezeBoxがWebインストーラーになって簡単になりました
  • SqueezeboxでRadikoを聴こう(1)
  • GeeXboXをプレインストールしたCuBox-i1を使いこなす
  • アプリケーションと機種依存関係
  • CuBox-iのKitKat でWiFiのUSBを使えるようにする
  • CuBox-i にタッチパネルをつなぐ(Android Kitkat)
  • CuBox-i にKitKat を載せてみる(ソースからのビルドに挑戦)
  • CuBox-i でUSBのWiFiアダプタを利用する
  • Cubox-i4のFedora20にKDEデスクトップを載せる
  • Cubox-i4をFedora20マシンにする
  • CuBox-iにBluetooth機器接続に成功
  • CuBox-i にOpenELECが登場
  • ZoneMinder までの下準備とインストール
  • Debian 7.0 WheezyをCubox-iにインストールする
  • CuBox-i用のカーネル作成について
  • CuBox-iにUbuntu12.04をインストールする
  • MuBox on CuBox-i インストール基礎入門編
  • mjpg-streamerでストリーミング配信
  • CuBox-i でメディアプレーヤーXbian を楽しむ
  • CuBox-iでSDカードの容量いっぱいにイメージを拡張するには
  • CuBox-i でミュージックサーバーvolumio を試してみる
  • ZoneMinder でできる監視カメラシステムとは
  • GeeXboxをTVのリモコンで操作してみる
  • CuBox-iでradikoを外部スピーカーに流す
  • 基本のシリアル通信環境を整えておく
  • CuBoxにWebカメラを接続してMotionを使おう
  • CuBoxをメディアサーバにする
  • Apache Webサーバ / MySQLデータベース・サーバ / PHP
  • jQueryを使ってスライドショウを作る
  • 今、注目の超小型コンピュータたち(5) CuBoxをメディアプレーヤーにして楽しむ
  • 基本のサーバーを構築してみる
  • 今、注目の超小型コンピュータたち(4) ミュージックサーバーを組んでみた
  • 今、注目の超小型コンピュータたち(3) ミュージックサーバーをt作ってみよう
  • 今、注目の超小型コンピュータたち(6) ミュージックサーバーVoyage MuBox を完成させる
  • プラグコンピュータで「プロの開発」を始めてみませんか(2)
  • プラグコンピュータで「プロの開発」を始めてみませんか(1)
  • スカイプカメラ GTCAMってなんだ?
  • ARMとRaspberry Pi
  • Marvellのプロセッサとプラグコンピュータ
  • 今、注目の超小型コンピュータたち(2) サイネージを作ってみよう
  • 今、注目の超小型コンピュータたち(1) XBMCを載せてみよう

お問合わせフォームはこちら

メールはpetapicoshop@petapico.bizまで

適格請求書発行事業者登録番号のお知らせ


英徳社ホームページはこちら


1 日本国内への配送に適用されます。その他の国についてはこちらをご参照ください
概要 | 利用規約 | 返金条件と返品取消申請書 | 配送/支払い条件 | プライバシーポリシー | サイトマップ
ログイン ログアウト | 編集
  • ホーム
    • ショップからのお得情報
    • CuBox-i Seriesの情報
    • MicroSDの作り方
    • HummingBoard Seriesの情報
    • HummingBoard Edge/Gateの情報
    • IntelSoliPCの情報
    • windows10 IOTの情報
    • ClearFogの情報
    • MacchiatoBinの情報
    • fromSolidRunWebsite
  • アーティクル★
  • 製品情報
  • イベント情報
  • Petapico コラム
    • KODI
    • Cobox-i
    • HummingBoard
    • ソフトウェアTips
    • 外付け
    • カメラ
  • ダイレクトショップ
    • ダイレクトショップ iMX SoC
      • CuBox-Mセット
      • iMX8M Plus
      • iMX8M Plus Mate
      • CuBox-i1 OpenELECWiFi model
      • HummingBoard Pulseセット
      • CuBox-i1 OpenELEC セット
    • WAI WAIセール
      • Sheeva
      • D3
      • SMILE Plug
      • 第1世代CuBox|CuBox-PRO
      • CuBox-i1 セット
    • ダイレクトショップ LX2K
      • LX2160Aファミリー
    • ダイレクトショップ Marvell SoC
      • CEx7 CN9132
      • ClearFog
      • ClearFog Base
      • ClearFog Pro
      • MacchiatoBin Double|Single Shot
      • ClearFog GT 8K
      • MACCHIATObin ClearCloud 8K
      • SolidSense スターターセット
    • ダイレクトショップ intel SoC
    • ダイレクトショップ eRemote
      • eRemote
      • eSensor
    • 12V AC アダプター(PSE対応)
    • CuBox-i1 GeeXboXセット
    • CuBox-i1 OpenELEC+plugin
    • HummingBoard-Gate i1セット
    • HummingBoard-i2eX セット
    • HummingBoard-i4pro セット
    • CuBox-i2 セット
    • CuBox-i2 WiFiセット
    • CuBox-i2eX セット
    • CuBox-i2eX WiFiセット
    • CuBox-i4 Pro セット
    • HummingBoard-i2 セット
    • HummingBoard-i1セット
    • Application microSD Card for CuBox-i
    • Android microSD Card for CuBox-i
    • SolidPC
    • SolidPC SSD 32G
  • DL
    • Media Exposure
  • 英徳社について
  • 問い合わせ
閉じる