147_RasPi_温度湿度測定の準備2_部品購入

秋月電子通商で電子部品を購入しました!

http://akizukidenshi.com/catalog/top.aspx

passは、「A*****6」で。

ーーーーーーーーーーーーーーーー

HDC1000使用 温湿度センサーモジュール

http://akizukidenshi.com/catalog/g/gM-08775/

ブレッドボード BB-801

http://akizukidenshi.com/catalog/g/gP-05294/

ブレッドボード・ジャンパーコード(オス-オス)(10cm)20本セット

http://akizukidenshi.com/catalog/g/gC-05371/

ブレッドボード・ジャンパーコード(オス-メス) 15cm(赤) (10本入)

http://akizukidenshi.com/catalog/g/gC-08933/

 

capture_2016_12_29_17_11_14_902

以上!

 

146_RasPi_温度湿度測定の準備

 セットアップは、下記を参考にした。。(まあ順調!)
http://azwoo.hatenablog.com/entry/2013/07/13/130953
1. Raspberry pi セットアップ
SDカード(16GB)はOSインストール済にしたので、Raspbianを選択だけすれば良いはず。。
画面がないので、
・ssh(ssh pi@ 初期パスワードはraspberry) などでログインして初期設定を行う。
・設定ユーティリティを起動し,時刻や言語等を設定。
は必要のはず。。
$ sudo raspi-config
2.2.wifiセットアップ
これも設定だけのはず。smileネットワークの設定を。。。
====さあ、ここから配線設計=====
3.ブレッドボードで配線
まず、素人なので、「温度湿度測定」をやってみよう!

を参考に。
部品は、「HDC1000」が良いらしい。。
(図4)
capture_2016_12_24_18_56_39_264
電子線には、”I2C”というのがあるけど、何々??
「I2Cは2本の信号線にプルアップ抵抗が必要ですが、Raspberry PIはプルアップ抵抗が内蔵されているため接続するだけで使用できます。」
と。よかった!
「+V,GNDは電源、SDA,SCLはI2Cです。RDYは今回は未接続でかまいません。」と。
ここから、

