POC-メテオ

yoctopuce

USB環境センサー

*用例1/2/3
- POC光センサ100K                   
*用例1
-POC-高度計                       
*用例1
- POC-メテオ                       
*用例1/2/3/4/5/6/7/8
- POC-サーモ               
*用例1/2/3/4
- PT100                       
*用例1
- POC-VOCセンサ               
*用例1/2
 

USB電圧センサー

*用例1
*用例1/2/3/4/5/6/7/8
- POC-Amp           
*用例1/2/3/4
- POC-Knob         
*用例1/2/3/4/5/6/7/8/9/10/11/12/13
*用例1
- POC-PWM-Rx     
*用例1/2
- POC-RS232         
*用例1
- POC-ボルト
- POC-ワット
- POC-ミリボルト-Rx
- POC-ミリボルト-BNC
 

USB位置センサー

*用例1/2/3
-POC-高度計                       
*用例1
 -POC-GPS
*用例1 

USBアクチュエーター

- POC-ブザー
- POC-カラー      
*用例1/2/3/4/5/6/7/8
*用例1/2/3/4/5/6
- POC-マキシIO     
*用例1
*用例1/2/3/4/5
- POC-マキシパワーリレー
*用例1/2
- POC-モーターDC     
*用例1/2/3/4
- POC-PWM—Tx    
*用例1
*用例1/2/3/4/5
*用例1/2/3/4/5/6/7/8/9
- POC-リレー      
*用例1/2/3/4/5/6/7/8/9
- POC-サーボ      
*用例1/2/3/4/5/6
*用例1

 USBディスプレー  

*用例1/2/3/4/5
*用例1/2/3/4/5/6/7
*用例1/2/3/4/5/6/7
*用例1/2/3

 エクステンションとネットワーキング 

- POC-マイクロUSBハブ 
*用例1
*用例1/2/3/4/5/6/7
*用例1/2/3
*用例1/2/3/4/5/6/7/8/9/10/11
*用例1/2/3/4
*用例1

 アクセサリとコネクター

- POC-Board2Board-127  
*用例1

 エンクロージャー 

 
 

天気ステーション:ディスプレー

以前xyvelyを使用してソーラー天気ステーションを作りましたが、コンピューターを使用せずにデータを見ることができればもっと便利ですよね。というわけで、今回はPOC-ディスプレーでどのようにデータを表示するかご紹介します。

 

アーキテクチャー

POC-ディスプレーをPOC-ハブイーサーネットに接続します。POC-ハブイーサーネットとPOC-ハブワイヤレスはともに環境設定してデータ送信をマネジメントするスクリプトを動かすPHPサーバに接続します。

weather display scheme 1

 

プログラミング

POCのハブをサーバーに接続し、PHPスクリプトを動かすことができます。この技術はHTTPcallbackと呼ばれ、問題なくADSLルーターのNATフィルターを通すことができます。プログラミングの観点から言えばすべて簡単にできます。コードはモジュールを動かしているコードと同一です。

 

POC-メテオのデータを天気ステーションに表示したいわけですが、せっかくですからグラフにしてしまいましょう。POC-メテオのデータロガーを使用できますが、このロガーに達するまでにHTTP callbackは非常に遅くなってしまいます。そこでmySQL databaseを使用することにしました。よって、mySQL databaseとPHPサーバーが必要となります。

 

データベース

データベースを整理して下の表にまとめました。

コラム  タイプ  用途 
タイムスタンプ integer date/hour of the measure
気温 double temperature values
湿度 double humidity values
圧力 double pressure values
フィード integer managing several parallel feeds

 

イニシアライジング

 スクリプトを設定します。ライブラリを含め、データベースとの接続を構築し、APIを起動する必要があります。

// Yoctopuce includes
include("yocto_api.php");
include("yocto_temperature.php");
include("yocto_humidity.php");
include("yocto_pressure.php");
include("yocto_display.php");
include("yocto_wakeupmonitor.php");
include("yocto_network.php");

// database connection, replace with your own credentials
$conn = mysql_connect(DB_SERVER,DB_USER,DB_PASSWORD);
$res = mysql_select_db(DB_NAME);

