備忘録

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

RaspberryPiでArduino温度センサをリモート確認

ここまでで、RaspberryPiに以下の機能が実装されました
・WiringPiライブラリにて、RaspberryPiのGPIO、UARTの制御が可能
・DRCファームのArduinoをUARTにて制御が可能
・Apache&PHPにて、Webによる情報公開が可能

ここから、
『RaspberryPiからUARTで接続されたArduinoの温度センサ値を読み取って、Webで公開する』
という感じにつなげてみます。

1.前準備
 ArduinoにDRCファームを書き込む
 DRCファームは以下の場所で、ダウンロードしてArduinoに書き込みます
 projects.drogon.net/drogon-remote-control/drc-downloads/
 このときDRCファームは、"a0”でADC0-A0ピンの値を出すように修正しときます
 詳しくは↓
 nanicananica.blog.fc2.com/blog-entry-26.html

2.回路を組む
 前々回の回路をそのまま利用します
 raspi_Arduino_temp.png

3.RasberryPiのプログラム作成 (Arduino-温度センサの値を読み取る)
 DRCファームの書かれたArduinoは、RaspberryPiからのコマンドで制御できます。
 ArduinoのA0ピンに接続された温度センサの値を読み取るようなプログラムを組みます。
 
- - - - - - - - - - - DRC_analogRead - - - - - - - - - -
#include <stdio.h>
#include <string.h>
#include <time.h>

#include <wiringPi.h>
#include <wiringSerial.h>

int main(){
    FILE *fp;
    int Tdata;
    int ret;
   
    /* シリアルポート オープン*/
    int fd = serialOpen("/dev/ttyAMA0",115200);
    if(fd<0){
        printf("can not open serialport");
    }
   
    while(1){
        /* 受信処理 */
        while(serialDataAvail(fd)){
            /* データの取得時間を取得~ファイル書き出し */
            ret = f_fileout_time();
           
            /* センサの値を取得~ファイル書き出し */
            Tdata = ( (serialGetchar(fd)&0xFF) << 8);
            Tdata += serialGetchar(fd);
            printf("%04x\n" , Tdata );
            ret = f_fileout(Tdata);
            fflush(stdout);
        }
       
        /* 送信処理 */
        serialPuts(fd,"a0");
       
        delay(1000);
    }
   
    return;
}

/* センサから取得した値を書き込む(改行付き) */
int f_fileout(int argc){
    FILE *fp;
    if((fp = fopen("/var/tmp/temperture.txt","a")) == NULL){
        return(-2);
    }
   
    fprintf(fp,"%04x\n",argc);
    fclose(fp);
   
    return 0;
}

/* 現在の時刻を書き込む(改行抜き) */
int f_fileout_time(void){
    time_t pv_time;
    struct tm *tm_data;
    char *str_time;
   
    time(&pv_time);
    tm_data = localtime(&pv_time);
    str_time = asctime(tm_data);
    int i = (int)strlen(str_time);
    str_time[i-1] = '\t';
    str_time[i] = '\0';
   
    FILE *fp;
    if((fp = fopen("/var/www/temperture.txt","a")) == NULL){
        return(-3);
    }
    printf("%s",str_time);
    fprintf(fp,"%s", str_time );
    fclose(fp);
   
    return 0;
}
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

$ sudo gcc -o DRC_analogRead_003 DRC_analogRead_003.c -I/usr/local/include -L/usr/local/lib -lwiringPi
ちなみに/var/www/に温度取得ログを吐き出すので、このディレクトリも
$ sudo chmod 777 /var/www/ などで、書込み可能としておきます

4.温度センサーログを取得して、Webで公開するためのPHPプログラム
 下のPHPコードを書いて、Webサーバのドキュメントルートにおきます
- - - - - - - - - temp.php - - - - - - - - - - - - - - -
<?php
    print("温度情報を読み込みます<br>");
   
    $last_lines = file("./temperture.txt",FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
    print( array_pop($last_lines)."<br>" );
    $temp = strstr( array_pop($last_lines) , "\t" );
    print( $temp );
    $num16 = intval($temp,16);
   
    print("今の部屋の温度は、". $num16 . "(16)です<br>");
    $num10 = intval($num16);
   
    $temp_int = (($num10 * 4.9)-424)/6.25;
    print("今の部屋の温度は、". $temp_int . "です");
?>

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# きたねぇ・・・いつか書き直す

5.動作確認
センサー値取得のコードを実行
$ ./DRC_anarogRead_003
# 今後これをサービス化したいです

この後に、RaspberryPiにブラウザでアクセスすると・・・
http://192.168.0.***/temp.php

- - - - - - - - - - 結果 - - - - - - - - - - - - - -
温度情報を読み込みます
Tue May 21 18:28:30 2013 0074
0074今の部屋の温度は、116(16)です
今の部屋の温度は、23.104です
- - - - - - - - - - - - - - - - - - - - - - - - - - - -

ということで、温度センサーをWebから取得できるようになりました。
今後は、温度センサー値取得処理のサービス化や
温度のグラフ化をやっていきたいですね

スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2013/05/22(水) 00:00:01|
  2. Raspberry Pi
  3. | トラックバック:0
  4. | コメント:0
<<RaspberryPiでSPI通信 | ホーム | RaspberryPiにPHPをインストール>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://nanicananica.blog.fc2.com/tb.php/28-548b1ba8
この記事にトラックバックする(FC2ブログユーザー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。