を参考に
接続は、下図で。
(図5)
capture_2016_12_24_19_08_31_344
秋月電子で買うべき「部品」で必要なものは。。。
①ブレッドボードBB-801(200円)
②HDC1000、AE-HDC1000(680円)
③ブレッドボード・ジャンパーコード(オス-オス)(10cm)20本セットBBJ-20(180円)
③ブレッドボード・ジャンパーコード(オス-メス) 15cm(赤) (10本入)C-08933(220円)
4.スクリプト作成
(★★ここからはラズパイ来てからやろう★★
(★ここから)
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
「python版wiringpi2」というのをインストールすると便利らしい。。
$ sudo apt-get install python-dev python-pip
$ sudo pip install wiringpi2
温湿度取得用pythonスクリプト作成
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
(★ここまで)
<ここは参考いずれ、、ね。>
ここから未準備。手作業必要。。まず設計。
配線図を勉強させてもらおう。
■回路図AP
「Windows専用のBSch3V」が良いらしい。さすがネット。
http://www.suigyodo.com/online/schsoft.htm
■配線図AP
「Fritzing」が良いらしい。
http://fritzing.org/projects/
http://fritzing.org/download/
以上(まだ途中だけど。。。)

145_RasPi_配線図APと水分センサ設計

1.配線図AP
「Fritzing」が良いらしい。。。ので早速DL。
http://fritzing.org/download/
ほう!こうは便利だわ。かなり完成度が高いAP!
(図9)
capture_2016_12_25_16_55_27_827
(図10)
capture_2016_12_25_16_55_41_433
早速使おう!
さて、水分センサの設計は?と。
2.GROVEシステムの水分センサ
https://www.switch-science.com/catalog/814/
によると、GROVEシステムの水分センサは、
「水分量による土中の抵抗値変化に応じてアナログ電圧を出力します。 」
なので、やはりADCがいるようだ。
(図6)
capture_2016_12_25_16_42_30_964
(図7)
capture_2016_12_25_16_43_33_383
3.ブレッドボードで配線
ここの英語サイトを参考に勉強します。
https://cdn-learn.adafruit.com/downloads/pdf/reading-a-analog-in-and-controlling-audio-volume-with-the-raspberry-pi.pdf
ふむふむ。
RasberyPiにはアナログ読取装置が無いので、External装置(MCP3008とか)をつければ簡単、、と。
(Arduinoにはあるようだ。。別途ね!)
早速、MCP3008をwiringすると。
(図1、ものの写真)
ラズパイ君は、8ch入力のうち4chを活用するようだ。
capture_2016_12_24_17_58_51_666
(図2、ch構成図)
capture_2016_12_24_18_02_08_608
あれ、でも読むと、結局全部使うようだ。
MCP3008 VDD(analog ground) -> 3.3V (red)
MCP3008 VREF((analog voltage reference) -> 3.3V (red)
MCP3008 AGND(analog ground) -> GND (black)
MCP3008 CLK(Clock pin) -> #18 (orange)
MCP3008 DOUT((Data Out from MCP3008) -> #23 (yellow)
MCP3008 DIN((Data In from Raspberry Pi) -> #24 (blue)
MCP3008 CS(Chip Select) -> #25 (violet)
MCP3008 DGND(digital ground) -> GND (black)
あれ?、Next connect up the potentiometer. 、、って他にも必要なものいるのかあ。。
https://www.adafruit.com/products/356
(図8)
capture_2016_12_25_16_48_29_791
うーーん。ラズパイの本では、他のADCに、
ADS1015搭載 12BitADC 4CH 可変ゲインアンプ付き
もあるようだ。
ゲイン設定可能なアンプが付いた12ビットのADコンバータです。I2C接続。 と。
(図11)
capture_2016_12_25_17_15_24_727
ひとまず、MCP3008で設計してみるか。。。
ところで、このRaspberryと直結する40ピンのケーブル便利そうね!
Adafruit Raspberry Pi用ブレッドボード接続I型基板セット
https://www.switch-science.com/catalog/1258/
(図12)
capture_2016_12_25_17_27_18_385
いやRaspberry3の場合は、こっちね。
Raspberry Pi B+用T型I/O延長基板
https://www.switch-science.com/catalog/2074/
(図13)
capture_2016_12_25_17_31_58_153
つづく(水分センサ設計まだまだ解明できてない。。。)
以上

144_RasPi_MySQL_install、でもutf8設定不完全

データベースを使う(MySQL)

データベースを使う(MySQL)


を参考に。

1.MySQLのインストール
Raspberry Pi(Linux)にMySQLをインストールします。
以下のコマンドを実行するだけです。
インストール時に、MySQLのroot用パスワードの入力を求められます。
このパスワードは後で変更することが可能です。
$sudo apt-get install mysql-server
2.MySQLクライアントの実行
以下のコマンドで、rootとしてMySQLクライアントで制御できるようにします。コマンド実行後、上記で設定したroot用パスワードの入力を求められます。
# mysql -u root -p test
Enter password: ←パスワードを入力
mysql> ←ここからMySQLの操作開始
3.文字コードの確認
データベースを使う前に、文字コードの確認と設定を行います。日本語を扱った時の文字化けを防ぐためUTF8に統一します。
MySQLで以下のコマンドを実行します。
mysql> status
4.文字コードの設定
文字コードの設定を変えるには、my.cnfファイルを以下のように修正します。
★★★★でも、viで修正できなかったので、やってない!!!★★★★
$ vi /etc/mysql/my.cnf
[client]
default-character-set=utf8
  
[mysqld]
collation-server = utf8_unicode_ci
init-connect=’SET NAMES utf8′
character-set-server = utf8
  
[mysqldump]
default-character-set=utf8
以上!!

143_RasPi_SSH_remote接続(VNCソフト活用)

RasPiがやっときました。
(図1)
capture_2016_12_29_03_31_45_732
でもTV画面は面倒なので、
「ラズベリーパイにSSHでリモート接続」
をやってみようかと。
参考は、ここ。
http://usicolog.nomaki.jp/engineering/raspberryPi/raspberryPi_SSH.html
SSHの有効化
SSHによるリモート接続
tightVNCによるリモート接続
をやります。
■SSHの有効化
1.SSHの有効化
ラズパイの方の環境設定があるらしい。
デスクトップ画面から「LXTerminal」をクリックし、ターミナルを立ち上げ。
ターミナルに「sudo raspi-config」と打ち込んで、OSの設定を行う。と。
# sudo raspi-config
「5.Internationalisation Options」を選択、キーボードの設定
2.パスワードの変更
これ昨日やった。確かR****2**12*8に。ログイン名はpiのまま。
3.タイムゾーンの変更
これも昨日やった。
4.ラズパイのカメラモジュールの有効化
「6. EnableCamera」を選択。
5.SSHの有効化
「9. Advanced Options」を選択
「A4 SSH」を選択、 SSHを有効にするために「Enable」を選択。
6.OS設定画面の終了
以上で、OSの設定が終了したので再起動させます。設定画面で「Tabキー」を2回押して「Finish」を選択します。
■SSHによるリモート接続
1.ラズパイでSSHを使うには、ラズベリーパイに固定IPアドレスを割り当てる必要があります。ここではルータでラズパイに固定IPアドレスを割り当て、それからラズパイ側でネットワークの設定を行うという手順で、と。
ルータで固定IPを割り当て
まず、ラズベリーパイのMACアドレス(ハードウェアアドレス)と、サブネットマスクを調べます。 ラズパイの「LXTerminal」を開いて「ifconfig」と入力してください。ifconfigコマンドでは、ラズパイに割り当てられているIPアドレスや、MACアドレス、サブネットマスク等を確認できます。。。。か。
# ifconfig
表示されたMACアドレスとサブネットマスクを覚えておいてください。後ほど使います。か。
でも。うちのモデムにはルータ昨日ないので、固定IPアドレス設定は無理。。。。
そのままにしておこうか。とりあえず。。。
うまく動くか知らんが。。。。やってみる。
とりあえず、TeraTermは動いた。。。接続できたみたい。
(図2)
capture_2016_12_29_04_19_09_879
■tightVNCによるリモート接続
次は、ラズベリーパイをGUIで操作するためにtightVNCをインストールします。
ラズパイにはtightVNCServer(VNCサーバー)を、WindowsパソコンにはVNC-Viewer(VNCクライアント)をインストールする必要があります。まずはラズパイにtightVNC-Serverをインストールしていきます。
tightVNC-Serverのインストール
インストール前に、ラズパイを以下のコマンドよりアップデートしておきます。アップグレード時に”続行しますか”と出るので、「y」を入力して処理を続けてください。
# sudo apt-get update
# sudo apt-get upgrade
(これは時間かかる。。。ね)
ラズバイに、tightVNC-Serverをインストールします。
# sudo apt-get install tightvncserver
■VNC-Viewerのインストール
WindowsにはVNC-Viewerをインストールします、、と。
REAL VNC
https://www.realvnc.com/download/viewer/
から「VNC Viewer for Windows」のEXEファイルを選び、ダウンロードします。ソフトを起動するには、ダウンロードしたexeファイルを実行することで起動できます。
VNCのアカウントを作らされたけど。。まいいか。
 (図3)
capture_2016_12_29_04_43_37_733
 ■tightVNCを使ってみる
ラズベリーパイに電源を入れてOSを起動させます。
次に、WindowsパソコンからTeraTermを開いて、ラズパイにSSHでログインします。[1. tightVNC-Serverの起動]
コマンドとして「tightvncserver」を入力します。初回は通信のためのパスワードを決めます。# tightvncserver[2. VNCセッションの開始]
以下のコマンドよりVNCセッションを開始します。# vncserver :1 -geometry 800×600 -depth 24[3. VNC-Viewerの起動]
VNC-Viewerが起動します。VNC-ServerにはラズパイのIPアドレスと、先ほどの番号を指定してConnectを押します。[4. パスワード入力]
VNC-Serverで決めたパスワードを入力します.(A*******6)

うーーーん。やはり固定IPアドレス設定しないとrefuseされてしまったか。。。

(図4)

capture_2016_12_29_05_13_31_848

仕方なし。。。

いやいや、UbuntuのRemmnaを参考に、設定をしなおしたらOK!

connectionを

192.168.0.12:5901

としただけ!

(図x)

capture_2016_12_30_07_21_47_994

(図y)

capture_2016_12_30_07_21_10_299

以上(ふうう、、、良かった)!

 

142_MySQL_外部ホストからのMySQL接続

RasberryPiの準備のため
「外部ホストからのMySQL接続」
を試してみる。
参考下記。
http://linuxserver.jp/%E3%82%B5%E3%83%BC%E3%83%90%E6%A7%8B%E7%AF%89/db/mysql/%E5%A4%96%E9%83%A8%E6%8E%A5%E7%B6%9A%E8%A8%B1%E5%8F%AF%E8%A8%AD%E5%AE%9A
外部ホストからのMySQL接続
MySQLはデフォルトでは外部ホストからの接続を許可しないようになっています。
外部ホストからの接続を許可するには下記の手順で設定を行います。。。と。
まずは、MySQLに接続。
# mysql -u root -p
> yos***********5
(図1)
 capture_2016_12_20_21_46_38_125
DBの表示
# show databases;
(図2)
capture_2016_12_20_21_47_35_925
ユーザの表示
mysql> select user,host from mysql.user;
(図3)
capture_2016_12_20_21_49_41_856
すべてのホストから接続できるようにするように、権限をつけます。
ワイルドカードを指定して設定します。
私の場合、、、
ユーザ名”raspai”、接続する外部ホストは”160.**.**.187″、利用するDBは”20161129_sensor”で設定。
なので、、、
mysql> grant all privileges on 20**1129_s**sor.* to raspai@”%” identified by ‘A******6′ with grant option;
一応OK表示。
(図4)
capture_2016_12_20_22_38_51_580
確認。raspaiが%になってます!!!
(図5)
capture_2016_12_20_22_39_31_167
さて、接続試験!
外部ホストからのログインしてみます。
外部ホストからの接続を許可するように設定したら、実際に外部ホストからログインができるか確認します。
外部ホストにもMySQLがインストールされていることが条件になるので、環境がない場合はインストールする必要があります
#  mysql -h 160.**.**.187 -u raspai -p
つながったかな?
(図6)
capture_2016_12_20_22_43_57_491
一応DB確認!
(図7)
capture_2016_12_20_22_45_03_175
20161129_sensor
が見えている!OKかな?
ついでなので、insertしてみるか!
> INSERT INTO `t_sensor`(`time_stamp`, `temp`, `humid`, `water_need`, `memo`) VALUES (20161220,100,100,’test_from_win10′,’test_success_from_win10′);
(図8)
capture_2016_12_20_22_52_17_126
これを、win10のMySQLからinsertしてみる。日時を変えて
> use 20161129_sensor
してから、
> INSERT INTO `t_sensor`(`time_stamp`, `temp`, `humid`, `water_need`, `memo`) VALUES (20161221,100,100,’test_from_win10′,’test_success_from_win10′);
capture_2016_12_20_22_54_26_744
なんか、できたみたい。。。
(図9)
capture_2016_12_20_22_55_26_579
成功!!、入っている!!
WebmもOK!(100が2件入っている)
(図10)
capture_2016_12_20_23_04_43_458
これで、raspaiがいつ来ても、
raspaiのMySQLからデータを
sakuravpsのDB(20161129_sensor)へ
insertできるはず!
以上

141_MySQL_9_(グラフ表示_成功!)_on SAKURAVPS

なんとかGoogleChartsでグラフ表示成功!

記録とっておきます。苦労したので、その履歴を。。。。

まずは、

【1、Google Chartsに合うデータの形に整形】

http://160.16.50.187/ras_gra/20161216_gra_tmp5.php

ができた場所。

phpファイルは、

*****************
<?php
//MySQLに接続し、データベースを選択します。
$conn = mysql_connect(‘tk2-201-10183.vs.sakura.ne.jp’,’root’,’yoshihara20160805′) or die(mysql_error());
mysql_select_db(‘20161129_sensor’) or die(mysql_error());
//SQLクエリを実行します。
$res = mysql_query(‘SELECT * from t_sensor order by Num DESC LIMIT 10’) or die(mysql_error());
//結果を出力します。
//while ($row = mysql_fetch_array($res, MYSQL_NUM)){
//echo “[‘\n”;
//echo $row[1].”\t”;
//echo “‘,\n”;
//echo $row[2].”\n”;
//echo”,\n”;
//echo $row[3].”\n”;
//echo “],\n”;
//echo “<br />\n”;
//}
//$drawScript ='<br>グラフデーターを書くまでの記述<br>’;
$i = 0;
while ($row = mysql_fetch_array($res, MYSQL_NUM)){
if ($i != 0) {
$drawScript .=”, [‘” . $row[1] . “‘,” . $row[2] . “,” . $row[3] .  “]”;
} else {
$drawScript .= “[‘日時’, ‘温度°’, ‘湿度%’], [‘” . $row[1] . “‘,” . $row[2] . “,” . $row[3] . “]”;
// 一つ目の項目は 前に コンマ がいらないのと要素を入れる必要があるため
}
$i++;
}
print $drawScript;
//print $drawScript . ‘<br>後必要な記述<br>’;
//結果セットを開放し、接続を閉じます。
mysql_free_result($res);
mysql_close($conn);
?>

*****************

これで、下図に。

capture_2016_12_17_17_00_34_95

【2、これをhtml部分のScriptで挟んで、なんとか表示!】

でもまだチャート図(グラフ)が新しいものから古いになっているので、修正しなきゃ!(ひとまずここまでの記録を)

http://160.16.50.187/ras_gra/20161217_gra_tmp3.php

ができた場所。

phpファイルは、

*****************
<!DOCTYPE html>

<html>
  <head>
    <!– AJAX API のロード –>
    <script type=”text/javascript” src=”https://www.google.com/jsapi”></script>
    <script type=”text/javascript”>
    // Visualization API と折れ線グラフ用のパッケージのロード
    google.load(“visualization”, “1”, {packages:[“corechart”]});
    // Google Visualization API ロード時のコールバック関数の設定
    google.setOnLoadCallback(drawChart);
    // グラフ作成用のコールバック関数
    function drawChart() {
    // データテーブルの作成
    var data = google.visualization.arrayToDataTable([
   
       <?php
       
       //MySQLに接続し、データベースを選択します。
       $conn = mysql_connect(‘tk2-201-10183.vs.sakura.ne.jp’,’root’,’yoshihara20160805′) or die(mysql_error());
       mysql_select_db(‘20161129_sensor’) or die(mysql_error());
       //SQLクエリを実行します。
       $res = mysql_query(‘SELECT * from t_sensor order by Num DESC LIMIT 10’) or die(mysql_error());
       //$drawScript ='<br>グラフデーターを書くまでの記述<br>’;
       $i = 0;
       while ($row = mysql_fetch_array($res, MYSQL_NUM)){
       if ($i != 0) {
           $drawScript .=”, [‘” . $row[1] . “‘,” . $row[2] . “,” . $row[3] .  “]”;
       } else {
           $drawScript .= “[‘日時’, ‘温度°’, ‘湿度%’], [‘” . $row[1] . “‘,” . $row[2] . “,” . $row[3] . “]”;
           // 一つ目の項目は 前に コンマ がいらないのと要素を入れる必要があるため
       }
        $i++;
       }
        print $drawScript;
         
        //結果セットを開放し、接続を閉じます。
        mysql_free_result($res);
        mysql_close($conn);
     
       ?>
      
   ]);
       
    // グラフのオプションを設定
    var options = {
        title: ‘温度・湿度ダミーグラフ’
    };
    // LineChart のオブジェクトの作成
    var chart = new google.visualization.LineChart(document.getElementById(‘chart_div’));
    // データテーブルとオプションを渡して、グラフを描画
    chart.draw(data, options);
    }
    </script>
  </head>
  <body>
  
    <!– グラフを描く div 要素 –>
    <div id=”chart_div” style=”width: 80%; height: 400px;”></div>
    <br>
    表示データ<br>
    *****************************<br>
    <?php
    //MySQLに接続し、データベースを選択します。
    $conn = mysql_connect(‘tk2-201-10183.vs.sakura.ne.jp’,’root’,’yoshihara20160805′) or die(mysql_error());
    mysql_select_db(‘20161129_sensor’) or die(mysql_error());
    //SQLクエリを実行します。
    $res = mysql_query(‘SELECT * from t_sensor order by Num DESC LIMIT 10’) or die(mysql_error());
    //結果を出力します。
    while ($row = mysql_fetch_array($res, MYSQL_NUM)){
    echo “[‘\n”;
    echo $row[1].”\t”;
    echo “‘,\n”;
    echo $row[2].”\n”;
    echo”,\n”;
    echo $row[3].”\n”;
    echo “],\n”;
    echo “<br />\n”;
    }
    //結果セットを開放し、接続を閉じます。
    mysql_free_result($res);
    mysql_close($conn);
   ?>
    *****************************<br>
  </body>
</html>

*****************

で、下記のようになりました。。。。

capture_2016_12_17_17_05_08_671

 

でも、まだまだ修正しなきゃ!!!

とりあえず。

以上、、、、(いやー一週間くらい苦労したワ。。。)

おっと、でも上記の細字赤字

$res = mysql_query(‘select * from t_sensor where Num > ((select max(Num) from t_sensor)-10)’) or die(mysql_error());

で解決!

以上!!!

 

140_MySQL_8_(グラフ表示3)_on SAKURAVPS

***************
/var/www/html

20161129_disp_inst.php
を使って修正してみる
***************オリジナル
<?php
//MySQLに接続し、データベースを選択します。
$conn = mysql_connect(‘tk2-201-10183.vs.sakura.ne.jp’,’root’,’yoshihara20160805′
) or die(mysql_error());
mysql_select_db(‘20161129_sensor’) or die(mysql_error());
//SQLクエリを実行します。
$res = mysql_query(‘SELECT * from t_sensor order by Num DESC LIMIT 10’) or die(mysql_error());
//結果を出力します。
while ($row = mysql_fetch_array($res, MYSQL_NUM)){
echo $row[0].”\t”;
echo $row[1].”\t”;
echo $row[2].”\n”;
echo $row[3].”\n”;
echo $row[4].”\n”;
echo $row[5].”\n”;
echo “<br />\n”;
}
//結果セットを開放し、接続を閉じます。
mysql_free_result($res);
mysql_close($conn);
?>
***************
20161212_gra_tmp1.html
を修正する
***************
<?php
//MySQLに接続し、データベースを選択します。
$conn = mysql_connect(‘tk2-201-10183.vs.sakura.ne.jp’,’root’,’yoshihara20160805′
) or die(mysql_error());
mysql_select_db(‘20161129_sensor’) or die(mysql_error());
//SQLクエリを実行します。
$res = mysql_query(‘SELECT * from t_sensor order by Num DESC LIMIT 10’) or die(mysql_error());
//結果を出力します。
while ($row = mysql_fetch_array($res, MYSQL_NUM)){
echo “[‘”;
echo $row[1].”\n”;
echo “‘,”;
echo $row[2].”\n”;
echo “,”;
echo $row[3].”\n”;
echo “],”;
echo “<br />\n”;
}
//結果セットを開放し、接続を閉じます。
mysql_free_result($res);
mysql_close($conn);
?>
***************
20161213_gra_tmp1.html
を修正する
うーーーん。データテーブルの作成がうまくできればOKなんだけど。。
***************
<html>
  <head>
    <!– AJAX API のロード –>
    <script type=”text/javascript” src=”https://www.google.com/jsapi”></script>
    <script type=”text/javascript”>
      // Visualization API と折れ線グラフ用のパッケージのロード
      google.load(“visualization”, “1”, {packages:[“corechart”]});
      // Google Visualization API ロード時のコールバック関数の設定
      google.setOnLoadCallback(drawChart);
      // グラフ作成用のコールバック関数
      function drawChart() {
        //*****
        // データテーブルの作成
        var data = google.visualization.arrayToDataTable([
          [‘日時’, ‘温度’, ‘湿度’],
[‘2016-12-13 08:10:01 ‘,28 ,37 ],
[‘2016-12-13 08:00:01 ‘,86 ,99 ],
[‘2016-12-13 07:10:01 ‘,47 ,76 ],
[‘2016-12-13 07:00:01 ‘,71 ,86 ],
[‘2016-12-13 06:10:01 ‘,2 ,86 ],
[‘2016-12-13 06:00:02 ‘,62 ,20 ],
[‘2016-12-13 05:10:01 ‘,80 ,61 ],
[‘2016-12-13 05:00:02 ‘,83 ,48 ],
[‘2016-12-13 04:10:02 ‘,93 ,72 ],
[‘2016-12-13 04:00:01 ‘,65 ,1 ],
        //*****
        ]);
        // グラフのオプションを設定
        var options = {
          title: ‘温度・湿度ダミーグラフ’
        };
        // LineChart のオブジェクトの作成
        var chart = new google.visualization.LineChart(document.getElementById(‘chart_div’));
        // データテーブルとオプションを渡して、グラフを描画
        chart.draw(data, options);
      }
    </script>
  </head>
  <body>
    <!– グラフを描く div 要素 –>
    <div id=”chart_div” style=”width: 80%; height: 400px;”></div>
<br>
表示データ<br>
[‘2016-12-13 08:10:01 ‘,28 ,37 ],<br>
[‘2016-12-13 08:00:01 ‘,86 ,99 ],<br>
[‘2016-12-13 07:10:01 ‘,47 ,76 ],<br>
[‘2016-12-13 07:00:01 ‘,71 ,86 ],<br>
[‘2016-12-13 06:10:01 ‘,2 ,86 ],<br>
[‘2016-12-13 06:00:02 ‘,62 ,20 ],<br>
[‘2016-12-13 05:10:01 ‘,80 ,61 ],<br>
[‘2016-12-13 05:00:02 ‘,83 ,48 ],<br>
[‘2016-12-13 04:10:02 ‘,93 ,72 ],<br>
[‘2016-12-13 04:00:01 ‘,65 ,1 ],<br>
  </body>
</html>

139_MySQL_7_(グラフ表示2)_on SAKURAVPS

[]でデータを入れてあげれば、うまくグラフ表示できるかも???

ということでトライ!

/var/www/html

にあるファイル

20161129_disp_inst.php

をいじってみるファイル作成

20161211_disp_inst.php

で、SQLでとってきた値の部分を下記にように修正。

//結果を出力します。
while ($row = mysql_fetch_array($res, MYSQL_NUM)){
echo “[“;
echo $row[1].”\n”;
echo $row[2].”\n”;
echo $row[3].”\n”;
echo “]”;
echo “<br />\n”;
}

図1

capture_2016_12_11_22_16_15_496

すると、

図2

capture_2016_12_11_22_16_31_932

さあ、これで表示されるだろうか????

/var/www/html/ras_gra

20161211_gra_tmp3.html

をいじったので、

http://160.16.50.187/ras_gra/20161211_gra_tmp3.html

にアクセスしてみます。

ダメ。。。。。。かあ・・

(残念)

もしかして、foreach文を使えばよいのかな??

http://qiita.com/bami3/items/abce7ae683d1979e7e81

によると、、、(下記は抜粋。。)

<?php foreach($datas as $ym=>$values): ?>
[<?php echo $ym ?>, <?php echo $values[0] ?>, <?php echo $values[1] ?>],
<?php endforeach ?>

以上

 

138_MySQL_6_(グラフ表示)_on SAKURAVPS

http://make.bcde.jp/raspberry-pi/%E3%82%BB%E3%83%B3%E3%82%B5%E3%81%AE%E8%A8%98%E9%8C%B2%E3%82%92%E3%82%B0%E3%83%A9%E3%83%95%E5%8C%96/
「センサの記録をグラフ化 」
なんだけど、まだセンサないので、SQLのデータをグラフ化できるか?試そう。
1.データベースを準備する
はできているのでOK。
CREATE DATABASE logging CHARACTER SET utf8;
mysql> CREATE TABLE temperature (
??date datetime NOT NULL,
??value float(8, 4) NOT NULL
);
だけど。独自DB作ったので。
2.気温を計り、データをデータベースに格納する
これもOK。今はダミーデータを一時間気に入れている。
それをまずはグラフ化。
3.決まった時間に気温を記録
これもcronを作っているのでOK。
4.グラフを表示するプログラム
さあ、ここから!。
データベースから気温を取り出す方法は、PythonでMySQLを操作するを参考にします。(これはOK、とばし。)
html生成のためには、テンプレートからファイル生成を参考(http://make.bcde.jp/python/テンプレートからファイル生成/)にし、テンプレートエンジンを使います。
Pythonでテンプレートからファイルを生成します。
ここでは、サンプルプログラムとともに簡単な使い方を解説します。
テンプレートからファイルを生成することで、HTMLファイルのひな形にテキストを流し込み、動的にWebメージを作成することができます。
テンプレートからファイルを生成するライブラリをテンプレートエンジンといい、ここではjinja2というテンプレートエンジンを使用します。
4(1)テンプレートからファイル生成
Pythonでテンプレートからファイルを生成します。
ここでは、サンプルプログラムとともに簡単な使い方を解説します。
テンプレートからファイルを生成することで、HTMLファイルのひな形にテキストを流し込み、動的にWebメージを作成することができます。
テンプレートからファイルを生成するライブラリをテンプレートエンジンといい、ここではjinja2というテンプレートエンジンを使用します。
4(2)
jinja2のインストール
jinja2のインストールには、pipを使用します。
以下のコマンドを実行するだけです。
ID:sakuravps Pass:A*****6で入ってrootになってから実行
$ sudo pip install jinja2
だけど、、、このコマンドがうまく行かない。。。PIPがインストールされていない、、、、と。
で。。
http://qiita.com/who_you_me/items/831d62f396e6d66dda66
を参考に。
曰く、、Pythonでパッケージ管理といえばpipですね。
pipを入れようとしたら、以前なら「setuptools or distribute をインストール→easy_install pipを叩く」という手順でしたが、いつの間にかセットアップが楽になってました。
らしい。。。で。
# curl -kL https://bootstrap.pypa.io/get-pip.py | python
# curl -kL https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python pip install virtualenv virtualenvwrapper
うーーーん。アラーム出ているみたいだけど。Successgfullyとあるので、まあ続けてみるか。
(図1)
capture_2016_12_10_21_28_24_57
では、
# pip install jinja2
(図2)
capture_2016_12_10_21_31_05_638
うーーーん。またなんかアラームだらけだけど。。。まあ続けてみるか。。
4(3)GoogleAPIプログラム
ここでは気温グラフ表示に、Google Chart APIを使用します。Web上のAPIを使えば、グラフ表示は簡単に行うことができます。サンプルを元に、以下のようなグラフ表示用のhtmlテンプレートを使用します。
ちなみにpythonがつかえるか?確認が必要。
https://mag.osdn.jp/08/06/06/0149247
# python -V
(図3)
capture_2016_12_11_08_18_01_745
OKみたいね。各自の利用するWebサーバの設定にてCGIスクリプティングが実行可能となっているかを確認する。
次のステップとして/etc/httpd/conf/httpd.confを開き、サーバスクリプトの格納ディレクトリを指定している「#ScriptAlias: This controls which directories contain server scripts.」で始まるテキストブロックを特定し、次のような設定が施されているかを確認する。
、、、、と。。。
では。
(図4)
capture_2016_12_11_08_22_08_626
OKみたいね。
では、「4.グラフを表示するプログラム」にもどって、、
あらかじめ、グラフ表示を行うためのhtmlテンプレートを用意して、そこに先ほど取得した気温データを流しこみます。、、と。
下記をマネてhtmlを作成。
http://160.16.50.187/20161211_graph_temp1.html
/var/www/html
に配置して、
なんか表示するか?
<html>
<head>
<title>Temperature Chart</title>
<meta http-equiv=”content-type” content=”text/html; charset=utf-8″ />
<script type=”text/javascript” src=”https://www.google.com/jsapi”></script>
<script type=”text/javascript”>
google.load(“visualization”, “1”, {packages:[“corechart”]});
google.setOnLoadCallback(drawChart);
function drawChart() {
var data = google.visualization.arrayToDataTable([
[‘Date’, ‘Temp’],
{% for record in temp_list %}
[‘{{record.date}}’,? {{record.temp}}],
{% endfor %}
]);
// グラフのオプションを設定
var options = {
title: ‘{{title}}’
};
var chart = new google.visualization.LineChart(document.getElementById(‘chart_div’));
chart.draw(data, options);
}
</script>
</head>
<body>
“なんか表示されない?2016/12/11”
<div id=”chart_div” style=”width: 80%; height: 400px;”></div>
</body>
</html>
http://160.16.50.187/ras_gra/20161211_graph_temp1.html
にアクセス
“なんか表示されない?2016/12/11”
だけ表示OK!!
*********
テンプレートを用意したあとは、データを流し込みます。
気温データをテンプレートに反映するプログラムは以下のように作成します。。。と。
#!/usr/bin/pythonCGI
# -*- coding: utf-8 -*-
from jinja2 import Environment, FileSystemLoader
import MySQLdb
import datetime
def mychart(environ, start_response):
env = Environment(loader=FileSystemLoader(‘./’, encoding=’utf8′))
tpl = env.get_template(‘template.html’)
#テンプレートへ挿入するデータの作成
title = u”Tmperature Chart”
temp_list = []
connector = MySQLdb.connect(host=”localhost”, db=”logging”, user=”user”, passwd=”passwd”, charset=”utf8″)
cursor = connector.cursor()
#sql = “select * from temperature”
sql = “select * from logging.temperature where DATE_ADD(date, INTERVAL 24 HOUR) > NOW()”
cursor.execute(sql)
records = cursor.fetchall()
for record in records:
temp_list.append({‘date’:record[0].strftime(“%Y-%m-%d %H:%M”), ‘temp’:record[1]})
cursor.close()
connector.close()
#テンプレートへ挿入するデータの作成
title = u”Tmperature Chart”
#テンプレートへの挿入
html = tpl.render({‘title’:title, ‘temp_list’:temp_list})
start_response(‘200 OK’, [(‘Content-Type’, ‘text/html’)])
return [html.encode(‘utf-8’)]
if __name__ == ‘__main__’:
from flup.server.fcgi import WSGIServer
WSGIServer(mychart).run()
************(俺様用に書き直し・・)
#!/usr/bin/pythonCGI
# -*- coding: utf-8 -*-
from jinja2 import Environment, FileSystemLoader
import MySQLdb
import datetime
def mychart(environ, start_response):
env = Environment(loader=FileSystemLoader(‘./’, encoding=’utf8′))
tpl = env.get_template(‘template.html’)
#テンプレートへ挿入するデータの作成
title = u”Tmperature Chart”
temp_list = []
connector = MySQLdb.connect(host=”tk2-201-10183.vs.sakura.ne.jp”, db=”20161129_sensor”, user=”raspai”, passwd=”Aa123456″, charset=”utf8″)
cursor = connector.cursor()
#sql = “select * from temperature”
sql = “select * from logging.temperature where DATE_ADD(date, INTERVAL 24 HOUR) > NOW()”
cursor.execute(sql)
records = cursor.fetchall()
for record in records:
temp_list.append({‘date’:record[1].strftime(“%Y-%m-%d %H:%M”), ‘temp’:record[3]})
cursor.close()
connector.close()
#テンプレートへ挿入するデータの作成
title = u”Tmperature Chart”
#テンプレートへの挿入
html = tpl.render({‘title’:title, ‘temp_list’:temp_list})
start_response(‘200 OK’, [(‘Content-Type’, ‘text/html’)])
return [html.encode(‘utf-8’)]
if __name__ == ‘__main__’:
from flup.server.fcgi import WSGIServer
WSGIServer(mychart).run()
****
これを、
/var/www/html/ras_gra
に作成、ついでにここへ上記htmlも同棲させる。
***************************************************************************************
うーーん、やはりきちんと学んだほうが良いかも。
新たに下記を参考に
http://yohshiy.blog.fc2.com/blog-entry-195.html#gct_line_chart
http://qiita.com/bami3/items/abce7ae683d1979e7e81
こちらで試す。。。
■データの準備
サンプルで超テキトーにデータつくります。と。
同じように2本グラフ引くためにValuesを2つ用意。
<?php
error_reporting(E_ALL);
$datas=array();
for($utime=strtotime(‘-1 year’); $utime<time(); $utime=strtotime(‘+1 month’,$utime))
$datas[date(‘Y/m’,$utime)]=array(rand(0,1000),rand(0,1000));
?>
■HTML準備
<html>
<head>
<script type=”text/javascript” src=”//www.google.com/jsapi”></script>
</head>
<body>
<div style=”margin:20px 10px; padding:0; width:800px; height:350px;” id=”graphField”>Now Loading …</div>
<script type=”text/javascript”>
// ここに後述のJSコードをいれてね
</script>
</body>
</html>
■JavaScriptを書く
// この辺おまじない
google.load(‘visualization’, ‘1.0’, {‘packages’:[‘corechart’]});
google.setOnLoadCallback(function(){
// この辺データ
var data = google.visualization.arrayToDataTable([
// 横軸 , 値1, 値2
[‘Month’, ‘Value1’, ‘Value2’],
<?php foreach($datas as $ym=>$values): ?>
[‘<?php echo $ym ?>’, <?php echo $values[0] ?>, <?php echo $values[1] ?>],
<?php endforeach ?>
]);
// この辺グラフの描画オプション
var options = {
title: ‘Graph Sample’,
chartArea: {‘width’:’70%’, ‘height’:’65%’, ‘left’:65 },
hAxis: { title:’Year/Month’, titleTextStyle:{italic:false} },
vAxis: { title:’Random Values’,  titleTextStyle:{italic:false} },
crosshair: { trigger: ‘both’ }
};
// この辺おまじない
var chart = new google.visualization.LineChart(document.getElementById(‘graphField’));
chart.draw(data, options);
});
■データの辺り
***********************************ダミーデータでダミhtmlを作ってみる。
\\\\\\\\\\\\\\\\\\\\>>>ファイル名:20161211_gra_tmp2.html
<?php
error_reporting(E_ALL);
$datas=array();
for($utime=strtotime(‘-1 year’); $utime<time(); $utime=strtotime(‘+1 month’,$utime))
  $datas[date(‘Y/m’,$utime)]=array(rand(0,1000),rand(0,1000));
?>
<html>
<head>
 <script type=”text/javascript” src=”//www.google.com/jsapi”></script>
</head>
<body>
<div style=”margin:20px 10px; padding:0; width:800px; height:350px;” id=”graphField”>Now Loading …</div>
<script type=”text/javascript”>
 // ここに後述のJSコードをいれてね
// この辺おまじない
google.load(‘visualization’, ‘1.0’, {‘packages’:[‘corechart’]});
google.setOnLoadCallback(function(){
  // この辺データ
  var data = google.visualization.arrayToDataTable([
    [‘Month’, ‘Value1’, ‘Value2’],
************今は、下記のデータを書いて表示だけ。
[‘2013/11’,100,444],
[‘2013/12’,400,512],
[‘2014/10’,931,123],
[‘2014/10’,200,400],
[‘2014/10’,931,123],
[‘2014/10’,500,123],
[‘2014/10’,340,450]
  ]);
************下記で書くと何も出ない
    <?php foreach($datas as $ym=>$values): ?>
    [‘<?php echo $ym ?>’, <?php echo $values[0] ?>, <?php echo $values[1] ?>],
    <?php endforeach ?>
  ]);
************
// この辺グラフの描画オプション
  var options = {
    title: ‘Graph Sample’,
    chartArea: {‘width’:’70%’, ‘height’:’65%’, ‘left’:65 },
    hAxis: { title:’Year/Month’, titleTextStyle:{italic:false} },
    vAxis: { title:’Random Values’,  titleTextStyle:{italic:false} },
    crosshair: { trigger: ‘both’ }
  };
  // この辺おまじない
  var chart = new google.visualization.LineChart(document.getElementById(‘graphField’));
  chart.draw(data, options);
});
</script>
</body>
</html>
\\\\\\\\\\\\\\\\\\\\
上記を、ファイル名
20161211_gra_tmp2.html
で、
/var/www/html/ras_gra/
に保存。
一度ここで、Webアクセスしてみる。************
なので、
http://160.16.50.187/ras_gra/20161211_gra_tmp2.html
capture_2016_12_11_21_41_32_465
一応なんか出る。。。。
じゃあ。きちんとデータを入れてあげれば。。。
[]の中に。。。
以上。つづく。。。