ESP8266 คืออะไร
ESP8266 (อีเอสพี8266) เป็นโมดูล WiFi (ไวไฟ) ชนิดหนึ่งที่สามารถทำหน้าที่สามารถใช้งานในโหมด AccessPoint (แอคเสสพอยท์) และโหมด station (สเตชั่น) ได้ เมื่อนำมารวมกับเจ้าตัว Node MCU (โหนด เอมซียู) จึงกลายเป็น Node MCU ESP8266 (โหนด เอมซียู อีเอสพี8266) ซึ่งทำให้เป็นโมดูล ไวไฟ ที่สามารถโปรแกรมลงไปได้จึงทำให้สะดวกในการเป็น microcontroler (ไมโครคอนโทรลเลอร์) และ ไวไฟโมดูล ซึ่งจากคุณสมบัตินี้จึงทำให้เหมาะแก่การทำงานในด้าน IOT (ไอโอที) นอกจากนี้เจ้าตัว Node MCU ESP8266 ยังสามารถใช้โปรแกรมในการเขียนได้หลายภาษา เช่น ภาษา ไพธอน จาวาสคริปท์ C (ซี) ยิ่งทำให้สะดวกในการใช้บอร์ดขึ้นไปอีก แถมข้อมูลโมดูลเสริมยังมีมากมายอีกด้วยเรียกได้ว่า ครบเครื่องกันเลยทีเดี่ยว
ESP8266 (อีเอสพี8266) กับการรับข้อมูลเวลา
การใช้ ESP8266(อีเอสพี8266) นั้นไม่มีโมดูลสำหรับดูเวลาได้ แต่เราสามารถใช้ความสารถของโมดูลไวไฟเพื่อดึงเวลามาจาก server(เซอเว่อ) ที่ให้บริการได้แบบฟรีๆ โดยชื่อ server นี้ชื่อ ntp server โดยอย่างแรกนั้นเราต้องมี ตัวกระจายไวไฟ อยู่ใกล้ๆเราก่อนเช่น ไวไฟบ้าน ไวไฟมือถือ ที่เรามีรหัสผ่าน โดยที่ไม่ได้ใข้การล๊อกอินหน้าเวบในการใช้งาน เเพียงเท่านี้เราก็พร้อมที่จะทำให้ Node MCU ESP8266(โหนด เอมซียู อีเอสพี8266) แสดงเวลาจริงในประเทศไทย ไ๊ด้แล้ว
วิธีการทำ 1. ให้ใส่โค้ดหล่านี้ลงไปในโปรแกรมที่เป็น serial monitor(ซีเรียลมอนอเตอร์) ของเราเพื่อคอนเนคไวไฟ
# -*- coding: utf-8 -*-
import network
import time
sta_if = network.WLAN(network.STA_IF) #object from network
sta_if.active(True)#open station mode
sta_if.connect("ssid","password") #connect wifi ssidคือชื่อไวไฟ password คือรหัสผ่านไวไฟ
sta_if.ifconfig() # ip,netmask,gateway,DNS
time.sleep(5)
sta_if.isconnected()#check connecting
2. ต่อมาให้เราใส่โค้ดนี้เพื่อเชื่อมต่อกับ ntp-server
try:
import usocket as socket
except:
import socket
try:
import ustruct as struct
except:
import struct
# (date(2000, 1, 1) - date(1900, 1, 1)).days * 24*60*60
NTP_DELTA = 3155673600
host = "th.pool.ntp.org"
def time():
NTP_QUERY = bytearray(48)
NTP_QUERY[0] = 0x1b
addr = socket.getaddrinfo(host, 123)[0][-1]
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.settimeout(1)
res = s.sendto(NTP_QUERY, addr)
msg = s.recv(48)
s.close()
val = struct.unpack("!I", msg[40:44])[0]
return val - NTP_DELTA
# There's currently no timezone support in MicroPython, so
# utime.localtime() will return UTC time (as if it was .gmtime())
def settime():
t = time()
import machine
import utime
tm = utime.localtime(t)
tm = tm[0:3] + (0,) + tm[3:6] + (0,)
machine.RTC().datetime(tm)
print(utime.localtime())
ThTime = utime.localtime()
if (18<=ThTime[3]<=23):
ThTime[3] = ThTime[3]-24
print("เวลาในไทย = ",ThTime[3]+7,".",ThTime[4],".",ThTime[5],"น.")
3.กด run ใน ซีเรียลมอนิเตอร์จะได้ดังนี้ก็จะปรากฏ ip,netmask,gateway,DNS และข้อความ True
4.ถ้าหากเราจะเรียกดูเวลา เราก็สามารถ ใช้คำสั่ง settime() ดูเวลาได้เลย
จากที่โค้ดที่ได้นำเสนอมานั้นสามารถนำไปประยุกต์ใช้ได้อีกหลายๆด้าน ขอเพียงแค่เราอ่านโค้ดแล้วเราเข้าใจเราก็สามารนำไปใช้ได้แบบง่ายๆแล้วนะครับและที่สำคัญอินเตอร์เนตต้องไม่มีปัญหาในการใช้งานซึ่งถ้าอินเตอร์เน็ตมีปัญหาก็อาจะจะเกิดerror(เออเร่อ)ขึ้นในโปรแกรมอีกด้วย ดังนั้นทุกท่านควรจะเขียนโค้ดขึ้นมาป้องความเสี่ยงตรงนี้อีกด้วย
References ว