ESP-WROOM-02 とRaspberry pi 3b を使い温湿度センサ(DHT11)の値をブラウザに表示させる

スポンサーリンク

 

・目的

 温湿度センサDHT11で計測したデータをesp-wroom-02で受け取り

 apcheとphpが入ってるラズベリーパイに送りブラウザに値を表示させる。図1にイメージ図を示した。

f:id:shangtian:20170611074749p:plain

図1:イメージ図

 

・使用したもの

     esp-wroom-02(自作開発ボード)

     Raspberry pi 3 b(os:raspbian)

     DHT11

 ブレッドボート

 ジャンパワイヤ

 

・方法

 (1)回路

    回路図は図1に示した。dht11

    のDATAピンはIO4に接続した。

    NCピンは接続しなくてよい。

f:id:shangtian:20170615215307p:plain

図2:回路図

 (2)esp-wroom-02側のプログラム

     connectWiFi()と

                 connectServer( float,float)

                 関数を作成した

 

 

    connectWiFi()はwifiに接続する

    関数。

     WiFi.begine(ssid,password)

                 で接続開始。

    接続してない間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が

 空のときは処理をしないように改善した方がよい。

 

 

 

shangtian.hatenablog.com

 

shangtian.hatenablog.com