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 คู่มือการใช้ NETPIE

คู่มือการใช้ NETPIE

Published by Chalermkiat Deesom, 2019-01-14 02:37:53

Description: NETPIE Where thing chat

Keywords: คู่มือการใช้ NETPIE,NETPIE Where thing chat

Search

Read the Text Version

คู่มือการใช้งาน NETPIEAn Official Guide to NETPIE

เอกสารฉบับนีเ้ ป็ นลิขสิทธ์ิของศูนย์เทคโนโลยอี เิ ลก็ ทรอนิกส์และคอมพวิ เตอร์แห่งชาติ เอกสารฉบับนีเ้ ผยแพร่ภายใต้สัญญาอนุญาตแบบ Creative Commons Attribution 4.0 International Licenseอนญุ าตให้นาผลงานไปใช้ได้ แก้ไขได้ ดดั แปลงเนือ้ หาได้ ใช้ในเชิงพาณิชย์ได้ โดยอ้างอิงท่ีมา ดรู ายละเอียดสญั ญาอนญุ าตที่ https://creativecommons.org/licenses/by/4.0/ เอกสารเวอร์ช่ัน 2017-05-19 สามารถดาวน์โหลดไฟล์เอกสารนีไ้ ด้ที่ https://netpie.io/tutorials คูม่ ือการใชง้ าน NETPIE - 2

สารบญั บทนา...................................................................................................................................... 6 1. แนะนา NETPIE ............................................................................................................7 1.1. รู้จัก NETPIE..........................................................................................................7 1.2. Microgear...............................................................................................................8 1.3. MQTT (MQ Telemetry Transport).......................................................................11 แบบฝึ กหัด :Local MQTT Chat บน Raspberry Pi..........................................................19 1.4. Authorization และ Authentication ใน NETPIE...................................................21 2. Getting Started............................................................................................................25 2.1 การสมัครสมาชิก.................................................................................................25 2.2 การสร้างแอปพลเิ คช่ัน ........................................................................................26 2.3 การตดิ ตงั้ เคร่ืองมือพัฒนา ..................................................................................30 3. HTML 5 Microgear......................................................................................................36 Lab 3.1: Hello NETPIE...................................................................................................36 Lab 3.2 :HTMLChat........................................................................................................38 Lab 3.3 :Room Chat.......................................................................................................40 4. ESP8266 Microgear....................................................................................................46 4.1 รู้จัก ESP8266/NodeMCU ...................................................................................46 Lab 4.1 :NETPIE Blink ...................................................................................................48 Lab 4.2 :IoT Switch ........................................................................................................52 5. Freeboard....................................................................................................................57 Lab 5.1 การแสดงผลข้อมูลจากอุปกรณ์เซนเซอร์บน :NETPIE Freeboard ..................62 Lab 5.2 การควบคุมอุปกรณ์ด้วย :NETPIE Freeboard..................................................68 6. NETPIE FEED ............................................................................................................74 6.1 การสร้าง FEED ...................................................................................................74 คูม่ ือการใชง้ าน NETPIE - 3

6.2 การกาหนดสิทธ์ิในการเข้าถงึ feed .....................................................................76 6.3 การเขียนข้อมูลลงใน Feed .................................................................................78 6.4 การดงึ ข้อมูลจาก feed มาใช้งาน ........................................................................80 6.5 ข้อจากัดการใช้งาน..............................................................................................89 Lab 6.1 การแสดงผลข้อมูลเซนเซอร์ด้วย :NETPIE Feed .............................................897. NETPIE REST API .....................................................................................................94 7.1 REST API............................................................................................................94 7.2 NETPIE REST API..............................................................................................94 Lab 7.1 :HTML  HTML..............................................................................................97 Lab 7.2: HTML  NodeMCU.....................................................................................101 Lab 7.3: KKMC IoT ......................................................................................................1058. NETPIE Secure Connection.....................................................................................109 Lab 8.1: สร้าง Secure Connection ระหว่าง NodeMCU และ HTML5 .........................111ภาคผนวก NETPIE Microgear Reference Guide ..............................................................1181. ESP8266-Arduino Microgear....................................................................................118 1.1 ความเข้ากันได้...................................................................................................118 1.2 พอร์ตส่ือสาร .....................................................................................................118 1.3 การตดิ ตงั้ ...........................................................................................................118 1.4 ข้อจากัดท่พี บ ....................................................................................................119 1.5 ตวั อย่างการเรียกใช้...........................................................................................119 1.6 การใช้งาน library...............................................................................................1222. Arduino-Ethernet Microgear .....................................................................................126 2.1 ความเข้ากันได้...................................................................................................126 2.2 ตวั อย่างการเรียกใช้...........................................................................................126 2.3 การใช้งาน library...............................................................................................1283. Node.js Microgear.....................................................................................................132 คูม่ ือการใชง้ าน NETPIE - 4

3.1 พอร์ตส่ือสาร .....................................................................................................132 3.2 การตดิ ตงั้ ...........................................................................................................132 3.3 ตัวอย่างการเรียกใช้...........................................................................................132 3.4 การใช้งาน library...............................................................................................1334. HTML5 Microgear .....................................................................................................138 4.1 การรองรับ .........................................................................................................138 4.2 พอร์ตส่ือสาร .....................................................................................................139 4.3 การตดิ ตงั้ ...........................................................................................................139 4.4 ตวั อย่างการเรียกใช้...........................................................................................139 4.5 การใช้งาน library...............................................................................................1405. Python Microgear......................................................................................................144 5.1 การตดิ ตงั้ ...........................................................................................................145 5.2 ตัวอย่างการเรียกใช้งาน ....................................................................................145 5.3 ตัวอย่างเพ่มิ เตมิ ................................................................................................145 5.4 การใช้งาน library...............................................................................................1456. REST API..................................................................................................................152 6.1 API Endpoint .....................................................................................................152 6.2 Authentication....................................................................................................152 6.3 Resource Types ................................................................................................153ผู้เขียน ................................................................................................................................156 คูม่ ือการใชง้ าน NETPIE - 5

บทนา ในปัจจบุ นั เทคโนโลยี Internet of Things หรือ IoT เริ่มเข้ามามีบทบาทสาคญั ในชีวิตประจาวนั IoTคือ สภาพแวดล้อมอนั ประกอบด้วยสรรพสิง่ (Things) ที่สามารถส่ือสารและเชื่อมตอ่ กนั ได้ผา่ นโพรโทคอลการส่ือสารทงั้ แบบใช้สายและไร้สาย โดยสรรพสง่ิ ตา่ งๆ มีวธิ ีการระบตุ วั ตนได้ รับรู้บริบทของสภาพแวดล้อมได้และมีปฏิสมั พนั ธ์โต้ตอบและทางานร่วมกนั ได้ ปัจจบุ นั เราสามารถนาเทคโนโลยี IoT มาประยกุ ต์ในด้านตา่ งๆ โดยเพ่มิ ขีดความสามารถของอปุ กรณ์เครื่องใช้หรือบริการ ให้สามารถรับรู้ แลกเปล่ียนข้อมลู แสดงผล ควบคมุ หรือทางานร่วมกนั ได้ โดยก้าวข้ามขีดจากดั ในเรื่องของเวลาและสถานท่ี เป็นการบรู ณาการเทคโนโลยีตา่ งๆ เชน่ การสื่อสารเครือขา่ ยคอมพวิ เตอร์ อปุ กรณ์ไมโครคอนโทรลเลอร์ อุปกรณ์ระบบสมองกลฝังตวั อปุ กรณ์เซนเซอร์ และข้อมลู เข้าด้วยกนั และด้วยราคาของอปุ กรณ์ตา่ งๆ ท่ีถกู ลงสวนทางกบั สมรรถนะที่ดีขนึ ้ ทาให้การพฒั นาตอ่ยอดผลิตภณั ฑ์หรือบริการท่ีเป็น IoT เป็นไปได้โดยงา่ ย NETPIE เป็นแพลตฟอร์มให้บริการสาหรับ IoT เป็นระบบพืน้ ฐานที่อานวยความสะดวกให้กบันกั พฒั นา นกั พฒั นาฮาร์ดแวร์สามารถพฒั นาอปุ กรณ์ โดยไมต่ ้องกงั วลเร่ืองการตดิ ตงั้ ดแู ลระบบส่ือสารระบบเซิร์ฟเวอร์ หรือฐานข้อมลู ใดๆ ในขณะเดียวกนั แพลตฟอร์มนีย้ งั ชว่ ยให้นกั พฒั นาซอฟตแ์ วร์เข้าถงึอปุ กรณ์อิเล็กทรอนิกส์ตา่ งๆ ได้ง่ายขนึ ้ ผา่ นไลบรารี่สาเร็จรูปที่แพลตฟอร์มเตรียมไว้ให้ ดงั นนั้ บริการแพลตฟอร์ม NETPIE จงึ เป็นเสมือนสะพานเชื่อมระหว่างนกั พฒั นาฮาร์ดแวร์และนกั พฒั นาซอฟต์แวร์ เอกสารนีอ้ ธิบายการประยกุ ต์ใช้ IoT เบอื ้ งต้นด้วย NETPIE คณะผ้จู ดั ทาหวงั วา่ ผ้อู า่ นจะได้รับความรู้ความเข้าใจเกี่ยวกบั เทคโนโลยี IoT เข้าใจกระบวนการพฒั นาผลิตภณั ฑ์ บริการ และแอปพลิเคชน่ั เบือ้ งต้นโดยใช้แพลตฟอร์มส่ือสาร NETPIE ในการเชื่อมตอ่ อปุ กรณ์และแลกเปลี่ยนข้อมลู กนั ได้ในรูปแบบของ IoTเพื่อให้เทคโนโลยีที่เกี่ยวข้องกบั Internet of Things ได้รับการพฒั นาและตอ่ ยอดเป็นนวตั กรรม เกิดการสร้างสรรค์พฒั นาผลิตภณั ฑ์ บริการ และแอปพลิเคชนั่ ด้าน IoT โดยผ้ปู ระกอบการไทย และเพมิ่ ขีดความสามารถในการแขง่ ขนั กบั นานาประเทศ คูม่ ือการใชง้ าน NETPIE - 6

1.แนะนา NETPIE 1.1. รู้จัก NETPIE NETPIE เป็น IoT (Internet of Things) Cloud Platform ท่ีพฒั นาขนึ ้ โดยทีมงานวจิ ยั และเปิดให้บคุ คลทวั่ ไปใช้งานโดยมี Web Portal ที่ให้สามารถลงทะเบยี นและจดั การตวั ตนและสิทธิ์ของแอปพลเิ คชน่ัและอปุ กรณ์ได้ท่ีเว็บไซต์ https://netpie.io ตงั้ แตเ่ ดอื นกนั ยายน 2558 เป็นต้นมา NETPIE เป็นMiddleware ท่ีมีหวั ใจหลกั (นอกเหนือจากส่วนอ่ืนๆ) เป็น Distributed MQTT Brokers ซงึ่ เป็นเสมือนจดุนดั พบให้สิ่งตา่ งๆ (Things) มาตดิ ตอ่ สื่อสารและทางานร่วมกนั ผา่ นวธิ ีการสง่ ข้อความแบบPublish/Subscribe NETPIE มีโครงสร้างสถาปัตยกรรมเป็นคลาวด์อยา่ งแท้จริงในทกุ องค์ประกอบ ทาให้สามารถขยายตวั ได้อยา่ งอตั โนมตั ิ (Auto-scale) สามารถดแู ลและซอ่ มแซมตวั เองได้อตั โนมตั เิ ม่ือสว่ นหนง่ึสว่ นใดในระบบมีปัญหา (Self-healing, Self-recovery) โดยไมต่ ้องพงึ่ ผ้ดู แู ลระบบ การบริหารจดั การระบบเป็นแบบ Plug-and-Play ไมต่ ้อง Configure หรือปรับแตง่ ในฝั่งอปุ กรณ์ NETPIE มี Client Library หรือที่เรียกวา่ Microgear ซง่ึ ทาหน้าที่สร้างและดแู ลช่องทางส่ือสารระหวา่ งอปุ กรณ์กบั NETPIE รวมไปถึงรักษาความปลอดภยั ในการสง่ ข้อมลู Microgear เป็น Open Source และสามารถดาวน์โหลดได้จากhttps://github.com/netpieio โดย ณ ปัจจบุ นั มี Microgear สาหรับ OS และ Embedded Board หลกั ๆ ที่เป็นที่นิยมในหมนู่ กั พฒั นาเกือบทกุ ชนดิ โมเดลการส่ือสารของ NETPIE แสดงไว้ในรูปที่ 1.1 รูปท่ี 1.1 วธิ ีการส่ือสารของส่งิ ต่างๆ ผ่าน NETPIE คูม่ ือการใชง้ าน NETPIE - 7

