・目的
温湿度センサDHT11で計測したデータをesp-wroom-02で受け取り
apcheとphpが入ってるラズベリーパイに送りブラウザに値を表示させる。図1にイメージ図を示した。
図1:イメージ図
・使用したもの
esp-wroom-02(自作開発ボード)
Raspberry pi 3 b(os:raspbian)
DHT11
ブレッドボート
ジャンパワイヤ
・方法
(1)回路
回路図は図1に示した。dht11
のDATAピンはIO4に接続した。
NCピンは接続しなくてよい。
図2:回路図
(2)esp-wroom-02側のプログラム
connectWiFi()と
connectServer( float,float)
関数を作成した
connectWiFi()はwifiに接続する
関数。
で接続開始。
接続してない間while文を実行する。
while (WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
}
void connectServer(float t, float h)
で湿温度センサで読み取った値を受け取り
client.print("GET /esp8266/esp8266.php?temperature=");
client.print(t);
client.print("&humidity=");
client.print(h);
client.print(" HTTP/1.1");
client.println("HOST: 192.168.2.110");
でサーバーに送信
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <DHT.h>
const char* ssid = "*******";
const char* password = "******";
const char* server = "192.168.2.110";
const int PIN_DHT = 4;
WiFiClient client;
DHT dht(PIN_DHT,DHT11);
//関数の宣言
void connectWiFi();
void connectServer(float,float);
void setup() {
Serial.begin(9600);
connectWiFi();
//dhtを開始
dht.begin();
}
void loop() {
//湿度 温度を読み取り
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
//関数に値を代入して実行
connectServer(temperature,humidity);
//5秒停止
delay(5000);
}
void connectWiFi() {
Serial.println();
Serial.println();
Serial.println("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println ( "" );
Serial.print ( "Connected to " );
Serial.println ( ssid );
}
void connectServer(float t, float h) {
if(client.connect(server, 80)){
Serial.println("connected to server");
client.print("GET /esp8266/esp8266.php?temperature=");
client.print(t);
client.print("&humidity=");
client.print(h);
client.print(" HTTP/1.1");
client.println("HOST: 192.168.2.110");
client.println("Connection: close");
client.println();
}
}
図3:esp-wroom-02PhpDht11
(3)php側のプログラム
php側のプログラムを図4に示した。
<?php
$temperature = $_GET["temperature"];
$humidity = $_GET["humidity"];
$text = temperature ;
$text2 = humidity ;
$ddd = "<br />\n";
$A = file_put_contents('/var/www/html/samplePhp/val.txt',$text,FILE_APPEND);
$A = file_put_contents('/var/www/html/samplePhp/val.txt',$temperature,FILE_APPEND);
$A = file_put_contents('/var/www/html/samplePhp/val.txt',$text2,FILE_APPEND);
$A = file_put_contents('/var/www/html/samplePhp/val.txt',$humidity,FILE_APPEND);
$A = file_put_contents('/var/www/html/samplePhp/val.txt',$ddd,FILE_APPEND);
$s = file_get_contents('/var/www/html/samplePhp/val.txt');
print($s);
echo PHP_EOL;
echo n12br("<br />/n");
?>
図4:esp8266.php
・結果
php側でGETで値を取得しているが、値が受け取れてない場合でも
text ファイルに保存してしまっているため、if文によってGETが
空のときは処理をしないように改善した方がよい。