21 พฤษภาคม 2561
การสร้างนาฬิการัฐสภาด้วยงบราคาถูก
จากข่าวการซื้อนาฬิการัฐสภาที่จะใช้งบประมาณมากมายในช่วงนี้ ทางทีมงานเป็นห่วงบ้านเมืองจึงขอแสดงวิธีที่ประหยัดกว่านั้นแต่มีประสิทธิภาพเท่ากันกับนาฬิการัฐสภาอันแสนแพง ขอแค่มีอินเตอร์เน็ตที่เสถียรเท่านั้น
อุปกรณ์ที่ใช้ในโปรเจคนี้คือ ESP8266 ซึ่งเป็นโมดูล WiFi ทำงานโดยใช้แรงดันไฟฟ้า 3.3 - 3.6V โมดูลนี้มีราคาถูกมากสามารถซื้อมาติดได้ทั่วทั้งรัฐสภาโดยใช้งบประมาณถูกมาก โค้ดโปรแกรมของเราจะเทียบเวลากับเซิฟเวอร์ time.navy.mi.th เป็นของกรมอุทกศาสตร์กองทัพเรือ หรือถ้าท่านอยากจะสร้างเซิฟเวอร์มาเองเพื่อเทียบเวลาก็ได้เช่นกันครับ
เขียนโค้ดดังนี้
#include<ESP8266WiFi.h>
#include<time.h>
/* ตั้งค่า SSID และ Password ของ WiFi เพื่อเชื่อมต่ออินเตอร์เน็ต */
const char* ssid = "ชื่อ SSID";
const char* password = "รหัส WiFi";
/* ตั้งค่า TimeZone ตามเวลาประเทศไทย */
int timezone = 7 * 3600;
/* กำหนดค่า Date Swing Time */
int dst = 0;
void setup() {
/* กำหนดค่า Baud Rate เพื่อแสดงผลทางพอร์ตอนุกรม */
Serial.begin(115200);
Serial.println();
Serial.print("Wifi connecting to ");
Serial.println( ssid );
/* เชื่อมต่อ WiFi */
WiFi.begin(ssid,password);
Serial.println();
Serial.print("Connecting");
while( WiFi.status() != WL_CONNECTED ){
delay(500);
Serial.print(".");
}
Serial.println("Wifi Connected Success!");
Serial.print("NodeMCU IP Address : ");
Serial.println(WiFi.localIP() );
/* ดึงเวลาจาก Server */
configTime(timezone, dst, "pool.ntp.org","clock.nectec.or.th");
Serial.println(" Waiting for Internet time");
while(!time(nullptr)){
Serial.print("*");
delay(1000);
}
Serial.println(" Time response....OK");
}
void loop() {
time_t now = time(nullptr);
struct tm* p_tm = localtime(&now);
Serial.println("Thailand");
/* แสดงวันเดือนปี */
Serial.print("Date ");
Serial.print(p_tm->tm_mday);
Serial.print("/");
Serial.print(p_tm->tm_mon + 1);
Serial.print("/");
Serial.print(p_tm->tm_year + 1900);
/* แสดงเวลา */
Serial.print(" Time ");
Serial.print(p_tm->tm_hour);
Serial.print(":");
Serial.print(p_tm->tm_min);
Serial.print(":");
Serial.println(p_tm->tm_sec);
/* อัพเดทเวลาทุก 1000 millisecond หรือ 1 วินาที */
delay(1000);
}
อธิบายโค้ดแต่ละส่วนไว้ใน Comment ของโค้ดแล้วนะครับ หากมีข้อสงสัยสามารถสอบถามได้ครับ
ทดลองรันโปรแกรมเพื่อแสดงเวลาทางพอร์ตอนุกรม
จากการรันโปรแกรมจะเห็นว่าโมดูล ESP8266 สามารถแสดงเวลาจากเซิฟเวอร์ได้อย่างถูกต้องแม่นยำทุกวินาที และเรายังสามารถเขียนโปรแกรมให้แสดงผลได้หลายทาง เช่น 7 Segment, LED Dot Matrix , LCD Module
โมดูล ESP8266 ยังสามารถเชื่อมต่อกับเซ็นเซอร์ต่างๆได้อีกมากมาย เช่น เซ็นเซอร์วัดอุณหภูมิและความชื้น DHT12 , SHT15 และเซ็นเซอร์อื่นๆอีกมากมาย
Please login for comment