ประโยชน์ของ NETPIE 1. ชว่ ยลดการใช้ทรัพยากรของการเชื่อมตอ่ NETPIE ชว่ ยให้อปุ กรณ์สามารถสื่อสารกนั ได้โดยผ้ใู ช้ไมต่ ้องกงั วลวา่ อปุ กรณ์นนั้ จะอย่ทู ี่ใด เพียงแค่นา Microgear Library ไปติดตงั้ ในอปุ กรณ์ NETPIE จะรับหน้าท่ีดแู ลเช่ือมตอ่ ให้ทงั้ หมด ไมว่ า่ อปุ กรณ์นนั้จะอยใู่ นเครือขา่ ยชนิดใด ลกั ษณะใด หรือแม้กระทง่ั เคลื่อนย้ายไปอยทู่ ่ีใด ผ้ใู ช้สามารถตดั ปัญหาในการเข้าถึงอปุ กรณ์จากระยะไกล (Remote Access) ด้วยวธิ ีการแบบเดมิ ๆ เชน่ การใช้ Fixed Public IPAddress หรือการตงั้ Port Forwarding ในเราท์เตอร์และการต้องไปลงทะเบยี นกบั ผ้ใู ห้บริการ DynamicDNS ซง่ึ ทงั้ หมดล้วนมีความยงุ่ ยาก ลดความยืดหยนุ่ ของระบบ ไมเ่ พียงเทา่ นนั้ NETPIE ยงั ชว่ ยให้การเริ่มต้นใช้งานเป็นไปโดยง่าย โดยออกแบบให้อปุ กรณ์ถกู ค้นพบและเข้าสบู่ ริการโดยอตั โนมตั ิ (AutomaticDiscovery, Plug-and-Play) 2. ชว่ ยลดภาระด้านความปลอดภยั ของข้อมลู NETPIE ถกู ออกแบบให้มีระดบั และสทิ ธ์ิในการเข้าถึงในระดบั Fine Grain กลา่ วคอื ผ้ใู ช้สามารถออกแบบได้เองทงั้ หมดวา่ สิ่งใดมีสทิ ธ์ิคยุ กบั สงิ่ ใด ส่งิ ใดมีสิทธ์ิหรือไม่ - เพียงใดในการอา่ นหรือเขียนข้อมลูและสทิ ธ์ิเหลา่ นีจ้ ะมีอายกุ ารใช้งานนานเทา่ ใด หรือจะถกู เพิกถอนภายใต้เง่ือนไขใด เป็นต้น 3. ยืดหย่นุ ตอ่ การขยายระบบ NETPIE มีสถาปัตยกรรมเป็นคลาวดเ์ ซิร์ฟเวอร์อย่างแท้จริงในทกุ องคป์ ระกอบของระบบ ทาให้เกิดความยืดหยนุ่ และคล่องตวั สงู ในการขยายตวั นอกจากนีโ้ มดลู ตา่ งๆ ยงั ถกู ออกแบบให้ทางานแยกจากกนัเพื่อให้เกิดสภาวะ Loose Coupling และสื่อสารกนั ด้วยวธิ ี Asynchronous Messaging ชว่ ยให้แพลตฟอร์มมีความนา่ เช่ือถือได้สงู นาไปใช้ซา้ และพฒั นาตอ่ ได้ง่าย ดงั นนั้ ผ้พู ฒั นาไมจ่ าเป็นต้องกงั วลกบัการขยายตวั เพ่ือรับโหลดที่เพมิ่ ขนึ ้ ในระบบอีกตอ่ ไป 1.2. MICROGEAR Microgear คอื ซอฟต์แวร์ไลบรารี่ของ NETPIE ท่ีตดิ ตงั้ อยบู่ นอปุ กรณ์ท่ีต้องการเชื่อมตอ่ ส่ือสารผา่ นคลาวด์ของ NETPIE Microgear เปรียบเสมือนตวั กลางและผ้ชู ว่ ยในการสร้างและดแู ลการเชื่อมตอ่ ให้มีความเสถียร ปลอดภยั ให้การส่ือสารแลกเปล่ียนข้อมลู ระหวา่ งอปุ กรณ์เป็นไปอย่างราบรื่น บทบาทหน้าท่ีของ Microgear สามารถแบง่ ออกเป็น 4 ด้านคอื 1. ด้านการสื่อสาร (Communication) Microgear จะเป็นผ้ชู ว่ ยในการสร้างการเชื่อมตอ่ (Connection) ไปยงั คลาวด์ของ NETPIE และคอยตรวจสอบสถานะของการเช่ือมตอ่ หากการ เชื่อมตอ่ มีปัญหา Microgear สามารถชว่ ยเช่ือมตอ่ ให้ใหมเ่ พ่ือให้การส่ือสารเป็นไปได้อย่าง คูม่ ือการใชง้ าน NETPIE - 8

ราบร่ืน นอกจากนี ้ Microgear ยงั ชว่ ยอานวยความสะดวก ในการสร้างชอ่ งทางการสื่อสารแบบ เข้ารหสั ในกรณีท่ีผ้ใู ช้ต้องการ สว่ นการแลกเปลี่ยนข้อมลู ระหวา่ ง Microgear และคลาวด์ของ NETPIE จะใช้โพรโทคอล MQTT ในการสื่อสาร2. ด้านการยืนยนั ตวั ตน (Authentication) ในขนั้ ตอนการสร้างการเช่ือมตอ่ Microgear จะชว่ ย ยืนยนั ตวั ตนของอปุ กรณ์กบั คลาวดข์ อง NETPIE โดยการพิสจู น์ตวั ตน (Identity) ของอปุ กรณ์จะ ใช้ข้อมลู ประกอบกนั สามสว่ นคือ AppID, App Key และ Token3. ด้านการขออนญุ าตสทิ ธิ์ (Authorization) การขออนญุ าตสิทธิ์ในการสื่อสารจะเกิดขนึ ้ ใน ขนั้ ตอนการสร้างการเชื่อมตอ่ ควบคกู่ บั การยืนยนั ตวั ตน คลาวด์ของ NETPIE จะเป็นผ้อู อก ใบอนญุ าต (Token) ท่ีระบวุ ่าอปุ กรณ์ตวั นี ้ สามารถสื่อสารได้กบั อปุ กรณ์ตวั ใดบ้าง ในกรณีปกติ อปุ กรณ์ท่ีอยภู่ ายใต้กลมุ่ AppID เดยี วกนั เทา่ นนั้ จงึ จะมีสทิ ธ์ิส่ือสารกนั ได้ (ยกเว้นในกรณีการใช้ Freeboard Microgear ที่อนญุ าตให้สื่อสารข้าม AppID ได้ ซงึ่ จะอธิบายในบทท่ี 5)4. ด้านการประสานงาน (Coordination) Microgear มีฟังก์ชนั่ ท่ีชว่ ยให้อปุ กรณ์ตา่ งๆ ภายในกลมุ่ AppID เดียวกนั ทราบสถานะของกนั และกนั เชน่ ทราบวา่ มีอปุ กรณ์ใดออนไลน์เข้ามาใหมใ่ น กลมุ่ หรือมีอปุ กรณ์ใดออกไปจากกลมุ่ รวมถงึ ทราบการเปลี่ยนแปลงสถานะของอปุ กรณ์ท่ีสนใจ ตดิ ตาม จากข้อมลู ดงั กล่าวผ้ใู ช้สามารถกาหนดบทบาทหน้าที่ให้อปุ กรณ์ในกลมุ่ ตามสถานะของ อปุ กรณ์อื่นๆ ในกลมุ่ เชน่ หากเป็นอปุ กรณ์ตวั แรกในกล่มุ ให้ทาหน้าที่เป็นหวั หน้ากล่มุ เป็นต้นMicrogear ถกู พฒั นาขนึ ้ เพ่ือให้ทางานได้กบั อปุ กรณ์ท่ีหลากหลาย ในสว่ นของซอฟต์แวร์มีMicrogear ให้เลือกใช้กบั Programming Language ได้แก่ Node.js Python HTML5 Java AndroidC# สาหรับอปุ กรณ์ฮาร์ดแวร์ประเภทไมโครคอนโทรลเลอร์ Microgear เปรียบเสมือน Firmware ซงึ่ มีMicrogear ท่ีรองรับ Arduino with Ethernet Shield (ใช้ได้กบั Arduino Mega) และ Microgear สาหรับWiFi ไมโครคอนโทรลเลอร์ ESP8266 Microgear ท่ีพฒั นาขนึ ้ ทงั้ หมดถกู รวบรวมไว้ท่ีhttps://github.com/netpieio โดยมีสญั ญาอนญุ าตให้ใช้สิทธิ์แบบเปิดประเภท ISC License ซง่ึ อนญุ าตให้ทาซา้ ดดั แปลง และ/หรือสง่ ตอ่ ไลบรารี่นีไ้ ด้ ทงั้ ในการใช้งานเชงิ สาธารณประโยชน์และเชงิ พาณิชย์รายละเอียดของสญั ญาอนญุ าตให้ใช้สิทธ์ิแบบ ISC License มีดงั นี ้ คูม่ ือการใชง้ าน NETPIE - 9

ISC LicenseCopyright (c) 2015, NECTEC < @nectec.or.th>Permission to use, copy, modify, and/or distribute this software for anypurpose with or without fee is hereby granted, provided that the abovecopyright notice and this permission notice appear in all copies.THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIESWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OFMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANYSPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGESWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ANACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ORIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.ฟังก์ช่ันหลักของ Microgear Microgear แตล่ ะชนิดอาจมีชื่อและชนิดของฟังก์ชนั่ แตกตา่ งกนั ตามลกั ษณะของการเขียนโปรแกรมในภาษานนั้ ๆ ในท่ีนีข้ อยกตวั อยา่ งฟังก์ชนั่ ที่มีเหมือนกนั อยใู่ นหลาย Microgear โดยขออ้างองิ ช่ือฟังก์ชน่ัจาก HTML5 Microgear สาหรับรายละเอียดฟังก์ชน่ั ของแตล่ ะชนิด Microgear สามารถดไู ด้จากภาคผนวก หรือเอกสาร Readme ใน https://github.com/netpie.io  create สร้าง Microgear เพื่อเริ่มต้นใช้งาน  connect เชื่อมตอ่ Microgear เข้ากบั คลาวด์ของ NETPIE  setAlias กาหนดช่ือเลน่ ของอปุ กรณ์เพ่ือใช้ระบตุ วั ตนของอปุ กรณ์ภายใน NETPIE  chat สง่ ข้อความแบบเจาะจงผ้รู ับ  publish สง่ ข้อความแบบไมเ่ จาะจงผ้รู ับไปยงั หวั ข้อสนทนาที่กาหนด  subscribe ระบคุ วามสนใจในหวั ข้อสนทนา บอกรับข้อความที่เกิดขนึ ้ บนหวั ข้อนนั้ ๆ  unsubscribe ยกเลกิ การบอกรับข้อความในหวั ข้อสนทนาที่เคย subscribe ไว้  resetToken ยกเลกิ ใบอนญุ าต (Token) และลบใบอนญุ าตออกจาก cache บนอปุ กรณ์  useTLS ระบวุ ่าต้องการสร้างการเชื่อมตอ่ แบบเข้ารหสั ระหวา่ ง Microgear กบั คลาวดข์ อง NETPIE  on ตอบสนองตอ่ เหตกุ ารณ์ท่ีสนใจผา่ นการเรียก Callback Function ลาดบั ในการเรียกฟังก์ชนั่ พืน้ ฐานเพ่ือเริ่มสง่ ข้อมลู เป็นไปตามแผนภาพในรูปท่ี 1.2 คูม่ ือการใชง้ าน NETPIE - 10

chatcreate useTLS connect setAlias publish (optional) รูปท่ี 1.2 ลาดบั การเรียกฟังก์ช่ันพนื้ ฐานของ MicrogearEvents ของ Microgear การทางานของ Microgear เป็นแบบ Event-driven จงึ ต้องตอบสนองตอ่ เหตกุ ารณ์ตา่ งๆ ด้วยการเขียน Callback Function ซง่ึ ชนิดของเหตกุ ารณ์ท่ีสามารถเกิดขนึ ้ มีดงั นี ้  connected เกิดขนึ ้ เม่ือ Microgear เชื่อมตอ่ กบั NETPIE สาเร็จ  closed เกิดขนึ ้ เมื่อ Microgear ปิดการเชื่อมตอ่ กบั NETPIE  error เกิดขนึ ้ เม่ือมีความผิดพลาดเกิดขนึ ้ กบั Microgear  message เกิดขนึ ้ เม่ือมีข้อความเข้ามาท่ีอปุ กรณ์  present เกิดขนึ ้ เม่ือมีอปุ กรณ์ใน AppID เดียวกนั เชื่อมตอ่ เข้ามาบน NETPIE  absent เกิดขนึ ้ เม่ือมีอปุ กรณ์ใน AppID เดยี วกนั หายไปจากการเช่ือมตอ่ กบั NETPIE 1.3. MQTT (MQ TELEMETRY TRANSPORT) MQTT เป็นโพรโทคอลสื่อสารชนั้ แอปพลเิ คชน่ั ที่รันบน TCP/IP ถกู พฒั นาขนึ ้ ในปี 1999 โดย IBMและ Eurotech สาหรับการมอนิเตอร์สถานะทอ่ สง่ นา้ มนั สว่ นท่ีวางผา่ นเขตทะเลทราย ด้วยการออกแบบให้เป็นการรับสง่ ข้อความท่ีมีนา้ หนกั เบามากและเป็นโพรโทคอลเปิด ทาให้ในปัจจบุ นั MQTT ถกู นามาใช้แพร่หลายในการสื่อสารแบบ M2M หรือ IoT เพราะเหมาะสมกบั อปุ กรณ์ปลายทางที่มีขนาดเลก็ /พลงั งานจากดั หรือในการสื่อสารระยะไกลท่ีต้องการการใช้งานแบนด์วิดธ์อยา่ งมีประสทิ ธิภาพ คูม่ ือการใชง้ าน NETPIE - 11

