Rasberry Pi IoT 事始め

代表の鵜川です。

ちょっと前にまりますが手持ちの温度・湿度センサーの新しいタイプの物が出たので購入してみました。

新しいタイプは−40〜計測できるので冬には氷点下になるアジトでも計測可能なので真面目にデータを

年間通じて取ってみようかと・・・ これ!

ネット上を情報を集めてみるよ個体差も少なく±0.5度で湿度も割と正確な感じです。

と言うわけで週末を迎える前に金曜の夜は好きなアーティストのライブに・・・

名前は michiko さん 月に2回は銀座のPiano Bar で歌ってます。

クリスタルボイスがとても魅力なんです!

http://michiko-website.raindrop.jp/michiko/information.html

で・・・

普通は金曜の夜にアジトに潜入するのですがライブを聴きに行ってしまったので

土曜日の昼にアジト入り。

エアコンつけて取りだめのドラマを見始めたら3秒でお昼寝しちゃいましたw

夕方から友人宅でBBQだったのですが1時間遅刻して参加(苦笑

そして翌朝は、これも購入済みのドローンの野外ファーストフライト!

小さいので少し離れると景色と同化して見失いがちでした ( ^ ^;;;

ちなみにフライト中の動画はこちらから・・・

最近のドローンは性能が良いですね!

ラジコン経験も無い私でも何となく飛ばして着陸させられました。

飛行時間が短いので素晴らしい映像は撮れませんでしたが初フライトは大満足!w

 

さぁ そして趣味のプログラミングは週末しか出来ないのでコツコツと数時間かけて以下のコードをラズパイで・・・

#include 
#include 
#include 
#include 
#include 
main()
{
    float temp, humi;
    char buf[1024];
    char tmp[1024];
    char fileName[1024];
    char macaddr[64];
    char date[32];
    char cmd[1024];

    FILE *fp;
    time_t t;
    struct tm *st;

    // DHT22 から温度・湿度を取得する
    strcpy(cmd, "/home/pi/Adafruit_Python_DHT/Adafruit_DHT/dht22.py");
    if((fp = popen(cmd, "r")) == NULL)
    {   // error
        printf("popen error\n");
        exit(1);
    }

    // コマンドの出力した温度・湿度を取得
    temp = -99.0;
    humi = -99.0;
    while(fgets(buf, sizeof buf -1, fp))
    {
        if (temp == -99.0)
        {
            sscanf(buf, "%s %f\n", &tmp, &temp);
        } else {
            sscanf(buf, "%s %f\n", &tmp, &humi);
        }
    }
    fclose(fp) ;
    //printf("%f %f\n", temp, humi);

    // Rasberry Pi の Wifi デバイスの MAC アドレスを取得
    if((fp =fopen("/sys/class/net/wlan0/address", "r")) == NULL)
    {
        printf("popen error\n");
        exit(1);
    }
    fgets(macaddr, sizeof macaddr - 1, fp);
    macaddr[17] = 0x00;

    // 時間を取得
    time(&t);
    // ローカルタイムに変換
    st = localtime(&t);
    // 20180823000102 西暦月日時分秒形式に整形
    sprintf(date, "%4d%02d%02d%02d%02d%02d", st->tm_year+1900
                                    , st->tm_mon + 1
                                    , st->tm_mday
                                    , st->tm_hour
                                    , st->tm_min
                                    , st->tm_sec) ;

    // 画像を保存するファイル名を作成
    sprintf(fileName, "%s-%s.jpg", date, macaddr);
    //printf("%s\n", fileName);

    // カメラを起動
    sprintf(cmd, "/usr/bin/raspistill -o /tmp/%s", fileName);
    system(cmd);
    printf("%s\n", cmd);
    //printf("%s\n", fileName);

    // FTP で画像をサーバーに送る
    if((fp = fopen("ftpcmd", "w")) == NULL)
    {
        printf("file create error\n");
        exit(1);
    }

    // FTP コマンドをファイルに作る
    fputs("open 192.168.3.3\n", fp);
    fputs("user  \n", fp);
    fputs("bin\n", fp);
    sprintf(buf, "put /tmp/%s\n", fileName);
    fputs(buf, fp);
    fputs("quit\n", fp);
    fclose(fp);

    // 現在時刻を yyyy/mm/dd hh:mm:ss 形式でにする
    sprintf(date, "%4d/%02d/%02d %02d:%02d:%02d", st->tm_year+1900
                                    , st->tm_mon + 1
                                    , st->tm_mday
                                    , st->tm_hour
                                    , st->tm_min
                                    , st->tm_sec) ;



    system("ftp -n < /root/ftpcmd");
    // DB にデータを登録する
    sprintf(cmd, "curl -F 'temp=%.1f' -F 'humi=%.1f' -F 'macaddr=%s' -F 'date=%s' -F 'filename=%s' http://192.168.3.3/ajito/dbinsert.php", temp, humi, macaddr, date, fileName) ;

    printf("\n%s\n\n", cmd);

    system(cmd);
}

DHT22 に関してはこちらから
http://blog.livedoor.jp/victory7com/archives/48343379.html

camera関係にかんしてはこちらから

情報を得ました。

rasberry Pi 最近は、python で書かれた多くのサンプルプログラムがあるので、それらを実行して組み合わせて
パイプで出力もらって次の処理。
unix 系の OS は小さく作ってそれらを繋いで色々でいるので便利です!
ちなみに私 一番好きな言語は C です!
何故かって? unix の システム言語だから一番小回り聞くからです!
良く今時Cぢゃ無いよね!? って言う方がいますがスクリプト言語もディすらないですが・・・
メモリーリークしますよねとか言われても・・・
プログラマーヘボだからぢゃないですか? と言いたくなる私ですw

来週はサーバー側について書いていきたおと思っています。

それから新しい仲間を捜しています! こちらからどうぞ!

中途・第2新卒誰でも、コンピューターに興味があれば well come !!!

こんな私に興味があればFacebookでほとんどの投稿公開していますので読んでみてください。
但し、お友達申請は実際にお会いした方か友人の御紹介がないとお受けしておりませんので悪しからず。
※フォローは御自由にどうぞ!


Related post

公式Facebook

公式Twitter

Return Top