วันพฤหัสบดีที่ 4 กุมภาพันธ์ พ.ศ. 2559

NodeMCU / WittyNode ESP8266 กับการส่งข้อมูล sensor DHT11 ขึ้น CloudMQTT

1. สมัคร CloudMQTT แล้ว เพิ่ม mqtt_client_name ตามรูป

2. เข้าไปแก้ไข/เพิ่ม Details ของ mqtt_client_name ที่พึ่งเพิ่ม



3. สร้าง mqtt_user และ mqtt_pass แล้วบันทึก


4, หลังสร้าง mqtt_user แล้ว เลื่อนมาด้านล่างหน้าเดิม ในส่วน ACLs กำหนดตามรูปเลยย


5. จากนั้นแฟรช sketch โค้ดลง ESP8266 ผ่าน Arduino IDE ตามข้างล่าง
(โดยต้องลง library pubsubclient และ dht ไว้ก่อน)

โดยให้ เซนเซอร์ DHT11 ต่อสายสัญญาณเข้าที่ D5
(ไม่งั้นก็แก้ code เอา)














































ในโค็ดให้ใส่ ssid, pass, mqtt_server, mqtt_port, mqtt_user, mqtt_pass, mqtt_client_name
ให้เรียบร้อย

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


const char *ssid =  "YOUR_ACCESS_POINT";   // cannot be longer than 32 characters!
const char *pass =  "YOUR_PASSWORD";   //

const char *mqtt_server = "m10.cloudmqtt.com";   // ดูจาก cloudmqtt ตอนเพิ่ม
const int mqtt_port = 10525;                                    //  ค่านี้เลย
const char *mqtt_user = "test";                                //  ดูจาก cloudmqtt ตอนเพิ่ม
const char *mqtt_pass = "test";                                //  ดูจาก cloudmqtt ตอนเพิ่ม
const char *mqtt_client_name = "PCPanis";    // Client connections cant have the same connection name



const int dhtPin = D5;      // ต่อสัญญาณ sensor DHT11 เข้าที่ขา D5 ของ NodeMCU
//#define DHTTYPE DHT22
#define DHTTYPE DHT11
DHT dht(dhtPin, DHTTYPE, 12); // The 12 might need tuning so play with 10-15 till it works for the ESP8266
unsigned long previousMillis = 0;
const long interval = 10000;


WiFiClient wclient;
PubSubClient client(wclient, mqtt_server, mqtt_port);

void SendTempHumid();

void setup() {
  // Setup console
  Serial.begin(115200);
  delay(10);
  Serial.println();
  Serial.println();

  dht.begin();
}

void loop() {
  if (WiFi.status() != WL_CONNECTED) {
    Serial.print("Connecting to ");
    Serial.print(ssid);
    Serial.println("...");
    WiFi.begin(ssid, pass);

    if (WiFi.waitForConnectResult() != WL_CONNECTED)
      return;
    Serial.println("WiFi connected");
  }

  if (WiFi.status() == WL_CONNECTED) {
    if (!client.connected()) {
      Serial.println("Connecting to MQTT server");
      if (client.connect(MQTT::Connect("mqtt_client_name")
                         .set_auth(mqtt_user, mqtt_pass))) {
        Serial.println("Connected to MQTT server");
      } else {
        Serial.println("Could not connect to MQTT server");
      }
    }

    if (client.connected())
      client.loop();
  }

  SendTempHumid();
}

// Non-Blocking delay
void SendTempHumid(){
  unsigned long currentMillis = millis();

  if(currentMillis - previousMillis >= interval) {
    // save the last time you read the sensor
    previousMillis = currentMillis;

    float h = dht.readHumidity();
    float t = dht.readTemperature();

    if (isnan(h) || isnan(t)) {
      Serial.println("Failed to read from DHT sensor!");
      //return; This will ensure that data is always sent
    }

    Serial.print("Humidity: ");
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: ");
    Serial.print(t);
    Serial.println(" *C ");

    client.publish("/room01/DHT",String(h)+"%"+String(t)+"C" );
  }
}
-----------------------------------------------------

6. เมื่อ NodeMCU (ESP8266)
ทำงานและต่อเข้า router ที่กำหนดที่มี internet เชื่อมต่ออยู่

ค่าที่อ่านจาก sensor DHT11 จะถูกอัพขึ้น CloudMQTT ให้เลย
โดยเมื่อไปดูผลที่หน้านี้จะเห็นปรากฏให้เห็นว่ามีการส่งข้อมูลได้ถูกต้องขึ้นมาเป็นระยะๆ



เป็นอันส่งข้อมูลขึ้น CloudMQTT ได้เรียบร้อย



ไม่มีความคิดเห็น:

แสดงความคิดเห็น