โมเดลการส่ือสารของโพรโทคอลแสดงดงั รูปที่ 1.3 ประกอบด้วย 2 สว่ นคือไคลเอนต์ และโบรกเกอร์ รูปท่ี 1.3 โมเดลการส่ือสารของโพรโทคอล MQTT โบรกเกอร์ เป็นจดุ ศนู ย์กลางในการรับสง่ ข้อความระหวา่ งไคลเอนต์ วธิ ีการกาหนดเส้นทาง(Routing) กระทาผา่ นหวั ข้อ (Topic) โดยไคลเอนต์ Subscribe ในหวั ข้อท่ีตนต้องการ จากนนั้ โบรกเกอร์จะสง่ ข้อความทงั้ หมดท่ีถกู Publish ในหวั ข้อนนั้ ๆ ไปให้ ดงั นนั้ ไคลเอนต์จงึ สื่อสารกนั ได้โดยไมจ่ าเป็นต้องรู้จกักนั ชว่ ยลดความเก่ียวพนั ระหวา่ งผ้สู ร้างข้อมลู และผ้ใู ช้ข้อมลู สง่ ผลให้การขยายตวั ของเครือขา่ ยทาได้ง่ายนอกจากนีห้ น้าท่ีท่ีสาคญั อีกประการของโบรกเกอร์คือการรักษาความปลอดภยั ของไคลเอนต์(Authorization, Authentication) ซงึ่ ในสว่ นนีส้ ามารถขยายเพม่ิ เตมิ หรือนาไปเชื่อมกบั กลไกความปลอดภยั ของระบบหลงั บ้านที่มีอยแู่ ล้วได้ ชว่ ยให้นาโบรกเกอร์เข้าไปใช้งานเป็นสว่ นหนง่ึ ของระบบอ่ืนๆ ได้สว่ น Authorization ของ NETPIE ซง่ึ จะได้กลา่ วถึงในหวั ข้อตอ่ ไป ก็ถือเป็นตวั อยา่ งหนงึ่ ของการขยายเพ่มิ เตมิ การรักษาความปลอดภยั ของโบรกเกอร์ใน MQTT ปัจจบุ นั มีโบรกเกอร์ MQTT ที่เปิดให้ดาวน์โหลดไปใช้หรือดดั แปลงอย่หู ลายราย ได้แก่ Mosquitto, RabbitMQ, Erlang, VerneMQ ฯลฯ ไคลเอนต์ จะเป็นได้ทงั้ Publisher หรือ Subscriber หรือ Publisher/Subscriber พร้อมๆ กนั และจะเป็นอปุ กรณ์ใดๆ ก็ได้ที่สามารถรัน MQTT Client Library บน TCP/IP Stack การที่ MQTT ใช้โมเดลPublish/Subscribe ตรรกะสว่ นใหญ่จงึ ไปตกอย่ใู นฝ่ังโบรกเกอร์ ทาให้ Library มีขนาดเลก็ ตดิ ตงั้ ได้งา่ ยใช้งานได้กบั อปุ กรณ์ที่มีทรัพยากรจากดั ไคลเอนต์จาเป็นต้องเปิดการเช่ือมตอ่ TCP ไว้ตลอดเพ่ือที่โบรกเกอร์จะสามารถผลกั ข้อความไปให้ได้ หากการเช่ือมตอ่ ถกู ตดั ขาด โบรกเกอร์จะเก็บข้อความทงั้ หมดท่ีเข้ามาไว้จนกวา่ ไคลเอนต์จะกลบั มาออนไลน์อีกครัง้ เม่ือเปรียบเทียบ MQTT กบั HTTP (REST) ท่ีมีสถาปัตยกรรมแบบ Request/Response จะพบวา่MQTT มีความได้เปรียบที่โบรกเกอร์สามารถผลกั (Push) ข้อความไปยงั ไคลเอนต์ได้ตามเหตกุ ารณ์ คูม่ ือการใชง้ าน NETPIE - 12