// API init, note the "callback" parameter for HTTP callback  mode
if (yRegisterHub("callback",$errmsg)!=YAPI_SUCCESS) die($errmsg);
 

 

データ送信

ディスプレーと天気ステーションのそれぞれを特定し、温度機能の存在をベースにスクリプトを書きました。それから、それぞれのセンサーの値を取り出し、データベースに蓄積します。

 

$tempSensor=YFindTemperature("METEO.temperature");
$humSenor=YFindHumidity("METEO.humidity");
$pressSensor=YFindPressure("METEO.pressure");
$monitor=YFirstWakeUpMonitor();
  1. if ($tempSensor->isOnline())
     {
       $temp = $tempSensor->get_currentValue();
       $= $humSenor->get_currentValue();
       $pre  = $pressSensor->get_currentValue();
       $timestamp = time();
        mysql_query("insert into weather "
                   ."(timestamp,temperature,humidity,pressure,feed) "
                   ."values ($timestamp,$temp,$hum,$pre,$feed)");
       ...
     

 

データベースに値が蓄積されたあと、天気ステーションの中のPOC-ハブワイヤレスをもう一度スリープ状態することで使用電力を削減できます。

 if (!is_null($monitor)) $monitor->sleep(1);

 

スクリーンに表示

 ダブルバッファー技術を使用しています。 

if ($display->isOnline())
 {
   // fetch data from database, group  by 15 min clusters
   $result = mysql_query("select * from weather where feed=$feed and timestamp>".($timestamp-60*15*128)." order by timestamp");
   if (!$result ) die(mysql_error());

   //..
   //code to group data by 15 minutes clusters
   //and compute max/min values
   //..

   $width=  $display->get_displayWidth();
   $height= $display->get_displayHeight();

   // we use double buffering
   $layer4 = $display->get_displayLayer(4);
   $layer4->reset();
   $layer4->hide();
   ..
 

 

    ..
   // altitude correction
   $Z = 500;  // weather station altitude, in meters
   if (isset($_GET['alt']))  $Z = intval($_GET['alt']);
   // display humidity and pressure in the corners
   $tempK = $lastTemp + 273.15// temperature in deg K
   $barometricPress=round($lastPress*pow(($tempK+0.0065*$Z)/$tempK,5.2561));

   // display humitity and pressure in the corners
   $layer4->selectFont('Small.yfm');
   $layer4->drawText(0,0,Y_ALIGN_TOP_LEFT,'P:'.$barometricPress);
   $layer4->drawText(0,$height-1,Y_ALIGN_BOTTOM_LEFT,$lastHum.'%');
   ..
 

 

 

  // draws the graph
   $i=0;
   if ($history[$i]["count"]>0)
   $layer4->moveTo( $width-15 ,
                    round(($height/2)-($history[$i]["temp"]-$middle)*2));
   for ($i=1;$i<sizeof($history);$i++)
     if ($history[$i]["count"]>0)
       $layer4->lineTo($width -$i-15,
                       round($height/2-($history[$i]["temp"]-$middle)*2));
 

 

 

...
   $layer4->selectColorPen(0);
   $layer4->drawText($width/2-1,$height/2,Y_ALIGN_CENTER, $lastTemp);
   $layer4->drawText($width/2+1,$height/2,Y_ALIGN_CENTER, $lastTemp);
   $layer4->drawText($width/2,$height/2+1,Y_ALIGN_CENTER, $lastTemp);
   $layer4->drawText($width/2,$height/2-1,Y_ALIGN_CENTER, $lastTemp);
   $layer4->selectColorPen(0xffff);
   $layer4->drawText($width/2,$height/2,Y_ALIGN_CENTER, $lastTemp);
   ...
 

 

$display->swapLayerContent(3,4);
 

 

実際のコードは少し長いですが、ここでは省略してあります。最後に天気ステーションハブとディスプレーハブの環境設定を行い、スクリプトを定期的なインターバルで呼び出すことができるようにします。

hubconfiguration 1

 

結果

 完成です!これで表示が自動的にされ、時間が経てばグラフとして表示されていきます。

displayshot 2