2016/Jan/05

6. การส่งค่าที่อ่านได้จาก DHT22 Sensor ไปเก็บบน funspark.com  (Board NodeMCU V.3 พร้อม ESP8266 Wi-Fi Module)

จากตอนที่ผ่านมา 4 ได้มีการต่อ DHT22 Sensor เพื่ออ่านค่าอุณหภูมิได้แล้ว และ ตอนที่ 5 ก็ได้ทดสอบ เชื่อมบอร์ดให้สามารถติดต่อสื่อสารไร้สายผ่าน Wi-Fi ของเราได้แล้ว คราวนี้เราก็จะมาทำการส่งค่า อุณหภูมิ (Temperature) และค่าความชื้น (Humidity) ที่อ่านได้จาก DHT22 Sensor ขึ้นไปเก็บยังบน  Server Cloud Service หรือที่เรียกกันว่า Internet of Things (IoT) ของ data.sparkfun.com ซึ่งเป็นบริการเก็บข้อมูลโปรเจค ฟรีๆ (ดีจริงๆ ขอบคุณมากครับ)

เริ่มต้นโดยการเปิดไปที่เว็บไซต์ของ data.sparkfun.com จากนั้นก็ให้เลือกไปที่ปุ่ม CREATE เพื่อทำการสร้าง Data stream บน data.sparkfun.com 

 

จากนั้นทำการกรอกข้อมูล เกี่ยวกับ stream ที่เราจะสร้างขึ้นมา ที่มีเครื่องหมาย * ต้องกรอกให้ครบ  
ที่สำคัญคือชื่อของ Field ในที่นี้เราจะเก็บค่า ลำดับของอุปกรณ์ DHT Sensor (dht_no) , อุณหภูมิ (temperature) และ ค่าความชื้น (humidity)

 

เมื่อกดปุ่ม Save แล้ว เราก็จะได้ฐานข้อมูลให้พร้อมที่จะใช้งานแล้วครับ

มาทำการทดสอบดูว่า ฐานข้อมูลบน data.sparkfun.com สามารถใช้งานได้หรือไม่ โดยการนำโค้ดตัวอย่าง (Example)  ไปวางบนเว็บเบราว์เซอร์แล้ว Run ดูครับ

จากนั้นให้ทำการเปิด Public Url ตาม  ก็จะเห็นข้อมูลที่ทดสอบปรากกในฐานข้อมูลแล้วครับ

NOTE :
*  เนื่องจากผมได้ลองใช้ Delete Key ตอนแรกเข้าใจว่าเป็นการลบข้อมูลเฉยๆ  กลายเป็นว่าไปลบ ฐานข้อมูลที่สร้างไว้ เลยต้องทำฐานข้อมูลขึ้นมาใหม่ครับ คราวนี้ตัด dht_no ออกไปครับ  
** หากต้องการลบเฉพาะข้อมูลให้เลือกที่ปุ่ม Manage แล้วเข้าไป Clear แทนครับ 

 

ต่อไปก็มาทำการเขียนโค้ด

#include <DHT.h>

#include <ESP8266WiFi.h>

#define DHTPIN D1

#define LEDOnboard D4

#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);

const char* ssid     = "g-service-true";    

const char* password = "aaaaaaaaaa"; 

const char* host = "data.sparkfun.com";   

//data spart fun view : https://data.sparkfun.com/streams/dZLN9YlVLaiZpzl6Gl0a

//analog.io show graph  https://analog.io/s3ZY

const char* streamId   = "dZLN9YlVLaiZpzl6Gl0a"; // Public Key

const char* privateKey = "eEo9JDydowhR51wjMwy9"; // Private Key

//deleteKey = "l38b9QZe8xiG6wpEOpo5"; // Delete Key

void setup()

{

    digitalWrite(D4,LOW);  // LED Builtin ดับขณะเริ่มต้น

    Serial.begin(9600);   

    delay(10);

    Serial.println();

    Serial.println();

    Serial.print("Connecting to "); //แสดงข้อความ  “Connecting to”

    Serial.println(ssid);       //แสดงข้อความ ชื่อ SSID

    WiFi.begin(ssid, password); // เชื่อมต่อไปยัง AP

    while (WiFi.status() != WL_CONNECTED)   //รอจนกว่าจะเชื่อมต่อสำเร็จ

{

            delay(500);

            Serial.print(".");

    }

  Serial.println("");

  Serial.println("WiFi connected");   //แสดงข้อความเชื่อมต่อสำเร็จ 

  Serial.println("IP address: ");  

  Serial.println(WiFi.localIP());   //แสดงหมายเลข IP ของ ESP8266(DHCP)

  pinMode(LEDOnboard,OUTPUT);

  dht.begin();

}

int value = 0;

void loop() {

  ++value;

  Serial.print("connecting to ");

  Serial.println(host);

  

  // Use WiFiClient class to create TCP connections

  WiFiClient client;

  const int httpPort = 80;

  if (!client.connect(host, httpPort)) {

    Serial.println("connection failed");

    return;

  }

  float h = dht.readHumidity();

  float t = dht.readTemperature();

  if (isnan(t) || isnan(h))

  {

  Serial.println("Error reading DHT!");

  }

  else

  {

  digitalWrite(D4,HIGH);  // LED Builtin ติดเมื่อเริ่มส่งข้อมูล

  Serial.print("Humidity: ");

  Serial.println(h);

  Serial.print("Temp: ");

  Serial.println(t);

   }  

  // We now create a URI for the request

  // https://data.sparkfun.com/input/YGLG5gG75XhZVwnX7mDr?private_key=RbDbmzbAmwuloN4gR1MD&dht_no=25.06&humidity=20.66&temperature=4.78

  String url = "https://data.sparkfun.com/input/";

  url += streamId;

  url += "?private_key=";

  url += privateKey;

  url += "&humidity=";

  url +=  h ;

  url += "&temperature=";

  url +=  t ;    

  Serial.print("Requesting URL: ");

  Serial.println(url);

  // This will send the request to the server

  client.print(String("GET ") + url + " HTTP/1.1\r\n" +

               "Host: " + host + "\r\n" +

               "Connection: close\r\n\r\n");

  delay(10);

  // Read all the lines of the reply from server and print them to Serial

  while(client.available()){

    String line = client.readStringUntil('\r');

    Serial.print(line);

  }

  Serial.println();

  Serial.println("closing connection");

  digitalWrite(D4,LOW);  // LED Builtin ดับเมื่อส่งข้อมูลเรียบร้อยแล้ว

  delay(60000);

}


ทดสอบ Run ดู

 

ใช้งานได้แล้วครับ ค่า timestamp ระบบจะใส่ให้เองอัตโนมัติ ไม่รู้ว่าทำไงให้เป็น GMT+7
ลองกดปุ่ม Export to Analog.io ดูครับ

ในหน้าต่างของ analog.io ให้เลือก หน้าข้อมูลที่ต้องการให้แสดงกราฟ  กดปุ่ม Load All (ครั้งแรก ครั้งต่อไปจะเป็น ปุ่ม Refresh)

 

จบแล้วครับ สามารถใช้งาน DHT22 Sensor และทำการส่งค่าขึ้น IoT ของ sparkfun.com ผ่าน Wi-Fi ที่บ้านได้แล้วครับ

edit @ 5 Jan 2016 21:04:54 by BigTUI ^_^

edit @ 15 Mar 2016 20:11:13 by BigTUI ^_^

Comment

Comment:

Tweet


ศรีเดช ปัญจขันธ์
View full profile