(Event-driven) ในขณะท่ีเมื่อใช้ HTTP ฝ่ังไคลเอนตต์ ้องคอยสมุ่ ถาม (Poll) ข้อมลู เป็นระยะๆ และต้องตงั้คา่ คาบเวลาการสมุ่ ถามไว้ก่อนลว่ งหน้า โดยแตล่ ะครัง้ ต้องมีการสร้างการเชื่อมตอ่ ขนึ ้ ใหมแ่ ละอาจจะไมม่ ีข้อมลู ใหมใ่ ดๆ ให้อพั เดท ดงั นนั้ หากต้องการให้ระบบทางานแบบ Real Time หรือใกล้เคียง ย่อมหมายถึงต้องตงั้ คาบเวลาการมถามให้สนั้ และเกิดความสิน้ เปลืองของการใช้ชอ่ งสญั ญาณที่ไมจ่ าเป็นท่ีตามมา นี่จงึเป็นอีกเหตผุ ลสาคญั ท่ีทาให้ MQTT ได้รับความนยิ มเหนือ REST สาหรับการใช้งานแบบ M2Mนอกเหนือจากการมีนา้ หนกั เบาMQTT Topics MQTT Topic เป็น UTF-8 String ในลกั ษณะเดียวกบั File Path คอื สามารถจดั เป็นลาดบั ชนั้ ได้ด้วยการขนั้ ด้วย “/” ตวั อย่างเชน่ myhome/floor-one/room-c/temperature ไคลเอนตส์ ามารถเลือก Publishหรือ Subscribe เฉพาะ Topic หรือ Subscribe หลาย Topic พร้อมๆ กนั โดยใช้ Single-Level Wildcard(+) เชน่ myhome/floor-one/+/temperature หมายถึงการขอเขียนหรือรับข้อความ temperature จากทกุ ๆ ห้องของ myhome/floor-one หรือ Multi-Level Wildcard (#) เชน่ myhome/floor-one/# หมายถึงการขอเขียนหรือรับข้อความทงั้ หมดท่ีมี Topic ขนึ ้ ต้นด้วย myhome/floor-one เป็นต้น เราสามารถกาหนด Topic อยา่ งไรก็ได้ โดยมีข้อยกเว้นการขนึ ้ ต้น Topic ด้วยเคร่ืองหมาย “$” ซง่ึ จะจากดั ไว้สาหรับการเก็บสถิตภิ ายในของตวั โบรกเกอร์เทา่ นนั้ ดงั นนั้ ไคลเอนต์จะไมส่ ามารถ Publish หรือSubscribe ไปยงั Topic เหลา่ นีไ้ ด้ โดยทว่ั ไป Topic เหลา่ นีจ้ ะขนึ ้ ต้นด้วย $SYS MQTT vs Message Queues เรามักพบการสับสนระหว่าง MQTT กับ Message Queues โดยคนจานวนไม่น้อยเชื่อว่า MQใน MQTT มาจากคาว่า Message Queueในความเป็ นจริงแล้ว MQ ในทนี่ ้ีมาจากชื่อรุ่นผลิตภัณฑ์ที่รองรับโพรโทคอล MQTT ของ IBM ท่เี รียกว่า MQ Series และ MQTT ไม่ได้ทางานในลักษณะMessage Queue กล่าวคอื ข้อความใน MQTTจะถูกส่งให้กับไคลเอนต์ท้ังหมดท่ี Subscribe ในTopic ในขณะท่ขี ้อความใน Message Queue สามารถถูกดึงออกไปใช้งานโดยผู้ใช้เพียงรายเดียวเท่าน้ันMQTT Connections แพก็ เกตควบคมุ (Control Packets) ทงั้ หมดท่ีใช้ในการส่ือสารระหวา่ งโบรกเกอร์กบั ไคลเอนต์ในMQTT มีทงั้ สิน้ 14 ชนิด แสดงไว้ดงั ตารางที่ 1.1 คูม่ ือการใชง้ าน NETPIE - 13

ตารางท่ี 1.1 ชนิดของแพ็กเกตควบคุมในโพรโทคอล MQTTแพก็ เกตควบคุม ผู้ส่ง คาอธิบาย โบรกเกอร์ ไคลเอนต์CONNECT X ขอเช่ือมตอ่CONNACK X รับทราบการขอเชื่อมตอ่PUBLISH X X ข้อความท่ีจะขอ PublishPUBACK X X แจ้งวา่ ได้ Publish แล้ว (QoS Level 1)PUBREC X X แจ้งวา่ ได้ Publish แล้ว (QoS Level 2)PUBREL X X รับทราบวา่ ข้อความถกู Publish แล้ว และแจ้งให้อีกผ้รู ับลบคา่ สถานะได้ (QoS Level 2)PUBCOM X X แจ้งวา่ Publish เสร็จสิน้ และสถานะถกู ลบ (QoS Level 2)SUBSCRIBE X ขอ SubscribeSUBACK X รับทราบการขอ SubscribeUNSUBSCRIBE X ขอยกเลิก SubscribeUNSUBACK X รับทราบการขอยกเลกิ SubscribePINGREQ X PING RequestPINGRESP X PING ResponseDISCONNECT X ขอยกเลิกการเชื่อมตอ่ คูม่ ือการใชง้ าน NETPIE - 14

การเช่ือมตอ่ MQTT จะเร่ิมต้นจากฝ่ังไคลเอนตส์ ง่ แพก็ เกตควบคมุ CONNECT ไปยงั โบรกเกอร์ โบรกเกอร์จะตอบรับด้วยแพก็ เกตควบคมุ CONNACK วธิ ีนีช้ ว่ ยแก้ปัญหาไคลเอนตท์ ี่ติดตงั้ อยหู่ ลงั เราท์เตอร์หรือไมม่ ีเลขไอพีสาธารณะ เพราะโบรกเกอร์มีเลขไอพีสาธารณะและจะรักษาการเช่ือมตอ่ สองทางไว้ตลอดหลงั จากได้รับแพ็กเกตควบคมุ CONNECT หากโบรกเกอร์พบวา่ แพ็กเกต CONNECT ท่ีได้รับไมถ่ กู ต้องหรือไคลเอนต์ใช้เวลานานเกินไปนบั ตงั้ แตเ่ ปิดซ็อกเก็ตจนกระทง่ั เร่ิมสง่ แพก็ เกต โบรกเกอร์จะปิดการเชื่อมตอ่ เพื่อปอ้ งกนั ไคลเอนตไ์ มป่ ระสงค์ดที ี่ต้องการถว่ งการทางานของโบรกเกอร์ ไคลเอนต์จะเป็นผ้รู ะบคุ า่ การเชื่อมตอ่ ในแพ็กเกตควบคมุ CONNECT คา่ เหลา่ นีไ้ ด้แก่  Client ID เพื่อให้โบรกเกอร์ใช้ระบตุ วั ตนของไคลเอนตแ์ ละเก็บคา่ สถานะเซสชนั่ ไว้ให้ ซงึ่ ได้แก่ Subscriptions และข้อความทงั้ หมดท่ีไคลเอนตย์ งั ไมไ่ ด้รับ (สว่ นนีเ้ก่ียวข้องกบั การตงั้ คา่ ระดบั QoS ซงึ่ จะกลา่ วถึงตอ่ ไป) ดงั นนั้ Client ID จงึ จาเป็นท่ีจะต้องไมซ่ า้ กนั แตห่ ากไม่ ต้องการให้โบรกเกอร์เก็บคา่ สถานะ ไคลเอนต์สามารถเว้นสว่ นนีว้ า่ งไว้ได้  Clean Session มีคา่ True หรือ False เพ่ือระบวุ า่ ไคลเอนต์ต้องการให้โบรกเกอร์รักษาคา่ สถานะของเซสชนั่ ไว้ให้หรือไม่ หากต้องการ ให้ระบคุ า่ เป็น False หากไม่ ให้ระบคุ า่ เป็น True ดงั นนั้ หากไคลเอนต์ไมร่ ะบคุ า่ Client ID ในแพก็ เกต CONNECT จะต้องระบุ Clean Session เป็น True ด้วย มฉิ ะนนั้ โบรกเกอร์จะไมร่ ับการเชื่อมตอ่  Username และ Password เพ่ือให้โบรกเกอร์ใช้ในการ Authentication และ Authorization ซง่ึ ตามมาตรฐานปัจจบุ นั (MQTT 3.1.1) โพรโทคอล MQTT เองไมม่ ีการเข้ารหสั หรือแฮชใน สว่ นนี ้ กลา่ วคือ Username/Password จะถกู สง่ เป็น Plaintext ดงั นนั้ จงึ มีข้อควรระวงั ใน การใช้ MQTT หากไมม่ ีชนั้ ความปลอดภยั เพ่ิมเตมิ เชน่ TLS ในชนั้ ทรานสปอร์ต  Last Will Topic, Last Will QoS และ Last Will Message มีไว้ให้โบรกเกอร์ Publish ข้อความสง่ั เสียสดุ ท้าย (Last Will Message) ไปยงั Topic ท่ีระบุ (Last Will Topic) เพื่อให้ ไคลเอนต์อ่ืนรับรู้ในกรณีการเชื่อมตอ่ ของไคลเอนต์รายนีข้ าดลงแบบไมเ่ จตนา  Keep Alive เป็นคา่ ตวั เลขคาบเวลาท่ีไคลเอนต์ตกลงกบั โบรกเกอร์วา่ จะสง่ แพ็กเกตควบคมุ PINGREQ มาเป็นระยะๆ ซงึ่ โบรกเกอร์จะตอบด้วยแพก็ เกต PINGRESP เพื่อให้ทงั้ สองฝ่าย รับรู้วา่ การเช่ือมตอ่ ยงั คงอยู่ คูม่ ือการใชง้ าน NETPIE - 15

รูปท่ี 1.4 ผังการรับส่งข้อความส่ังเสียสุดท้าย (Last Will Message)1 ไคลเอนต์ Publish ข้อความ โดยบรรจลุ งในสว่ น Payload ของแพก็ เกตควบคมุ PUBLISH ซงึ่ จะต้องระบุ Packet ID, ชื่อ Topic, ระดบั ของ QoS, Duplicate Flag และ Retain Flag โบรกเกอร์จะตอบกลบัด้วยแพก็ เกต PUBACK หรือ PUBREC ขนึ ้ อยกู่ บั ระดบั QoS ท่ีระบใุ นแพ็กเกต PUBLISH ในทางกลบั กนัเม่ือต้องการรับข้อมลู ไคลเอนตส์ ง่ แพ็กเกตควบคมุ SUBSCRIBE ไปยงั โบรกเกอร์ โดยระบรุ ายชื่อ Topic ท่ีต้องการ ซง่ึ อาจมีได้มากกวา่ หนง่ึ และสามารถเลือกตงั้ คา่ ระดบั QoS ที่แตกตา่ งกนั สาหรับแตล่ ะ Topicและโบรกเกอร์จะตอบด้วยแพก็ เกต SUBACK โดยยืนยนั คา่ ระดบั QoS ของแตล่ ะ Topic ท่ีไคลเอนต์ขอSubscribe กลบั มาอีกครัง้ หาก Topic ใดท่ีไมอ่ นญุ าตหรือไมป่ รากฏบนโบรกเกอร์ โบรกเกอร์จะตอบกลบัด้วยคา่ 128 แทนที่คา่ ระดบั QoS เมื่อไคลเอนต์ต้องการยกเลกิ การรับข้อมลู ทาได้โดยการส่งแพ็กเกตควบคมุ UNSUBSCRIBE ไปยงัโบรกเกอร์ โดยระบรุ ายช่ือ Topic ที่ต้องการบอกเลิกในคราวเดยี วกนั ได้มากกวา่ หนึ่ง โบรกเกอร์จะยืนยนัการยกเลิกด้วยแพก็ เกต UNSUBACK เมื่อไคลเอนต์ต้องการเลกิ การเช่ือมตอ่ ทาได้โดยการสง่ แพ็กเกตควบคมุ DISCONNECT ไปยงั โบรกเกอร์ หากไคลเอนต์ CONNECT โดยตงั้ คา่ Clean Session เป็น True โบรกเกอร์จะยกเลกิ Subscriptionทงั้ หมดของไคลเอนตใ์ ห้เองโดยอตั โนมตั ิ ในทางกลบั กนั หาก Clean Session เป็น False โบรกเกอร์จะยงั คงเก็บคา่ ตา่ งๆ ของเซสชน่ั ไว้ เม่ือไคลเอนต์เชื่อมตอ่ เข้ามาใหมด่ ้วย Client ID เดมิ จงึ ไมจ่ าเป็นต้องเร่ิมSubscribe ใหมอ่ ีกครัง้1http//:www.embedded101.com คูม่ ือการใชง้ าน NETPIE - 16

MQTT Quality of Service (QoS) ไคลเอนตจ์ ะเป็นผ้กู าหนดระดบั ของบริการสง่ และรับข้อความหรือ QoS ที่ตนต้องการในแตล่ ะ Topicในแพก็ เกต PUBLISH หรือ SUBSCRIBE และโบรกเกอร์จะตอบสนองด้วย QoS ระดบั เดยี วกนั สาหรับTopic นนั้ ๆ QoS ใน MQTT แบง่ ได้เป็น 3 ระดบั คือ 1. อย่างมากหน่ึงครัง้ (At Most Once) แทนด้วยโค้ด 0 QoS 0 เป็นระดบั บริการท่ีต่าที่สดุ กลา่ วคอื ไมร่ ับประกนั วา่ ข้อความจะถกู สง่ ถงึ ผ้รู ับใดๆ เลยหรือไม่หากไคลเอนต์ Publish ข้อความด้วย QoS 0 โบรกเกอร์จะไมม่ ีการตอบรับใดๆ วา่ ได้ Publish ตอ่ ไปให้ผ้รู ับรายอื่นหรือไม่ หากไมม่ ีผ้รู ับข้อความ โบรกเกอร์อาจเก็บข้อความไว้หรือลบทงิ ้ ก็ได้ ขนึ ้ อยกู่ บั นโยบายของผู้ให้บริการเซิร์ฟเวอร์ ในทางกลบั กนั หากไคลเอนต์ที่เป็นผ้รู ับ Subscribe ไว้ด้วย QoS 0 เมื่อได้รับข้อความจากโบรกเกอร์ ก็ไมต่ ้องสง่ ข้อความตอบรับใดๆ กลบั ทาให้การสง่ ข้อความแบบนีร้ วดเร็วท่ีสดุ เพราะไมม่ ีโอเวอร์เฮดในการตอบรับ ขณะเดยี วกนั หากข้อความถกู สง่ ไมถ่ งึ ก็ไมม่ ีทางทราบได้เชน่ กนั 2. อย่างน้อยหน่ึงครัง้ (At Least Once) แทนด้วยโค้ด 1 QoS 1 รับประกนั วา่ ข้อความจะถกู สง่ ถงึ ผ้รู ับอยา่ งน้อยหนง่ึ ครัง้ การสง่ ลกั ษณะนี ้ ผ้สู ง่ จะเก็บข้อความเอาไว้ จนกว่าจะได้รับแพ็กเกต PUBACK จากผ้รู ับ ในกรณีไคลเอนตข์ อ Publish ผ้รู ับข้อความซงึ่เป็นโบรกเกอร์จะต้อง Publish ตอ่ ไปยงั ไคลเอนต์ที่ Subscribe ไว้อยา่ งน้อยหนง่ึ ครัง้ จงึ จะสามารถสง่แพ็กเกตตอบรับไปกลบั ยงั ผ้สู ง่ ในกรณี Subscribe ผ้สู ง่ ซงึ่ ก็คอื โบรกเกอร์จะต้องเก็บข้อความไว้จนกวา่ไคลเอนต์ที่ตนสง่ ข้อความไปให้จะยืนยนั ตอบรับ ดงั นนั้ แพก็ เกต PUBACK จงึ ต้องมีหมายเลขไอดีเดยี วกบั แพก็ เกต PUBLISH เพื่อให้ผ้สู ง่ ทราบวา่ ข้อความใดถกู ส่งถึงแล้วและสามารถลบออกได้ 3. หน่ึงครัง้ เท่านัน้ (Exactly Once) แทนด้วยโค้ด 2 QoS 2 รับประกนั ว่าแตล่ ะข้อความจะถกู สง่ ถงึ ผ้รู ับเพียงหนง่ึ ครัง้ เทา่ นนั้ เป็นบริการท่ีปลอดภยั ท่ีสดุและช้าท่ีสดุ ของโพรโทคอล MQTT เน่ืองจากผ้รู ับและผ้สู ง่ ต้องสง่ แพ็กเกตควบคมุ ไปกลบั ถงึ สองรอบ เร่ิมต้นด้วยผ้สู ง่ สง่ ข้อความไปในแพ็กเกต PUBLISH เม่ือผ้รู ับได้รับข้อความจะเก็บแพก็ เกตไว้และยืนยนั กลบั ไปยงัผ้สู ง่ ด้วยแพก็ เกต PUBREC ผ้สู ง่ จงึ สามารถลบข้อความนนั้ ออกจากหนว่ ยเก็บข้อมลู ของตนได้ และสง่แพ็กเกต PUBREL ไปยงั ผ้รู ับเพื่อให้ผ้รู ับสามารถลบสถานะการสง่ ข้อความนีอ้ อกได้ หากผ้รู ับเป็นไคลเอนต์ปลายทางท่ี Subscribe ข้อความเอาไว้ ผ้รู ับจะสง่ แพก็ เกต PUBCOM เพ่ือยืนยนั วา่ ข้อความถกู สง่ ถงึ แล้วเรียบร้อยหนงึ่ ครัง้ หากผ้รู ับเป็นโบรกเกอร์ ทนั ทีท่ีได้ Publish ข้อความตอ่ ไปยงั ไคลเอนต์ปลายทางหนง่ึ ครัง้จงึ จะลบข้อความนนั้ ออก และปิดเซสชนั่ ด้วยการสง่ แพ็กเกต PUBCOM กลบั ไปยงั ผ้สู ง่ คูม่ ือการใชง้ าน NETPIE - 17

รูปท่ี 1.5 ผังการส่ือสารเพ่ือ Publish ข้อความด้วย QoS 02รูปท่ี 1.6 ผังการส่ือสารเพ่ือ Publish ข้อความด้วย QoS 132http//:www.embedded101.com3http//:www.embedded101.com คูม่ ือการใชง้ าน NETPIE - 18

รูปท่ี 1.7 ผังการส่ือสารเพ่ือ Publish ข้อความด้วย QoS4Retained Messages เม่ือไคลเอนต์ Publish ข้อความแบบ Retained Message โดยการตงั้ Retain Flag เป็น True จะทาให้โบรกเกอร์เก็บข้อความนนั้ ไว้ใน Topic ที่ระบอุ ยา่ งถาวร จนกวา่ จะมี Retained Message อื่นท่ีถกูPublish ภายหลงั มาเก็บแทนที่ โดยโบรกเกอร์จะเก็บ Retained Message ไว้ให้เพียง Topic ละหนงึ่ข้อความ ดงั นนั้ ทกุ ครัง้ ท่ีมีไคลเอนต์ Subscribe เข้ามาใหม่ ก็จะได้รับ Retained Message ทนั ที ไม่ต้องรอจนกวา่ จะมี Publication ใหมเ่ กิดขนึ ้ จงึ มองได้วา่ Retained Message คือข้อมลู ล่าสดุ ที่ Subscriber ทกุรายควรต้องทราบ ดงั นนั้ Retained Message จงึ เป็นประโยชน์อยา่ งยงิ่ กบั แอปพลิเคชน่ั ที่เกี่ยวข้องกบั การอพั เดทสถานะ หากไคลเอนต์ต้องการลบ Retained Message ใน Topic ใดๆ ก็สามารถทาได้ไมย่ าก ด้วยการสง่ แพก็ เกต PUBLISH ท่ีมีไมม่ ี Payload และตงั้ Retain Flag เป็น True ไปยงั Topic นนั้ ๆ หรือหากมีข้อมลู จะอพั เดท ก็ไมม่ ีความจาเป็นต้องลบ Retained Message เก่าออกก่อน แตส่ ามารถสง่ RetainedMessage เข้าไปเขียนทบั ได้เลยแบบฝึ กหดั : Local MQTT Chat บน Raspberry Pi1. ตดิ ตงั้ โบรกเกอร์ Mosquitto ลงบน Raspberry Pi โดยพมิ พ์ชดุ คาสงั่ ข้างลา่ ง และแทนท่ี xxxx ด้วยช่ือ รุ่นระบบปฏิบตั กิ ารเชน่ wheezy หรือ jessie4 http//:www.embedded101.com คูม่ ือการใชง้ าน NETPIE - 19

curl -0 http://repo.mosquitto.org/debian/mosquitto-repo.gpg.keysudo apt-key add mosquitto-repo.gpg.keyrm mosquito-repo.gpg.keycd /etc/apt/sources.list.d/sudo curl -0 http://repo .mosquitto.org/debian/mosquitto-xxxx.listsudo apt-get update2. ตดิ ตงั้ ไคลเอนต์sudo apt-get install mosquitto mosquitto-clients3. ทดลองแชทโดยเปิดหน้าตา่ ง สร้างหวั ข้อ “chat/test1 ลงบนโบรกเกอร์บนเคร่ืองและ ”Subscribe โดย พิมพ์mosquitto_sub –h localhost –t “chat/test1”4. เปิดหน้าตา่ งใหมโ่ ดยยงั ไมป่ ิดหน้าตา่ งแรก พิมพ์คาสง่ั ข้างลา่ งเพื่อ Publish ข้อความ “hello” ไปยงั หวั ข้อ “chat/test1”mosquitto_pub –h localhost –t “chat/test1” –m “hello” ในหน้าตา่ งแรกที่ได้ Subscribe เอาไว้ จะปรากฏข้อความ hello5. สงั เกตผลของการตงั้ ระดบั บริการรับสง่ ข้อมลู (QoS) ที่แตกตา่ งกนั พมิ พ์คาสงั่ ข้างลา่ งในหน้าตา่ งแรก เพื่อ Subscribe ในหวั ข้อ “chat/test2” ด้วย QoS 1mosquitto_sub –h localhost –v –t “chat/#” –c –q 1 –i “Client ID”6. ในหน้าตา่ งท่ีสอง พิมพ์คาสง่ั ข้างลา่ งเพ่ือ Publish ข้อความ “You might get this message.” และ “You will get this message.” ด้วย QoS 0 และ QoS 1 ตามลาดบัmosquitto_pub –h localhost –t “chat/test2” –m “You might get this message.”mosquitto_pub –h localhost –t “chat/test2” –m “You will get this message.”–q 17. สงั เกตผลลพั ธ์ในหน้าตา่ งแรก8. หยดุ การทางานของหน้าตา่ งแรกชวั่ คราวโดยกด ctrl-c9. ทาซา้ ข้อ 610. ทาซา้ ข้อ 5 และสงั เกตผลลพั ธ์ คูม่ ือการใชง้ าน NETPIE - 20

1.4. AUTHORIZATION และ AUTHENTICATION ใน NETPIE เน่ืองจาก NETPIE มีศนู ย์กลางการส่ือสารเป็น Distributed MQTT Broker ความปลอดภยั จงึ ขนึ ้ ตรงกบั การเข้าถึงโบรกเกอร์ของอปุ กรณ์ ดงั ที่ได้กลา่ วไปแล้วในหวั ข้อที่1.3 วา่ มาตรฐาน MQTT ระบใุ ห้ใช้เพียงUsername และ Password ในการพสิ จู น์ตวั ตน (Authentication) ของไคลเอนท์ โดยสามารถกาหนดสทิ ธ์ิการเข้าถึงโบรกเกอร์ของไคลเอนตแ์ ตล่ ะรายด้วยการผกู เป็นรายการ (List) เข้ากบั Username บนโบรกเกอร์ ในขณะที่ NETPIE นนั้ มีข้อมลู ประจาตวั (Credentials) ของอปุ กรณ์ที่จะมาขอเช่ือมตอ่ ถงึ สองชนั้ คือKey และ Token ซงึ่ จะชว่ ยเพ่มิ ความยืดหยนุ่ ในการบริหารจดั การการเข้าถงึ โบรกเกอร์ของอปุ กรณ์ให้มีความละเอียด ยืดหยนุ่ และมีประสทิ ธิภาพมากขนึ ้ ดงั นนั้ อปุ กรณ์จะได้มาซงึ่ ข้อมลู ประจาตวั จากการขออนญุ าตสิทธ์ิ (Authorization) ซง่ึ ประกอบด้วยผ้เู กี่ยวข้อง 3 ฝ่ายคือ 1) อปุ กรณ์ (Device) ท่ีจะมาเช่ือมตอ่ สื่อสารกนั ให้เกิดแอปพลเิ คชนั่ ในท่ีนีร้ วมถึงทงั้ อปุ กรณ์กายภาพและอปุ กรณ์เสมือน (Object) 2) ผ้ใู ช้ (User) ซง่ึ เป็นเจ้าของแอปพลเิ คชน่ั และเป็นผ้กู าหนดวา่ อปุ กรณ์ใดมีสิทธิ์หรือไม่ มากน้อยเพียงใดในแอปพลิเคชนั่ ของตน 3) NETPIE ทาหน้าท่ีเป็นตวั กลางในการขออนญุ าตสทิ ธิ์ระหวา่ งผ้ใู ช้และอปุ กรณ์ กระบวนการทงั้ หมดมีขนั้ ตอนคือ 1) ผ้ใู ช้ลงทะเบยี นกบั NETPIE Web Portal และสร้างแอปพลิเคชน่ั 2) ผ้ใู ช้เพม่ิ อปุ กรณ์ภายใต้แอปพลิเคชน่ั นนั้ ๆ และได้รับ Key และ Key Secret เพื่อนามาใสล่ งในโค้ดของ Microgear ในอปุ กรณ์ 3) เมื่ออปุ กรณ์ถกู เปิดใช้งาน Microgear จะเชื่อมตอ่ เข้ามายงั NETPIE โดยอตั โนมตั ิ และพิสจู น์ตวั ตนด้วย Key และ Key Secret ท่ีได้รับในการขอ Token เพื่อเช่ือมตอ่ และส่ือสารผา่ น NETPIE 4) ในขนั้ ตอนนี ้NETPIE มีทางเลือกสองทางเพื่อความสะดวกของผ้ใู ช้ ทางเลือกที่ 1: Pre-approved Key กลา่ วคือผ้ใู ช้สามารถกาหนดไว้ก่อนลว่ งหน้าวา่ Key ใดบ้างจะได้รับการอนญุ าตสทิ ธ์ิแบบอตั โนมตั ิ ดงั นนั้ ทนั ทีที่อปุ กรณ์ตอ่ เข้ามา จะได้รับ Token ทนั ที นอกจากนีผ้ ้ใู ช้ยงัสามารถกาหนดระดบั ของสิทธ์ิไว้กอ่ นได้เชน่ กนั เชน่ ให้สิทธ์ิอปุ กรณ์ของผ้ใู ช้เองแบบเตม็ ให้สิทธิ์อปุ กรณ์ของคนอ่ืนบางสว่ น เป็นต้น คูม่ ือการใชง้ าน NETPIE - 21

