นโยบายการจัดการความรู้ มหาวิทยาลัยสงขลานครินทร์ 1.ให้ใช้เครื่องมือการจัดการความรู้ผลักดัน คุณภาพคน และกระบวนทำงาน 2.ส่งเสริมการแลกเปลี่ยนประสบการณ์การทำงาน จากหน้างาน 3.ส่งเสริมให้มีเวทีเรียนรู้ร่วมกัน

ServiceMan
Ico64
Sathaya Bunratchoo
Engineer
Scientific Equipment Center, PSU
Network
Members · Following: 3 · Followed: 2

อ่าน: 2705
ความเห็น: 1

Online datalogger ที่ใครๆ ก็สร้างได้ ตอนที่ 2

Online datalogger ที่ใครๆ ก็สร้างได้

  จากบันทึกก่อนหน้านี้ในตอนที่ 1

การประยุกต์ใช้ ESP8266 และ Arduino pro mini สามารถทำได้โดยการต่ออุปกรณ์ดังวงจรด้านล่าง

   เนื่องจาก ESP8266 ต้องการแหล่งจ่ายแรงดัน 3.3V และต้องการกระแสประมาณ 250 mA ขณะที่ส่งสัญญาณ WiFi ดังนั้นจึงต้องมี Regulator แยกออกมาจาก Auduino board ซึ่งไม่สามารถจ่ายกระแสได้เพียงพอ สำหรับ Arduino นั้นสามารถใช้แรงดัน 5V ได้แต่ควรมีวงจรปรับระดับแรงดันก่อนที่จะเชื่อมต่อกับ ESP8266 อย่างไรก็ตามจากการทดลอง พบว่าสามารถเชื่อมต่อกับ Arduino pro mini ที่ระดับแรงดัน 5V ได้อย่างไม่มีปัญหา

   สำหรับ Code สามารถเขียนตามด้านล่างได้เลยครับ

อ้างอิง : http://www.instructables.com/id/ESP8266-Wifi-Temperature-Logger/?ALLSTEPS

#include<stdlib.h>
#include <SoftwareSerial.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 8
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);</p><p>
#define SSID "[YOUR_SSID]"
#define PASS "[YOUR_PASSWORD]"
#define IP "184.106.153.149" // thingspeak.com
String GET = "GET /update?key=[THINGSPEAK_KEY]&field1=";
SoftwareSerial monitor(10, 11); // RX, TX

void setup()
{
  monitor.begin(9600);
  Serial.begin(9600);
  sensors.begin();
  sendDebug("AT");
  delay(5000);
  if(Serial.find("OK")){
    monitor.println("RECEIVED: OK");
    connectWiFi();
  }
}

void loop(){
  sensors.requestTemperatures();
  float tempC = sensors.getTempCByIndex(0);
  tempC = DallasTemperature::toFahrenheit(tempC);
  char buffer[10];
  String tempF = dtostrf(tempC, 4, 1, buffer);
  updateTemp(tempF);
  delay(60000);
}

void updateTemp(String tenmpF){
  String cmd = "AT+CIPSTART=\"TCP\",\"";
  cmd += IP;
  cmd += "\",80";
  sendDebug(cmd);
  delay(2000);
  if(Serial.find("Error")){
    monitor.print("RECEIVED: Error");
    return;
  }
  cmd = GET;
  cmd += tenmpF;
  cmd += "\r\n";
  Serial.print("AT+CIPSEND=");
  Serial.println(cmd.length());
  if(Serial.find(">")){
    monitor.print(">");
    monitor.print(cmd);
    Serial.print(cmd);
  }else{
    sendDebug("AT+CIPCLOSE");
  }
  if(Serial.find("OK")){
    monitor.println("RECEIVED: OK");
  }else{
    monitor.println("RECEIVED: Error");
  }
}
void sendDebug(String cmd){
  monitor.print("SEND: ");
  monitor.println(cmd);
  Serial.println(cmd);
} 
 
boolean connectWiFi(){
  Serial.println("AT+CWMODE=1");
  delay(2000);
  String cmd="AT+CWJAP=\"";
  cmd+=SSID;
  cmd+="\",\"";
  cmd+=PASS;
  cmd+="\"";
  sendDebug(cmd);
  delay(5000);
  if(Serial.find("OK")){
    monitor.println("RECEIVED: OK");
    return true;
  }else{
    monitor.println("RECEIVED: Error");
    return false;
  }
}

