ดิว.นินจา

ดิว.นินจา

Saturday, January 11, 2020

NETPIE microgear : แนวทางการพัฒนาอุปกรณ์ IoT สำหรับผู้ใช้ทั่วไป

เมื่อผู้พัฒนามีประสบการณ์กับ NETPIE ถึงระดับหนึ่งจะเริ่มรู้สึกอยากสร้างอุปกรณ์ IoT ให้กับคนอื่นได้ใช้งาน โดยอาจจะเป็นบุคคลในครอบครัว เพื่อนร่วมงาน หรือทำเป็นผลิตภัณฑ์ ซึ่งแน่นอนเราไม่ต้องการที่จะเปิดเผยข้อมูลในบัญชี NETPIE ให้กับผู้ใช้คนอื่นเนื่องจากเครดิตที่มีจำกัดและเหตุผลอื่นๆ ผู้เขียนมักได้รับคำถามเกี่ยวกับการสร้างหน้า Freeboard บนโฮสต์หรือเซิร์ฟเวอร์ของตัวเอง ซึ่งถึงแม้จะทำได้แต่มีข้อเสียคือบุคคลอื่นที่รู้วิธีก็สามารถดึงเอาข้อมูลสำคัญเช่น APPID, key, secret ไปได้ ดังนั้นหากเรายังเขียนโปรแกรมสำหรับอุปกรณ์ IoT โดยใส่ข้อมูล NETPIE ไว้ส่วนบนของโปรแกรมอย่างถาวร การส่งต่ออุปกรณ์ไปให้ผู้อื่นใช้งานอย่างง่ายคือลบข้อมูลส่วนนั้นและให้ source code ไปพร้อมฮาร์ดแวร์ ซึ่งก็จะเกิดปัญหาอีกคือผู้ใช้ต้องรู้วิธีที่จะติดตั้ง Arduino IDE และเครื่องมือทั้งหมดที่ใช้ในโปรแกรมเพื่อคอมไพล์และโหลดลงบนอุปกรณ์ นอกจากนั้น source code อาจมีส่วนที่เป็นทรัพย์สินทางปัญญาที่ผู้พัฒนาไม่อยากเปิดเผยก็ได้

โดยปัญหาเหล่านี้ บทความนี้จึงนำเสนอวิธีการอย่างง่ายในการพัฒนาอุปกรณ์ IoT สำหรับผู้ใช้ทั่วไปโดยไม่ต้องส่งมอบ source code และข้อมูลในบัญชี NETPIE ของเรา ผู้เขียนใช้วิธีการนี้ในผลิตภัณฑ์ SGIoT (Signal Generator Internet of Things) สำหรับประกอบการเรียนการสอนระดับปริญญาตรี/โทคณะวิศวกรรมศาสตร์ ม.เกษตรศาสตร์ และผู้สนใจทั่วไป โดยทดสอบแล้วว่าสามารถใช้งานได้หลังจากการตั้งค่าเริ่มต้นให้ถูกต้องตามข้อมูล WiFi และ NETPIE ของผู้ใช้งาน

หลักการโดยสรุปทางด้านอุปกรณ์ IoT คือ เมื่อเริ่มการทำงานโดยไม่มีข้อมูลที่ถูกต้อง อุปกรณ์จะให้ผู้ใช้เข้าสู่โหมดการตั้งค่า (อาจต้องมีการกดสวิตช์เพื่อออกจากลูป) ข้อมูล WiFi และ NETPIE จะถูกเขียนลงบน EEPROM เมื่อรีเซ็ตเครื่องอุปกรณ์ IoT ก็จะสามารถเชื่อมต่อ NETPIE ได้

สำหรับทางด้าน NETPIE ผู้ใช้งานเพียงแต่สร้าง session key ขึ้นมาตัวหนึ่งใน APPID เดียวกัน และสร้าง Freeboard ใหม่ขึ้นมา หลังจากนั้น import ไฟล์ JSON ที่ผู้พัฒนาสร้างขึ้นเป็นตุ๊กตา โดยแก้ไขข้อมูลในไฟล์ให้ตรงกับ APPID และ session key (การแก้ไขโดย text editor ก่อน import จะง่ายกว่าในกรณีที่ Freeboard มี widgets หลายตัว)

