AndroidArduinoEmbeded SystemInternet of thingOpen Source Hardware

มาทำ Smart Home กันเถอะ

By April 21, 2015 10 Comments

กระแส SmartHome เป็นที่สนใจของเหล่า Maker กันมาก เนื่องด้วยความสะดวกสบาย และ น่าจะเพิ่มความสามารถหากับระบบไฟฟ้าที่บ้านได้อีก เหมือนใส่ไมโครคอนโทรลเลอร์เข้าไป ซึ่งทางผมได้ทดลองทำไป เวอร์ชั่นแรกไปแล้ว ผ่าน ESP8266+Arduino เมื่อประมาณตุลาคมปีที่แล้ว แต่ไม่ได้ บอกกล่าวกันมาก เป็น Version ทดลอง ดูความเป็นไปได้ของบอร์ดมากก

ด้วยความชอบส่วนตัว เกี่ยวกับ Smart Home กับ ชอบความไฮเทค แบบพอเพียง ดูเรียบง่าย แต่สะดวกสบาย (ชีวิตจะขาดๆ เกินๆ) เลยคิดว่า เดี่ยวทำโปรเจคเกี่ยวกับ Smart Home แล้วเอามาลงเป็นบทความด้วยดีกว่า น่าจะมีคนอ่านบ้าง

โปรเจคแรกที่จะทำ มาทำ Smart Plug กันแบบง่ายๆ ง่ายในที่นี้ มี code ไม่กี่บรรทัด ได้ ระบบควบคุม Smart Plug ผ่าน Wifi แล้ว

Smart Plug คืออะไร

Smart Plug บางที่เรียกว่า Smart Outlet หรือ เป็น ปลั้กไฟ ช่องจ่ายไฟ ที่ฉลาดขึ้น มีความสามารถ มากกว่าเดิม อันนี้เป็น รูปที่ได้จากการ Search ในเน็ท ส่วนมากจะเป็นของจีนนะครับ ราคาหลักพันๆ ต่อชิ้น ซึ่งมันอาจะถูกกว่าในอนาคต

capture-20150421-094831

ความสามารถหลัก

  • ควบคุมผ่าน 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

esp8266-nodemcu-development-boards-from-tronixlabs-australia-

 

2. Relay

หรือ จะใช้ Relay หรือแบบอื่นๆ ที่หาได้ง่ายก้อนะครับ อันนี้ทางผมเอาที่ผมมี ต่อแบบในรูป อีกข้างจะต่อหลอดไฟ หรือ จะต่อปลั๊ก ก็แล้วแต่ ออกแบบครับ

โปรแกรม UDP บน ESP8266

แก้ไข SSID และ Password ให้เข้ากับ Network ที่บ้าน แล้ว พร้อมใช้งาน สำหรับ Code ส่วนนี้ทดสอบการ Fix IP มาแล้วด้วย ถ้าใครอยากจะ forward port ไปใช้งานข้างนอก อันนี้ ก้อพอช่วยได้ครับ

Mobile APP

หลายคนเป็น Maker ไม่ถนัดทำ App ผมขอเสนอ UDP/TCP Server  เป็นโปรแกรมทดสอบ UDP ผมก็ Config ง่ายดังภาพ

ผมทำตัวอย่างเป็นแค่โปรแกรม 2 ปุ่ม

Screenshot_2015-04-21-12-16-01

ที่สำคัญต้อง check ตรง add carriage Return

Screenshot_2015-04-21-12-16-07

command ที่ใส่ในแต่ล่ะปุ่ม จะเป็นแค่ on / off

Screenshot_2015-04-21-12-16-14

Screenshot_2015-04-21-12-16-18

ก้อทำให้เราทำ Smart Plug แบบง่ายๆ อันนี้แบบง่ายๆ จริงๆครับ ใครอยากเริ่มช่อง เป็นแก้ไขที่ code ครับ สำหรับ App มันจะมี App ดี ที่ใช้งานชื่อ NetIO  ใช้ได้ถ้า Android และ iOS แต่มันเสียเงินนะครับ (แต่ถูกมาก) ถ้าใครจะใช้งานจริง แนะนำอันนี้ดีกว่า สำหรับ App แรก เอาไว้ทดสอบ android ส่ง UDP ได้ไหมเร็วๆ  น่าสนใจดี

10 Comments

  • MooN says:

    น่าจะทำโค้ดภาษาซีด้วยนะครับ เพราะบางคนอาจจะไม่ถนัดโค้ดแบบนั้น และก้เพื่อความสะดวกด้วยนะครับ

  • Adul Nenlert says:

    ใช้ Netio ที่เล่นมาก่อนนี้ สั่ง Node esp8266 ชุดนี้ Relay+led GPIo16 มี Connection ทำงานได้ แต่ดูเหมือน จะแปลง On และ off ไม่ออก ทำไงดี ช.ช้าง

    • jojoonline says:

      ติดปัญหาจาก Netio เหมือนกันครับ มันต้องตั้งค่าตรงใหนมั้ยครับ รับค่าแล้วมัน reset ตลอดเลย

      • Adul Nenlert says:

        Netio ทำได้แล้ว โดยการ set ที่ connections. ให้เลือก sendTerminstion ส่ง Carriage reture ในทีนี้คือ เติ่ม. rn

        • ChANg says:

          สุดยอดไปเลยยยย
          สวยและง่ายดีไหมครับ

          • jojoonline says:

            ขอบคุณค๊าบ เดี๋ยวลองใหม่ ^ ^

          • jojoonline says:

            เพิ่มเติมสำหรับท่านที่จะใช้ 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()

  • สมพร แก้วแสง says:

    ขอ library WiFi udp.h หน่อยได้ไหมครับ

  • อนนท์ ด้วงโคตะ says:

    // 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);

    }

Leave a Reply