Important Announcement
PubHTML5 Scheduled Server Maintenance on (GMT) Sunday, June 26th, 2:00 am - 8:00 am.
PubHTML5 site will be inoperative during the times indicated!

Home Explore เอกสารประชุมปฏิบัติการ IoT (Internet of Things) ด้วย Node MCU

เอกสารประชุมปฏิบัติการ IoT (Internet of Things) ด้วย Node MCU

Published by Worawut Tangnorakul, 2019-09-18 03:04:18

Description: เอกสารประชุมปฏิบัติการ IoT (Internet of Things) ด้วย Node MCU

Keywords: IOT

Search

Read the Text Version

การประชุมปฏิบัติการศาสตร์พระราชา หนทางสู่การพัฒนาที่ยั่งยืนแห่งศตวรรษที่ 21 เพื่อพัฒนาครูให้มีทักษะในการพัฒนาคุณภาพผู้เรียนตามศาสตร์พระราชาด้วย IOT ผ่านกระบวนการเรียนรู้แบบ STEM สู่คุณภาพ Thailand 4.0 ในวันท่ี 5-6 ตุลาคม 2560 ณ โรงแรมบรรจงบรุ ี วรวฒุ ิ ตง้ั นรกลุ , เอกชยั ศรสี ขุ , อภเิ ชษฐ์ อุตสาหไสย วิทยาลยั สารพดั ชา่ งสุราษฎรธ์ านี

สารบญั บทท่ี 1 แนะนาอุปกรณ์ Arduino ESP8266 IOT Starter Kit ................................................................................................................... 1 บทท่ี 2 การพัฒนาโปรแกรมสาหรบั NodeMCU ดว้ ย Arduino IDE ..................................................................................................... 7 บทท่ี 3 การทดลอง NodeMCU ด้วย Arduino IDE .................................................................................................................................. 12 การทดลองที่ 3-1 .................................................................................................................................................................................... 13 การทดลองที่ 3-2 .................................................................................................................................................................................... 15 การทดลองท่ี 3-3 .................................................................................................................................................................................... 17 การทดลองท่ี 3-4 .................................................................................................................................................................................... 19 การทดลองที่ 3-5 .................................................................................................................................................................................... 21 บทท่ี 4 เริ่มตน้ ใชง้ าน NodeMCU กบั Netpie ........................................................................................................................................... 25 การทดลองท่ี 4-1 .................................................................................................................................................................................... 31 บทที่ 5 การประยกุ ตใ์ ชง้ าน Freeboard เชือ่ มต่อ NodeMCU ผา่ น Netpie ................................................................................... 35 การทดลองที่ 5-1 .................................................................................................................................................................................... 35 การทดลองท่ี 5-2 .................................................................................................................................................................................... 40