เพื่อความเป็นรูปธรรม บทความนี้จะใช้อุปกรณ์ SGIoT เป็นตัวอย่าง ผู้อ่านสามารถศึกษาและดัดแปลงให้เข้ากับอุปกรณ์ IoT ของตนเองได้โดยไม่ยาก เครื่องมือที่โน้ตบุ้กด้านผู้ใช้ต้องมีในการตั้งค่าคือโปรแกรมสำหรับสื่อสารข้อมูลผ่านพอร์ตอนุกรม ตัวอย่างเช่น Hyper terminal หรือ Coolterm (ไม่แนะนำ Serial Monitor บน Arduino IDE กรณีผู้ใช้งานไม่ใช่ผู้พัฒนาที่เข้าใจการโปรแกรมอุปกรณ์ เพราะอาจโหลดโปรแกรมอื่นลงไปบนฮาร์ดแวร์โดยไม่ตั้งใจ)

ด้าน Arduino*

*ในที่นี้จะใช้ Arduino แทนโปรแกรมด้านอุปกรณ์ที่นิยมใช้ ESP8266 หรือ ESP32

จะใช้วิธีการที่อธิบายในบทที่ 3 ของหนังสือ "คู่มือนักพัฒนาไอโอที" ในการเขียนข้อมูลลงบน EEPROM โดยจะต้องเลื่อนส่วนที่ NETPIE ใช้งานขึ้นไปด้วยเพื่อมิให้เขียนข้อมูลทับกัน

ผู้ใช้เตรียมข้อมูล WiFi SSID และ password หากยังไม่มีบัญชี NETPIE ให้ลงทะเบียนและสร้าง application, device key, secret และตั้งชื่อ alias ของอุปกรณ์ (รายละเอียดส่วนนี้ขออ้างอิงหนังสือหรือเว็บ NETPIE)

เมื่อเชื่อมต่อกับบอร์ดครั้งแรก หรือเมื่อค่าข้อมูล WiFi router ไม่ตรงกับที่อ่านได้จาก EEPROM เช่นย้ายสถานที่ใหม่ จะเห็นการแสดงเครื่องหมาย ….. ไปเรื่อยๆ ไม่สิ้นสุด ให้กดปุ่ม Mode SW บนบอร์ดเพื่อให้โปรแกรมหลุดจากลูปการเชื่อมต่อ WiFi และเข้าสู่โหมดออฟไลน์ดังแสดงในรูปที่ 1

รูปที่ 1 ข้อความแสดงการทำงานในโหมดออฟไลน์

การกำหนดค่าข้อมูล WiFI และ NETPIE ทำได้โดยส่งคำสั่งผ่านพอร์ตอนุกรมทีละคำสั่งและกด [Enter] ดังเช่นในรูปที่ 2 โดยมีรูปแบบคำสั่งตามที่ผู้พัฒนากำหนดไว้ ตัวอย่างเช่น


wifissid=dnjguest2
wifipwd=dnjguest1234
appid=SGIoTApp
key=x2QIibJGqwDl
secret=0HPhs7LjCYg5eVz18GC1e
alias=SGIOT
รูปที่ 2 พิมพ์คำสั่งตั้งค่าทีละคำสั่งในช่องลูกศรชี้และกด [Enter]

ผู้ใช้เปลี่ยนสตริงหลังเครื่องหมาย = ตามข้อมูลของตัวเอง เมื่อครบแล้วใช้คำสั่ง save หรือกดสวิตช์ เป็นเวลาประมาณ 5 วินาที จะเห็นข้อความแสดงการเขียนข้อมูลลงบน EEPROM สำเร็จ กดปุ่มรีเซ็ตเพื่อเริ่มการทำงานใหม่ หากข้อมูลที่เขียนบน EEPROM ถูกต้อง จะมีข้อความแสดงว่าบอร์ด SGIoT สามารถเชื่อมต่อกับ WiFi และ NETPIE ได้สำเร็จดังรูปที่ 3