ทางเลือกที่ 2: Third-Party Key ซงึ่ เหมาะกบั กรณีท่ีผ้ใู ช้ให้สิทธิ์อปุ กรณ์ของบคุ คลอ่ืนเข้ามาร่วมใช้แอปพลิเคชน่ั เม่ืออปุ กรณ์ร้องขอ Token เข้ามา NETPIE AUTH Server จะตดิ ตอ่ ไปยงั ผ้ใู ช้ ให้เข้ามาอนญุ าตสิทธิ์ โดยสามารถกาหนดระดบั ของสทิ ธิ์ และ NETPIE จะทาการออก Token ให้กบั อปุ กรณ์และบนั ทกึ ระดบั ของสิทธ์ิท่ีได้รับอนญุ าตเอาไว้ รูปท่ี 1.8 NETPIE Authorization ในกรณี Pre-approved Key รูปท่ี 1.9 NETPIE Authorization ในกรณี Third-party Key คูม่ ือการใชง้ าน NETPIE - 22

เมื่ออปุ กรณ์ได้ชดุ ข้อมลู สว่ นตวั ครบแล้ว จะนาทงั้ หมด (Key, Key Secret, Token, Token Secret)ไปสร้าง Client ID, Username และ Password ในการพสิ จู น์ตวั ตนเข้าใช้ NETPIE ตามโพรโทคอล MQTTโดยวิธีการสร้างจะทาให้ Username กบั Password มีการเปลี่ยนแปลงทกุ ครัง้ ในแตล่ ะเซสชน่ั และมีการแฮชและเข้ารหสั ชว่ ยปอ้ งกนั การดกั ฟังและการทาซา้ NETPIE รองรับการเช่ือมต่อ MQTT แบบ Persistent Connection เท่าน้ัน ดังนั้นจะมีการต้ังค่า Client ID ไว้เสมอ หากมีการเพิกถอนสทิ ธ์ิของอุปกรณ์ Client ID จะถูกลบ อุปกรณ์จะต้องต่อไปยัง NETPIE เพื่อขอ Token ใหม่ โดยไม่ต้องไปเริ่มต้นกระบวนการขอ Key ใหม่ต้ังแต่ต้นโมเดลของ NETPIE นี้เป็ นการนาแนวคดิ ท่ใี ช้ในสังคมมนุษย์มาปรับใช้ในสังคมของสงิ่ ของ เช่นเมื่อคนทาผดิ กฎจราจร ถูกยดึ ใบขับข่ี ทาให้ไม่มีสิทธิ์ในการขับขี่ยานพาหนะ แต่สามารถไปขอทาใบขับขี่ใหม่ได้ภายหลัง เป็ นต้นชนิดของ Key NETPIE รองรับอปุ กรณ์ท่ีหลากหลาย นอกจากอปุ กรณ์กายภาพเชน่ บอร์ดไมโครคอนโทรลเลอร์ตา่ งๆ แล้ว ยงั รองรับอปุ กรณ์เสมือนเชน่ แอปพลเิ คชนั่ ตา่ งๆ ซง่ึ รวมไปถึงแอปพลเิ คชน่ั ท่ีเขียนด้วย HTML5ท่ีสามารถรันได้บนเบราว์เซอร์ ในกรณีเชน่ นี ้ การเชื่อมตอ่ ไมส่ ามารถเป็นแบบ Persistent ได้ เนื่องจากต้องมีการปิดเปิดเบราว์เซอร์ตลอดเวลา ดงั นนั้ เพื่อให้การจดั การ Key และ Token มีประสทิ ธิภาพ หลีกเลี่ยงการสร้าง Token ทงิ ้ ไว้โดยไมไ่ ด้ใช้งาน NETPIE จงึ ออกแบบให้มี Key อยู่ 2 ชนดิ คือ 1. Device Key เม่ืออปุ กรณ์ได้รับการติดตงั้ Device Key และร้องขอ Token มายงั NETPIE หากได้รับการอนญุ าตสิทธ์ิ อปุ กรณ์จะได้รับ Token ที่ใช้ได้ตลอดไป ไมม่ ีการหมดอายุ ดงั นนั้ ตราบใดท่ีไมม่ ีการเพิกถอนสทิ ธิ์อปุ กรณ์สามารถใช้ Token เดมิ ไปได้ตลอดโดยไมต่ ้องเข้าสกู่ ระบวนการ Authorization ใหม่ Device Keyจงึ เหมาะกบั อปุ กรณ์กายภาพที่สามารถรักษาชอ่ งการเช่ือมตอ่ กบั NETPIE ไว้ได้โดยตลอด 2. Session Key อปุ กรณ์ท่ีได้รับการติดตงั้ Session Key จะได้รับ Token ที่ใช้ได้เพียงครัง้ เดียว (One-time Token)หากอปุ กรณ์ยกเลิกการเช่ือมตอ่ ไป และตอ่ กลบั มาใหม่ จะต้องมีการนา Session Key ไปขอ Token ใหม่ทกุ ครัง้ Session Key จงึ เหมาะกบั การใช้งานแอปพลิเคชนั่ ที่รันบนเบราว์เซอร์ที่ต้องมีการปิดเปิดอยเู่ ร่ือยๆเพราะหากใช้ Device Key ทกุ ครัง้ ที่เบราว์เซอร์ถกู เปิดขนึ ้ จะมีการร้องขอ Token ใหม่ และเมื่อเบราว์เซอร์ถกู ปิดไป Token ที่ได้จะค้างอยเู่ ชน่ นนั้ โดยไมไ่ ด้ใช้งานอีก สง่ ผลให้ภายใต้ Key เดยี วกนั มี Token ทงั้ ที่ใช้ คูม่ ือการใชง้ าน NETPIE - 23

งานและไมไ่ ด้ใช้งานแล้วผกู อยเู่ ป็นจานวนมาก สร้างความสบั สนซบั ซ้อนที่ไมจ่ าเป็นให้กบั ผ้ใู ช้ จงึ ขอเน้นยา้เป็นอยา่ งยง่ิ วา่ ไมค่ วรใช้ Device Key กบั แอปพลเิ คชนั่ ท่ีรันบนเบราว์เซอร์ (HTML5) โดยเดด็ ขาดขอบเขตของสิทธ์ิ (Scope) ในการเข้าถงึ NETPIE MQTT Brokers เมื่อผ้ใู ช้อนญุ าตสิทธ์ิให้กบั อปุ กรณ์ จะสามารถระบขุ อบเขตของสิทธ์ิ หรือที่เราเรียกวา่ Scope ได้วา่มากน้อยเพียงใด โดย Scope นีจ้ ะผกู อย่กู บั Token ท่ีอปุ กรณ์จะได้รับ และถกู เก็บไว้ท่ี NETPIE รูปแบบของ Scope Identifier เกี่ยวพนั โดยตรงกบั โครงสร้างการส่ือสารแบบ Publish/Subscribe ไปยงั Topic บนโบรกเกอร์ MQTT มีได้ 3 ลกั ษณะคอื 1. rw:/topic เชน่ rw:/home/bedroom/temperature หมายถึง มีสทิ ธิ์อา่ น (Subscribe) และเขียน (Publish) ใน home/bedroom/temperature 2. r:/topic เชน่ r:/home/# หมายถึง มีสทิ ธ์ิอา่ น (Subscribe) ทกุ Topic ท่ีขนึ ้ ต้นด้วย home 3. w:/topic เชน่ w:/home/+/temperature หมายถงึ มีสิทธิ์เขียน (Publish) ไปยงั Topic ชื่อ temperature ของทกุ ๆ ห้องใน home การกาหนด Scope ท่ีเก่ียวข้องกบั หลาย Topic นอกจากใช้ Wildcard ดงั ที่ได้แสดงไปแล้ว สามารถทาได้โดยการเรียง Scope Identifier เข้าด้วยกนั แล้วคน่ั ด้วยเคร่ืองหมาย Bar \"|\" ตวั อย่างเชน่rw:/home/bedroom/temperature|r:/home/#|w:/home/+/temperature คูม่ ือการใชง้ าน NETPIE - 24

