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

HummingBoardでGPIO,I2C,SPIを使う

  (4) HummingBoardのI2Cに温度センサーをつなぎ、データをグラフ表示する 

 前回は、HummingBoardにWiringXを載せて、WiringXのAPIコマンドでGPIOの制御の検証をしました。”LEDチカ”まではこれでできるようになりました。併せてPythonでの制御もまもなくできそうです。今回は、GPIOと同じコネクタ上にあるSPIを使って、LCDモジュールを接続して表示をさせてみる検証を行ってみます。HummingBoardを装置に組み込んで、その装置の設定や状態の表示に使うというような用途が一番もっともらしいでしょう。小ぶりなもののほうが実際の用途に合っていそうです。


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 拡張ボードとブレッドボードを用いています。

GPIO拡張ボードコネクタ ボードに挿したところに信号名が読めて使い勝手が良い
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秒ごとに温度が表示されます。


 

[Webサーバのインストール]


測定した温度をPC、タブレット端末、スマートフォン等のブラウザからグラフとしてみられるように

Apache WebサーバとPHPをインストールしましょう。

(1) Apache2のインストール

# apt-get -y install apache2

 

 


(2) PHPのインストール

# apt-get -y install php5

 

 


これで、HummingBoardがWebサーバになりました。


 

[ グラフ表示の準備]


次に、Webサーバ上で動くグラフ表示コンテンツを作成します。

その前に、温度を計測して、その結果をCSVファイルに追記していくPythonスクリプトadt7410-2.pyを作成します。

グラフ表示コンテンツは、そのCSV1ファイルを取り込んで折れ線グラフを生成します。

 

(1) 測定した温度をCSVファイルに追記していくPythonスクリプトadt7410-2.pyを/root/adt7410の下に作成します

 

adt7410-2.pyの中身は下のように記述します。この例では10分ごとに”時刻”,”温度”を/var/www/adt7410/temp.csvファイルに追記していきます。

#!/usr/bin/python

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

import smbus

import time

import datetime

i2c = smbus.SMBus(2)

address = 0x48

filepath = '/var/www/adt7410/temp.csv'

 

while True:

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

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

    if(temp >= 4096):

        temp -= 8192

 

    tnow = datetime.datetime.now()

    tstr = tnow.strftime("%Y/%m/%d %H:%M")

     

    f = open(filepath, 'a')

    f.write(tstr)

    f.write(',')

    f.write(str(temp / 16.0))

    f.write('\n')

    f.close()

 

    time.sleep(600)

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(2) Ajax機能を簡単に使えるjQueryをダウンロードします

 

母艦のPCでダウンロードしてSDにコピーしましょう。

https://jquery.com/download/ からjquery-2.1.3.min.jsファイルをダウンロードします。

このファイルをSD上に /var/www/adt7410ディレクトリを作成して、そこにコピーしておきます。

(3) Javascriptでグラフ表示ができる機能をもつパッケージをダウンロードします。

同様に http://www.chartjs.org/ からChart.min.jsファイルをダウンロードして、SD上の/var/www/adt7410ディレクトリにコピーしておきます。

(4) グラフ表示を行うHTMLファイルline.htmlをSD上の/var/www/adt7410に作成します。ファイルの中身は下のように記述します。

<!doctype html>

<html>

    <head>

        <title>Temperature Chart</title>

        <script src="Chart.min.js"></script>

        <script src="jquery-2.1.3.min.js"></script>

    </head>

    <body>

        <div style="width:90%">

            <div>

                <canvas id="canvas" height="400" width="640"></canvas>

            </div>

        </div>

 

 

    <script>

    var lineChartData = {

        labels : [],

        datasets : [

            {

                label: "Temperature",

                fillColor : "rgba(151,187,205,0.2)",

                strokeColor : "rgba(151,187,205,1)",

                pointColor : "rgba(151,187,205,1)",

                pointStrokeColor : "#fff",

                pointHighlightFill : "#fff",

                pointHighlightStroke : "rgba(151,187,205,1)",

                data : []

            }

        ]

    }

 

    window.onload = function(){

 

        $.ajax({

        type: "POST",

        url: 'templist.php',

        data: '',

        dataType: "text",

        contentType: 'application/x-www-form-urlencoded;charset=UTF-8',

        success: getTemplistCB,

        error: errorCB

        });

 

    }

    function getTemplistCB(data, dataType) {

        var tlines = data.split("\n");

        var i;

        var labels = [];

        var tdata = [];

        for(i = 0; i < tlines.length; i++) {

            var tline = tlines[i].split(",");

            if(tline && tline[0] && tline[1]) {

                labels[i] = tline[0];

                tdata[i] = tline[1];

            }

            else {

                break;

            }

        }

         

        lineChartData["labels"] = labels;

        lineChartData["datasets"][0]["data"] = tdata;

 

        var ctx = document.getElementById("canvas").getContext("2d");

        window.myLine = new Chart(ctx).Line(lineChartData, {

            responsive: true

        });

 

    }

 

    function errorCB(XMLHttpRequest, textStatus, errorThrown) {

        alert("ERROR="+textStatus);

    }

 

    </script>

    </body>

 

</html>

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(5) 測定温度リストを読み出すPHPファイルtemplist.phpをSD上の/var/www/adt7410に作成します。ファイルの中身は下のように記述します。

<?php

function fc_getTempList() {

    $filename = "/var/www/adt7410/temp.csv";

    $astring = "";

    if(!file_exists($filename)) {

        fc_response_text("");       

        return;

    }

    $file = fopen($filename, "r") or die("OPEN error $filename");

    flock($file, LOCK_EX);

    while($data = fread($file, 2048)) {

        $astring .= $data;

    }

    flock($file, LOCK_UN);

    fclose($file);

 

    fc_response_text($astring); 

}

 

function fc_response_text($message) {

    // response

    apache_setenv('no-gzip', '1');

    header("Content-type: text/html; charset=utf-8");

    header("Content-Length: ".strlen($message));

    echo $message;

}

 

fc_getTempList();

 

?>

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

以上で、全てのファイルの準備ができました。ファイル構成は次のようになります。

/root/adt7410/adt7410-2.py

 

/var/www/adt7410/Chart.min.js 

                 jquery-2.1.3.min.js

                 line.html

 

                 templist.php            

 

 



 

 

 

 

 

[ 温度測定実行&グラフ表示]


それでは、いよいよ温度測定を始めましょう。

rootでログインして、次のようにコマンドを実行します。

# python /root/adt7410/adt7410-2.py

 

 


これで10分おきに温度を計測して結果をCSVファイルに出力します。

1時間くらい経ったら、PC等のブラウザからHummingBoardにアクセスします。


http://192.168.10.41/adt7410/line.html


192.168.10.41の部分は、実際にHummingBoardに割り当てられたIPアドレスに置き換えてください。

下のような時刻の経過と温度の変化を表す折れ線グラフが表示されます。



Webから簡単にみることができます
Webから簡単にみることができます

  • 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
  • 英徳社について
  • 問い合わせ
閉じる