สำหรับ Code ตัวสีแดง SSID และ PASSWORD ก็ให้ใส่ ข้อมูล Access point ที่ต้องการเชื่อมต่อ

ในส่วน [THINGSPEAK_KEY] นั้นหลังจากสมัครที่ Web site thingspeak.com

และทำตามขั้นตอนแล้วจะได้ API KEY มาครับ

เมื่อสมัครใช้งานกับ ThingSpeak.com แล้วให้สร้าง Channel

    จากนั้นก็กรอกข้อมูลที่จำเป็น และ add field คือสร้างฐานข้อมูลที่จะเก็บข้อมูลที่ถูกส่งมาจาก ESP8266 จากภาพผมสร้าง Field Server room 111. ไว้เพื่อเก็บค่าอุณหภูมิของห้อง Server 111

    ถัดไปให้สร้าง API KEY สำหรับ Update ข้อมูลให้กับ ThingSpeak

ซึ่ง Write API Key นี่เองที่ต้องนำเอาไปป้อนใน Code ด้านบน

เราสามารถทดสอบได้โดยการป้อนข้อมูลด้วยมือเช่น

http://api.thingspeak.com/update?key=00M5X411ZAERBBVF&field1=12.34

   ให้แก้ไข Key สีแดงด้วย Write API Key ของท่านเอง Enter จากนั้นให้ Click กลับไปที่แถบ Private View ควรจะมีข้อมูล 12.34 แสดงอยู่หนึ่งจุดในกราฟ หากทำอีกครั้งแก้ 12.34 เป็นเลขที่ท่านต้องการ จุดที่สองตามข้อมูลที่ป้อนควรจะปรากฎในกราฟ

   ด้วยวิธีการนี้พอจะทำให้เข้าใจเกี่ยวกับหลักการ Update ข้อมูลสู่ ThingSpeak แล้วนะครับ เมื่อย้อนกลับไปที่ Code โปรแกรมทั้งหมดก็จะทำแบบเดียวกัน เพียงแต่จะเพิ่มเข้ามาสองส่วนคือ

  ส่วนแรก connectWifi() ใช้สำหรับเชื่อมต่อเข้าสู่ WiFi Access point

  ส่วนที่สอง ก็จะอ่านอุณหภูมิจาก Sensor วัดอุณหภูมิแล้วส่งผ่านไปที่ ThingSpeak (แทนตัวเลข 12.34 ที่เราป้อนเข้าไปตรงๆ นั่นเองครับ)

  จะเห็นได้ว่าการสร้าง Online Datalogger ไม่ยากเลยใช่ไหมครับ :)

แหล่งข้อมูลอ้างอิง

http://www.instructables.com

http://www.ayarafun.com

http://community.thingspeak.com

หมวดหมู่บันทึก: พัฒนางานประจำ
สัญญาอนุญาต: ซีซี: แสดงที่มา-ไม่ใช้เพื่อการค้า-อนุญาตแบบเดียวกัน Cc-by-nc-sa
สร้าง: 21 พฤศจิกายน 2557 20:22 แก้ไข: 21 พฤศจิกายน 2557 20:24 [ แจ้งไม่เหมาะสม ]
ดอกไม้
สมาชิกที่ให้กำลังใจ: Ico24 MK, Ico24 iHum, และ 4 คนอื่น.
สมาชิกที่ให้กำลังใจ
 
Facebook
Twitter
Google

บันทึกอื่นๆ

ความเห็น

Ico48
บอส [IP: 180.180.188.122]
09 มิถุนายน 2558 20:27
#103173

ทำแล้วไม่เห็นได้เลยครับ ใช้ arduino uno dht11 esp8266-01 มันไม่ต่อเน็ตอะครับ

ขึ้นแบบนี้ตลอด

AT

AT+CIPSTART="TCP","184.106.153.149",80

AT+CIPSEND=46

AT+CIPCLOSE

ร่วมแสดงความเห็นในหน้านี้

ชื่อ:
อีเมล:
IP แอดเดรส: 54.237.183.249
ข้อความ:  
เรียกเครื่องมือจัดการข้อความ
   
ยกเลิก หรือ