2. GETTING STARTED 2.1 การสมัครสมาชกิ ขนั้ ตอนการสมคั รสมาชกิ เพ่ือใช้งาน NETPIE มีดงั นี ้ 1. ไปท่ีเวบ็ ไซต์ https//:netpie.io/sign_up จะปรากฏหน้าเว็บดงั รูป กรอกข้อมลู ให้เรียบร้อย จากนนั้ คลิกที่ป่มุ SIGN UP เพ่ือยืนยนั การลงทะเบยี น รูปท่ี 2.1 หน้าลงทะเบียนผู้ใช้งาน NETPIE 2. รอรับ SMS จากทาง NETPIE ซงึ่ สง่ ไปยงั หมายเลขโทรศพั ท์เคลื่อนท่ีท่ีลงทะเบยี นไว้ ตวั อยา่ ง SMS: Your one-time password for NETPIE is 255906201550 3. คลิกท่ีเมนู LOG IN เพ่ือเข้าสรู่ ะบบนาอีเมลท่ีลงทะเบียนไว้ใสใ่ นชอ่ ง USERNAME OR EMAIL ADDRESS และนารหสั ผา่ นที่ได้รับจาก SMS ใสใ่ นชอ่ ง PASSWORD แล้วคลิกป่มุ LOG IN 4. ตงั้ รหสั ผา่ นใหม่โดยใสร่ หสั ผ่านใหมใ่ นชอ่ ง NEW PASSWORD และ CONFIRM PASSWORD คูม่ ือการใชง้ าน NETPIE - 25

รูปท่ี 2.2 หน้าตัง้ รหสั ผ่านใหม่สาหรับผู้ใช้ NETPIE 5. สามารถเปลี่ยนรหสั ผา่ นได้ที่เมนู CHANGE PASSWORD รูปท่ี 2.3 เมนูในการเปล่ียนรหสั ผู้ใช้งาน NETPIE 2.2 การสร้างแอปพลิเคช่ัน หลงั จากสมคั รสมาชิก และลอ็ กอินได้เรียบร้อยแล้ว ผ้ใู ช้สามารถสร้างแอปพลิเคชน่ั ได้โดยทาตามขนั้ ตอนดงั ตอ่ ไปนี ้ 1. เลือกที่เมนู APPLICATIONS เพ่ือเข้าไปที่หน้า APPLICATION MANAGEMENT ซ่ึงแสดง แอปพลเิ คชน่ั ทงั้ หมดที่ผ้ใู ช้งานมีอยู่ การสร้างแอปพลิเคชนั่ ใหมท่ าได้โดยการคลิกที่ป่ มุ + ดงั แสดงในรูป คูม่ ือการใชง้ าน NETPIE - 26

รูปท่ี 2.4 หน้าจัดการแอปพลเิ คช่ันสาหรับผู้ใช้งาน NETPIE2. ในหน้าตา่ ง Pop-up ให้กาหนดชื่อแอปพลเิ คชนั่ (Application ID หรือ AppID) ท่ีต้องการ ใน ตวั อยา่ งนีใ้ ช้ช่ือวา่ PaulSmartHome จากนนั้ คลกิ ป่มุ CREATE การตงั้ ช่ือ AppID จะต้องไมซ่ า้ กบั ผ้อู ื่น ดงั นนั้ ควรเลือกชื่อที่มีความเฉพาะตวั เพื่อให้จาได้ เนื่องจาก AppID นีจ้ ะถกู นาไปใช้ใน การพฒั นาโปรแกรมตอ่ ไป รูปท่ี 2.5 กล่องให้ผู้ใช้ตัง้ ช่ือ AppID 3. หากสร้างแอปพลเิ คชนั่ ใหมไ่ ด้สาเร็จที่หน้าตา่ ง APPLICATION ในหน้า APPLICATION MANAGEMENT จะปรากฏชอ่ งของชื่อ AppID ที่เรากาหนดไว้ หากช่ือซา้ หรือมี ข้อผดิ พลาดจะมีข้อความแจ้งเตอื นขนึ ้ มาดงั นี ้หลงั จากสร้างสาเร็จจะเปลี่ยนไปที่หน้าของแอปพลิเคชน่ั ที่สร้างขนึ ้ ใหมน่ ีโ้ ดยอตั โนมตั ิ คูม่ ือการใชง้ าน NETPIE - 27

ช่ือ AppID ที่ กาหนดไว้ รูปท่ี 2.6 ตัวอย่างหน้าแอปพลเิ คช่ันหน่ึงของ NETPIE 4. สร้าง Application Key โดยคลิกท่ีป่มุ + 5. กาหนดช่ือของ Application Key ตามต้องการ ในตวั อย่างใช้ข้อความวา่ Key Television1 และเลือกชนิดของ Key ใน Drop-down box ให้เป็น Device Key รูปท่ี 2.7 การตัง้ ช่ือและเลือกชนิด Application KeyApplication Key มี 2 ประเภท คอื 1. Device Key คอื Key ที่ใช้กบั อปุ กรณ์ประเภทกายภาพ โดย Device Key ของอปุ กรณ์นนั้ จะถกู จดจาไปตลอดถงึ แม้อปุ กรณ์จะไมไ่ ด้เชื่อมตอ่ กบั NETPIE แล้ว แตเ่ มื่อมีการเช่ือมตอ่ คูม่ ือการใชง้ าน NETPIE - 28

ใหม่ จะถกู มองวา่ เป็นอปุ กรณ์ตวั เดมิ ประโยชน์คือเราจะสามารถจดจาอ้างอิงถึงอปุ กรณ์ตวั นนั้ ได้ 2. Session Key คอื Key ที่ใช้กบั อปุ กรณ์ท่ีมีการใช้งานไมถ่ าวรเชน่ เบราว์เซอร์ เมื่อยกเลกิ การเชื่อมตอ่ หรือปิดเบราว์เซอร์ไปตวั ตนของอปุ กรณ์นนั้ จะถกู ลบทงิ ้ เม่ือเชื่อมตอ่ มาอีกครัง้ ระบบจะสร้างบตั รผา่ นใหมจ่ าก Key ตวั เดมิ ให้ โดย NETPIE จะไมถ่ ือวา่ อปุ กรณ์ที่ Online แตล่ ะครัง้ มีตวั ตนเดียวกนั แตกตา่ งจากกรณี Device Key แนะนาให้ใช้ Device Key กับ Hardware และใช้ Session Key กับ Browser, HTML5 โดยความแตกต่างของ Key ทั้งสองประเภทจะแสดงในหน้าของ Application ด้วยรูปกุญแจสีต่างกัน เมื่อสร้างสาเร็จ จะมีช่ือ Key Television1 ปรากฏในหน้าตา่ ง APPLICATION KEY 6. ตรวจสอบข้อมลู หรือดรู ายละเอียด Key ด้วยการคลิกที Key Television1 จะปรากฏข้อมลู ของApplication Key ซงึ่ ประกอบด้วย  Application Key Name สามารถเปลี่ยนแปลงชื่อได้ตามท่ีต้องการ มีไว้ให้ผ้ใู ช้สามารถ ระบอุ ปุ กรณ์ของตนภายใต้ AppID หนง่ึ เทา่ นนั้ จงึ สามารถตงั้ ซา้ กบั ช่ือผ้อู ื่นได้ ชื่อเรียก ApplicationKey สามารถพมิ พ์แก้ไข ได้ รูปท่ี 2.8 การเปล่ียนช่ือ Application Key  Key เป็นกญุ แจที่อปุ กรณ์ใช้สาหรับเช่ือมตอ่ NETPIE คูม่ ือการใชง้ าน NETPIE - 29

 Secret เป็นรหสั ลบั หรือรหสั ผา่ นท่ีอปุ กรณ์ต้องใช้คกู่ บั Key สาหรับให้อปุ กรณ์เชื่อมตอ่ NETPIE REST API auth เป็นกญุ แจท่ีเรียงตอ่ กบั รหสั ลบั เพื่อใช้สาหรับการใช้งานด้วย REST API2.3 การตดิ ตงั้ เคร่ืองมือพฒั นาเครื่องมือสาหรับการพฒั นา ประกอบไปด้วย  Arduino IDE และ SDK สาหรับ ESP8266  NETPIE Microgear สาหรับ ESP8266  CP2012 USB to UART driver  เว็บเบราว์เซอร์ Chrome และ FirefoxArduino IDEดาวน์โหลด Arduino IDE ได้จาก https://www.arduino.cc/en/Main/Software ซง่ึ สามารถเลือกไฟล์เพ่ือตดิ ตงั้ ในแพลตฟอร์มตา่ งๆ อาทิ Windows, Mac OS X, Linux หาก Arduino IDE ที่ต้องการติดตงั้ไมไ่ ด้เป็นเวอร์ชนั่ ลา่ สดุ ทา่ นสามารถไปดาวน์โหลดเวอร์ชนั่ ก่อนๆ ได้ท่ีhttps://www.arduino.cc/en/Main/OldSoftwareReleasesเวอร์ชั่นของ Arduino IDE ที่ใช้ทดสอบกับ code ในเอกสารน้ีคือเวอร์ชั่น1.6.12 คูม่ ือการใชง้ าน NETPIE - 30

หลงั จากติดตงั้ เสร็จ ไปที่เมนู File --> Preferences รูปท่ี 2.9 การเลือกเมนู Preferences ใน Arduino IDE ใสข่ ้อความตอ่ ไปนี ้ลงในชอ่ ง Additional Board Manager URLshttp://arduino.esp8266.com/stable/package_esp8266com_index.json รูปท่ี 2.10 การใส่ลิงค์เพ่อื ตดิ ตัง้ ESP8266 Arduino Core คูม่ ือการใชง้ าน NETPIE - 31

คลิกที่เมนู Tools --> Board: ??????? --> Board Manager… รูปท่ี 2.11 การเลือกเวอร์ช่ันของ ESP8266 สาหรับติดตัง้ ค้นหาคาวา่ ESP8266 เม่ือปรากฏผลลพั ธ์ ให้เลือกเวอร์ชน่ั 2.2.0 ใน Drop-down OptionและคลกิInstall รูปท่ี 2.12 การตดิ ตงั้ ESP8266 ในเมนู Tools จะมีบอร์ด ESP8266 ชนดิ ตา่ งๆ เพมิ่ ขนึ ้ มา เลือกให้ตรงกบั ชนิดของบอร์ดท่ีใช้ ในที่นี ้ให้เลือก NodeMCU 1.0 (ESP-12E Models) คูม่ ือการใชง้ าน NETPIE - 32