รูปที่ 3 ข้อความแสดงการเชื่อมต่อ WiFi และ NETPIE สำเร็จ

ด้าน NETPIE FReeboard

การควบคุม SGIoT โดย Freeboard ประกอบด้วย 2 ส่วนหลักคือ

  1. ส่วนส่งคำสั่งให้กับอุปกรณ์ คำสั่งที่ส่งให้กับอุปกรณ์จะมีรูปแบบ command=parameter ซึ่งโปรแกรมด้าน Arduino จะแยกส่วนคำสั่งและพารามิเตอร์ออกจากกัน และทำงานตามต้องการ
  2. ส่วนอัพเดท widgets บน Freeboard สำหรับอุปกรณ์ SGIoT จะอัพเดทค่าให้กับ widget เฉพาะเมื่อมีการเปลี่ยนแปลงค่าโดยผู้ใช้ ซึ่งอาจจะกระทำผ่าน Freeboard หรือ Serial หรือ Bluetooth ก็ได้

ผู้พัฒนาสร้าง Freeboard ตามที่อธิบายในเว็บของ NETPIE หรือหนังสือ "คู่มือนักพัฒนาไอโอที" และทดสอบการใช้งานอย่างถี่ถ้วน เมื่อแน่ใจว่าไม่มีข้อผิดพลาดคลิกที่ export ทุกสิ่งทุกอย่างใน Freeboard ที่ออกแบบไว้จะถูกเก็บในไฟล์ dashboard.json ในไฟล์นี้จะมีข้อมูลสำคัญจากบัญชี NETPIE ของผู้พัฒนาที่ไม่ต้องการส่งให้ผู้ใช้

เปิดไฟล์ด้วย text editor และใช้ฟังก์ชัน Find-Replace all เพื่อเปลี่ยนข้อมูล APPID, ALIAS, ชื่อ datasource, (session)key, secret จากบัญชี NETPIE ของผู้พัฒนาให้เป็นชื่ออื่นใด (ที่สามารถหาโดยฟังก์ชัน Find ของ text editor ได้ง่ายและไม่ไปซ้ำกับข้อความอื่นในไฟล์) เช่น _APPIDNAME, _ALIASNAME, _DATASOURCENAME, _KEY, _SECRET เซฟไฟล์ในชื่อที่ต้องการ เช่น SGIoT_dashbord.json ซึ่งจะให้กับผู้ใช้เป็นตุ๊กตา โดยไม่มีข้อมูลสำคัญจากบัญชี NETPIE ของผู้พัฒนาแล้ว

ขั้นตอนการสร้างส่วนควบคุมบน NETPIE Freeboard สำหรับผู้ใช้งานมีดังนี้

1. สร้าง session key สำหรับคีย์บอร์ด เพื่อคัดลองข้อมูล Key และ Secret (รูปที่ 4) ไปใช้แก้ไขไฟล์ JSON

รูปที่ 4 ข้อมูล Key และ Secret ของ session key ที่สร้างขึ้น

2. สร้าง Freeboard ใหม่ว่างๆ โดยไม่ต้องเพิ่ม datasource หรือ widget ใดๆ เพราะจะใช้วิธี import ไฟล์ JSON เข้ามา

3. แก้ไขข้อมูลในไฟล์ JSON

ไฟล์ SGIoT_dashboard.json ที่สร้างไว้เป็นตุ๊กตา เก็บข้อมูลตามรูปแบบ JSON ซึ่งก็คือ text file ที่เปิดได้โดยโปรแกรม editor ทั่วไปเช่น Notepad++ (หลีกเลี่ยงการใช้โปรแกรมที่มีการแทรกอักขระพิเศษในการจัดรูปแบบเช่น Microsoft Word) แก้ข้อมูล 5 ชุดในตารางที่ 1 ก่อน import เข้า Freeboard โดยใช้ฟังก์ชัน Find – Replace all ของ text editor