1 บทที่ 1 แนะนาอุปกรณ์ Arduino ESP8266 IOT Starter Kit Arduino ESP8266 Starter Kit ชุดศึกษาเรียนรู้ Arduino ESP8266 สาหรับผู้เริ่มต้น ออกแบบและแนะนา โดย ArduinoAll (https://www.arduinoall.com) สาหรับเรียนรู้ ESP8266 ที่รองรับการเรียนรู้ Arduino ESP8266 IoT ในระดับพื้นฐานให้ครบถ้วน เหมาะสาหรับเป็นชุดเร่ิมต้นศึกษาเรียนรู้ Arduino ESP8266 (สามารถเข้าไปศึกษา คอร์สสอนออนไลน์เชิงปฏิบัติการ NodeMCU Arduino ESP8266 Internet of Things (IoT) ได้ที่เว็บไซต์ https://www.arduinoall.com/article/29/ฟรี-แน่นอน-คอร์สสอนออนไลน์-เชิงปฏิบัติการ-nodemcu-arduino- esp8266-internet-of-thingsIoT) โดยไม่ต้องเสียเงินค่าเรียน พร้อมคอร์สเรียนรู้ ESP8266 ในระดับพื้นฐานที่ หลากหลาย สามารถเรียนรใู้ นหัวข้อดงั ตอ่ ไปน้ี  การใชง้ าน Arduino ESP8266 GPIO  Digital Input  Digital Output  Analog Input  Analog Output  สง่ั ควบคุมเปดิ ปิดไฟ LED  การใช้งานสวติ ช์  การอ่านคา่ จากตัวต้านทานปรบั คา่ ไดแ้ บบ Analog  อ่านคา่ ความเขม้ แสง  วดั คา่ ความช้นื และอุณหภมู ิ  การเชือ่ มต่อกับ Wi-Fi และ internet  การอา่ นค่าจากเวบ็ ไซต์ตา่ ง ๆ  การตดิ ตอ่ ฐานขอ้ มูล MySQL กบั ESP8266  การใชง้ าน ESP8266 รว่ มกบั JavaScript และ HTML  การส่งค่าเซนเซอรต์ ่าง ๆ ขึ้นไปบนอนิ เตอรเ์ น็ต  การควบคุมเปดิ /ปิดไฟ ผา่ น internet  การติดตามคา่ อณุ หภมู ิและความชืน้ ผา่ น internet จากทกุ ท่ีทวั่ โลก  การส่งขอ้ ความไปยงั Line หรอื Facebook  การส่ง Email แจ้งเตือนตา่ ง ๆ ด้วย ESP8266 และหัวข้ออื่น ๆ อีก ด้วยพ้ืนฐานที่จาเป็นเหล่านี้ ผู้ท่ีศึกษาก็จะสามารถประยุกต์กับงาน IoT สร้างสิ่งต่าง ๆ ที่ เราต้องการ Arduino ESP8266 IOT Starter Kit ประกอบดว้ ยอปุ กรณ์ ต่างๆ ดงั นี้ 1. NodeMCU มินิบอร์ดไมโครคอนโทรลเลอร์ 32 บิตที่มี Wi-Fi ในตัว บางคร้ังเรียก NodeMCU V2 หรือ Development Kit V1.0 ขึ้นกบั ผูผ้ ลิตแตล่ ะราย โดยมีพ้ืนฐานมาจากโมดลู Wi-Fi คอนโทรลเลอร์ ESP8266-12E 2. Breadboard 400 holes บอร์ดอเนกประสงค์สาหรับทดลองและเชื่อมต่อ NodeMCU กับอุปกรณ์ ภายนอก 3. ไดโอดเปลง่ แสงหรือ LED ขนาด 5mm สีแดง จานวน 5 ดวง 4. ไมโครสวติ ช์ Micro Switch กดติดปลอ่ ยดับ 6 * 6 * 5MM แบบ 2 ขา จานวน 10 ชน้ิ

2 5. DHT11 Digital Temperature and Humidity Sensor เซนเซอร์ วัดอุณหภูมิและความชื้น 2 อย่าง ในตัวเดยี วกนั 6. สาย microB-USB สาหรบั เช่ือมตอ่ กับคอมพิวเตอรผ์ ่านพอร์ต USB เพือ่ โหลดโปรแกรมและจ่ายไฟเลยี้ ง 7. สายเช่ือมต่อและทดลองวงจร สายจัมเปอร์ ผู้-ผู้, ผู้-เมียสายแพ ยาว 20 cm. แบบละ 20 เสน้ (คละสี ) 8. เอกสารประกอบการใช้งาน (เลม่ น้ี ) 1.1 NodeMCU โมดูลไมโครคอนโทรลเลอร์ 32 บิตพร้อม WiFi เพ่ือการพัฒนาอปุ กรณ์ IoT โมดูล NodeMCU หรือ V2 หรือ Development Kit V1.0 (ชื่อที่แตกต่างน้ีมาจากการเรียกของผู้ผลิต) น้ีเป็น การนาโมดูล ESP8266-12E มาต่อร่วมกับชิปแปลงสัญญาณ USB เป็น UART เบอร์ CP2102 ของ Silicon Lab มีสวิตช์เพ่ือเข้าสู่โหมดโปรแกรมเฟิร์มแวร์ มาพร้อมบรรจุรวมกันอยู่บนแผงวงจรขนาดเล็ก ที่ออกแบบมาให้ติดตั้งลง บนเบรด-บอร์ดหรือแผงต่อวงจรได้โดยยังมีรูของเบรดบอรด์เหลือให้ต่อสายเพ่ือเช่ือมต่อกับอุปกรณ์ภายนอกได้สะดวก ช่วยใหก้ ารพัฒนาตน้ แบบและการเรยี นรู้ เกี่ยวกบั IoT ทาได้งา่ ยขึน้ รปู ที่ 1-1 หน้าตาของ NodeMCU และการจัดขา คณุ สมบตั ิทางเทคนคิ ที่ สาคัญ มดี ังนี้ • ใช้โมดลู ESP8266-12E เป็น โมดลู WiFi ขนาดเล็ก ใชพ้ ลังงานต่า รองรับการใช้งานไดห้ ลากหลายรูปแบบ ท้ัง Client, Access Point และ Client+AP ภายในมีไมโครคอนโทรลเลอร์ 32 บิต หน่วยความจาแบบแฟลชความจุ 4 เมกะไบต์ มี LED แสดงสถานะในการส่อื สาร • ใช้ชิป USB เบอร์ CP2102 ในการติดต่อกับคอมพิวเตอร์เพ่ือลงโปรแกรม สามารถลง Firmware NodeMCU และเขยี นโปรแกรมด้วยภาษา Lau และ Arduino ได้ • ใช้ไฟเลี้ยงภายนอก +5V มี วงจรควบคมุ แรงดันไฟเลยี้ งสาหรับอปุ กรณ์ 3.3V กระแสไฟฟ้าสงู สดุ 800mA • มขี าพอรต์ SPI สาหรบั ตดิ ตอ่ กบั SD การ์ด • มีสวิตช์ RESET และ FLASH สาหรบั โปรแกรมเฟิร์มแวร์ใหม่ • มีอินพตุ เอาตพ์ ุตดจิ ิตอล (ลอจิก 3.3 V) รวม 16 ขา • มี LED ตอ่ ตรงกบั ขา D0 เพ่อื การทดสอบการทางานของ NodeMCU

3 • มีอินพุตอะนาลอก 1 ช่อง รับแรงดันไฟตรง 0 ถึ ง +3.3 Vdc เข้าสู่วงจรแปลงสัญญาณอะนาลอก เป็น ดิจิตอล ความละเอียด 10 บิต (ที่อินพุตมีวงจรแบ่งแรงดันเน่ืองจากอินพุตอะนาลอกของ ESP8266-12E รับแรงดันได้ เพยี ง 0 ถึง 1 V มกี ารตอ่ ตัวตา้ นทานเพอ่ื ชว่ ยลดแรงดนั ลงจาก +3.3 V ให้เหลือไม่ เกิน 1.0 V) • เสยี บลงบนเบรดบอร์ดเพ่ือทาการทดลองได้ทนั ที หรือนาไปตดิ ต้ังบนแผงวงจรประยุกต์ทอี่ อกแบบขึ้นเองได้ สะดวก 1.2 Breadboard 400 holes บอรด์ อเนกประสงคส์ าหรบั ทดลองและเชอ่ื มตอ่ อปุ กรณ์ ภายนอก ในการใชง้ านโมดลู NodeMCU หรือ V2 หรือ Development Kit V1.0 ง่ายทส่ี ดุ กเ็ พยี งเสียบโมดลู ลงบนเบรด บอร์ด แล้วต่อสายเข้ากับพอร์ต USB ของคอมพิวเตอร์ ก็จะทาการพัฒนาและอัปโหลดโปรแกรมได้แล้ว ด้านไฟเล้ียงก็ ใช้จากพอร์ต USB หากต้องการใช้งานแบบโดยลาพังจะต้องจัดหาแหล่งจ่ายไฟภายนอกเพิ่มเติม ซ่ึงท่ีหาได้ง่ายและ สะดวกคือ เพาเวอร์แบงก์ (power bank) เนอื่ งจากใหแ้ รงดนั +5V แล้วใช้ สาย Micro-USB เชือ่ มต่อ รูปที่ 1-2 บอรด์ อเนกประสงคส์ าหรับทดลองและเช่อื มต่ออปุ กรณ์ภายนอก 1.2.1 คณุ สมบตั ิทางเทคนคิ ทีส่ าคัญ • จุดรวมทั้งหมด 400 จุด พื้นท่ีเช่ือมต่อวงจรไอซี 300 จุดเชื่อมต่อและแถบกระจาย 50 จุดแบบเชื่อมต่อถึง กนั สี่แถบ • ผลิตด้วยพลาสติก ABS พร้อมพิมพ์สญั ลักษณส์ ีดาและสบี นแถบกระจาย • เชอื่ มต่อดว้ ยทองแดงชบุ ฟอสเฟอรก์ ับนกิ เกลิ รองรบั การเสียบอปุ กรณ์ได้ 50,000 ครั้ง • รองรับเสน้ ลวดขนาด 21 ถึง 26 AWG (0.016 - 0.028 \"/ 0.4 - 0.7mm diameter) • รองรับแรงดนั ใช้งาน 36 โวลต์ กระแส 2 แอมป์ • มีเทปกาวพรอ้ มใชง้ านสาหรับยึดติดกบั พื้นผิวที่ต้องการ รูปที่ 1-3 ขนาดของเบรดบอรด์ 400 จดุ

4 1.2.2 การเชอื่ มต่อภายใน การเช่ือมต่อภายในประกอบด้วย คอลัมน์แนวต้ัง 60 แนว (เส้นสีเขียว) ในพ้ืนที่ต่อวงจรและ 4 \"แถบ\" ในแนวนอน (เส้นสีแดงและฟ้า) สาหรบั จ่ายไฟเลยี้ งและกราวด์ หมายเหต:ุ สามารถใชแ้ ถบกระจายเพอ่ื สง่ สญั ญาณอ่ืน ๆ ได้ หากไม่ตอ้ งการใชส้ ่งไฟเลย้ี งหรือกราวด์ รูปที่ 1-4 การเชอ่ื มต่อภายในของเบรดบอรด์ 400 จุด 1.3 Light emitting diodes (LED) ไดโอดเปลง่ แสง ไดโอดแปลงแสง หรือ LED การท่ีเราสามารถมองเห็นแสงของ LED น้ันเป็นเพราะภายในตัว LED เมื่อได้รับ แรงดันไฟฟ้า จะปล่อยคลื่นแสงออกมา โดยความถ่ีของคลื่นแสงที่ความถี่ตา่ งๆกัน จะทาให้เรามองเห็นเป็นสีตา่ ง ๆ กัน ไปด้วย หลอด LED ที่เราเห็นมีขายกันตามร้านอุปกรณ์อิเล็กทรอนิกส์น้ันมีหลายแบบ แต่ละแบบนั้นจะมีหลักการ ทางานเหมอื นกัน รูปที่1-5 แสดงโครงสร้าง สญั ลักษณแ์ ละการตอ่ ใชง้ านของไดโอดเปล่งแสง 1.4 ไมโครสวิตช์ กดติดปล่อยดับ 6 * 6 * 5MM ไมโครสวิตช์หรือ Push button คือ สวิตช์ที่ใช้วงจรอิเล็กทรอนิกส์ชนิดหน่ึง มีหน้าท่ีควบคุมการเปิดและปิด ของวงจรส่วนนน้ั ๆ โดยทัว่ ไปอาจมี 2 ขา หรือ 4 ขา โดยปุ่มกดติดปล่อยดับน้ัน เมื่อทาการกดจะเป็นการปิดวงจร ทาให้กระแสไฟฟ้าสามารถไหลผ่านวงจรได้ เมื่อ ไม่ได้กด จะทาให้วงจรเปิด กระแสไฟฟ้าจะไมส่ ามารถไหลผ่านวงจรได้

5 รูปที่ 1-6 รูปร่างของไมโครสวิตชห์ รือ Push button Switch (http://commandronestore.com) การทางานแยกเป็น 2 ส่วน คอื ตอนท่ยี ังไม่กด (Not Pressed) และ ตอนทกี่ ด (Pressed) จดั วางไมโครสวิตช์ ดังรูปที่ 1-6 กรณี 4 ขา โดยให้ขาของสวิตช์อยู่ด้านหน้าและหลงั ของปุ่ม ส่วนดา้ นหลังขวากับหลังซ้าย เป็นขา 1 กบั 2 และด้านหนา้ ขวากบั หนา้ ซา้ ย เป็นขา 3 กบั 4 ตามลาดบั กรณที ีม่ ี 2 ขา ด้านขวา เป็นขา 1 ดา้ นซ้าย เปน็ ขา 2 เมื่อวงจรเปดิ (Not Pressed) : ขา 1 (ซึง่ เช่อื มตอ่ กับขา 3 ) แยกออกจาก ขา 2 (ซึ่งเชื่อมตอ่ กับขา 4) เมื่อวงจรปิด (Pressed) : ขา 1 (ซึ่งเช่ือมต่อกับขา 3) เช่ือมต่อกับ ขา 2 (ซึ่งเช่ือมต่อกับขา 4) หรือขาท้ังหมด เชอ่ื มตอ่ ถึงกนั คุณสมบตั ขิ องป่มุ กดติดปล่อยดับ 2 และ 4 ขา • Size 6 x 6 x 5 mm (กวา้ ง 6 mm ,ยาว 6 mm ,ตวั ป่มุ สูง 5 mm) • On / Off Button Switch • ทนแรงดันแนะนา ไม่เกิน 12 V (ทนไดส้ งู สดุ 250 Vac 1 นาท)ี • ทนกระแส 50 mA • น้าหนกั โดยประมาณ 10 กรัม 1.5 DHT11 Digital Temperature and Humidity Sensor เซนเซอร์ วัดอุณหภูมิและ ความช้ืน 2 อย่างในตัวเดียวกัน รายละเอียด DHT11 Digital Temperature and Humidity Sensor • แรงดนั ไฟเล้ยี ง 3 to 5V power and I/O • ตอ้ งการกระแส 2.5mA สูงสุด • เหมาะสาหรับวัดความชน่ื ระดบั 20-80 % โดยมคี วามผดิ พลาดในการวดั ไม่เกิน 5% • เหมาะสาหรับวัดอุณหภูมิ 0-50°C โดยมีความผิดพลาดในการวัดไมเ่ กนิ ±2°C • ความถใ่ี นการวดั 1 Hz (อ่านค่าไดว้ นิ าทลี ะคร้งั ) • ขนาด 15.5mm x 12mm x 5.5mm • ขาเชือ่ มตอ่ 4 ขา ใชพ้ ื้นท่ีในการวางขา 0.1\" รปู ที่ 1-7 แสดง DHT11 และการจัดขา (https://www.arduinoall.com/product/92/dht11)

6 1.6 สายเช่ือมต่อและทดลองวงจร สายจมั เปอร์ ผู้-ผ,ู้ ผ-ู้ เมียสายแพ ยาว 20 cm. สายจัมเปอร์ ผู้-ผู้, ผู้-เมีย ใช้เช่ือมต่อระหว่างบอร์ด NodeMCU อุปกรณ์เซ็นเซอร์ต่าง ๆ และเชื่อมต่อ ระหวา่ งเบรดบอร์ด กบั อุปกรณเ์ ซ็นเซอร์ (กรณีเสียบ NodeMCU ลงเบรดบอรด์ ) รูปที่ 1-8 สายเชอื่ มต่อและทดลองวงจร (https://www.arduinoall.com/product/136/สายจัม-ผ-ู้ เมยี ) 1.7 สาย microB-USB เปน็ สาย Micro USB ยาว 1.2 เมตร ใชส้ ายไฟ OFC ความตา้ นทานต่า เพื่อสอ่ื สารระหวา่ ง USB Port ของ คอมพวิ เตอร์หรือโน๊ตบุ๊ค กบั โมดลู NodeMCU รูปท่ี 1-9 สาย micro usb สาหรบั โปรแกรม NodeMCU (https://www.arduinoall.com/product/787/micro-usb-cable)

7 บทท่ี 2 การพัฒนาโปรแกรมสาหรบั NodeMCU ดว้ ย Arduino IDE การพฒั นาโปรแกรมเพ่อื ใชง้ าน NodeMCU ทาไดด้ ้วยโปรแกรมภาษา Lua และ C/C++ สาหรบั ในทนี่ เี้ ลอื กใช้ โปรแกรมภาษา C/C++ โดยใช้เคร่ืองมือพัฒนาที่ได้รับความนิยมสูงน่ันคือArduino IDE โดยมีนักพัฒนาอิสระชื่อ Christian Klippel ได้เร่ิมต้นพฒั นาเครอ่ื งมอื ทชี่ อื่ วา่ Esptool โดยใช้ขอ้ มูลจาก Espressif SDK ทพ่ี ัฒนาโดย Espressif ผู้ผลิตโมดูล ESP8266 จากน้ัน Ivan Grokhotkov ชาวรัสเซีย จากเซนต์ปีเตอร์สเบิร์กได้ เข้ามาสานต่อและพัฒนาด้วย การเพิ่มคอมไพเลอร์สาหรับ NodeMCU ลงใน Arduino IDE ก่อให้เกิดเป็น Arduino IDE รุ่นพิเศษมีข้อมูลและ โปรแกรมให้ดาวน์โหลดที่ https://github.com/esp8266/arduino โดยมีข้ันตอนตามปกติคือติดตั้ง Arduino IDE เวอรช์ ัน 1.8.xx กอ่ นจากนัน้ จึงผนวกคอมไพเลอร์ สาหรับ ESP8266 ซ่งึ กค็ ืออุปกรณห์ ลักของNodeMCU ซงึ่ ในขัน้ ตอน นี้ต้องทาการเช่ือมตอ่ กับเวบ็ ไซต์ ของผู้พัฒนาและดาวน์โหลดโปรแกรมลงมาผนวกเข้ากับ Arduino IDE โดยปกติจะใช้ เวลานานพอสมควรจึงจะใช้งาน Arduino IDE ในการพฒั นาโปรแกรมให้แก่ NodeMCU หรอื โมดูล ESP8266 ทกุ รนุ่ ได้ 2.1 Arduino1.8.2_IoT_Setup170530 Arduino IDE for ESP8266 เพื่อความสะดวกบริษทั อนิ โนเวตีฟ เอก็ เพอริเมนต์ จากัด หรือ INEX ไดท้ าไฟล์ติดต้งั ซอฟต์แวร์ Arduino IDE for ESP8266/NodeMCU เป็นไฟล์ Arduino1.8.2_IoT_Setup170530 โดยตัดขั้นตอนการผนวกไฟล์ และแก้ไขไฟล์ องค์ประกอบหลังจากการติดต้ัง ให้ง่ายเหมือนการติดตั้งโปรแกรมประยุกต์ท่ัวไปน่ันคือ ดับเบิลคลิกไฟล์ติดต้ัง คลิกป่มุ เพอ่ื ตอบรบั การติดต้งั โปรแกรม รอจนกระท่งั การตดิ ตัง้ เสรจ็ สมบูรณ์ ก็ใชง้ านได้ทันที 2.2 ตดิ ตั้งโปรแกรมและไดรเวอร์ 2.2.1 ดาวน์โหลดไฟล์ Arduino1.8.3_IoT_Setup170714.exe ท่ี INEX จัดทา โดยไม่มีค่าใช้จ่ายที่เว็บไซต์ http://www.inex.co.th/store/software/Arduino1.8.3_IoT_Setup170714.exe รูปที่ 2-1 ซอฟตแ์ วร์ Arduino สาหรับ Internet of Things (IoT) NetPie Version

8 2.2.2 ดับเบ้ิลคลิกเพื่อสั่งให้ไฟล์ติดตั้งทางาน จะปรากฏข้อความต้อนรับการติดต้ังโปรแกรมคลิกปุ่ม Next และปุ่ม ตอบรับในทุกข้ันตอนจนกระท่ังติดตั้งโปรแกรมเสร็จส้ิน คลิกเอาเครื่องหมายถูกหน้า Run SetDefualtSketch.exe ออก จากนน้ั คลิกปุ่ม Finish 2.2.3 ตดิ ตั้งไดรเวอรข์ องอุปกรณ์ คลกิ ปุ่ม Next จนกระทงั่ ตดิ ตั้งโปรแกรมเสรจ็ สิน้ จากนนั้ คลิกปมุ่ Finish 2.2.4 ติดต้ังไดรเวอร์ของอุปกรณ์ CP210X คลิกปุม่ Next คลิก  I accept this agreement จากนั้นคลิกปมุ่ Next จนกระท่ังติดตั้งโปรแกรมเสร็จส้นิ จากนน้ั คลิกปุ่ม Finish

9 2.2.5 ติดตัง้ ไดรเวอรข์ อง Parallax คลกิ ปุ่ม Install จากนัน้ คลิกปุ่ม Finish 2.2.6 การติดตั้งเสร็จสมบูรณ์ จะได้ ArduinoIDE ท่ีพร้อมสาหรับการพัฒนาโปรแกรมให้กับโมดูล ESP8266 และ NodeMCU 2.3 ทดสอบโปรแกรมเบ้อื งตน้ 2.3.1 เช่ือมต่อโมดูล NodeMCU กบั พอร์ต USB โดยเสียบโมดลู NodeMCU ลงบนเบรดบอร์ด ดงั รูปท่ี 2-2 จากนั้น ตอ่ สาย microB-USB เขา้ กับโมดลู NodeMCU และพอรต์ USBของคอมพิวเตอรร์ อสกั คร่เู พ่ือใหก้ ารเชื่อมต่อสมบูรณ์ รูปที่ 2-2 ทดสอบการทางานเบอ้ื งต้นของ NodeMCU บนแผงตอ่ วงจรหรอื เบรดบอรด์ 2.3.2 ตรวจสอบพอร์ตเชื่อมต่อท่ีเกิดข้ึนจากไดรเวอร์ ของ NodeMCU ได้ท่ี Control panel> System > Hardware > Device Manager > Port สังเกตหวั ข้อ Silicon Labs CP210x USB to UART Bridge (COMxx) ในทีน่ ี้ คอื COM3

10 2.3.3 เปิดซอฟตแ์ วร์ ArduinoIDE 1.8.3 แลว้ เลือกฮารด์ แวรโ์ ดยไปทีเ่ มนู Tools > Board > NodeMCU 1.0 (ESP- 12E Module) 2.3.4 เลอื กพอร์ตเชือ่ มตอ่ โดยไปที่ เมนู Tools > Port > COM 3 2.3.5 จะไดข้ อ้ มูลการเชอื่ มต่อ ในภาพรวม ดังนี้

11 2.3.6 เปิดโปรแกรมตัวอย่างต่อไปน้ี เลือกที่เมนู File > Example > Basics > Blink จะได้โค้ดตัวอย่างไฟกระพริบ ดงั รปู 2.3.7 อัปโหลดโค้ด คลิกท่ีปุ่ม Upload หรือเลือกเมนู Sketch > Upload หรือกดคีย์ Ctrl ตามด้วย U ซอฟต์แวร์จะ ทาการคอมไพล์โค้ด (compiling) เม่ือเสร็จแล้วจะแสดงผลการคอมไพล์ขนาดไฟล์ พ้ืนที่ เหลือของหน่วยความจา ตาม ด้วยการอัปโหลดโค้ด แสดงสถานการณ์อัปโหลดด้วยจุดไข่ปลาสีแดง ..... ที่หน้าต่างสถานะ พร้อมกันนั้น LED แสดง สถานะการอปั โหลดบนบอร์ด NodeMCU (ซ่ึงต่อกับขาพอร์ต D4 หรื อ GPIO2) จะติดกะพริบตามจังหวะการถ่ายทอด ข้อมูล การอัปโหลดโค้ดจะใช้เวลาประมาณ 30 วินาทีเมื่ออัปโหลดโค้ดไปยังบอร์ดได้สาเร็จ จะแสดงข้อความ Done uploading ทีช่ ่องแสดงสถานะ เมื่ออัปโหลดโค้ดเสร็จ NodeMCU จะเร่มิ ทางานทันที LED สีนา้ เงนิ ตาแหน่ง D4 บน โมดูล NodeMCU กะพริบถ่ี ๆ ตามจงั หวะการส่อื สารข้อมลู LED ทีต่ าแหนง่ D0 บนโมดลู NodeMCU กะพริบทุกๆ วนิ าที

12 บทที่ 3 การทดลอง NodeMCU ดว้ ย Arduino IDE 3.1 ขนั้ ตอนการพฒั นาโปรแกรมภาษา C/C++ เพ่ือใชง้ าน NodeMCU ขนั้ ตอนการพฒั นาโปรแกรมสาหรับโมดลู Wi-Fi คอนโทรลเลอร์ NodeMCU แสดงเปน็ แผนภาพดังรปู ท่ี 3-1 1. คอมพวิ เตอร์ ทาการตดิ ตัง้ ซอฟตแ์ วร์ - Arduino1.8.3 ซอฟต์แวร์พฒั นาโปรแกรมภาษา C/C++ มที ง้ั ส่วนของเทก็ ซเ์ อดเิ ตอร์สาหรับเขียน โปรแกรม, ไฟล์ไลบรารี ESP8266wifi.h, คอมไพเลอร์ และส่วนของการอปั โหลดโคด้ ไปยังโมดูล NodeMCU- 12E - ไดรเวอรอ์ ปุ กรณ์ USB ของโมดลู NodeMCU เปน็ ไดรเวอรส์ าหรับชิป CP2102 เป็นตัวแปลง สญั ญาณพอร์ต USB เปน็ พอรต์ อนกุ รมแบบ UART 2. NodeMCU เช่อื มต่อโมดูล กับพอร์ต USB - ต่อสาย microB-USB เขา้ กบั พอร์ต USB ของคอมพิวเตอรแ์ ละโมดลู NodeMCU2. - ตรวจสอบตาแหนง่ USB Serial port (COMx) ทเี่ กดิ ขึ้น - เลอื กฮารด์ แวร์เป็น NodeMCU1.0 (ESP8266-12E) 3. Arduino IDE พฒั นาชดุ คาสัง่ - สรา้ งไฟล์สเกต็ ช์เขยี นโปรแกรมภาษา C บน Arduino IDE - คอมไพล์ และอัปโหลดโปรแกรม (ประมาณ 45 วนิ าท)ี 4. NodeMCU รนั โปรแกรม - หลังจากอัปโหลดโปรแกรมเสรจ็ สมบูรณแ์ ล้ว (Done Uploading) จากนั้นระบบจะเร่มิ ทางานทนั ที รูปที่ 3-1 แสดงผังงานของการพัฒนาโปรแกรมเพ่ือควบคมุ การทางานของโมดูล NodeMCU ดว้ ยภาษาC/C++ โดยใช้ ArduinoIDE 1.8.3

13 3.2 หลกั การเขียนโปรแกรมภาษา C/C++ ด้วย Arduino IDE สาหรับ NodeMCU ในการเขียนโปรแกรมภาษา C/C++ สาหรับโมดู ล NodeMCU โดยใช้ภาษาของ Arduino (Arduino programming language) ผู้พัฒนาโปรแกรมควรมีความเข้าใจในส่วนประกอบของโปรแกรมซ่ึงแบ่งได้ เป็น 2 ส่วน หลักคือ 1. โครงสร้างภาษา (structure) ตวั แปรและคา่ คงที่ 2. ฟังก์ชั่น (function) ภาษาของ Arduino จะอ้างอิงตามภาษา C/C++ จึงอาจกล่าวไดว้ ่าการเขียนโปรแกรมสาหรับ Arduino คือ การเขียนโปรแกรมภาษา C โดยเรียกใช้ฟังก์ชั่นและไลบรารีท่ีทาง Arduino ได้เตรียมไว้ให้แล้ว ซึ่งสะดวกและชว่ ยให้ผู้ ที่ไม่มีความรู้ด้านไมโครคอนโทรลเลอร์อย่างลึกซึ้งสามารถเร่ิมต้นเขียนโปรแกรมส่ังงานได้โปรแกรมของ Arduino แบ่ง ไดเ้ ป็นสองส่วนคือ void setup() และ void loop() โดยฟังก์ชั่น setup() เมื่อโปรแกรมทางานจะทาคาสั่งของฟังก์ช่ันน้ีเพียงคร้ังเดียว จึงเหมาะท่ีจะใช้ใน การกาหนดค่าเริ่มต้นของการทางาน โดยปกติใช้กาหนดโหมดการทางานของขาต่าง ๆ ส่วนฟังก์ช่ัน loop() เป็น ส่วนทางานโปรแกรมจะทาคาส่ังในฟังก์ช่ันนี้ต่อเน่ืองกันตลอดเวลา เช่น อ่านค่าอินพุต ประมวลผล สั่งงานเอาต์พุต ฯลฯ สาหรับการกาหนดค่าเริ่มต้น เช่น ตัวแปรจะต้องเขียนที่ส่วนหัวของโปรแกรมก่อนถึงตัวฟังก์ช่ัน นอกจากนั้นยัง ตอ้ งคานงึ ถงึ ตัวพิมพเ์ ลก็ -ใหญ่ของตัวแปรและชือ่ ฟังกช์ ั่นให้ถกู ต้องดว้ ย 3.2.1 สว่ นของฟงั ก์ชั่น setup() ฟังก์ชั่นน้ีจะเขียนท่ีส่วนต้นของโปรแกรม ทางานเมื่อโปรแกรมเริ่มต้นเพียงครั้งเดียว ใช้เพื่อกาหนดค่าของ ตัวแปร โหมดการทางานของขาตา่ งๆ เร่มิ ต้นเรียกใช้ ไลบรารี ฯลฯ 3.2.2 ส่วนของฟังก์ชั่น loop() หลังจากเขียนฟังก์ชั่น setup() เพื่อกาหนดค่าเร่ิมต้นของโปรแกรมแล้ว ส่วนถัดมาคือฟังก์ช่ัน loop() ซ่ึงมีการทางานตรงตามชื่อคือ จะทางานตามฟังกช์ ั่นนี้วนต่อเนื่องตลอดเวลา ภายในฟังก์ชั่นนี้ จะมีโปรแกรมของผู้ใช้ เพ่ือรับค่าจากพอร์ต ประมวล แล้วสงั่ เอาต์พุตออกขาตา่ ง ๆ เพื่อควบคุมการทางานของบอรด์ ลาดบั ข้นั การทดลองที่ 3-1 1. ตอ่ วงจรตามรูปที่ 3-2 เพือ่ ใช้ทดสอบการทางาน รูปที่ 3-2 วงจรทดลองใช้งานขาพอร์ตเอาตพ์ ตุ ของ NodeMCU เพอื่ ขับ LED

14 2. เขยี นคาสง่ั ตามตวั อยา่ งที่ 3-1 บนั ทึกไฟลเ์ ป็น EX3_1.ino คอมไพล์ และอัพโหลด ตัวอยา่ งที่ 3-1 int ledPin = D1; void setup(){ pinMode(ledPin, OUTPUT); } void loop(){ digitalWrite(ledPin,HIGH); delay(500); digitalWrite(ledPin,LOW); delay(500); } จากตวั อยา่ งน้ีฟังกช์ น่ั setup() ใชก้ าหนดขาพอร์ D1 ของโมดลู NodeMCU ทีอ่ ้างองิ ด้วยชอื่ ledPin ใหเ้ ปน็ ขาพอร์ตเอาตพ์ ตุ ดจิ ิตอล ฟงั กช์ นั่ loop()เปน็ การส่ังใหข้ าพอร์ต D1 ทอี่ า้ งอิงดว้ ยชอ่ื ledPin มสี ถานะเปน็ “1” (HIGH) และ “0” (LOW) สลบั กันทุกๆ 0.5 วินาทีและวนทางานเช่นนี้ไปตลอด 3.3 การทดลองติดตอ่ กับอุปกรณอ์ นิ พุตเอาต์พุต ก่อนท่ีจะเข้าสู่ข้ันตอนการพฒั นาอุปกรณ์ IoT ดว้ ย NodeMCU ขั้นตอนหน่ึงท่ีสาคัญและผู้พฒั นาควรให้ความ สนใจคือ การพัฒนาโปรแกรมเพ่ือใช้งานโมดูล NodeMCU ในการติดต่อกับอุปกรณ์อินพุตเอาต์พุตภายนอกพ้ืนฐาน เชน่ LED และติดตอ่ กบั ตวั ตรวจจบั ทัง้ แบบอะนาลอกและแบบดจิ ติ อลท่ีต้องใช้การส่ือสารขอ้ มูลอนกุ รมผ่านระบบบัส ท้ังนี้เพื่อให้แน่ใจว่าการทางานของฮาร์ดแวร์ ท้ังในการรับค่าจากตัวตรวจจับและอุปกรณ์อินพุตต่างๆ กับการ ส่งสัญญาณหรือข้อมูลไปยังอุปกรณ์เอาต์พุตเป็นไปอย่างถูกต้อง เมื่อเข้าสู่ กระบวนการเช่ือมต่อกับเครือข่าย อินเทอร์เน็ตแล้ว การพัฒนาต่อจากน้ันจะถูกโฟกัสไปยังกระบวนการทางซอฟต์แวร์เป็นหลัก ไม่ว่าจะเป็นการนาข้อมูล ไปแสดงผลในรูปของกราฟิกแบบต่างๆ การประมวลผลและจัดเก็บฐานข้อมูล การดูแลรักษาด้านความปลอดภัยของ ขอ้ มลู หากการทางานทางฮาร์ดแวร์ ไม่มีความแน่นอนหรือไม่เสถียร ข้อมูลที่ได้รับหรือส่งต่อจากการเชื่อมต่อกับ อุปกรณ์ฮาร์ดแวร์ จะไม่เกิดประโยชน์ส่งผลให้อุปกรณ์ IoT ตัวน้ันๆ ล้มเหลวในการนาไปใช้งานอย่างส้ินเชิง นั่น หมายความวา่ ในการพฒั นาอุปกรณ์ IoT จะต้องมีความสมบูรณ์พรอ้ ม ท้งั ฮาร์ดแวร์ ซอฟตแ์ วร์ การจัดการด้านเครือขา่ ย และการบรหิ ารพื้นท่ีหน่วยความจา จงึ จะทาใหอ้ ปุ กรณ์ IoT ตัวน้นั ๆ หรือระบบนนั้ ๆ ทางานไดอ้ ย่างมปี ระสทิ ธภิ าพ ผูพ้ ัฒนาสามารถนาเอาอปุ กรณ์อิเล็กทรอนกิ สพ์ ้ืนฐาน และเซน็ เซอรท์ ี่มอี ย่ใู นชุดตามรูปที่ 3-3 โดยดจู ากวงจรท่ี ใชใ้ นการทดลอง แล้วทาการต่อวงจรโดยใชส้ ายเช่อื มต่อโดยตรงหรือเชอ่ื มต่อผ่านเบรดบอรด์ก็ได้ เพ่ือการเรียนรู้ทักษะ พืน้ ฐานที่จาเป็น ตามท่ีไดก้ ล่าวมา รปู ท่ี 3-3 อปุ กรณท์ างฮารด์ แวร์ทั้งหมดท่ี ใช้ในการเรยี นรูแ้ ละทดลองพื้นฐานท่ีจาเปน็

15 3.3.1 ตวั อยา่ งการติดต่ออุปกรณอ์ นิ พตุ เอาต์พุตพื้นฐานของโมดลู NodeMCU ข้ันตอนการพัฒนาโปรแกรมในแต่ละตัวอย่างในหัวขอ้ นี้จะเหมือนกนั น่ันคอื เปิดซอฟต์แวร์ ArduinoIDE 1.8.3 ที่ปรับปรุงโดย INEX สาหรับพัฒนาโปรแกรมให้กับโมดูล NodeMCU ทาการเขียนโปรแกรม คอมไพล์ และอัปโหลดลง บนโมดูล NodeMCU จากน้ันต่อวงจรเพ่ือทดสอบการทางานการต่อวงจรสาหรับเช่ือมต่อกับอุปกรณ์อินพุตเอาต์พุต ให้แกโ่ มดูล NodeMCU ซ่งึ ผูท้ ดลองสามารถตอ่ วงจรบนเบรดบอร์ดได้ สิ่งสาคญั ที่ตอ้ งเนน้ ยา้ คือ 1. การจา่ ยไฟให้แกโ่ มดลู NodeMCU ทาได้ 2 ทาง น่ันคือ จา่ ยไฟผา่ นทางพอรต์ USB หรอื จ่ายไฟ +5V เข้าท่ี ขา +Vcc ของโมดูล NodeMCU แต่ตอ้ งไม่ทาพรอ้ มกนั 2. ในการเขยี นโปรแกรมตอ้ งเลือกฮารด์ แวรห์ รอื Tool > Board > NodeMCU1.0 (ESP-12E module) และ เลือกช่องการเช่ือมตอ่ ในเมนู Tool > Port ให้ถูกตอ้ งกอ่ นทาการคอมไพลแ์ ละอัปโหลดโคด้ โปรแกรม ลาดบั ขน้ั การทดลองท่ี 3-2 1. ต่อวงจรตามรปู ที่ 3-4 เพ่อื ใช้ทดสอบการทางาน รูปท่ี 3-4 วงจรทดลองใช้งานขาพอรต์ อนิ พตุ ของ NodeMCU รับค่าสวิตชเ์ พือ่ ขบั LED 2. เขียนคาสงั่ ตามตวั อย่างที่ 3-2 บนั ทกึ ไฟล์เป็น Ex3_2.ino คอมไพล์ และอพั โหลด ตวั อยา่ งที่ 3-2 // Define D1 as switch pin // Define D2 as LED pin #define sw1 D1 #define ledPin1 D2 int st_sw1 = 0; void setup(){ // Set pin as output pinMode(ledPin1, OUTPUT); // set pin as input pinMode(sw1, INPUT); }

16 void loop(){ st_sw1 = digitalRead(sw1); // Read input if (st_sw1 == 0){ digitalWrite(ledPin1,HIGH); // ON output } else{ digitalWrite(ledPin1,LOW); // OFF output } ผลการทางานจากตัวอย่างน้ีฟังก์ชั่น setup() ใชก้ าหนดโหมดการทางานของขาพอร์ตของโมดลู NodeMCU ท่ี ขาพอร์ต D2 อ้างอิงด้วยช่ือ sw1 ให้เป็นขาพอร์ตอินพุตดิจิตอลและขาพอร์ต D0 อ้างอิงด้วยชื่อ ledPin1 ให้เป็น ขาพอร์ตเอาต์พตุ ดจิ ติ อล ฟังก์ช่ัน loop() เป็นชุดคาสั่งให้อ่านค่าจากขาพอร์ต sw1 ไปเก็บไว้ในตัวแปร st_sw1 จากน้ันนาไป เปรียบเทียบ ด้วยคาส่ัง if (st_sw1 == 0) ถ้ามีสถานะเป็น “0” (LOW, ผู้ใช้กด sw1) จะส่ังให้ขาพอร์ต ledPin1 มีสถานะเป็น “1” (HIGH, หลอด led ติดสว่าง) หากผู้ใช้ผู้ใช้ไม่กด sw1 จะสั่งให้ขาพอร์ต ledPin1 มสี ถานะเป็น “0” (LOW, หลอด led ดับ)และวนทางานเชน่ น้ไี ปตลอด 3.4 ใช้งาน DHT11 เซ็นเซอร์วัดความช้นื สัมพัทธ์และอณุ หภูมิ DHT11 โมดลู ตรวจจับและวัดความช้นื สัมพัทธ์ ซ่ึงนอกจากจะวัดความชนื้ สัมพัทธไ์ ดแ้ ล้วยังให้ ค่าของอุณหภมู ิ ของพนื้ ท่ีที่ตรวจวัดความชน้ื ด้วย การตดิ ตอ่ เป็นแบบหน่ึงสาย นั่นคือใชข้ าพอร์ตของไมโครคอนโทรลเลอร์ เพียง 1 หน่ึง ขาในการรับ-ส่งขอ้ มูล รูปท่ี 3-4 หนา้ ตาและการจดั ขาของ DHT11 แผงวงจรวัดความชน้ื สัมพัทธ์และอณุ หภมู ิและการตอ่ ใช้งาน 3.4.1 คุณสมบัตทิ างเทคนคิ ของ DHT11 DHT11 มีคณุ สมบัติทางเทคนคิ ทคี่ วรทราบเพื่อเปน็ ขอ้ มลู ประกอบในการใช้งานดังน้ี • แรงดนั ไฟเลีย้ ง 3 to 5V power and I/O • ตอ้ งการกระแส 2.5mA สงู สดุ • เหมาะสาหรบั วัดความชน่ื ระดับ 20-80 % โดยมีความผิดพลาดในการวดั ไม่เกิน 5% • เหมาะสาหรบั วดั อุณหภมู ิ 0-50°C โดยมีความผิดพลาดในการวดั ไม่เกนิ ±2°C • ความถีใ่ นการวัด 1 Hz (อา่ นค่าไดว้ ินาทีละครงั้ ) • ขนาด 15.5 mm x 12 mm x 5.5 mm • ขาเชอ่ื มตอ่ 4 ขา ใช้พนื้ ท่ใี นการวางขา 0.1\" 3.5.2 การตดิ ตอ่ กบั DHT11 DHT11 ติดต่อกบั ไมโครคอนโทรลเลอร์ด้วยสายสัญญาณ 1 เส้นบางครั้งเรยี กการติดตอ่ แบบว่าการสื่อสารแบบ บัสเดี่ยว (single bus communication) จึงต้องมีการกาหนดจังหวะระหว่างไมโครคอนโทรลเลอร์และ DHT11 ให้ เหมาะสม (synchronization) จงึ จะอ่านและเขียนค่ากับ DHT11 ไดถ้ กู ตอ้ ง

17 ข้อมลู ใน 1 รอบของการติดตอ่ มี ท้ังส้ิน 40 บติ และ DHT11 จะส่งข้อมลู บติ นัยสาคญั สูงสดุ ออกมากอ่ นเปน็ บิต แรกรปู แบบของขอ้ มลู เป็นดงั น้ี กระบวนการสอ่ื สารกับ DHT11 (1) ไมโครคอนโทรลเลอ์ส่งสัญญาณเริ่มต้นด้วยการทาให้บัสเป็นลอจิกต่านานอย่างน้อย 18 ไมโครวินาที จากนน้ั ทาให้บสั กลับมาลอจกิ สงู เพอื่ รอการตอบสนองจาก DHT11 โดยจะรอประมาณ 20 ถึ ง 40 ไมโครวนิ าที (2) เมื่อ DHT11 ไดร้ บั สัญญาณเริ่มต้นการตดิ ตอ่ ก็จะตอบสนองกลับมาดว้ ยการทาใหส้ ถานะของบสั เปน็ ลอจิก ต่านาน 80 ไมโครวินาทีและลอจิกสูงนาน 80 ไมโครวินาทีเพ่ือแจ้งกลับมายังไมโครคอนโทรลเลอร์ และจะเร่ิมต้นส่ง ข้อมลู กลบั มา 40 บติ (3) DHT11 เริ่มต้นส่งข้อมูลด้วยบิตเร่ิมต้นเป็นลอจิกต่านาน 50 ไมโครวินาที จากนั้นทยอยส่งข้อมูลต่อเน่ือง 40 บิต โดยข้อมูล “0” จะทาให้บัสมีสถานะลอจิกสูงนาน 26 ถึ ง 28 ไมโครวินาที ในขณะที่ข้อมูล “1” จะทาให้บสั มี สถานะลอจกิ สูงนาน 70 ไมโครวินาที ข้อมูลแตล่ ะบิตจะถูกคน่ั ดว้ ยสถานะลอจกิ ต่านาน 50 ไมโครวินาที (4) เมื่อส่งข้อมูลครบ DHT11 จะทาให้บัสมีสถานะลอจิกต่านาน 50 ไมโครวินาที อีกคร้ังเพื่อแจ้งว่าข้อมูลส่ง ครบแล้ว จากนั้น DHT11 จะทาให้บัสกลับมามีสถานะลอจิกสูงอีกคร้ัง เพื่อกลับเข้าสู่สภาวะพร้อมทางานในรอบใหม่ ตอ่ ไป ในการใช้งานโมดูล DHT11 กับ NodeMCU และใช้ซอฟต์ แวร์ Arduino IDE 1.8.3 เพ่ือพัฒนาโปรแกรม จะต้องผนวกไฟล์ ไลบรารี DHT.h เขา้ ไปในโปรแกรม ใหใ้ ชค้ าสง่ั #include <DHT.h> กาหนดไว้ท่ตี อนต้นของปรแกม 3.5.3 ตวั อยา่ งการทดสอบอา่ นคา่ จาก DHT11 ดว้ ย NodeMCU ตัวอย่างที่นาเสนอต่อไปนี้ เป็นการทดลองติดต่อกับ DHT11 โดยใช้ NodeMCU เพ่ืออ่านค่าความช้ืนสัมพัทธ์ และอุณหภมู ิ โดยพฒั นาโปรแกรมด้ วย Arduino IDE มขี ้ันตอนดงั น้ี ลาดับขนั้ การทดลองที่ 3-3 1. ต่อวงจรตามรูปที่ 3-5 เพอื่ ใช้ทดสอบการทางาน รูปท่ี 3-5 วงจรทดลองใช้งาน DHT11 ดว้ ย NodeMCU

18 2. เขยี นคาสงั่ ตามตัวอยา่ งที่ 3-3 บนั ทกึ ไฟล์เป็น Ex3_3.ino คอมไพล์ และอัพโหลด ตัวอย่างท่ี 3-3 #include <DHT.h> // Include DHT sensor library #define DHTTYPE DHT11 // Define type of sensor #define DHTPIN D4 // Define connected pin DHT dht(DHTPIN, DHTTYPE, 15); // Initial DHT sensor void setup(){ dht.begin(); // Start DHT sensor operation Serial.begin(115200); // set serial port at 115200 bps } void loop(){ float humid = dht.readHumidity(); // Read humidity data float temp = dht.readTemperature(); // Read temperature data Serial.print(\"Humidity = \"); // Send string to serial port. Serial.print(humid); // Send analog value to serial port. Serial.print(\" Temperature = \"); // Send string to serial port. Serial.println(temp); // Send analog value to serial port. delay(300); // Delay 0.3 second before restart } 3. อัปโหลดโปรแกรม เปิดหน้าต่าง Serial Monitor โดยคลิกที่ปุ่มของ Serial Minitor ที่อยู่มุมบนขวาของ หน้าต่างโปรแกรม Arduiono IDE จะเหน็ หนา้ ต่าง Serial Monitor ปรากฏขนึ้ มาตง้ั คา่ การทางานดงั น้ี 3.1 ต้งั คา่ อตั ราบอดหรอื บอดเรตทช่ี อ่ งมมุ ขวาลา่ งสดุ จาก 9600 เปน็ 115200 บติ ตอ่ วินาที 3.2 เลือก No line ending 3.3 คลิกทาเคร่ืองหมายที่ช่อง Autoscroll เพื่อให้การแสดงผลเกิดการเลื่อนบรรทัดอัตโนมัติ เมื่อมีข้อมูล ใหมเ่ ข้ามาจะได้ ผลการทางานตามรู ปที่ 3-6 รปู ท่ี 3-6 ผลการอ่านค่าจาก DHT11 ของโมดูล NodeMCU มาแสดงผลทห่ี น้าต่าง Serial Monitor

19 3.6 ทดสอบการเช่อื มตอ่ เครือข่าย WiFi ของ NodeMCU ในการทดสอบการเชอื่ มต่อเครือข่าย WiFi ของ NodeMCU จะต้องเตรียมการดงั น้ี 1. จัดเตรียมตัวกระจายคลื่น WiFi เราเตอร์ หรือสมาร์ทโฟนท่ีกระจายสัญญาณอินเตอร์เน็ตได้ (HotSpot) เตรยี มรหัส SSID หรอื ชอื่ เครือขา่ ยและ Password หรือรหสั ผา่ นของเครือข่าย รูปท่ี 3-7 อปุ กรณ์กระจายสัญญาณอนิ เตอรเ์ นต็ ใหก้ ับ NodeMCU 2. เปิดเราเตอร์และรอจนพร้อมทางาน 3. ส่วนของ NodeMCU ไม่ต้องมีอุปกรณ์อินพุตเอาต์พุตต่อเพิ่มเติมเพียงจ่ายไฟให้กับ NodeMCU ด้วยการ เชอ่ื มต่อกบั พอร์ต USB ของคอมพวิ เตอรก์ ็พร้อมสาหรบั การรับโปรแกรมและส่อื สารข้อมลู กบั คอมพวิ เตอร์ รูปที่ 3-8 แสดงสว่ นของโมดูล WiFi ESP8266-12E และสายอากาศ ลาดับข้ันการทดลองท่ี 3-4 1. การทดลองเช่ือมต่อ WiFi ของ NodeMCU เบื้องต้นเพียงเสียบสาย USB เพื่อใช้ทดสอบการทางานและ เตรียมความพรอ้ มในส่วนของตวั กระจายคลน่ื WiFi เราเตอรห์ รือสมาร์ทโฟนให้เรยี บรอ้ ย

20 2. เขียนคาส่ังตามตัวอย่างท่ี 3-4 บันทึกไฟล์เป็น Ex3_4.ino ก่อนทาการคอมไพล์ และอัพโหลด ให้ทาการ แกไ้ ขในบรรทัดท่ีมีคาสงั่ ตอ่ ไปนี้ const char* ssid = \"Your SSID\"; แก้ Your SSID เป็นช่อื เครอื ขา่ ย WIFI ท่ีตอ้ งการเชอ่ื มต่อ const char* password = \"Your password\"; แก้ Your password เปน็ รหัสผา่ นเครอื ข่าย WIFI ตัวอย่างที่ 3-4 #include <ESP8266WiFi.h> // Include ESP8266 library const char* ssid = \"Your SSID\"; // SSID is set const char* password = \"Your password\"; // Password is set #define LEDpin D0 void setup(){ Serial.begin(115200); // Enable UART Serial.println(); Serial.println(); Serial.print(\"Connecting to \"); // Print title message Serial.println(ssid); // Print SSID name pinMode(LEDpin, OUTPUT); digitalWrite(LEDpin, 0); // WiFi detected indicator - active low WiFi.begin(ssid, password); // Send password while (WiFi.status() != WL_CONNECTED) // Check WiFi status { delay(500); Serial.print(\".\"); // Print dot for showing the progress status } Serial.println(\"\"); Serial.println(\"WiFi connected\"); // Print the connected message Serial.println(\"IP address: \"); // Print IP address Serial.println(WiFi.localIP()); } void loop(){ digitalWrite(LEDpin, 0); // WiFi connected indicator - active low while (WiFi.status() != WL_CONNECTED)// Check WiFi status { digitalWrite(LEDpin, 0); // LED at D0 blink when disconnect WiFi delay(400); Serial.println(\"connection WiFi failed\"); // Print error message digitalWrite(LEDpin, 1); delay(100); } } ส่วนสาคัญของโปรแกรมนี้คือ การผนวกไฟล์ไลบรารี ESP8266.h เพราะไลบรารีน้ีจะทาหน้าท่ีกาหนดการ ทางานของ WiFi ภายในตัว NodeMCU ท้ังหมดส่ิงที่ต้องกระทาคือ กาหนดช่ือ SSID และ password หรือ รหัสผ่านของเครอื ข่าย WiFi ท่ใี ช้ในการทดสอบใหถ้ ูกต้อง การแจ้งสถานะการทางานมี 2 ส่วนคือ แสดงผลผ่านทางหน้าต่าง Serial Monitor ด้วยการใช้คาสั่ง Serial.println(); และ LED บนตัว NodeMCU ท่ีต่อกับขาพอรต์ D0 โดยการขับให้LED สว่างต้องเขียน ข้อมูล 0 ไปยังขาพอร์ต D0 (แอกตีฟด้วยลอจิกต่า) การกาหนดค่ารวมถึงการเช่ือมต่อ WiFi จะเกิดขึ้นในฟังก์ช่ัน setup(); ท้ังหมด ในฟังก์ชั่น loop(); เป็นโปรแกรมตรวจสอบการเช่ือมต่อ WiFi ด้วยคาส่ัง while (WiFi.status() !=WL_CONNECTED) หากการเชื่อมต่อเป็นปกติ LED ที่ขา D0 จะติดสว่าง ถ้าการ เช่อื มตอ่ ล้มเหลว LED จะกะพรบิ และมกี ารแสดงข้อความแจง้ การเชือ่ มต่อล้มเหลวที่หน้าตา่ ง Serial Monitor

21 3. เม่ืออัปโหลดเสร็จแล้วคลิกปุ่ม Serial Monitor เพื่อเปิดหน้าต่าง Serial Monitor โดยการทางานของ NodeMCU นบั จากนจ้ี ะมีการรายงานสถานะการทางานในทุกขน้ั ตอนทสี่ าคญั มายังหน้าตา่ ง Serial Monitor น้ี เมอื่ NodeMCU เร่ิมทางานจะทาการเชอื่ มต่อกบั เครอื ขา่ ย WiFi ท่กี าหนด หนา้ ต่าง Serial Monitor แสดง ขอ้ ความ Connecting to MyZen และจุด .... ไปอยา่ งตอ่ เนอื่ งดงั รูปที่ 3.9 จนกว่าจะเชื่อมต่อ WiFi สาเรจ็ รูปท่ี 3.9 รายงานสถานการณ์ทางานในทกุ ข้ันตอนที่สาคัญ ทีห่ น้าต่าง Serial Monitor เม่ือ NodeMCU เช่ือมต่อ WiFi ได้แล้วจะแสดงหมายเลข IP ที่ได้รับดังรูปท่ี 3.9 พร้อมกันน้ัน LED ที่ ตาแหน่ง D0 บนตวั NodeMCU จะติดค้าง ในกรณีที่เครือข่าย WiFi หยุดทางานไม่วา่ จะด้วยสาเหตุใด NodeMCU จะ แสดงสถานะการเชื่อมต่อผ่านหน้าต่าง Serial Monitor ดว้ ยขอ้ ความ connection WiFi failed ดังรปู LED ทีต่ าแหนง่ D0 บนตวั NodeMCU จะตดิ กะพรบิ เพือ่ แจ้งเตือน 3.7 การส่ังเปิด-ปิด LED ผ่านเครือข่าย WiFi โดยใช้ NodeMCU ทางานเป็น WebServer เป็นการส่ังงานเปิดปิด LED ที่ต่อกับขาพอร์ตของ NodeMCU ที่ฝังโค้ด HTML ไว้ในโปรแกรม ทางานเป็น WebServer โดยการสั่งงานจะทาผ่านหน้าเว็บไซต์ซ่ึงเรียกใช้งานโดยอุปกรณ์ประเภทคอมพิวเตอร์ สมาร์ทโฟนท่ีหรือ แทปเล็ทท่ีเช่ือมตอ่ ภายในเครอื ข่าย WiFi เดยี วกนั เท่าน้นั ลาดับขน้ั การทดลองที่ 3-5 1. จัดเตรียมตัวกระจายคลื่น WiFi เราเตอร์ หรือสมาร์ทโฟนท่ีกระจายสัญญาณอินเตอร์เน็ตได้ (HotSpot) เตรยี มรหสั SSID (ชือ่ เครอื ขา่ ย)และ Password หรือรหสั ผ่านของเครือขา่ ยเปิดเราเตอร์และรอจนพรอ้ มทางาน 2. ตอ่ วงจรตามรูปท่ี 3-10 เพ่ือใชท้ ดสอบการทางาน รูปที่ 3-10 วงจรทดลองส่งั เปดิ -ปิด LED ผ่านเครือขา่ ย WiFi

22 3. เขียนคาสั่งตามตัวอย่างที่ 3-5 บันทึกไฟล์เป็น Ex3_5.ino ก่อนทาการคอมไพล์ และอัพโหลด ให้ทาการ แก้ไขในบรรทัดทมี่ ีคาส่งั ตอ่ ไปน้ี const char* ssid = \"Your SSID\"; แก้ Your SSID เป็นชือ่ เครอื ขา่ ย WIFI ที่ต้องการเชื่อมต่อ const char* password = \"Your password\"; แก้ Your password เป็นรหสั ผ่านเครอื ขา่ ย WIFI ตัวอยา่ งที่ 3-5 #include <ESP8266WiFi.h> #define ledPin D2 //กำหนดขำทต่ี ่อ LED เป็นขำ D1 const char* ssid = \"MySSID\"; //กำหนด SSID (อยำ่ ลมื แกเ้ ป็นของตวั เอง) const char* password = \"Your Password\";//กำหนด Password(อยำ่ ลมื แกเ้ ป็นของตวั เอง) unsigned char status_led=0; //กำหนดตวั แปร ทเ่ี กบ็ คำ่ สถำนะของ LED WiFiServer server(80); //กำหนดใชง้ ำน TCP Server ท่ี Port 80 void setup() { Serial.begin(115200); //เปิดใช้ Serial pinMode(ledPin, OUTPUT); //กำหนด Pin ทต่ี อ่ กบั LED เป็น Output Serial.println(); Serial.println(); Serial.print(\"Connecting to \"); Serial.println(ssid); WiFi.begin(ssid, password); //เชอ่ื มตอ่ กบั AP while (WiFi.status() != WL_CONNECTED) //รอกำรเชอ่ื มตอ่ { delay(500); Serial.print(\".\"); } Serial.println(\"\"); Serial.println(\"WiFi connected\"); //แสดงขอ้ ควำมเชอ่ื มตอ่ สำเรจ็ server.begin(); //เปิด TCP Server Serial.println(\"Server started\"); Serial.println(WiFi.localIP()); // แสดงหมำยเลข IP ของ Server } void loop() { WiFiClient client = server.available();//รอรบั กำรเชอ่ื มตอ่ จำก Client if (!client) { //ถำ้ ไมม่ ี Client เขำ้ มำใหเ้ รมิ่ กลบั ไปวน loop รอรบั ใหม่ return; } Serial.println(\"new client\"); while(!client.available()){ delay(1); } //อำ่ นคำ่ ทไ่ี ดร้ บั จำก client จำกขอ้ มลู แรกถงึ ‘\\r’ String req = client.readStringUntil('\\r'); Serial.println(req); //แสดงคำ่ ทไ่ี ดร้ บั ทำง Serial client.flush(); if (req.indexOf(\"/ledoff\") != -1)//ตรวจสอบวำ่ data ทเ่ี ขำ้ มำมขี อ้ ควำม”/ledoff” หรอื ไม่ { status_led=0; //ถำ้ มใี หก้ ำหนดคำ่ ในตวั แปรใน status_led=0 digitalWrite(ledPin,LOW); //ให้ LED ดบั Serial.println(\"LED OFF\"); }

else if(req.indexOf(\"/ledon\") != -1)//ตรวจสอบวำ่ data ทเ่ี ขำ้ มำมขี อ้ ควำม”/ledon”หรอื ไม่ 23 { status_led=1; //ถำ้ มใี หก้ ำหนดคำ่ ในตวั แปรใน status_led=1 digitalWrite(ledPin,HIGH); //ให้ LED ตดิ Serial.println(\"LED ON\"); } //เกบ็ Code HTML ลงในตวั แปรสตรงิ web String web = \"HTTP/1.1 200 OK\\r\\nContent-Type: text/html\\r\\n\\r\\n\"; web += \"<html>\\r\\n\"; web += \"<body>\\r\\n\"; web += \"<h1>LED Status</h1>\\r\\n\"; web += \"<p>\\r\\n\"; if(status_led==1) web += \"LED On\\r\\n\"; else web += \"LED Off\\r\\n\"; web += \"</p>\\r\\n\"; web += \"<p>\\r\\n\"; web += \"<a href=\\\"/ledon\\\">\\r\\n\"; web += \"<button>LED On</button>\\r\\n\"; web += \"</a>\\r\\n\"; web += \"</p>\\r\\n\"; web += \"<a href=\\\"/ledoff\\\">\\r\\n\"; web += \"<button>LED Off</button>\\r\\n\"; web += \"</a>\\r\\n\"; web += \"</body>\\r\\n\"; web += \"</html>\\r\\n\"; client.print(web); //สง่ HTML Code ไปยงั client } ส่วนสาคัญของโปรแกรมน้ีคือ กาหนดชื่อ SSID และ password หรือรหัสผ่านของเครือข่าย WiFi ท่ีใช้ใน การทดสอบให้ถูกต้อง การแจ้งสถานะการทางานแสดงผลผ่านทางหน้าต่าง Serial Monitor ด้วยการใช้คาสั่ง Serial.println(); เพอ่ื แสดงหมายเลข IP ท่ีได้รบั เมื่อเชอ่ื มตอ่ WiFi สาเร็จ การส่ังงานเพ่ือขับ LED บนตัว NodeMCU ท่ีต่อกับขาพอร์ต D2 โดยรับค่าจากปุ่มกดท่ีแสดงบนหน้าเว็บ NodeMCU ให้บริการ นั้น หากผู้ใช้กดปุ่ม LED Off จะมีข้อความ ledoff ส่งมายัง NodeMCU คาสั่ง if (req.indexOf(\"/ledoff\") ตรวจสอบว่า data ที่เข้ามามีข้อความ “/ledoff” หรือไม่ ถ้ามีให้ กาหนดตัวแปร status_led=0 และส่ังให้ LED ดับ หากผู้ใชก้ ดปุ่ม LED On จะมีข้อความ ledon ส่งมายัง NodeMCU คาสั่ง คาสั่ง else if(req.indexOf(\"/ledon\") != -1) ตรวจสอบว่า data ที่เข้า มามีขอ้ ความ “/ledon” หรือไมถ่ ้ามใี หก้ าหนดตวั แปร status_led= 1 และส่ังให้ LED ติด 4. เมื่ออัปโหลดเสร็จแล้วคลิกป่มุ Serial Monitor เพื่อเปิดหน้าต่าง Serial Monitor เมอื่ โมดลู NoeMCU เรม่ิ ทางานจะทาการเชื่อมต่อกับเครือขา่ ย WiFi ท่ีกาหนด หน้าต่าง Serial Monitor แสดงข้อความ Connecting to MyZen และจุด .... ไปอย่างต่อเน่ือง เมือ่ เชื่อมตอ่ WiFi สาเร็จจะแสดงหมายเลข IP ท่ีไดร้ บั ดังรูปที่ 3.11 รูปท่ี 3-11 รายงานสถานะในการเชอ่ื มตอ่ เครือขา่ ยทห่ี นา้ ตา่ ง Serial Monitor

24 5. เมื่อการเชื่อมต่อกับเคร่ือข่าย WIFi เสร็จแล้วให้เปิดเว็บเบราเซอร์ขึ้นมา จากนั้นป้อนหมายเลข IP ที่โมดูล NodeMCU รายงานที่หน้าต่าง Serial Monitor ซ่ึงเป็นเลข 0-255 จานวน 4 ชุดในรูปแบบ XX.XX.XX.XX (แต่ ละการเช่ือมตอ่ เลขอาจเปล่ียนไป) ในการเชื่อมตอ่ นี้หมายเลข IP คือ 192.168.43.108 โมดลู NoeMCU จะส่ง หน้าเว็บเพจมาให้ หน้าตา่ ง Serial Monitor แสดงขอ้ ความ \"new client\" ที่ไดร้ ับดังรูปที่ 3.12 รปู ท่ี 3-12 การเชอ่ื มตอ่ ผ่าน WIFI และรายงานผลทหี่ น้าตา่ ง Serial Monitor หากผู้ใชก้ ดปุ่ม LED On จะมีข้อความส่งมายังโมดลู ตวั โมดูล NodeMCU จะสัง่ ให้ LED ติด พร้อมแสดง ขอ้ ความ LED ON ที่หน้าตา่ ง Serial Monitor ดังรปู ท่ี 3-13 (ก) หากผู้ใชก้ ดปุม่ LED Off จะมีขอ้ ความสง่ มายงั โมดลู ตวั โมดูล NodeMCU จะสัง่ ให้ LED ดบั พรอ้ มแสดง ข้อความ LED OFF ทหี่ น้าตา่ ง Serial Monitor ดงั รูปที่ 3-13 (ข) (ก) ผลเม่อื คลกิ LED On (ข) ผลเม่ือคลกิ LED Off รูปที่ 3-13 รายงานผลการสง่ั งานที่หนา้ ตา่ ง Serial Monitor จากการทดสอบในบทน้แี สดงให้เห็นว่า NodeMCU สามารถเชอ่ื มตอ่ กับเครือขา่ ย WiFi ไดไ้ มย่ าก ดว้ ยการ กาหนดพารามิเตอร์ 2 ตัวหลักนับเปน็ การเรมิ่ ตน้ ท่ีดสี าหรับการพฒั นาอปุ กรณ์ IoT ด้วยตวั เอง โดยใช้ NodeMCU

25 บทท่ี 4 เร่มิ ตน้ ใชง้ าน NodeMCU กบั Netpie 4.1 ข้อมูลเบอื้ งตน้ ของ NETPIE 4.1.1 อะไรคือ NETPIE NETPIE คือ คลาวด์เซิร์ฟเวอร์ ท่ี ให้บริการในรูปแบบ Platform-as-a-Service เพื่ออา วยความสะดวกให้กับ นักพัฒนาในการพัฒนาอุปกรณ์ของตัวเองเชื่อมต่อและแลกเปล่ียนข้อมูลกันได้ในแบบ Internet of Things หรือ IoT โดยคาวา่ NETPIE มาจาก Network Platform for Internet of Everything 4.1.2 ทาไมตอ้ งเลอื กใช้ NETPIE 4.1.2.1 ชว่ ยลดการใชท้ รพั ยากรของการเชอ่ื มตอ่ : NETPIE ช่วยให้อุปกรณ์สามารถคุยกันได้ โดยผู้พัฒนาไม่ต้องกังวลว่าอุปกรณ์นั้นจะอยู่ที่ใด เพียงนาไลบรารีของ NETPIE ไปตดิ ต้ังในอุปกรณ์ NETPIE จะรับหนา้ ที่ดูแลการเชื่อมต่อใหท้ งั้ หมด ไมว่ ่าอุปกรณน์ ้ันจะอยใู่ นเครอื ข่ายชนิดใด ลักษณะใดหรือแม้กระทั่งเคล่ือนย้ายไปอยู่ที่ใด ผู้พฒั นาสามารถตัดปญั หากวนใจในการท่ีจะต้องมาออกแบบการเข้าถึง อุปกรณ์จากระยะไกล (remote access) ดว้ ยวธิ กี ารเดมิ ๆ เช่น การใช้ fixed public IP หรือการต้งั port forwarding ในเราเตอร์ หรือการต้องไปลงทะเบียนกับผู้ให้บริการ dynamic DNS ซึ่งท้ังหมดล้วนมีความยุ่งยากและลดความ ยืดหยุ่นของระบบ ไม่เพียงเท่าน้ั น NETPIE ยังช่วยให้การเร่ิมต้นใช้งานเป็นไปโดยง่าย โดยออกแบบให้อุปกรณ์ถูก ค้นพบและเข้าสูบ่ ริการโดยอตั โนมตั ิ (automatic discovery, plug and play) 4.1.2.2 ช่วยลดภาระดา้ นความปลอดภัยของขอ้ มูล : NETPIE ถูกออกแบบให้มีระดับและสิทธ์ิในการเข้าถึงในระดับ fine grain กล่าวคือผู้พัฒนาสามารถออกแบบได้ เองทั้งหมด เช่น ส่ิงใดมีสิทธ์ิคุยกับสิ่งใด สิ่งใดมีสิทธ์ิหรือไม่เพียงใดในการอา่ นหรือเขียนข้อมูลและสิทธเิ์ หล่าน้ี จะมีอายุ การใชง้ านเท่าใด หรือถกู เพิกถอนภายใต้เงอื่ นไขใด เป็นต้ น 4.1.2.3 ยดื หยุน่ ต่อการขยายระบบ NETPIE มีสถาปัตยกรรมเป็นคลาวด์เซิร์ฟเวอร์อย่างแท้จริงในทุกระดับของระบบ ทาให้เกิดความยืดหยุ่นและ คล่องตัวสูงในการขยายตัว นอกจากนี้โมดูลต่าง ๆ ยังถูกออกแบบให้ทางานแยกจากกัน เพื่อให้เกิดสภาวะ loose coupling และสื่อสารกันด้วยวิธีการ asynchronous messaging ช่วยให้แพล็ตฟอร์มมีความน่าเชื่อถือสูง นาไปใช้ซ้า และพัฒนาตอ่ ไดไดง้ า่ ยดงั นัน้ ผพู้ ฒั นาไมจ่ าเปน็ ตง้ งกงั วลกกบั การขยายตัวเพือ่ รบั โหลดทเี่ พม่ิ ขึ้นในระบบอกี ตอ่ ไป 4.2 การเตรยี มการสาหรบั ใชง้ าน NETPIE 4.2.1 สมคั รใชง้ าน NETPIE 4.2.1.1 ไปท่ีเว็บไซต์ https://netpie.io/sign_up จะปรากฏหน้าเว็บดังรูปที่ 4-1 กรอกข้อมูลให้เรียบร้อย จากน้ันคลิกท่ปี ่มุ SIGN UP เพอ่ื ยนื ยนั การลงทะเบียน 4.2.1.2 รอรบั ขอ้ ความส้ันหรอื SMS จากทาง NETPIE ซง่ึ สง่ ไปยังหมายเลขโทรศัพทเ์ คล่อื นท่ี ทลี่ งทะเบียนไว้ ตัวอยา่ ง SMS “Your one-time password for NETPIE is 536815059323” 4.2.1.3 คลิกท่ีเมนู LOG IN เพ่ือเข้าสู่ระบบ นาอีเมล์ที่ลงทะเบียนไว้ใส่ในช่อง USERNAME OR EMAIL ADDRESS และนารหสั ผา่ นท่ไี ดร้ บั จาก SMS ใสใ่ นช่อง PASSWORD แลว้ คลกิ ปุ่ม LOGIN ดังรปู ท่ี 4-2 4.2.1.4 เขา้ สหู่ นา้ ตา่ ง RESET PASSWORD เพอ่ื เปลย่ี นรหสั ผา่ นใหม่ ใหจ้ าไดง้ า่ ยขน้ึ ดงั รูปท่ี 4-3 4.2.1.5 เม่ือลงทะเบียนเสร็จแล้ว จะปรากฏไอคอนผู้ใช้ ถ้าเล่ือนเมาล์ไปช้ีจะแสดง USERNAME หรือ E-mail ทไ่ี ด้ลอ็ กอนิ ไว้

26 รูปที่ 4-1 หนา้ ต่าง CREATE AN ACCOUNT สาหรบั กรอกขอ้ มลู เพอ่ื ลงทะเบียนใช้งาน NETPIE รูปที่ 4-2 หนา้ ต่าง LOGIN เพอื่ เขา้ สู่ระบบ รูปที่ 4-3 หน้าตา่ งเปล่ยี นรหัสผา่ นใหม่ รูปที่ 4-4 แสดงไอคอนทเ่ี กิดขึน้ หลงั จากลอ็ กอินเข้าสูร่ ะบบของ NETPIE 4.2.2 สรา้ งรหัสแอปพลิเคชน่ั ประจาตวั หรือ Application ID (AppID) เม่ือสมัครใช้งานและล็อกอินเข้าสู่ระบบแล้ว ลาดับต่อไปคือ การสร้างรหัสแอปพลิเคช่ันประจาตัวหรือ Application ID (AppID) ซง่ึ ผใู้ ช้งานแตล่ ะคน (ตรวจสอบจากหมายเลขโทรศัพท์เคลื่อนท่)ี จะได้คนละสูงสดุ 10 AppID และในแตล่ ะ AppID มอี ปุ กรณ์หรือเกียร์ (gear) ได้สูงสดุ 100 ตวั

27 4.2.2.1 คลิกทเี่ มนู RESOURCES > APPLICATIONS เพอื่ เขา้ สกู่ ารสรา้ ง AppID ดงั รปู ท่ี 4-5 รูปที่ 4-5 เลอื กเมนู APPLICATION เพ่ือเริ่มต้นสรา้ ง Application ID (AppID) 4.2.2.2 เขา้ สู่หน้าตา่ ง https://netpie.io/app คลกิ ท่ีรปู เครอื่ งหมายบวก เพอ่ื สร้าง AppID ดังรปู ที่ 4-6 รูปที่ 4-6 หน้าตา่ ง APPLICATION (https://netpie.io/app) และการเริ่มตน้ สร้าง AppID 4.2.2.3 กาหนดช่ือ AppID ตามต้องการ ในตัวอย่างรูปที่ 4-7 ใช้ช่ือว่า Room142SRPC (ปรับเปลี่ยนได้ตาม ความต้องการ โดยให้ส่ือความหมายถึงงานท่ีต้องการควบคุม) จากนั้นคลิกปุ่ม CREATE เพ่ือสร้าง AppID การต้ังชื่อ AppID จะต้องไม่ซ้ากบั คนอ่ืน ต้องพยายามเลือกชื่อที่เฉพาะตัวจริงๆ และต้องไม่ลืมเน่ืองจาก AppID น้ีจะถูกนาไปใช้ ในการพฒั นาโปรแกรมตอ่ ไป รูปที่ 4-7 กาหนดชอื่ AppID 4.2.2.4 ท่ีหน้าต่าง APPLICATION จะแสดงช่องของช่ือ AppID ที่สร้างข้ึน คลิกที่ปุ่ม Application > Room142SRPC จะปรากฏหน้าต่าง ALICATION (APPID) ดังรูปที่ 4-8 รูปที่ 4-8 หนา้ ต่าง APPLICATION ของ AppID ทช่ี ่อื Room142SRPC

28 4.2.3 สร้างชอื่ ของแอปพลเิ คชนั่ เม่อื ได้ AppID แลว้ ต่อไปเป็นการสร้าง APPLICAION KEY ซ่งึ ตอ้ งนามาใช้ในการเขียนโปรแกรมตอ่ ไป 4.2.3.1 คลิกที่รปู เครือ่ งหมายบวกดงั รูปท่ี 4-9 รูปที่ 4-9 เรมิ่ ตน้ สรา้ งชอ่ื ของแอปพลเิ คชนั่ 4.2.3.2 กาหนดชื่อของแอปพลิเคชั่นคีย์ตามต้องการ ในตัวอย่างใช้ข้อความว่า FirstIotProject และเลือก รูปแบบของรหัสกุญแจหรือคยี ์เปน็ Device Key ดงั รูปท่ี 1-10 จากนัน้ คลิกท่ปี ุ่มCREATE เพือ่ สรา้ งแอปพลเิ คชน่ั คีย์ รปู ที่ 4-10 กาหนดชือ่ ของแอปพลิเคชนั่ คีย์ 4.2.3.3 เมอ่ื สรา้ ง APPLICATION KEY เสรจ็ แลว้ จะปรากฏขน้ึ ทีห่ น้าตา่ ง APPLICATION ดงั รปู ท่ี 4-11 รปู ที่ 4-11 แสดงช่ือของแอปพลิเคชนั่ คยี ท์ ีส่ ร้างขนึ้ บนหน้าตา่ ง AppID ของ FirstIotProject 4.2.3.4 ตรวจสอบรหสั ตา่ งๆ ของช่อื แอปพลิเคชัน่ ซึ่งมีดว้ ยกนั 2 ตวั คอื รหสั กญุ แจหรือ Key (AppKey) และ รหัสลับหรือ Secret (AppSecret) ท่ีใช้แสดงตัวตน โดยคลิกท่ีแอปพลิค่ันคีย์ (ในท่ีน้ี คือ FirstIotProject) รูปที่ 4-12 ปรากฏรหัสที่จาเป็นต้องใช้ รหัส Secret และ REST API auth ที่ปกปดิ ไว้ ใหค้ ลกิ ท่ีรปู ดวงตารหัสจะปรากฏขึ้นมา รูปที่ 4-12 การดูรหสั ของแอปพลเิ คชนั่ ต้องนาไปใช้ตดิ ตอ่ กับแอปพลเิ คชั่นบน NETPIE

29 4.2.3.5 จากรูปท่ี 1-12 ขอ้ มลู ทต่ี ้องจดจาและนาไปใช้งานมี 3 ตวั คือ APPLICATION KEY, Key และ Secret จากรปู สรปุ ได้ ดงั น้ี APPLICATION = Room142SRPC APPLICATION KEY = FirstIotProject Key = Ajhpuikzv1EFIwQ Sercret = ghJTH7hQtNj9DGHWMioUJoSLg รูปที่ 4-13 ไดอะแกรมสรุปขั้นตอนการลงทะเบยี นจนถงึ การเตรยี มการที่ NETPIE เพื่อนารหัสสาคัญไปใชใ้ นการติดต่อกบั แอปพลิเคชน่ั บน NETPIE

30 4.3 ข้ันตอนการใช้ ESP8266 และ NodeMCU กับ NETPIE ทาง NETPIE ได้จัดทาไลบรารีท่ีใช้งานกับโมดูล WiFi คอนโทรลเลอร์ ยอดนิยมและราคาประหยัดอย่าง ESP8266 ที่สามารถใช้ Arduino IDE ในการพัฒนาโปรแกรมไว้แล้ว เพ่ือให้ผู้พัฒนาใช้งานได้อย่างสะดวกมากข้ึน โดย ดาวน์โหลดไลบรารีได้จาก https://github.com/netpieio/microgear-esp8266-arduino/archive/master.zip เม่ือดาวน์โหลดมาแล้ว ทาการแตกไฟล์เก็บไว้ท่ีโฟลเดอร์ท่ีชื่อว่า libraries ของ Arduino IDE ที่ใช้ในการพัฒนา ESP8266 หรือ NodeMCU (ในกรณีท่ีตดิ ตงั้ Arduino IDE โดยใช้ไฟล์Arduino1.8.3_IoT_Setup170714 ของ INEX ไม่ต้องทาในสว่ นน้ี) ในรูปท่ี 4-14 แสดงข้ันตอนการพัฒนาโปรแกรมเพื่อติดต่อและใช้งาน NETPIE ของ NodeMCU-12E หรือ โมดูล ESP8266 ในแบบอื่นๆ การอธิบายขั้นตอนการพัฒนาจะอ้างอิงกับรูปท่ี 4-14 น้ีเป็นหลัก ส่วนการเชื่อมต่อทาง ฮารด์ แวร์ แสดงดังรปู ที่ 4-15 รปู ที่ 4-14 ไดอะแกรมแสดงขั้นตอนการการพัฒนาโปรแกรมเพื่อติดต่อและใช้งาน NETPIE ของ NodeMCU

31 รูปที่ 4-15 ไดอะแกรมแสดงภาพรวมของการเช่ือมต่อ NodeMCU เพื่อใช้งานกับ NETPIE คลาวเซิร์ฟเวอร์ รว่ มกบั อปุ กรณ์อนื่ ๆ ทงั้ คอมพวิ เตอร์ , สมาร์ตโฟนและแทบ็ เล็ต ลาดบั ขน้ั การทดลองที่ 4-1 1. การทดลองเชื่อมตอ่ Netpie ของ NodeMCU เบอ้ื งตน้ เพยี งเสยี บสาย USB เพื่อใชท้ ดสอบการทางานและ เตรยี มความพร้อมในส่วนของตวั กระจายคลน่ื WiFi เราเตอรห์ รอื สมารท์ โฟนใหเ้ รยี บร้อย 2. เปิดไฟล์ตัวอย่าง โดยไปที่ File > Examples > ESP8266 > Microgear > Basic จะปรากฏหน้าต่างของ โค้ดคาสัง่ ตามตวั อย่างท่ี 4-1 บนั ทกึ ไฟลเ์ ป็น Ex4_1.ino ให้ทาการแก้ไขในบรรทดั ทม่ี ีคาส่งั ต่อไปนี้ const char* ssid = <WIFI_SSID>; “WIFI_SSID” เปน็ ชอ่ื เครือข่าย WIFI ทตี่ ้องการเชอ่ื มต่อ const char* password = <WIFI_KEY>; “WIFI_KEY” เป็นรหสั ผ่านเครอื ข่าย WIFI #define APPID <APPID> “APPID” เปน็ ช่ือ Application ID ที่สร้างไว้ #define KEY <APPKEY> “APPKEY” เป็น KEY ทีท่ าง Netpie กาหนดให้ #define SECRET <APPSECRET> “APPSECRET” เป็น SECRET ทท่ี าง Netpie กาหนดให้ ตัวอยา่ งที่ 4-1 */ */ /* NETPIE ESP8266 basic sample /* More information visit : https://netpie.io #include <ESP8266WiFi.h> #include <MicroGear.h> const char* ssid = <WIFI_SSID>; const char* password = <WIFI_KEY>; #define APPID <APPID> #define KEY <APPKEY> #define SECRET <APPSECRET> #define ALIAS \"esp8266\"

32 int timer = 0; WiFiClient client; MicroGear microgear(client); /* If a new message arrives, do this */ void onMsghandler(char *topic, uint8_t* msg, unsigned int msglen) { Serial.print(\"Incoming message --> \"); msg[msglen] = '\\0'; Serial.println((char *)msg); } void onFoundgear(char *attribute, uint8_t* msg, unsigned int msglen){ Serial.print(\"Found new member --> \"); for (int i=0; i<msglen; i++) Serial.print((char)msg[i]); Serial.println(); } void onLostgear(char *attribute, uint8_t* msg, unsigned int msglen){ Serial.print(\"Lost member --> \"); for (int i=0; i<msglen; i++) Serial.print((char)msg[i]); Serial.println(); } /* When a microgear is connected, do this */ void onConnected(char *attribute, uint8_t* msg, unsigned int msglen){ Serial.println(\"Connected to NETPIE...\"); /* Set the alias of this microgear ALIAS */ microgear.setAlias(ALIAS); } void setup() { /* Add Event listeners */ /* Call onMsghandler() when new message arraives */ microgear.on(MESSAGE,onMsghandler); /* Call onFoundgear() when new gear appear */ microgear.on(PRESENT,onFoundgear); /* Call onLostgear() when some gear goes offline */ microgear.on(ABSENT,onLostgear); /* Call onConnected() when NETPIE connection is established */ microgear.on(CONNECTED,onConnected); Serial.begin(115200); Serial.println(\"Starting...\"); /* Initial WIFI, this is just a basic method to configure WIFI on ESP8266. */ /* You may want to use other method that is more complicated, but provide better user experience */ if (WiFi.begin(ssid, password)) { while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print(\".\"); } } Serial.println(\"WiFi connected\"); Serial.println(\"IP address: \");

33 Serial.println(WiFi.localIP()); /* Initial with KEY, SECRET and also set the ALIAS here */ microgear.init(KEY,SECRET,ALIAS); /* connect to NETPIE to a specific APPID */ microgear.connect(APPID); } void loop() { /* To check if the microgear is still connected */ if (microgear.connected()) { Serial.println(\"connected\"); /* Call this method regularly otherwise the connection may be lost */ microgear.loop(); if (timer >= 1000) { Serial.println(\"Publish...\"); /* Chat with the microgear named ALIAS which is myself */ microgear.chat(ALIAS,\"Hello\"); timer = 0; } else timer += 100; } else { Serial.println(\"connection lost, reconnect...\"); if (timer >= 5000) { microgear.connect(APPID); timer = 0; } else timer += 100; } delay(100); } 3. ทาการคอมไพล์ และอัพโหลด เมื่ออัปโหลดเสร็จแล้วทาการเปิดหน้าต่าง Serial Monitor และหน้าเว็บท่ี สรา้ ง AppID จากข้นั ตอนในหวั ขอ้ (4.2) เพอ่ื สงั เกตการทางานของโปรแกรม จะได้ผลการทางานดังรปู ท่ี 4-16 หนา้ เว็บ ที่สรา้ ง AppID แสดงผลดงั รูปที่ 1-17 เม่อื เกดิ การการส่งค่าไปยัง NETPIE แสดงขอ้ ความ \"Publish...\" เมื่อเกดิ ขอ้ มูลสง่ เข้าไปยั ง NETPIE แสดงขอ้ ความ Incoming message —> Hello รูปที่ 4-16 หนา้ ต่าง Serial Monitor แสดงการทางานเมอื่ NodeMCU เชือ่ มต่อกับ NETPIE ได้

34 รูปที่ 4-17 หนา้ เวบ็ ของ NETPIE ที่แสดงสถานะการตดิ ต่อระหวา่ งอปุ กรณ์ ซ่งึ ในทีน่ ้ีคอื ESP8266 (NodeMCU-12E) กับ Application ID – Room142SRPC 4. ไปที่หน้าเว็บ APPLICATION ของ AppID ที่ชอ่ื Room142SRPC ดงั รูปท่ี 4-17 จะเห็นข้อความ ESP8266 ซ่ึงเป็นช่ืออุปกรณ์ที่ตั้งไว้ในโปรแกรมของ NodeMCU หากตัวอักษรเป็นสีเขียวจะหมายถึงอุปกรณ์กาลังออนไลน์หรือ เช่ือมต่อกับ NETPIE อยู่ ท้ังหมดที่นาเสนอในบทนี้ เป็นการเริ่มต้นใช้งานและทดสอบการทางานระหว่างอุปกรณ์ฮาร์ดแวร์กับคลาวด์ เซิร์ฟเวอร์ที่ชื่อ NETPIE จะเห็นได้ว่า มีข้ันตอนไม่มากและไม่ซบั ซ้อนจึงเหมาะอย่างยิ่งสาหรับการเรียนรู้เพอื่ นาไปส่กู าร พัฒนาอุปกรณ์ IoT ดว้ ยตวั เอง

35 บทที่ 5 การประยุกต์ใชง้ าน Freeboard เชอ่ื มต่อ NodeMCU ผ่าน Netpie ในบทท่ีผ่านมาเปน็ การนาเสนอการเชื่อมต่อผ่านเครือข่ายอินเตอร์เน็ตระหว่าง NodeMCU กับ NETPIE ในฝ่ัง ของ NodeMCU (เกียร์) จะแสดงผลการเช่ือมต่อท่ีหน้าต่าง Serial Monitor ในฝ่ังของ NETPIE แสดงผลการเช่ือมต่อ เป็นไอคอนตามรายช่ือทต่ี ้ังคา่ ไวข้ อง NodeMCU และจานวนเกียรท์ ีอ่ อนไลน์ บทนี้จะเพิ่มในส่วนของการแสดงผล โดยข้อมูลจาก NodeMCU จะถูกส่งมาเก็บไว้ท่ีคลาวด์เซิร์ฟเวอร์ซึ่งก็คือ NETPIE จากนั้น freeboard จะเข้ามาอ่านคา่ จาก NETPIE เพื่อนาไปแสดงผลบนแดชบอร์ดท่ีสรา้ งข้ึนตอ่ ไป การเรียนรู้ การใชง้ านแดชบอร์ดบนเว็บ freeboard.io เพื่อการแสดงผล จะเพม่ิ ปมุ่ สาหรับกด เพอ่ื ควบคมุ สถานะทางลอจกิ ของขา พอรต์ ดิจิตอลของ NodeMCU 5.1 การควบคมุ LED (D0) บนโมดูล NodeMCU หัวข้อของการติดต่อหรือ Topic 1. ใช้ Topic ชื่อ /ALIASNAME/state ในการส่งข้อความโดยใช้ REST API จาก freeboard ดังน้ันท่ี NodeMCU จะต้องทาการบอกรบั หรอื subscribe หัวขอ้ การติดตอ่ น้ี 2. ใช้ Topic ช่ือ /ALIASNAME /state เพ่ือส่ังให้ NodeMCU ส่งค่าสถานะกลับมายัง freeboard แล้ว ดังนั้น NodeMCU จะต้องทาการเผยแพร่ข้อมูลหรือ publish แบบ retain เพ่ือส่งค่ากลับมา ส่วน freeboard จะใช้ REST API ในการอา่ นขอ้ ความของ Topic น้ี ลาดบั ข้นั การทดลองท่ี 5-1 5.1.1 การเตรียมการท่ฝี ัง่ NodeMCU 5.1.1.1 เปิดโปรแกรม Arduino IDE เลอื กบอร์ดเป็น NodeMCU1.0 และเลือกพอรต์ เชอื่ มตอ่ ใหถ้ ูกต้อง 5.1.1.2 พิมพ์โค้ดคาสั่งตามตัวอย่างที่ 5-1 บันทึกไฟล์เป็น Ex5_1.ino ให้ทาการแก้ไขในบรรทัดท่ีมีคาส่ัง ตอ่ ไปนี้ const char* ssid = <WIFI_SSID>; “WIFI_SSID” เปน็ ชื่อเครอื ข่าย WIFI ที่ตอ้ งการเชอื่ มต่อ const char* password = <WIFI_KEY>; “WIFI_KEY” เป็นรหัสผา่ นเครือขา่ ย WIFI #define APPID <APPID> “APPID” เปน็ ชอื่ Application ID ท่ีสร้างไว้ #define KEY <APPKEY> “APPKEY” เปน็ KEY ที่ทาง Netpir กาหนดให้มา #define SECRET <APPSECRET> “APPSECRET” เปน็ SECRET ที่ทาง Netpie กาหนดให้ #define ALIAS <ALIASNAME> “ALIASNAME” เปน็ ชือ่ ของโมดูล NodeMCU ตัวอย่างที่ 5-1 #include <ESP8266WiFi.h> #include <MicroGear.h> const char* ssid = <WIFI_SSID>; const char* password = <WIFI_KEY>; #define APPID <APPID> #define KEY <APPKEY> #define SECRET <APPSECRET> #define ALIAS \"ALIASNAME\" WiFiClient client; char state = 0;

36 char stateOutdated = 0; char buff[16]; MicroGear microgear(client); void sendState(){ if (state==0) microgear.publish(\"/ALIASNAME/state\",\"0\"); else microgear.publish(\"/ALIASNAME/state\",\"1\"); Serial.println(\"send state..\"); stateOutdated = 0; } void updateIO(){ if (state >= 1) { digitalWrite(LED_BUILTIN, LOW); } else { state = 0; digitalWrite(LED_BUILTIN, HIGH); } } void onMsghandler(char *topic, uint8_t* msg, unsigned int msglen) { char m = *(char *)msg; Serial.print(\"Incoming message -->\"); msg[msglen] = '\\0'; Serial.println((char *)msg); if (m == '0' || m == '1') { state = m=='0'?0:1; updateIO(); } if (m == '0' || m == '1' || m == '?') stateOutdated = 1; } void onConnected(char *attribute, uint8_t* msg, unsigned int msglen) { Serial.println(\"Connected to NETPIE...\"); microgear.setAlias(ALIAS); stateOutdated = 1; } void setup(){ Serial.begin(115200); Serial.println(\"Starting...\"); pinMode(LED_BUILTIN, OUTPUT); if (WiFi.begin(ssid, password)) { while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print(\".\"); } } microgear.on(MESSAGE,onMsghandler); microgear.on(CONNECTED,onConnected); microgear.init(KEY,SECRET,ALIAS); microgear.connect(APPID); }

37 void loop(){ if (microgear.connected()) { if (stateOutdated) sendState(); microgear.loop(); } else { Serial.println(\"connection lost, reconnect...\"); microgear.connect(APPID); } } คาอธบิ ายโปรแกรมเพมิ่ เตมิ เมื่อโปรแกรมทา านจะกาหนด event หรือเหตุการณ์ท่ีต้องการให้เกิดขึ้น 2 เหตุการณ์ คือ เม่ือเชื่อมต่อ NETPIE ได้สาเร็จด้วยคาสั่ง microgear.on(CONNECTED,onConnected) และเมื่อมีการส่งข้อความเข้ามาใน Topic ที่กาหนดสิทธ์ิการเข้าถึงไว้ด้วยคาส่ัง microgear.on(MESSAGE,onMsghandler) จากนั้นเชื่อมต่อ WiFi เมื่อเช่อื มตอ่ ได้สาเร็จจะเช่ือมต่อกับ NETPIE ด้วยคาสั่ง microgear.connect(APPID) หากเชื่อมต่อได้ สาเร็จ ฟงั กช์ น่ั onConnected กจ็ ะทางาน ในฟงั กช์ นั่ น้ีจะมกี ารกาหนดสิทธ์ิเข้าถึงขอ้ มลู ของ Topic ทีช่ ่อื วา่ /state เม่ือคาส่ังนี้ทางาน เมื่อเกิดเหตุการณ์รับข้อความเกิดขึ้น ส่งผลให้ฟังก์ช่ัน onMsghandler ทางานทันที การทางานใน ฟังก์ชั่น onMsghandler ประกอบด้วยการตรวจสอบ Topic โดยใช้คาสั่ง if (m == '0' || m == '1') เพอ่ื ตรวจสอบว่าขอ้ ความในตัวแปร String เปน็ ข้อความทีต่ อ้ งการหรอื ไม่ ถ้าใชจ่ ะเรียกใชง้ านฟังกช์ นั updateIO(); คืน ค่า state ด้วยคา่ “0” หรอื “1” และส่ังให้ LED ทีต่ อ่ กบั ขา D0 ทางานและส่งผลกลับไปยงั NETPIE ถ้าสถานะขา เป็น LOW จะตอบกลบั ด้วยคาสงั่ microgear.publish(\"/ALIASNAME/state\",\"0\"); หากสถานะขาเป็น HIGH จะสง่ กลบั ด้วยคาสั่ ง microgear.publish(\"/ALIASNAME/state\",\"1\"); สาเหตทุ ่ีตอ้ งส่งสถานะกลับไปเนื่องจากว่าถ้าอปุ กรณ์เกิดความเสียหายหรือเชื่อมต่ออินเทอร์เน็ตไม่ได้ ผู้ใชง้ าน จะสามารถตรวจสอบอปุ กรณ์ ไดด้ ว้ ย การทางานในฟังก์ชั่น loop จะคอยตรวจสอบว่าอุปกรณ์ยังคงเช่ือมต่อกับ NETPIE อยู่หรือไม่ด้วยคาส่ัง if(microgear.connected()) ถ้าเชอ่ื มต่ออย่ฟู งั ก์ชน่ั microgear.loop() จะคอยตรวจสอบการเกดิ เหตกุ ารณต์ า่ ง ๆ ถ้าหากเช่ือมต่อ NETPIE ไม่ได้ ก็จะเชื่อมต่อใหม่ด้วยฟังก์ช่ัน microgear.connect(APPID) อีกครั้ง จากนัน้ กระบวนการทางานก็จะเร่ิมต้นใหม่ 5.1.2 การเตรยี มการ สรา้ งฟรบี อรด์ สาหรับควบคุม LED (D0) บนโมดูล NodeMCU 5.1.2.1 ไปที่เว็บไซต์ https://netpie.io/freeboard ทาการล็อกอินเพื่อเข้าใช้งาน หรือถ้ายังไม่มีบัญชีให้ทา การลงทะเบียนกอ่ น จะไดข้ ้อมลู จาเปน็ สาหรบั ขัน้ ตอนถดั ไปดังนี้ รหัสคียท์ ั้งหมดทใี่ ชใ้ นการเขยี นโค้ดคาสัง่ บนโมดลู NodeMCU เพอ่ื เชอ่ื มต่อกบั FREEBOARD ผา่ น NETPIE 1. APPLICATION = Room142SRPC ................................................................. 2. APPLICATION KEY = FirstIotProject ................................................................. 3. Key = Ajhpuikzv1EFIwQ ................................................................. 4. Sercret = ghJTH7hQtNj9DGHWMioUJoSLg ................................................................. 5. ALIASNAME = 142LED ................................................................. 6. Topic = state .................................................................

38 5.1.2.2 สร้างฟรีบอร์ดใหม่ คลิกปุ่ม Create Freeboard ตง้ั ช่ือเป็น Room142LED คลิกที่ปมุ่ CREATE ดังรูป ที่ 5-1 รปู ที่ 5-1 แสดงหนา้ เวบ็ freeboard.io เม่อื เริ่มต้นสรา้ งฟรบี อร์ดใหม่ 5.1.2.3 เ พ่ิ ม Datasource ข อง Freeboard Room142LED คลิ ก ที่ ปุ่ม Tool ก ร อ ก ข้ อ มู ล เ ก่ี ย ว กั บ Datasource ของ Freeboard เลือก TYPE > NETPIE Microgear ตั้งช่ือ NAME > Room142LED คลิกที่ปุ่ม Save ดังรปู ท่ี 5-2 รปู ที่ 5-2 เพ่มิ แหลง่ ขอ้ มูล DATASOURCES และตัง้ คา่ ใน NETPIE Freeboard สาหรบั ควบคมุ LED

39 รหสั คียท์ ้งั หมดท่ใี ชใ้ น FREEBOARD เชอ่ื มตอ่ กับโมดูล NodeMCU ผ่าน NETPIE 7. DATASOURSE NAME = Room142LED ................................................................. 8. SUBSCRIBED TOPIC = /142LED/state ................................................................. 9. TOGGLE STATE : = datasources[\"ขอ้ 7\"][\"/ข้อ 1/ขอ้ 5/ข้อ 6\"]==1 = datasources[\"Room142LED\"][\"/Room142SRPC/142LED/state\"]==1 10. ONTOGGLEON ACTION = microgear['ขอ้ 7].chat('ขอ้ 5','1') = microgear['Room142LED'].chat('142LED','1') 11. ONTOGGLEOFF ACTION= microgear['ข้อ 7'].chat('ขอ้ 5','0') = microgear['Room142LED'].chat('142LED','0') 5.1.2.5 สร้าง Widget ขึ้นมาใหม่โดยกด + (ADD PANE) และเลือกชนิดใน Drop Down Box เป็นแบบ Toggle ดงั รูปท่ี 5-3 รูปที่ 5-3 หนา้ ตา่ งตง้ั ค่า Datasource ใน NETPIE Freeboard สาหรบั ควบคุม LED รูปที่ 5-4 หนา้ ต่าง Freeboard บอรด์ ทส่ี รา้ งข้ึนเพ่อื ควบคุม LED ทต่ี อ่ กับขา D0 ของ NodeMCU โดยทางานผา่ น NETPIE และแสดงผลดว้ ย freeboard.io

40 5.1.3. ทดสอบการทางานท้ังระบบสาหรบั ควบคุม LED คลิกท่ีปุ่ม OFF ซ่ึงเป็นสีแดง ปุ่มกดจะเปลี่ยนเป็นปุ่ม ON สีเขียว และทาให้ LED ท่ีต่อกับขา D0 ของ NodeMCU จะตดิ สว่างตามด้วย คลิกที่ปุ่ม ON ซึ่งเป็นสีเขียว ปุ่มกดจะเปล่ียนเป็นปุ่ม OFF สีแดง และทาให้ LED ที่ต่อกับขา D0 ของ NodeMCU จะดับตามดว้ ย รูปที่ 5-5 ผลการกดสวิตช์ OFF สงั่ งานผา่ น freeboard และ ผลการกดสวิตช์ ON สงั่ งานผา่ น freeboard 5.2 การส่งค่าความชื้นและอุณหภูมจิ ากโมดลู NodeMCU แสดงผลที่ Freeboard หัวขอ้ ของการติดตอ่ หรือ Topic ใช้ Topic ชอ่ื /ALIASNAME/dht ในการส่งข้อความโดยใช้ REST API จาก freeboard ดงั นั้นท่ี NodeMCU จะตอ้ งทาการบอกรบั หรอื subscribe หวั ขอ้ การติดตอ่ นี้ ลาดบั ขั้นการทดลองท่ี 5-2 5.2.1 การเตรยี มการทีฝ่ ่งั NodeMCU 5.2.1.1 ต่อวงจรตามรูปที่ 5-6 เพ่ือใช้ทดสอบการทางาน เปิดโปรแกรม Arduino IDE เลือกบอร์ดเป็น NodeMCU1.0 และเลือกพอรต์ เชือ่ มตอ่ ให้ถกู ต้อง รูปที่ 5-6 วงจรทดลองใช้งาน DHT11 ดว้ ย NodeMCU 5.2.1.2 พิมพ์โค้ดคาสั่งตามตัวอย่างท่ี 5-2 บันทึกไฟล์เป็น Ex5_2.ino ให้ทาการแก้ไขในบรรทัดท่ีมีคาสั่ง ต่อไปน้ี const char* ssid = <WIFI_SSID>; “WIFI_SSID” เป็นชอ่ื เครอื ข่าย WIFI ที่ตอ้ งการเชอ่ื มต่อ const char* password = <WIFI_KEY>; “WIFI_KEY” เป็นรหสั ผา่ นเครือข่าย WIFI #define APPID <APPID> “APPID” เปน็ ชอ่ื Application ID ท่สี รา้ งไว้ #define KEY <APPKEY> “APPKEY” เป็น KEY ท่ีทาง Netpir กาหนดใหม้ า #define SECRET <APPSECRET> “APPSECRET” เป็น SECRET ทที่ าง Netpie กาหนดให้ #define ALIAS <ALIASNAME> “ALIASNAME” เปน็ ชือ่ ของโมดลู NodeMCU

41 ตัวอย่างท่ี 5-2 include <DHT.h> #include <ESP8266WiFi.h> #include <MicroGear.h> const char* ssid = <WIFI_SSID>; const char* password = <WIFI_KEY>; #define APPID <APPID> #define KEY <APPKEY> #define SECRET <APPSECRET> #define ALIAS <ALIASNAME> WiFiClient client; int timer = 0; char str[32]; #define DHTTYPE DHT11 //Define sensor type #define DHTPIN D4 // Define sensor pin DHT dht(DHTPIN, DHTTYPE, 15); //Initialize DHT sensor int humid; int temp; MicroGear microgear(client); void onMsghandler(char *topic, uint8_t* msg, unsigned int msglen) { Serial.print(\"Incoming message -->\"); msg[msglen] = '\\0'; Serial.println((char *)msg); } void onConnected(char *attribute, uint8_t* msg, unsigned int msglen) { Serial.println(\"Connected to NETPIE...\"); microgear.setAlias(ALIAS); } void setup(){ dht.begin(); microgear.on(MESSAGE,onMsghandler); microgear.on(CONNECTED,onConnected); Serial.begin(115200); Serial.println(\"Starting...\"); if (WiFi.begin(ssid, password)) { while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print(\".\"); } } Serial.println(\"WiFi connected\"); Serial.println(\"IP address: \"); Serial.println(WiFi.localIP());

42 microgear.init(KEY,SECRET,ALIAS); microgear.connect(APPID); } void loop(){ if (microgear.connected()) { Serial.println(\"connected\"); microgear.loop(); if (timer >= 1000) { humid = dht.readHumidity(); temp = dht.readTemperature(); sprintf(str,\"%d,%d\",humid,temp); Serial.println(str); Serial.print(\"Sending -->\"); microgear.publish(\"/ALIASNAME\",str); timer = 0; } else timer += 100; } else { Serial.println(\"connection lost, reconnect...\"); if (timer >= 5000) { microgear.connect(APPID); timer = 0; } else timer += 100; } delay(100); } คาอธบิ ายโปรแกรมเพ่มิ เติม เม่ือโปรแกรมทาานจะกาหนด event หรือเหตุการณ์ที่ต้องการให้เกิดข้ึน 2 เหตุการณ์ คือ เมื่อเชื่อมต่อ NETPIE ได้สาเร็จด้วยคาสั่ง microgear.on(CONNECTED,onConnected) และเม่ือมีการส่งข้อความเข้ามาใน Topic ท่ีกาหนดสิทธิ์การเข้าถึงไว้ด้วยคาส่ัง microgear.on(MESSAGE,onMsghandler) จากน้ันเช่ือมต่อ WiFi เม่ือเช่ือมตอ่ ไดส้ าเร็จจะเช่ือมต่อกับ NETPIE ดว้ ยคาสั่ง microgear.connect(APPID) หากเชื่อมต่อได้ สาเร็จ ฟังก์ช่ัน onConnected ก็จะทางาน ในฟังก์ชั่นนี้จะมีการกาหนดสิทธิ์เข้าถึงข้อมูลของ Topic ท่ีช่ือว่า /dht เมื่อคาส่ังนี้ทางาน เมื่อเกิดเหตุการณ์รับข้อความเกิดขึ้น ส่งผลให้ฟังก์ชั่น onMsghandler ทางานทันที การทางานใน ฟังก์ชั่น onMsghandler จะส่งข้อมูลด้วยคาสั่ง microgear.publish(\"/ALIASNAME/dht\",str); (ใน ท่ีนี้เป็น Message String str) ไปยัง Topic ท่ีระบุคือ /dht ซึ่งข้อความคือค่าของอุณหภูมิและความชื้นท่ีวัดได้จาก เซนเซอร์ DHT ถ้าเชอื่ มต่ออยฟู่ ังก์ชั่น microgear.loop() จะคอยตรวจสอบการเกดิ เหตกุ ารณต์ า่ ง ๆ ถ้าหากเชื่อมต่อ NETPIE ไม่ได้ ก็จะเชื่อมต่อใหม่ด้วยฟังก์ชั่น microgear.connect(APPID) อกี ครัง้ จากนน้ั กระบวนการทางานกจ็ ะเร่มิ ต้นใหม่

43 5.2.2 การเตรยี มการ สรา้ งฟรีบอรด์ สาหรบั แสดงผลคา่ ความชน้ื และอณุ หภมู ิทร่ี บั มาจากโมดูล NodeMCU 5.2.2.1 ไปท่ีเว็บไซต์ https://netpie.io/freeboard ทาการล็อกอินเพ่ือเข้าใช้งาน หรือถ้ายังไม่มีบัญชีให้ทา การลงทะเบียนกอ่ น จะได้ข้อมลู จาเป็นสาหรับขน้ั ตอนถัดไป (ขั้นตอนโดยละเอยี ดอยใู่ นบทท่ี 4) ดงั น้ี รหสั คียท์ ั้งหมดท่ใี ชใ้ นการเขยี นโค้ดคาส่งั บนโมดลู NodeMCU เพอ่ื เช่อื มตอ่ กับ FREEBOARD ผ่าน NETPIE 1. APPLICATION = Room142SRPC ................................................................. 2. APPLICATION KEY = FirstIotProject ................................................................. 3. Key = Ajhpuikzv1EFIwQ ................................................................. 4. Sercret = ghJTH7hQtNj9DGHWMioUJoSLg ................................................................. 5. ALIASNAME = 142DHT ................................................................. 6. Topic = dht ................................................................. 5.2.2.2 สร้างฟรีบอร์ดใหม่ คลิกปุ่ม Create Freeboard ตั้งชื่อ Freeboard เป็น Room142 คลิกท่ีปุ่ม CREATE ดังรปู ที่ 5-7 (กรณที ่มี ี Freeboard อยแู่ ล้วใหน้ าใช้ไดเ้ ลย) รูปที่ 5-7 แสดงหน้าเวบ็ freeboard.io ทีม่ ฟี รบี อรด์ เดมิ รหัสคีย์ทั้งหมดที่ใชใ้ น FREEBOARD เชอื่ มต่อกับโมดูล NodeMCU ผ่าน NETPIE 7. DATASOURSE NAME = Room142DHT ................................................................. 8. SUBSCRIBED TOPIC = /142DHT/dht ................................................................. 9. VALUE 1: = datasources[\"ข้อ 7\"][\"/ข้อ 1/ขอ้ 5/ข้อ 6\"].split(\",\")[0] = datasources[\"Room142DHT\"][\"/Room142SRPC/142DHT/dht\"].split(\",\")[0] 10. VALUE 1: = datasources[\"ข้อ 7\"][\"/ขอ้ 1/ขอ้ 5/ขอ้ 6\"].split(\",\")[1] = datasources[\"Room142DHT\"][\"/Room142SRPC/142DHT/dht\"].split(\",\")[1] 5.2.2.3 เพมิ่ Datasource ของ Freeboard Room142DHT คลิกท่ีปมุ่ Tool ดงั รปู ที่ 5-8 รปู ท่ี 5-8 เพิม่ แหลง่ ข้อมลู DATASOURCES ให้แกแ่ ดชบอร์ด

44 5.2.2.4 กรอกข้อมูลเกี่ยวกับ Datasource ของ Freeboard เลือก TYPE > NETPIE Microgear ต้ังช่ือ NAME > Room142DHT คลิกท่ีป่มุ Save ดงั รปู ท่ี 5-9 รปู ที่ 5-9 หนา้ ตา่ งตงั้ ค่า Datasource ใน NETPIE Freeboard สาหรบั ควบคุม LED 5.2.2.5 สร้าง Widget ขึ้นมาใหม่โดยกด + (ADD PANE) เพื่อสร้าง Widget ชนิด Gauge ใหม่ 2 Widget เพ่ือแยกแสดงอณุ หภูมแิ ละความช้นื และจดั เรียงดงั รปู ที่ 5-10 Widget1 Widget2 รูปท่ี 5-10 หน้าตา่ งตั้งค่า Datasource ใน NETPIE Freeboard สาหรบั ควบคมุ LED

45 5.2.2.5 ตั้งค่าแต่ละ Widget ตามข้อลมูลที่ให้ด้านล่าง หน้าต่างแสดงตัวอย่างการกรอกข้อมูลการตั้งค่าเพื่อ สร้าง Widget แสดงค่าความช้ืน (Humidity) และอุณหภูมิ (Temperature) แสดงดงั รปู ที่ 5-11 Widget 1:  TITLE : ความชื้น (Humidity)  VALUE : datasources[\"Room142DHT\"][\"/Room142SRPC/142DHT/dht\"].split(\",\")[0]  UNIT : %  MINIMUM : 0  MAXIMUM : 100 Widget 2:  TITLE : อุณหภูมิ (Temperature)  VALUE : datasources[\"Room142DHT\"][\"/Room142SRPC/142DHT/dht\"].split(\",\")[1]  UNIT : ºC  MINIMUM : 0  MAXIMUM : 50 รูปที่ 5-11 ตัวอย่างหน้าจอตั้งค่า Widget แสดงค่าความช้ืน (บน) และอุณหภูมิ (ล่าง)

46 5.2.3. ทดสอบการทางานฟรีบอร์ดสาหรบั แสดงผลค่าความชน้ื และอุณหภูมทิ ร่ี บั มาจากโมดลู NodeMCU เนื่องจาก DHT ส่งค่ามาในรูปแบบ \"Humidity, Temperature\" เช่น \" 40,24 \" เม่ือ Freeboard รับค่าเข้า มา แต่ละ Guage จึงต้องทาการแยกข้อมูลที่เกี่ยวข้องออกเป็น Array โดยใช้เครื่องหมาย Comma “,” เป็นตัวแบ่ง จากนั้นก็อ้างอิงถึงช่องใน Array ของ Message String ที่ Publish ใน Topic /dht เช่น Index \\[0\\] หมายถึงค่า แรกเป็นค่าความชื้น และ Index \\[1\\] หมายถึงค่าถัดมาซ่ึงเป็นค่าอุณหภูมิ รูปที่ 5-12 รูปแสดง Widget แสดงค่าอุณหภูมิและความชื้นท่ีวัดได้จากเซนเซอร์


Like this book? You can publish your book online for free in a few minutes!
Create your own flipbook