รูปท่ี 2.13 การเลือกชนิดของบอร์ด ESP8266NETPIE Microgear Library สาหรับ ESP8266 ดาวน์โหลด Microgear สาหรับ ESP8266 จาก GitHub ของ NETPIE หรือ Manage Libraries กรณีท่ี 1 ถ้าดาวน์โหลด Microgear จาก GitHub (https://github.com/netpieio/microgear-esp8266-arduino) ให้คลกิ เมนู Sketch --> Include Library --> Add .ZIP Library… เลือก Zip File ที่ดาวน์โหลดมา คลิก Choose ถ้าติดตงั้ สาเร็จ เข้าไปท่ีเมนู Sketch --> Include Library จะเห็นชื่อ ESPMicrogear กรณีท่ี 2 ถ้าดาวน์โหลด Microgear จากเมนู Manage Libraries… ให้คลิกเมนู Sketch -->Include Library --> Manage Libraries… รูปท่ี 2.14 การตดิ ตงั้ Microgear Library จาก Arduino IDE ค้นหาคาวา่ Microgear ท่ีดาวน์โหลดมา คลกิ Choose คูม่ ือการใชง้ าน NETPIE - 33

ถ้าติดตงั้ สาเร็จ เมื่อเข้าไปท่ีเมนู Sketch --> Include Library--> Manage Libraries… จะเห็นชื่อESP8266 Microgear ถ้าลงเสร็จเรียบร้อยแล้วจะปรากฏข้อความวา่ Installed แตถ่ ้ายงั ไมส่ าเร็จให้คลิกป่มุ Install เพื่อตดิ ตงั้ รูปท่ี 2.15 การตดิ ตงั้ Microgear Library ลงบนบอร์ดUSB Driver ใน Workshop เราจะใช้บอร์ด NodeMCU ซง่ึ มี USB Port ที่ใช้ชปิ CP2102 ดงั นนั้ เราจาเป็นท่ีจะต้องตดิ ตงั้ Driver ให้ระบบปฏิบตั กิ ารรู้จกั USB Device ชนิดนี ้โดยดาวน์โหลด USB Driver ได้ท่ีhttps://www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspxWeb Browserขอแนะนาให้ใช้ Chrome หรือ Firefox หากยงั ไมไ่ ด้ตดิ ตงั้ สามารถดาวน์โหลดได้จากChrome https://www.google.com/chrome/browser/index.htmlFirefox https://www.mozilla.org/en-US/firefox/new/ คูม่ ือการใชง้ าน NETPIE - 34

การใช้งาน NETPIE กับอุปกรณ์ชนิดอ่ืนๆ นอกจาก ESP8266 แล้ว NETPIE ยงั มี Microgear สาหรับภาษาตา่ งๆ เชน่ HTML5, Node.js,Python, Java, Android, C# และฮาร์ดแวร์อื่นๆ โดยสามารถดาวน์โหลดพร้อมคมู่ ือการใช้งานได้ในGitHub (https://github.com/netpieio/) รูปท่ี 2.16 หน้า GitHub ของ NETPIE คูม่ ือการใชง้ าน NETPIE - 35

3. HTML 5 MICROGEAR การใช้ NETPIE Client Library ในอีกรูปแบบหนงึ่ ที่ถกู นาไปประยกุ ตใ์ ช้อยา่ งแพร่หลายคือ HTML5Microgear Library ซง่ึ สามารถเปลี่ยน Web Browser ให้เป็น Thing (หรือ NETPIE device) เพ่ือส่ือสารกบั Thing หรืออปุ กรณ์อื่นๆที่เชื่อมตอ่ กนั ภายใต้แพลตฟอร์ม NETPIE ได้ HTML5 Microgear Library นี ้เขียนด้วยภาษา JavaScript นกั พฒั นาสามารถนาไปตอ่ ยอดเป็น Web Application อ่ืนๆ โดยที่ไมต่ ้องตดิ ตงั้ โปรแกรมใดเพ่มิ เตมิ อีก และสามารถใช้ได้กบั อปุ กรณ์ทว่ั ไป เชน่ คอมพวิ เตอร์หรือสมาร์ทโฟนที่ใช้Browser ตา่ งๆได้ในปัจจบุ นัLab 3.1: Hello NETPIE Lab นีเ้ป็นการทดลองใช้ HTML5 Microgear ด้วยวธิ ีง่ายๆ โดยการเขียนไฟล์ HTML ด้วยJavascript เพียงไฟล์เดียวเพื่อสร้าง Microgear ในการสง่ ข้อความผา่ น NETPIE กลบั มายงั Browser ของตนเองเป็นระยะๆ Browser ซงึ่ ก็ถือวา่ เป็น Thing ชนิดหนง่ึ สามารถเชื่อมตอ่ กบั NETPIE ผา่ นทางMicrogrear Library ขนั้ ตอนการทดลอง มีดงั นี ้ 1. พิมพ์โค้ดข้างลา่ งลงใน Text Editor โดยแก้ไข APPID, KEY, SECRET ตามท่ีได้สร้างไว้บนเวบ็ NETPIE โดยให้เลือกชนิด Application Key เป็ น Session Key รวมทงั้ ตงั้ ชื่ออปุ กรณ์ (ALIAS) เพื่อใช้อ้างองิ ในการส่ือสาร จะเห็นได้วา่ การเรียกใช้ Microgear Library ถกู Define ไว้ ในบรรทดั แรกท่ีอ้างถงึ Source https://cdn.netpie.io/microgear.js<script src=\"https://cdn.netpie.io/microgear.js\"></script><script>const APPID = \"YOUR_APPID\"; // แทนท่ีด้วย AppIDconst KEY = \"YOUR_KEY\"; // แทนท่ีด้วย Keyconst SECRET = \"YOUR_SECRET\"; // แทนท่ีด้วย Secretconst ALIAS = \"myhtml\"; // ตงั้ ช่ือเรียกอปุ กรณ์ (อย่างไรกไ็ ด้ไมจ่ ากดั )var microgear = Microgear.create({ key: KEY, secret: SECRET, คูม่ ือการใชง้ าน NETPIE - 36

alias : ALIAS }); // สรา้ งฟังกช์ นั่ ท่ีจะตอบสนองต่อข้อความท่ีเข้ามา microgear.on('message', function(topic,msg) { //ในท่ีนี้เราจะเอาข้อความไปแทนข้อความของ HTML element ชื่อ data document.getElementById(\"data\").innerHTML = msg; }); // สรา้ งฟังกช์ นั่ ที่จะถกู เรยี กเมื่อเช่ือมต่อ NETPIE สาเรจ็ microgear.on('connected', function() { microgear.setAlias(ALIAS); // ตงั้ ชื่อเรียกให้กบั อปุ กรณ์ตามตวั แปรที่ตงั้ ไวส้ ่วนต้นของไฟล์ // แสดงข้อความให้ทราบว่าเช่ือมต่อสาเรจ็ document.getElementById(\"data\").innerHTML = \"Now I am connectedwith netpie...\"; // ตงั้ ค่า timer ให้ทางานทุก 1 วินาที (ตวั เลข 1000 มีหน่วยเป็น ms หมายถึง 1000 ms) setInterval(function() { // ส่งข้อความไปยงั อุปกรณ์ท่ีมชี ื่อตามตวั แปร ALIAS ซึ่งกค็ ือตวั เอง microgear.chat(ALIAS,\"Hello from myself at \"+Date.now()); },1000); }); microgear.connect(APPID); // สรา้ งการเช่ือมต่อไปยงั NETPIE</script><div id=\"data\">_____</div> Microgear ในตวั อยา่ งนีค้ ือ microgear-html5 ใน GitHub ซงึ่ เป็น Client Library ของ NETPIE ท่ีจะเปล่ียน Web Browser ให้เป็น Microgear เพื่อส่ือสารกบั Microgear อ่ืนๆ 2. Save เป็นไฟล์ชื่อ hellonetpie.html จากนนั้ ดบั เบลิ ้ คลิกหรือคลิกขวาเพ่ือเปิดไฟล์ด้วย Browser 3. บนหน้า Browser ที่เปิดขนึ ้ มา จะปรากฏข้อความHello from myself at xxxxxxxxxx โดย xxxxxxxxx เป็น Unix Time ที่จะเพมิ่ ขนึ ้ เรื่อยๆ ทกุ ๆ 1000 ms หรือ 1 วินาที คูม่ ือการใชง้ าน NETPIE - 37

Lab 3.2: HTMLChat ในการทดลองนี ้ จะแสดงตวั อยา่ งการสื่อสารกนั ระหวา่ ง Web Browser 2 ตวั ผา่ น NETPIE โดยดดั แปลงมาจาก Lab 3.1 ดงั นี ้ 1. สร้าง Application Key ใหม่ 2 คา่ ภายใต้แอปพลิเคชนั่ AppID เดยี วกนั 2. สร้างไฟล์ HTML ขนึ ้ มาใหม่ 2 ไฟล์ (alice.html และ bob.html) โดยใช้โค้ดท่ีแสดงข้างลา่ ง สงั เกตวา่ ความแตกตา่ งของทงั้ สองไฟล์อยทู่ ่ีเพียงตวั แปร MYNAME และ YOURNAME เทา่ นนั้ ที่สลบั ท่ีกนัalice.html<script src=\"https://cdn.netpie.io/microgear.js\"></script><script> const APPID = “YOUR_APPID”; const KEY = “KEY_1”; const SECRET = “SECRET_1”;const MYNAME = \"alice\"; // ชื่อของตวั เองconst YOURNAME = \"bob\"; // ชื่อของเพื่อนท่ีจะคยุ ด้วยvar microgear = Microgear.create({ key: KEY, secret: SECRET,});microgear.on('message',function(topic,msg) { document.getElementById(\"data\").innerHTML = msg;}); microgear.on('connected', function() { microgear.setAlias(MYNAME); // ตงั้ ช่ือตวั เอง document.getElementById(\"data\").innerHTML = \"Now I am connectedwith netpie...\";setInterval(function() { // ใช้ฟังกช์ นั่ chat ในการส่งข้อความหาเพ่ือน คูม่ ือการใชง้ าน NETPIE - 38