ตารางที่ 1 ชื่อ/สตริงที่ต้องเปลี่ยน

สังเกตว่า _DATASOURCENAME แทนด้วยชื่ออะไรก็ได้ตามต้องการ (สอดคล้องกับข้อจำกัดของ NETPIE เช่นไม่มีอักขระพิเศษ) เพราะยังไม่มีการสร้างใน Freeboard ว่างๆ หลังจากแก้ไขเสร็จสิ้น เซฟไฟล์ในชื่ออื่นเช่น SGIoT_dashboard_filled.json เผื่อว่าในกรณีเกิดความผิดพลาดยังสามารถทำใหม่ได้

4. คลิกที่ import (รูปที่ 5) เพื่อ import ไฟล์ SGIoT_dashboard_filled.json

รูปที่ 5 การ import ไฟล์ JSON

รูปที่ 6 แสดงหน้า Freeboard ที่ใช้งานได้ทันทีหลังจาก Import ไฟล์ที่แก้ไขข้อมูลเรียบร้อยโดย text editor

รูปที่ 6 หน้า Freeborad ที่สามารถใช้ควบคุมอุปกรณ์ SGIoT

สรุป

ในบทความนี้แนะนำแนวทางในการพัฒนาอุปกรณ์ IoT โดย NETPIE microgear ให้กับผู้ใช้ทั่วไปโดยไม่ต้องให้ source code และข้อมูลในบัญชี NETPIE ของผู้พัฒนาไปด้วย เป็นการปกป้องทรัพย์สินทางปัญญาและเครดิต/ความปลอดภัยข้อมูลของบัญชี NETPIE ในบทความไม่ได้แสดงรายละเอียดปลีกย่อยเช่นการเขียนโปรแกรมเพื่อเข้าถึง EEPROM ซึ่งได้อธิบายพร้อมตัวอย่างโค้ดในบทที่ 3 ของหนังสือ "คู่มือนักพัฒนาไอโอที"

ทางด้านของผู้พัฒนาในการใช้ฟังก์ชัน Find – Replace ของ text editor เพื่อเปลี่ยนข้อมูลใน dashboard.json มีข้อควรระวังอยู่บ้าง เช่นสมมุติว่าเราตั้งชื่อ APPID ว่า sgiot และตั้งชื่อ datasource ว่า sgiotds หากใช้ Replace all เปลี่ยนคำว่า sgiot เป็น _APPIDNAME มันจะเปลี่ยนชื่อ datasource ไปด้วยเป็น _APPIDNAMEds ทำให้ต่อไปต้องการจะค้นหา sgiotds เพื่อเปลี่ยนชื่อจะหาไม่พบเพราะชื่อถูกเปลี่ยนไปแล้ว ถ้าไม่แน่ใจให้ใช้ฟังก์ชัน Replace ทีละคำแทน Replace all เพื่อจะได้ตรวจสอบก่อนว่าใช่คำที่เราต้องการหรือไม่

อุปกรณ์ SGIoT ในตัวอย่างไม่ได้ใช้การเก็บข้อมูลบน NETPIE Feed ซึ่งหากต้องการใช้ Feedสามารถใช้วิธีการเดียวกันในโปรแกรม คือให้ผู้ใช้เขียนค่า FeedID (และ Feed API หากต้องใช้ในการเขียน)

No comments:

Post a Comment

แนะนำหนังสือ “ตัวควบคุมป้อนกลับบนอินเทอร์เน็ตโดย ESP8266”

ปัจจุบันเมื่อกล่าวถึงอุปกรณ์ IoT (Internet of Things) คงมีน้อยคนที่จะไม่รู้จัก ในยุคที่การเข้าถึงอินเทอร์เน็ตเป็นกิจวัตรประจำวันของมนุษย์เ...