//
表示中
モノづくり, Computer - コンピューター, Electronics - 電子工作

Blynkに温度と湿度を表示する〜ESP-WROOM-02とDHT11


DHT11が届いたので早速ESP-WROOM-02と繋げてBlynkで温度と湿度を表示してみます。

その前にDHT11がちゃんと機能しているかを確認します。

DHT11TesterというスケッチがDHT11/22のライブラリをインストールすると入ります。これを実際の回路に合わせて修正します。DHT11を使用するようにし、データ端子を接続したESP-WROOM-02のピン番号をスケッチに反映します。

とても簡単な回路です。DHTの+をESP-WROOM-02の3Vに、-をGNDに、データを4番ピンに接続しました。

IMG_1939

スケッチをESP-WROOM-02にロードして実行します。

気温と湿度が計測できているようです。dht11_test

これじゃあ、漆はなかなか乾きませんねー。

ではBlynkに対応したものをスケッチを描きます。ESP8266_StandaloneというBlynkのサンプルを修正する形にしました。
無線LAN親機のssidとパスワードを設定し、DHTのヘッダーをインクルードして、DHTのタイプとDHTが接続されるピン番号を定義する。

そしてBLYNK_READというBlynkの仮想ピンの読み込み関数の追加です。BLYNK_READ(V0)が湿度、BLYNK_READ(V1)が温度を読み込んで、Blynkの仮想ピンに値を設定する部分です。このように記述するとBlynkアプリのWidgetで読み込むピン番号としてVirtual PINを指定できます。

Blynk_sketch

Blynkアプリの画面。

 

IMG_1941

Arduino用のBlynkライブラリとBlynkアプリ。とても便利ですね。

次はMQTTにパブリッシュするスケッチ。最終的なものではありませんが、とりあえず動くという状態で公開します。

このスケッチをコンパイルするはPubSubClientライブラリをインストールする必要があります。

 

#include <ESP8266WiFi.h>
#include "DHT.h"
#include <PubSubClient.h>

const char *server = "xxx.xxx.xxx.xxx";
const char *ssid="xxxxxxxxx";
const char *pwd="xxxxxxxxxx";

#define DHTPIN 4
#define DHTTYPE DHT11

void callback(char *topic, byte* payload, unsigned int length) {
  
}

DHT dht(DHTPIN, DHTTYPE);
WiFiClient wifiClient;
PubSubClient client((char *)server, 1883, callback, wifiClient);

void setup()
{
  Serial.begin(115200);
  dht.begin();
  WiFi.begin(ssid, pwd);
  while(WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
}

void formattedFloat(float x, uint8_t precision, char *buff) {
  dtostrf(x, 7, precision, buff);  
}

void publishData() {
  char buff[30];
  char topic[] = "dht11";
  char clientId[20];
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  char hs[10];
  char ts[10];
  
  if(isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor");
    return;
  }
  sprintf(clientId, "espclient");
  if(!client.connected()) {
    client.connect(clientId);
  }
  
  formattedFloat(h, 4, hs);
  formattedFloat(t, 4, ts);
  sprintf(buff, "%s,%s", ts, hs);
  if(client.connected()) {
    Serial.print("Sending ");
    Serial.println(buff);
    int result = client.publish(topic, buff);
    if(result)
      Serial.println("Message sent");
    client.disconnect();
  }
}

void loop() {
  publishData();
  delay(20000);
}

iotdb

次はESP-WROOM-02とセンサーを運用するためのデバイスに仕立てる作業です。そこまで行けば、漆乾燥室に設置できます。

kazz12211 について

Working as a OO programmer and enjoying music, bicycle and photography.

ディスカッション

コメントはまだありません。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

評価

ブログ統計

  • 582,326 ヒット

カテゴリー

アーカイブ

カレンダー

2016年3月
« 2月   4月 »
 12345
6789101112
13141516171819
20212223242526
2728293031  
%d人のブロガーが「いいね」をつけました。