กระแส SmartHome เป็นที่สนใจของเหล่า Maker กันมาก เนื่องด้วยความสะดวกสบาย และ น่าจะเพิ่มความสามารถหากับระบบไฟฟ้าที่บ้านได้อีก เหมือนใส่ไมโครคอนโทรลเลอร์เข้าไป ซึ่งทางผมได้ทดลองทำไป เวอร์ชั่นแรกไปแล้ว ผ่าน ESP8266+Arduino เมื่อประมาณตุลาคมปีที่แล้ว แต่ไม่ได้ บอกกล่าวกันมาก เป็น Version ทดลอง ดูความเป็นไปได้ของบอร์ดมากก
ด้วยความชอบส่วนตัว เกี่ยวกับ Smart Home กับ ชอบความไฮเทค แบบพอเพียง ดูเรียบง่าย แต่สะดวกสบาย (ชีวิตจะขาดๆ เกินๆ) เลยคิดว่า เดี่ยวทำโปรเจคเกี่ยวกับ Smart Home แล้วเอามาลงเป็นบทความด้วยดีกว่า น่าจะมีคนอ่านบ้าง
โปรเจคแรกที่จะทำ มาทำ Smart Plug กันแบบง่ายๆ ง่ายในที่นี้ มี code ไม่กี่บรรทัด ได้ ระบบควบคุม Smart Plug ผ่าน Wifi แล้ว
Smart Plug คืออะไร
Smart Plug บางที่เรียกว่า Smart Outlet หรือ เป็น ปลั้กไฟ ช่องจ่ายไฟ ที่ฉลาดขึ้น มีความสามารถ มากกว่าเดิม อันนี้เป็น รูปที่ได้จากการ Search ในเน็ท ส่วนมากจะเป็นของจีนนะครับ ราคาหลักพันๆ ต่อชิ้น ซึ่งมันอาจะถูกกว่าในอนาคต
ความสามารถหลัก
- ควบคุมผ่าน internet ได้ อยู่ที่ไหนในบ้าง
- ก็ดูได้ว่าเปิดไฟ หรือ ปิดไฟ
- บางอันตั้งเวลาได้
- บางอัน แจ้งตรวจได้ ถ้ามีการใช้กระแสเยอะเป็นเวลานาน
- มี Report ประมาณการใช้ไฟได้
ผมคาดว่า เดียวของแบบนี้ ราคาคงถูกลง ตอนนี้ ipcam ของจีนยังมีเลย ฮ.จิ๋ว ตอนนี้ พัฒนาจนเป็น ฮ. 4 บินพัด มีกล้องราคา พัน ต้นๆเอง แต่สำหรับ Smart Plug ของจีนในตอนนี้ ความสามารถยังไม่ถึงขั้น smart ส่วนมาก ปัญหามาจากระบบ Internet และ server มันอยู่ที่ประเทศจีน bandwidth ต่ำ สื่อสารช้า ทำให้เอาเข้าจริง มันทำงานช้า ถ้าจะเอามาใช้ หาข้อมูล confirm ก่อนนะครับ ว่ามันทำได้ดีจริงๆ แต่เป็นของมีแบรด์อเมริกา เห็นว่าทำงานได้ดี แต่ในไทยยังไม่มีใครเอามาขาย ผมเลยไม่ได้ลองครับ คงรอให้ ตลาด smart home ตื่นตัวกันก่อน
เริ่มต้นสร้างกันดีกว่า
สำหรับในบทความนี้ เป็น Version แรก เราทำแค่เปิด ปิดไฟ จากมือถือได้ก่อนแล้วกัน การออกแบบ Smart Plug อันนี้ เราจะใช้การสื่อสารผ่าน UDP ซึ่งเป็นโพรโทคอลหลักในชุดโพรโทคอลอินเทอร์เน็ต การส่งข้อมูลผ่านยูดีพีนั้น คอมพิวเตอร์จะส่งข้อมูลขนาดเล็กที่เรียกว่า เดทาแกรม (datagram) ผ่านเครือข่ายไปยังเครื่องปลายทาง โดย UDP จะไม่รับประกันความน่าเชื่อถือและลำดับของเดทาแกรม
UDP จะเป็นรูปแบบการสื่อสารแบบ Low Level มันจะไม่มี Overhead มากกว่า เหมือน http ครับ ข้อดี ส่งข้อมูลได้เร็ว แต่ ข้อเสีย อาจจะมีส่งแล้วไปไม่ถึงบ้าง แต่สำหรับผม ถ้าจะใช้ไมโครคอนโทรลเลอร์เป็นตัวควบคุม ต้อง ขออะไรง่ายๆเร็วๆ จะดีกว่า เพราะว่า ไมโครคอนโทรลเลอร์ตอนนี้ ยังช้า แรมน้อย มันยังไม่เหมาะกับ การสื่อสาร Internet ที่ซับซ้อน
อุปกรณ์ที่ใช้ NodeMCU
1. NodeMCU
2. Relay
หรือ จะใช้ Relay หรือแบบอื่นๆ ที่หาได้ง่ายก้อนะครับ อันนี้ทางผมเอาที่ผมมี ต่อแบบในรูป อีกข้างจะต่อหลอดไฟ หรือ จะต่อปลั๊ก ก็แล้วแต่ ออกแบบครับ
โปรแกรม UDP บน ESP8266
แก้ไข SSID และ Password ให้เข้ากับ Network ที่บ้าน แล้ว พร้อมใช้งาน สำหรับ Code ส่วนนี้ทดสอบการ Fix IP มาแล้วด้วย ถ้าใครอยากจะ forward port ไปใช้งานข้างนอก อันนี้ ก้อพอช่วยได้ครับ
Mobile APP
หลายคนเป็น Maker ไม่ถนัดทำ App ผมขอเสนอ UDP/TCP Server เป็นโปรแกรมทดสอบ UDP ผมก็ Config ง่ายดังภาพ
ผมทำตัวอย่างเป็นแค่โปรแกรม 2 ปุ่ม
ที่สำคัญต้อง check ตรง add carriage Return
command ที่ใส่ในแต่ล่ะปุ่ม จะเป็นแค่ on / off
ก้อทำให้เราทำ Smart Plug แบบง่ายๆ อันนี้แบบง่ายๆ จริงๆครับ ใครอยากเริ่มช่อง เป็นแก้ไขที่ code ครับ สำหรับ App มันจะมี App ดี ที่ใช้งานชื่อ NetIO ใช้ได้ถ้า Android และ iOS แต่มันเสียเงินนะครับ (แต่ถูกมาก) ถ้าใครจะใช้งานจริง แนะนำอันนี้ดีกว่า สำหรับ App แรก เอาไว้ทดสอบ android ส่ง UDP ได้ไหมเร็วๆ น่าสนใจดี
น่าจะทำโค้ดภาษาซีด้วยนะครับ เพราะบางคนอาจจะไม่ถนัดโค้ดแบบนั้น และก้เพื่อความสะดวกด้วยนะครับ
หมายถึง code c++ บน device หรือ บน mobile app ครับ
ใช้ Netio ที่เล่นมาก่อนนี้ สั่ง Node esp8266 ชุดนี้ Relay+led GPIo16 มี Connection ทำงานได้ แต่ดูเหมือน จะแปลง On และ off ไม่ออก ทำไงดี ช.ช้าง
ติดปัญหาจาก Netio เหมือนกันครับ มันต้องตั้งค่าตรงใหนมั้ยครับ รับค่าแล้วมัน reset ตลอดเลย
Netio ทำได้แล้ว โดยการ set ที่ connections. ให้เลือก sendTerminstion ส่ง Carriage reture ในทีนี้คือ เติ่ม. rn
สุดยอดไปเลยยยย
สวยและง่ายดีไหมครับ
ขอบคุณค๊าบ เดี๋ยวลองใหม่ ^ ^
เพิ่มเติมสำหรับท่านที่จะใช้ python นะครับ
import socket
import sys
host = ‘192.168.1.xx’
port = 49999
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
except socket.error:
print ‘Failed to create socket’
sys.exit()
s.sendto(‘onrn’, (host, port))
s.close()
ขอ library WiFi udp.h หน่อยได้ไหมครับ
// LCD แสดงอุณหภูมิ
#include
#include
#include
#include //add
#define DHTTYPE DHT22
#define DHTPIN D3
LiquidCrystal_I2C lcd(0x27, 16, 2);
DHT dht(DHTPIN, DHTTYPE);
void setup(){
dht.begin();
Serial.begin(9600);
lcd.begin(16,2);
lcd.init();
lcd.backlight();
}
void loop(){
float humid = dht.readHumidity();
float temp = dht.readTemperature();
lcd.setCursor(1, 0);
lcd.print(“Temp =”);
lcd.print(temp, 0);
lcd.print(“C”);
lcd.setCursor(1, 1);
lcd.print(“Humidity =”);
lcd.print(humid, 1);
lcd.print(“%”);
Serial.print(“Temp: “);
Serial.print(temp);
Serial.print(” , Humid: “);
Serial.println(humid);
}