microgear.chat(YOURNAME,\"Hello from \"+MYNAME+\" at\"+Date.now()); },1000);});microgear.on('disconnected', function() { document.getElementById(\"data\").innerHTML = \"Now I amdisconnected with netpie...\";}); microgear.connect(APPID);</script><div id=\"data\">_____</div>bob.html<script src=\"https://cdn.netpie.io/microgear.js\"></script><script> const APPID = “YOUR_APPID”; const KEY = “KEY_2”; const SECRET = “SECRET_2”;const MYNAME = \"bob\"; // ตงั้ ช่ือของตวั เองconst YOURNAME = \"alice\"; // ตงั้ ช่ือของเพื่อนท่ีจะคยุ ด้วยvar microgear = Microgear.create({ key: KEY, secret: SECRET,});microgear.on('message',function(topic,msg) { document.getElementById(\"data\").innerHTML = msg;});microgear.on('connected', function() { microgear.setAlias(MYNAME); // ตงั้ ช่ือตวั เอง document.getElementById(\"data\").innerHTML = \"Now I am connectedwith netpie...\"; setInterval(function() { คูม่ ือการใชง้ าน NETPIE - 39

// chat หาเพื่อน microgear.chat(YOURNAME,\"Hello from \"+MYNAME+\" at\"+Date.now()); },1000);});microgear.on('disconnected', function() { document.getElementById(\"data\").innerHTML = \"Now I amdisconnected with netpie...\";}); microgear.connect(APPID);</script><div id=\"data\">_____</div> 3. ใส่ APPID (เหมือนกนั ในทงั้ สองไฟล์) และ แตล่ ะคู่ KEY กบั SECRET ลงในแตล่ ะไฟล์ 4. Save ไฟล์ทงั้ สองไฟล์ แล้วดบั เบลิ ้ คลิกหรือคลิกขวาเพ่ือเปิดไฟล์ทงั้ สองด้วย Browser 5. ผลลพั ธ์ที่ได้ในหน้าตา่ งที่เปิดขนึ ้ มาจาก alice.html จะเป็นดงั นี ้Hello from bob at xxxxxxxxxx และข้อความในหน้าตา่ งท่ีเปิดขนึ ้ มาจาก bob.html จะเป็นดงั นี ้Hello from alice at yyyyyyyyyyy โดย xxxxxxxxx และ yyyyyyyyy เป็น Unix Time ท่ีจะเพิม่ ขนึ ้ เรื่อยๆ ทกุ 1000 msLab 3.3: Room Chat ในการทดลองนีแ้ สดงตวั อยา่ งการส่ือสารกนั ระหวา่ ง Web Browsers ผา่ น NETPIE ท่ีมีการใช้งานที่ซบั ซ้อนกวา่ เดมิ เป็นการทบทวนการใช้ Function Call ตา่ งๆ ใน HTML5 Microgear Library(https://github.com/netpieio/microgear-html5/blob/master/README.th.md) เพื่อเปล่ียน WebBrowser ให้เป็น Microgear และทาการสื่อสารอพั เดทข้อมลู กนั มีขนั้ ตอนดงั นี ้ 1. ศกึ ษาจากไฟล์ room_client.html และ room_server.html เพ่ือทบทวน Function Call ตา่ งๆที่ ระบไุ ว้ใน HTML5 Microgear Library 2. เปิดไฟล์ room_client.html ด้วย Text Editor และแก้ไขท่ีบรรทดั var slot = your_number; โดยให้เปล่ียนเป็นหมายเลขท่ีแตล่ ะทา่ นได้รับ แล้วทาการ Save File คูม่ ือการใชง้ าน NETPIE - 40

3. คลกิ เพ่ือเปิดไฟล์ room_client.html และ room_server.html ด้วย Browser ศกึ ษาการสื่อสาร กนั ระหวา่ ง Browser ทงั้ ฝั่ง Client และ ฝ่ัง Server และดกู ารแสดงผลดงั แสดงในรูปท่ี 3.1room_client.html<script src=\"https://cdn.netpie.io/microgear.js\"></script><!-- Microgearlibrary --><script> const APPID = \"demobillboard\" //Application ID ของอุปกรณ์ท่ีเช่ือมต่อNETPIEconst KEY = \"M0mqAyedJm1ywVD\"; // Key ของอปุ กรณ์ที่เชื่อมต่อ NETPIE const SECRET = \"moHzrlTv1Xu0k286LzxkoTiRn\";//Secret ของอปุ กรณ์ที่เช่ือมต่อNETPIEconst ALIAS = \"htmlgear\"; // ชื่ออปุ กรณ์ท่ีเช่ือมต่อ NETPIEvar slot = 30; // slot numbervar microgear = Microgear.create({key: KEY,secret: SECRET,alias : ALIAS});function getColor(){return '#' + Math.random().toString(16).slice(2, 8).toUpperCase();}microgear.on('message',function(topic,msg) { //ตรวจพบข้อความที่ส่งมายงั อุปกรณ์//กาหนดข้อความให้แสดงผลใน tag id ชื่อ datadocument.getElementById(\"data\").innerHTML = msg;});microgear.on('connected', function() { //ตรวจสอบเม่อื เช่ือมต่ออปุ กรณ์กบั NETPIEmicrogear.setAlias(ALIAS); //กาหนดช่ืออปุ กรณ์ท่ีเชื่อมต่อกบั NETPIEdocument.getElementById(\"data\").innerHTML = \"Now I am connected withnetpie...\"; // แสดงข้อความเม่ือเช่ือมต่ออปุ กรณ์กบั NETPIEsetInterval(function() { // กาหนดให้ทางานตลอดเวลาทกุ ๆ 5000 ms var color = getColor(); คูม่ ือการใชง้ าน NETPIE - 41

// ส่งข้อความไปยงั อปุ กรณ์ชื่อ htmlgear ด้วย NETPIE microgear.publish(\"/billboard/slot/\"+slot,color); document.getElementById(\"data\").innerHTML = \"Publish color :\"+color; document.body.style.backgroundColor=color; },5000);}); microgear.on('disconnected', function() { //ตรวจสอบเมื่อตดั การเชื่อมต่ออปุ กรณ์กบัNETPIEdocument.getElementById(\"data\").innerHTML = \"Now I am disconnectedwith netpie...\"; // แสดงข้อความเม่ือตดั การเชื่อมต่ออปุ กรณ์กบั NETPIE});// ตรวจพบอปุ กรณ์ท่ีเช่ือมต่อ NETPIE ด้วย APPID เดียวกนั microgear.on('present', function(event) { console.log(event); });//ตรวจพบเหตกุ ารณ์ท่ีอปุ กรณ์เคยเช่ือมต่อ NETPIE ด้วย APPID เดียวกนั หายไป microgear.on('absent', function(event) { console.log(event); }); microgear.connect(APPID); // เช่ือมอปุ กรณ์กบั NETPIE</script><div id=\"data\">_____</div>room_server.html<script src=\"https://cdn.netpie.io/microgear.js\"></script><!-- Microgearlibrary --><style> #rgb { width:100%; font-size: 50px; vertical-align: middle; } .box { คูม่ ือการใชง้ าน NETPIE - 42

float: left; border: 1px solid black; margin-right: 50px; margin-bottom: 20px; } .boxcolor{ width: 250px; padding: 10px; display: inline-block; color: #FFF; background-color: #FFF; } .right { text-align: center; width: 150px; padding: 10px; display: inline-block; color: #FFF; background-color: #000; }</style><div id=\"data\">_____</div><p/><div id=\"rgb\"></div><script> var numberbox = 30; var htmlbox = \"\"; for(var i=0; i<numberbox; i++){ htmlbox+='<div class=\"box\"><divclass=\"right\">'+(i+1)+'</div><div class=\"boxcolor\"id=\"'+(i+1)+'\">'+i+'</div></div>'; } document.getElementById(\"rgb\").innerHTML = htmlbox; const APPID = \"demobillboard\"; // Application ID ของอปุ กรณ์ท่ีเช่ือมต่อ NETPIE const KEY = \"M0mqAyedJm1ywVD\"; // Key ของอปุ กรณ์ที่เชื่อมต่อ NETPIE const SECRET = \"moHzrlTv1Xu0k286LzxkoTiRn\";//Secret ของอปุ กรณ์ที่เช่ือมต่อNETPIE คูม่ ือการใชง้ าน NETPIE - 43

const ALIAS = \"billboard\"; // ช่ืออปุ กรณ์ท่ีเช่ือมต่อ NETPIEvar microgear = Microgear.create({ key: KEY, secret: SECRET, alias : ALIAS});microgear.on('message',function(topic,msg) { // ตรวจพบข้อความที่ส่งมายงั อปุ กรณ์console.log(topic+\" : \"+msg);if(topic.indexOf(\"/demobillboard/billboard/slot\")!=-1){if(msg.startsWith('#') || msg.startsWith('rgb(')){ var m = topic.split(\"/demobillboard/billboard/slot/\"); document.getElementById(m[1]).style.color = msg; document.getElementById(m[1]).style.backgroundColor =msg; }}});microgear.on('connected', function() { // ตรวจสอบเม่ือเช่ือมต่ออปุ กรณ์กบั NETPIEmicrogear.setAlias(ALIAS); // กาหนดช่ืออุปกรณ์ท่ีเช่ือมต่อกบั NETPIE // แสดงข้อความเมื่อเช่ือมต่ออปุ กรณ์กบั NETPIE document.getElementById(\"data\").innerHTML = \"Now I am connectedwith netpie...\"; microgear.subscribe(\"/billboard/slot/+\");});microgear.on('disconnected', function() { // ตรวจสอบเมอื่ ตดั การเชื่อมต่ออปุ กรณ์กบั NETPIE // แสดงข้อความเมือ่ ตดั การเช่ือมต่ออปุ กรณ์กบั NETPIE document.getElementById(\"data\").innerHTML = \"Now I am disconnectedwith netpie...\"; });//ตรวจพบอปุ กรณ์ที่เช่ือมต่อกบั NETPIE ด้วย APPID เดียวกนัmicrogear.on('present', function(event) { console.log(event); });// ตรวจพบว่าอปุ กรณ์ท่ีเคยเช่ือมต่อกบั NETPIE ด้วย APPID เดียวกนั หายไป คูม่ ือการใชง้ าน NETPIE - 44

microgear.on('absent', function(event) { console.log(event); }); microgear.connect(APPID); // เช่ือมอปุ กรณ์กบั NETPIE</script> รูปท่ี 3.1 การแสดงผลท่ี Web Browser ท่เี ปิ ดไฟล์ room_server.htmlแบบฝึ กหดั 1. ในไฟล์ room_client.html อธิบายความหมายของ Function Call นี ้ microgear.publish(\"/billboard/slot/\"+slot,color); 2. ในไฟล์ room_server.html อธิบายความหมายของ Function Call นี ้ microgear.subscribe(\"/billboard/slot/+\"); คูม่ ือการใชง้ าน NETPIE - 45

4. ESP8266 MICROGEAR 4.1 รู้จัก ESP8266/NODEMCU บทนีจ้ ะเกี่ยวข้องกบั Thing ประเภท Embedded Board เพ่ือให้เหน็ ภาพวา่ สามารถสร้างอปุ กรณ์ฮาร์ดแวร์ให้มาเชื่อมตอ่ กบั NETPIE ได้อยา่ งไร โดยในการทดลองศกึ ษา เราจะใช้ NodeMCU รุ่น 12E หรือNodeMCU V2 หรือ NodeMCU Dev kit v1.0 (https://github.com/nodemcu/nodemcu-devkit-v1.0)ซง่ึ ใช้โมดลู ESP8266-SoC (ESP-12E) ซง่ึ เป็น 32-bit Microcontroller และมี Built-in WiFi Node MCU-12E รวมทงั้ ผงั คาอธิบายขาตอ่ แสดงไว้ดงั รูปท่ี 4.1 รูปท่ี 4.1 Node MCU-12E และผังคาอธิบายขาต่อ คูม่ ือการใชง้ าน NETPIE - 46

ในการเขียนโปรแกรมลงบน NodeMCU เราจะใช้ Arduino IDE ในการ Compile และ Flashโปรแกรมลงไปผา่ นทางสาย microB-USB ในสว่ นของโครงสร้างโค้ด จะเหมือนกบั การเขียนโปรแกรมบนบอร์ด Arduino โดยมีฟังก์ชน่ั สองสว่ นคอื ส่วนตงั้ คา่ และสว่ นทางานหลกั ดงั แสดงข้างลา่ งvoid setup(){//ส่วนนี้ทาครงั้ เดียวตอนเริ่มต้นการทางาน}void loop(){ //ส่วนนี้เป็นส่วนหลกั ทางานวนซา้ ตลอดไมร่ จู้ บ} ทา่ นสามารถทดสอบการทางานของบอร์ดเบือ้ งต้นดงั นี ้ 1.เชื่อมตอ่ บอร์ดกบั คอมพมิ เตอร์ด้วยสาย microB-USB 2. ตรวจสอบ COM Port ท่ีใช้งานให้ถกู ต้อง 2.1 สาหรับ Windows ไปที่ Control panel --> System -->Device Manager และดทู ี่ Ports(COM & LPT) จะเห็นบรรทดั Silicon Labs CP210x USB to UART Bridge (COMx) เชน่ เป็น COM3เป็นต้น 2.2 เปิดโปรแกรม Arduino IDE และไปที่เมนู Tools -->Board --> NodeMCU 1.0 (ESP-12EModule) จากนนั้ ไปที่เมนู Tools > Port ถ้ามีหลาย Port แสดงอยู่ ให้ตรวจสอบวา่ ตรงกบั Port ใน 2.1 3. ใน Arduino IDE ไปท่ี File --> New เพื่อเขียนโปรแกรมดงั นี ้void setup() { // put your setup code here, to run once: pinMode(D0, OUTPUT);}void loop() { // put your main code here, to run repeatedly: digitalWrite(D0,1); delay(500); digitalWrite(D0,0); delay(500);} คูม่ ือการใชง้ าน NETPIE - 47

เมื่อเขียนโค้ดเรียบร้อยแล้ว ให้กดป่มุ ลกู ศรเพ่ือ Compile และ Upload หากไมม่ ีข้อผดิ พลาดโปรแกรมที่ Compile จะถกู Flash ลงไปบน NodeMCU และเร่ิมต้นการทางานอตั โนมตั ิ ตวั อยา่ งข้างลา่ งเป็นโปรแกรมท่ีจะสง่ั ให้ไฟ LED บนบอร์ด กระพริบด้วยคาบเวลาปิดเปิด 0.5 วินาที ขาพอร์ต D0 เป็นขา Output คา่ ของเวลา Delay มี หนว่ ยเป็นมลิ ลวิ ินาที รูปท่ี 4.2 ตวั อย่างการเขียนโปรแกรมลงใน NodeMCULab 4.1: NETPIE Blink Lab 4.1 เป็นการโปรแกรม NodeMCU ให้ตอบสนองตอ่ ข้อความ (Message) “1” และ “0” โดยถ้าได้รับข้อความ “1” NodeMCU จะเปิด LED แตถ่ ้าเป็น “0” จะปิด LED 1. เปิดไฟล์ netpie_blink.ino ใน Folder เพื่อแก้ไข หรือสร้างไฟล์ขนึ ้ ใหมต่ ามโค้ดด้านลา่ ง 2. สร้าง AppID และสร้าง Application Key โดยเลือกชนิด Device Key 3. ใส่ APPID, KEY, และ SECRET ลงในไฟล์ 4. Save และ Upload ไฟล์เข้า NodeMCU 5. เปิด Console โดยไปที่ Tools --> Serial Monitor หากโปรแกรมถกู ต้องจะเหน็ ตามแสดงในหน้าตา่ ง Console ดงั แสดงในรูปท่ี 4.3 สงั เกตจงั หวะการเปิดและปิดไฟเทียบกบั บรรทดั Incomingmessage 0 หรือ 1 คูม่ ือการใชง้ าน NETPIE - 48

netpie_blink.ino// #include สองบรรทดั ด้านล่างนี้ต้องมีเสมอ#include <ESP8266WiFi.h>#include <MicroGear.h>const char* ssid = \"SSID\"; // ใส่ชื่อ WiFi SSID แทน SSIDconst char* password = \"PASSWORD\"; // ใส่รหสั ผ่าน WiFi แทน PASSWORD#define APPID \"YOUR_APPID\" // ให้ YOUR_APPID แทนที่ด้วย AppID // ให้ YOUR_KEY แทนที่ด้วย Key#define KEY \"YOUR_KEY\" // ให้ YOUR_SECRET แทนที่ด้วย Secret#define SECRET \"YOUR_SECRET\"#define ALIAS \"pieblink\" // ตงั้ ช่ือเล่นให้ device นี้ เป็น pieblinkWiFiClient client;int timer = 0;char state = 0;MicroGear microgear(client); // ประกาศตวั แปร microgear// สร้างฟังกช์ นั่ ที่จะถกู เรยี กเม่ือมีข้อความเข้ามาvoid onMsghandler(char *topic, uint8_t* msg, unsigned int msglen) { Serial.print(\"Incoming message -->\"); msg[msglen] = '\0'; Serial.println((char *)msg);// ถา้ ข้อความที่เข้ามาเป็น 1 ให้เปิ ด LED ถา้ เป็น 0 ให้ปิ ด LED if(*(char *)msg == '1'){ digitalWrite(LED_BUILTIN, LOW); // LED on }else{ digitalWrite(LED_BUILTIN, HIGH); // LED off }}// สรา้ งฟังกช์ นั่ ท่ีจะถกู เรียกเม่ือ Microgear เช่ือมต่อกบั NETPIE สาเรจ็void onConnected(char *attribute, uint8_t* msg, unsigned int msglen) { Serial.println(\"Connected to NETPIE...\"); คูม่ ือการใชง้ าน NETPIE - 49

// เราอาจจะใช้โอกาสนี้ตงั้ ช่ือหรอื เปล่ียนช่ือหรืออาจจะทาอะไรบางอย่างเช่น subscribe microgear.setAlias(ALIAS);}void setup() { // ประกาศให้เวลามีข้อความเข้ามาให้ไปทาฟังกช์ นั่ onMsghandler() microgear.on(MESSAGE,onMsghandler); // ประกาศให้เมอื่ เช่ือมต่อสาเรจ็ ให้ไปทาฟังกช์ นั่ onConnected() microgear.on(CONNECTED,onConnected); Serial.begin(115200); Serial.println(\"Starting...\"); pinMode(LED_BUILTIN, OUTPUT); // initiate Wifi 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()); // initialize ตวั แปร microgear microgear.init(KEY,SECRET,ALIAS); // เชื่อมต่อไป NETPIE ไปยงั AppID ท่ีกาหนด microgear.connect(APPID); // ฟังกช์ นั่ เช่ือมต่อ NETPIE}void loop() { // เชค็ วา่ Microgear ยงั เชื่อมต่ออย่หู รอื ไม่ if (microgear.connected()) { // ตรวจสอบการเช่ือมต่อ NETPIE Serial.println(\"connected\"); // พิมพแ์ จ้งการเช่ือมต่อ NETPIE สาเรจ็ คูม่ ือการใชง้ าน NETPIE - 50


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