[EP.1] เชื่อมต่อโหนด MiniLink(ESP32) กับ AWS IoT Core โดยเครือข่าย WiFi / LoRaWAN และ NB-IoT
ลงไม้ลงมือ : “ส่งข้อมูลเซ็นเซอร์ Modbus RTU ไป AWS IoT Core โดย ESP32”
บทความ โดย… วิสิทธิ์ เวียงนาค
วันที่ 31 มีนาคม 2565
ในบทความนี้ ผู้เขียนจะยกตัวอย่างการนำ IoT device หรือโหนด MiniLink รุ่น ESP32 จาก ใส่ใจ เทค ติดตั้งกับเซ็นเซอร์วัดคุณภาพอากาศ ยี่ห้อ ACER ผ่านพอร์ต RS485 โปรโตคอล ModbusRTU โดยเครือข่าย WiFi/LoRaWAN/NB-IoT เชื่อมต่อกับ AWS IoT Core รับส่งข้อความ Subscribe/Publish ส่งต่อไปยัง AWS Service ที่ให้บริการเกี่ยวข้องกับงาน IoT อาทิเช่น ฐานข้อมูล การวิเคราะห์ข้อมูล กระดานแสดงผล การแจ้งเตือนและงาน BI
ปี 2015 ผู้เขียนได้เร่ิมศึกษา InfluxDB ซึ่งเป็นฐานข้อมูลแบบ Open-Source Time Series Database ที่พัฒนาโดยบริษัท InfluxData มาใช้ร่วมกับงาน IoT หลังจากที่ได้ทดลองนำไปใช้แล้ว พบว่ามันสามารถทำงานร่วมกับ IoT ได้เป็นอย่างดี จากนั้นได้ทดลองเพิ่ม โดยการนำ InfluxDB มาใช้ร่วมกับโปรแกรม Grafana (ออกมาในปี 2014) ซึ่งเป็นเวอร์ชั่นแรกๆ และโปรแกรม Node-RED ในช่วงเวอร์ชั่นต้นๆ นำมาทำระบบหลังบ้านและทำหน้า Visualization Dashboard พบว่ามันลงตัวเป็นอย่างมาก ใช้งานง่ายและทำงานได้อย่างรวดเร็ว
ในปี 2018 ผู้เขียนได้แนะนำให้กับบุคคลทั่วไปใช้ InfluxDB+Grafana+Node-RED สำหรับระบบ IoT เพราะในเวลานั้นเป็นจุดเริ่มต้นของ IoT และกระแสกำลังมาแรงมาก แต่นักพัฒนายังมีข้อสงสัยว่าจะเก็บ IoT Payload ไว้ในฐานข้อมูลประเภทไหนดี
ผู้เขียนเองก็ได้นำระบบ IoT ชุดนี้ (InfluxDB+Grafana+Node-RED) ไปใช้งานจริงมาจนถึงปัจจุบัน (ปี 2022)
ในปีนี้ 2022 วันเวลาผ่านไป เทคโนโลยีได้ถูกพัฒนาขึ้น ทำให้สิ่งที่ดูยุ่งยากซับซ้อนง่ายลงมากและมีประสิทธิภาพสูงขึ้น มีบริการ Cloud Service เกิดขึ้นมาอย่างมากมาย มีบริการทางเลือกให้ใช้งานหลายรูปแบบ ในราคาค่าบริการที่ถูกลงเรื่อยๆ อาทิเช่น Microsoft Azure / Google Cloud Platform (GCP) / AWS Service
ทั้ง 3 แพลตฟอร์มใหญ่ตามที่ได้กล่าวมา มีบริการงานที่เกี่ยวข้องกับ IoT ออกมาให้เลือกใช้กันมากมาย มุ่งเน้นความปลอดภัยในข้อมูล IoT และความคล่องตัวในการเชื่อมต่อกับบริการอื่นๆ เช่นบริการ Data Analytic / BI / Notify / Micro Service / AI และบริการอื่นๆ
AWS IoT Core ถือเป็นทางเลือกหนึ่ง ที่มีบริการงานที่เกี่ยวข้องกับ IoT คลอบคลุมมาก และยังสามารถเชื่อมต่อกับบริการอื่นๆ ภายใต้ AWS Service ได้อย่างสะดวกและง่ายดาย ในบทความนี้ผู้เขียนจะนำ AWS IoT มาประยุกต์ใช้กับงาน IoT ที่ผู้เขียนทำงานอยู่ในด้านนี้ โดยเลือกเอาเฉพาะ AWS Service ที่เกี่ยวข้องมาใช้งาน
ภาพรวมของบทความ
ผู้เขียนจะสาธิตการสร้าง Things ใน AWS IoT Core การขอ IoT Certificate และ Key ความปลอดภัย การสร้าง Policies เพื่อกำหนดสิทธิ์การเชื่อมต่อของ IoT device และการกำหนดสิทธิ์การ Subscribe/Publish ในโปรโตคอล MQTT
การเตรียมไลบรารี่ที่จำเป็นในการทดสอบให้กับโปรแกรม Arduino IDE การนำ IoT Certificate และ Key ความปลอดภัยที่ได้จาก AWS IoT Core มาใส่ใน Arduino Skets การเชื่อมต่อระหว่าง IoT devices โหนด MiniLink(ESP32) กับ AWS IoT Core โดยโปรโตคอล MQTT ผ่านเครือข่าย WiFi/LoRaWAN และ NB-IoT
การใช้ MQTT test client ใน AWS IoT Core เพื่อดูข้อความที่ส่งมาจาก IoT devices การส่งข้อความ Publish message จาก AWS IoT Core กลับไปยัง IoT devices การใช้โปรแกรม MQTT client (MQTT.fx) จากภายนอก เชื่อมต่อกับ AWS IoT Core เพื่อรับส่งข้อความ
การสร้าง IoT Rules ทั้ง 9 Actions ให้กับ Things ได้แก่
- การส่งต่อข้อความ MQTT Republish กลับไปยัง IoT devices ตาม Topic ที่กำหนด คือ “airnode/downling”
- การส่งการแจ้งเตือนไปยังอีเมล์ที่กำหนด โดย AWS Simple Notification Service (SNS)
- การส่งการแจ้งเตือนไปยัง Mobile device โดย Google Cloud Messaging (GCM)
- การส่งต่อข้อความไปยัง IoT Analytic เพื่อเตรียมทำข้อมูลสำหรับการวิเคาระห์
- การเชื่อมต่อกับ QuickSigh ซึ่งเป็นบริการวิเคราะห์ข้อมูล Business Intelligence ผ่านคลาวด์ของ AWS เพื่อคำนวณและสร้างภาพเรนเดอร์ Visualization สร้างหน้า Dashboard ของข้อมูล IoT Paylaod จาก Air Monitor Sensor ที่ได้รับมาจาก IoT devices โหนด MiniLink (ESP32)
- การส่งต่อข้อความไปเก็บไว้ในฐานข้อมูล DynamoDB ซึ่งเป็นฐานข้อมูลแบบ NoSQL
- การส่งต่อข้อความไปเก็บไว้ในฐานข้อมูล Timesteam ซึ่งเป็นฐานข้อมูลแบบ Time Series Database
- การเชื่อมต่อกับ Grafana เพื่อสร้างหน้า Visualization Dashboard โดยใช้ datasource จากฐานข้อมูล Timesteam แบบเรียลไทน์
- การส่งต่อข้อความไปยัง Lambda Function ซึ่งเป็น Micro Serv ice เพื่อสร้างการแจ้งเตือนผ่านทางบริการ LINE Notify
- ทดสอบการเชื่อมต่อระหว่าง AWS IoT Core กับ IoT devices ที่ใช้การสื่อสารข้อมูลผ่านเครือข่าย WiFi NB-IoT และ LoRaWAN โดยโปรแกรม Node-RED
อุปกรณ์ที่ใช้ในการทดสอบ
IoT device: MiniLink รุ่น ESP32 ของ ใส่ใจ เทค
รายละเอียดเพิ่มเติม: http://www.saijai.tech/minilink/
MiniLink เป็นโหนด IIoT มีราคาย่อมเยา สามารถเขียนโปรแกรมควบคุมการทำงานและมีโมดูลสื่อสารในตัว มีให้เลือกอยู่สองรุ่นหลัก คือ รุ่นแรกใช้หน่วยประมวลผล ESP32 หรือ รุ่นที่สอง Arm Cortex M0+ โดยรุ่นที่ใช้ ESP32 รองรับการพัฒนาโปรแกรมโดย Arduino IDE , ESP-IDF, MocroPython , JavaScript และ Lua ส่วนรุ่นที่ใช้ Arm Cortex M0+ จะรองรับการพัฒนาโปรแกรมโดย Arduino IDE , MPLAB X IDE , Atmel Studio 7 IDE และ CircuitPython
MiniLink IIoT Node มีโมดูล LoRaWAN ของ ACER และพอร์ต RS485 มาพร้อมอยู่บนบอร์ด มีเคสเป็นกล่องพลาสติกแบบ DIN RAIL พร้อมไฟ LED แสดงสถานะมีสายอากาศแบบพลาสติกอยู่ในกล่อง พร้อมทั้งมีคอนเน็กเตอร์ถอดเข้าถอดออกได้ ทำให้สะดวกต่อการเชื่อมต่อกับเซนเซอร์และแหล่งจ่ายพลังงาน มีขนาดเล็กกระทัดรัด
คุณลักษณะของ MiniLink IIoT Node ทั่วไป
- กล่องมีขนาด 36.3 x 90.2 x 58.0 มม
- ช่วงอุณหภูมิและความชื้นทำงาน temperature: -30°C~+80°C,Humidity <95%
- รองรับแหล่งจ่ายไฟ 5–24VDC
- มีพอร์ต RS485 หรือ UART (เลือกโหมดที่จั๊มเปอร์)
- มีพอร์ต NTC (Negative Temperture Coefficient) ต่อกับเซนเซอร์วัดอุณหภูมิ
- หลอดไฟ LED แสดงสถานะ
- กล่องพลาสติกแบบ DIN RAIL
IoT sensor: Air Monitor ของ ACER
PM2.5/PM10 with Temperature and Humidity Sensor (Indoor)
RS485 ModbusRTU
ผู้เขียนเลือกใช้เซ็นเซอร์วัดคุณภาพอากาศ PM1/PM2.5/PM10 อุณหภูมิและความชื้นสัมพัทธ์ของยี่ห้อ ACER มาทดลอง เซ็นเซอร์ตัวนี้มีพอร์ต RS485 และใช้ Modbus RTU ในการสื่อสารข้อมูล สามารถเชื่อมต่อเข้าพอร์ต RS485 บนบอร์ด MiniLink ได้เลย จ่ายไฟเลี้ยงให้เซ็นเซอร์ 12/24Vdc
รายละเอียดเซ็นเซอร์วัดคุณภาพอากาศของ ACER
ตาราง Modbus Table เซ็นเซอร์วัดคุณภาพอากาศของ ACER
Modbus Address ID = 0x1
Function code = 3 (Read Holding Register)
Register Address 0x0 = Air Temperature
Register Address 0x1 = Air Humidity
Register Address 0x2 = PM1.0
Register Address 0x3 = PM2.5
Register Address 0x4 = PM10
รู้จัก AWS IoT
AWS IoT Core เป็นบริการคลาวด์ที่เปิดการเชื่อมต่อระหว่างอุปกรณ์ IoT เข้ากับบริการต่างๆ ของ AWS cloud services และอุปกรณ์อื่นๆ ได้อย่างปลอดภัย ระบบยังรองรับอุปกรณ์ IoT เป็นจำนวนมากถึง “พันล้านอุปกรณ์” ข้อความจากโปรโตคอล MQTT จำนวนมากถึง ”ล้านล้านข้อความ” และมีการจัดการข้อความในรูปแบบต่างๆ อย่างง่ายดาย
AWS IoT Core ทำให้เราสามารถตรวจสอบและสื่อสารข้อมูลกับอุปกรณ์ IoT ทั้งหมดตลอดเวลา มีความปลอดภัยในข้อมูลสูง ระบบมีความน่าเชื่อถือ รองรับกับงานขนาดใหญ่ มี Cloud Service ให้เลือกใช้หลากหลายรูปแบบ ใช้งานง่ายและเป็นมิตรกับผู้ใช้
การเชื่อมต่อระหว่าง IoT devices กับ AWS IoT Core
ตามรูปที่ 2 เป็นภาพรวมแสดงการเชื่อมต่อระหว่าง IoT devices กับ AWS IoT Core เริ่มต้นจาก IoT devices ระบุค่าความปลอดภัย (IoT certificate) ในการเชื่อมต่อ แล้วร้องขอไปยัง AWS IoT Core ผ่านโปรโตคอล MQTT ทันทีที่ AWS IoT Core ได้รับการร้องขอ ระบบจะเช็คค่าความปลอดภัย (IoT certificate) ของ IoT devices ว่าถูกต้องหรือไม่ และตรวจสอบสิทธิ์ใน IoT policies ก่อนการอนุญาติให้เชื่อมต่อ
ถ้า IoT devices มีการรับส่งข้อความผ่านโปรโตคอล MQTT กับ AWS IoT Core ระบบจะตรวจสอบสิทธิ์ใน IoT policies ก่อนการอนุญาติให้กระทำการทุกครั้ง เราสามารถดูข้อความที่ได้รับจาก IoT devices ผ่านทาง MQTT test client โดยสามารถ subcribe topic ที่สนใจ หรือจะส่งข้อความจาก AWS IoT Core ผ่านทาง publish message ไปยัง IoT devices ก็ทำได้เช่นกัน ย้ำอีกทีว่า IoT devices ต้องมีสิทธิ์ใน IoT policies ด้วย
การส่งต่อข้อมูลไปยัง AWS Cloud Service ที่สนใจ ท่านสามารถทำได้โดยการสร้าง IoT Rules Action ถ้าต้องการสร้างเงื่อนไข (Rule query statement) คัดกรองเอาเฉพาะข้อมูลที่ต้องการด้วย ก็ทำได้เช่นกันโดยใช้ภาษา SQL query ยกตัวอย่างเช่น ต้องการคัดเอาเฉพาะ Message ที่มีค่า PM2.5 มากกว่า 100 และแสดงเวลาด้วย ก็ใช้ SQL query ตามข้างล่างนี้
SELECT *, timestamp() as time FROM 'iot/airmonitor' WHERE pm25 >100
จากนั้นเลือกบริการที่สนใจ ยกตัวอย่างเช่น นำข้อมูลไปเก็บที่ฐานข้อมูล DynamoDB / ส่งต่อข้อมูลไปทำ IoT Analytics / ส่งกลับข้อมูล Republish message / ส่งต่อข้อมูลไปทำไมโครเซอร์วิส Lambda function / การแจ้งเตือน SNS push notification และบริการอื่นๆ อีกมากมาย
ตัวอย่าง การเชื่อมต่อโหนด MiniLink (ESP32) กับ AWS IoT Core โดยเครือข่าย WiFi
สำหรับผู้ที่เพิ่งเร่ิมต้นศึกษา อาจยังจับต้นชนปลายไม่ถูก ยังไม่เข้าใจคอนเซ็ปกระบวนการเชื่อมต่อระหว่าง IoT device ไปยัง AWS IoT Core และบริการต่างๆ บน AWS Cloud Service จนไม่รู้ว่าจะเร่ิมต้นทำอะไรก่อนหลังดี ในตัวอย่างนี้ ผู้เขียนจะอธิบายเป็นขั้นตอนต่างๆ ตามเคสตัวอย่างที่ยกมา โดยการนำอุปกรณ์ IoT และเซ็นเซอร์จริงมาประกอบการสาธิต แบ่งออกเป็น 6 หัวข้อ ดังต่อไปนี้
1. การเข้าสู่ระบบ AWS IoT Core
ไปที่ https://aws.amazon.com/console/
สำหรับผู้ที่ยังไม่ได้ลงทะเบียนและสมัครใช้บริการ ให้ท่านจัดการให้เรียบร้อยก่อน ในขั้นตอนนี้จะไม่ได้กล่าวถึงในบทความนี้นะครับ
ตามรูปที่ 4 ให้ค้นหาคำว่า “iot core” ท่ีหน้าต่าง Services จะพบกับลิส “IoT Core” แสดงเป็นรายการให้เลือกอยู่ ให้คลิ๊ก 1 ครั้งเพื่อไปยังหน้าหลักของบริการ IoT Core
ตามรูปที่ 5 หน้าหลักของ AWS IoT จะพบกับเมนูอยู่ด้านซ้ายมือ
2. การสร้าง Things
Things ใน AWS IoT มีความสำคัญมากเพราะเป็นตัวแทนอุปกรณ์ IoT จริง ในขั้นตอนนี้ AWS IoT จะช่วยสร้าง Things ช่วยสร้างค่าความปลอดภัยและให้ดาวน์โหลด “Certificates และ Key” ซึ่งเป็นข้อมูลประจำตัว Things เพื่อใช้ในการยืนยันตัวตนในการเชื่อมต่อระหว่างอุปกรณ์จริง IoT device ที่อยู่ภายนอก กับ Things ในระบบ AWS IoT Core
จากรูปที่ 6 เร่ิมการสร้าง Things ใหม่ ให้ไปที่เมนูด้านซ้ายมือ “Things”(1) คลิ๊กหนึ่งครั้ง จะแสดงหน้ารายการ Things ที่มีอยู่ในระบบขึ้นมาในพื้นที่ด้านขาวมือ ให้คลิ๊กที่ “Create things”(2) เพื่อเริ่มสร้าง things หลังจากขั้นตอนนี้ระบบจะแสดงหน้าต่างขึ้นมาให้เลือกวิธีการสร้าง things ว่าจะเลือกสร้างแบบทีละตัว หรือเลือกสร้างเป็นจำนวนหลายตัว ในตัวอย่างนี้ให้เลือก “Create single thing”(3) แล้วคลิ๊กที่ปุ่ม “Next”(4)
จากรูปที่ 7 ให้ระบุชื่อของ Things ในช่อง “Thing name”(1) ในตัวอย่างนี้กำหนดให้ Things ชื่อ “iot_airnode2” จากนั้นเลื่อนไปยังด้านล่าง คลิ๊กที่ปุ่ม “Next”(2)
จากรูปที่ 8 เป็นการสร้าง Certificate ให้กับ Things ในตัวอย่างนี้จะเลือกให้ระบบ IoT core สร้าง Certificate ให้แบบอัตโนมัติ ให้เลือกที่ “Auto-generate new certificate”(1) แล้วคลิ๊กที่ปุ่ม “Next” จะมีหน้าต่างให้เลือก Policies ที่ต้องการผูกการเชื่อมโยง ในขั้นตอนนี้ยังไม่ต้องเลือกอะไร เราจะกลับมาสร้างใหม่หลังจากที่สร้าง Things เสร็จเรียบร้อย ให้คลิ๊กที่ปุ่ม “Create thing”(2) ได้เลย
จากรูปที่ 9 ระบบ IoT Core จะให้ดาวน์โหลดไฟล์ข้อมูลค่าความปลอดภัย ให้ท่านดาวน์โหลดไฟล์ “Device certificate” เก็บไว้ ให้คลิ๊กที่ปุ่ม “Download”(1) และดาวน์โหลดไฟล์ “Key files” ซึ่งเราจะเก็บ 2 ไฟล์ ได้แก่ “Public key file” และ “Prive key file” ให้คลิ๊กที่ปุ่ม “Download”(2)(3) จากนั้นให้ดาวน์โหลดไฟล์ “Root CA certificates” เก็บไว้ โดยเราจะเก็บไฟล์แบบ “RSA 2048 bit key: Amazon Root CA 1" ให้คลิก็ที่ปุ่ม “Download” จากนั้นคลิ๊กที่ปุ่ม “Done”
ไฟล์ที่ดาวน์โหลดมา มีทั้งหมด 4 ไฟล์ ตามตัวอย่างที่แสดงในรูปที่ 10
3. การสร้าง Policies
AWS IoT สามารถกำหนดสิทธิ์ให้กับ Things ได้ว่าสามารถทำอะไรได้บ้าง เช่น กำหนดให้ Thing สามารถเชื่อมต่อกับ AWS IoT ได้ / กำหนดให้ Things สามารถ publish message ส่งข้อความไปยัง AWS IoT ได้ / กำหนดให้ Things สามารถ subscribe ดูข้อความจาก AWS IoT ได้ / กำหนดให้ Thing สามารถรับข้อความจาก AWS IoT ได้ หรือกำหนดสิทธิ์อื่นๆ ตามที่ต้องการ
ในการกำหนดสิทธิ์ให้กับ Things มีหลายรูปแบบ ผู้เขียนจะขอแนะนำ 4 Policy Actions หลักๆ ที่นิยมนำมาใช้กับ IoT devices ใน AWS IoT Core ที่ใช้โปรโตคอล MQTT ในการสื่อสารข้อมูล
AWS IoT Core policy actions
iot:Connect
คือการอนุญาติให้ IoT devices สามารถเชื่อมต่อกับ AWS IoT Core message broker โดยระบบจะทำการเช็คสิทธิ์ในการเชื่อมต่อทุกครั้ง ที่มีการร้องขอการเชื่อมต่อเข้ามา และไม่อนุญาติให้ IoT devices ที่มี client ID ซ้ำกันเชื่อมต่อในเวลาเดียวกัน
iot:Publish
คือการอนุญาติให้ IoT devices สามารถส่งข้อความ Publish message ไปยัง AWS IoT Core message broker โดยระบบจะทำการเช็คสิทธิ์ในการส่งข้อความ MQTT Publish ทุกครั้งที่มีการส่งข้อความเข้ามา
หมายเหตุ: การจะให้สิทธิ์ iot:Publish จำเป็นต้องอนุญาติ iot:Connect ก่อน
iot:Receive
คือการอนุญาติให้ IoT devices สามารถรับข้อความจาก AWS IoT Core โดยระบบจะทำการเช็คสิทธิ์ในการส่งข้อความไปหา IoT devices ทุกครั้งที่มีการส่งข้อความออกไป
iot:Subscribe
คือการอนุญาติให้ IoT devices สามารถเลือกดูข้อความ MQTT Topic จาก AWS IoT Core message broker โดยระบบจะทำการเช็คสิทธิ์ในการขอดูข้อความทุกครั้งที่มีการร้องขอเข้ามา
หมายเหตุ: การจะให้สิทธิ์ iot:Subscribe จำเป็นต้องอนุญาติ iot:Connect ก่อน
รูปแบบการสร้าง Rule แต่ละ Actions มีรายละเอียดข้อกำหนดดังนี้
จากรูปที่ 12 เร่ิมการสร้าง Policies ใหม่ ให้ไปที่เมนูด้านซ้ายมือ “Policies” คลิ๊กหนึ่งครั้ง ในพื้นที่ด้านขาวมือ ให้คลิ๊กที่ปุ่ม “Create policy”
จากเคสตัวอย่างนี้ ผู้เขียนได้กำหนดค่าให้กับ Rule และ Actions ตามตารางในรูปที่ 13 โดยค่าที่กำหนด(ตัวอักษรสีแดง) จะนำไปใส่ใน Arduino Sket และระบุใน Policy resource ต่อไป
MQTT client ID = “clientid_iot_airnode2”
MQTT Publish Topic = “airnode/uplink”
MQTT Received Topic = “airnode/downlink”
MQTT Subcribe Topicfilter = “airnode/downlink”
จากรูปที่ 14 เราจะตั้งชื่อให้กับ Policies ใหม่ คือ “airnode2_policy” ให้กรอกชื่อนี้ในช่อง “Policy name” ก่อนอื่นขอให้ท่านเช็คดูก่อนว่าในส่วนของ Policy document อยู่ในหน้าของ Builder หรือไม่ ให้ท่านคลิ๊กที่ปุ่ม “Builder”(1) หนึ่งครั้งเพื่อทำให้แน่ใจ
เร่ิมการสร้าง statements แรก ให้ท่านคลิ๊ก drop down ที่ “Policy effect” เป็น “Allow” เสร็จแล้วคลิ๊ก drop down ที่ “Policy action” เลือกเป็น iot:Connect และสุดท้ายให้ใส่รายละเอียดที่ “Policy resouce” ให้ถูกต้องตามรูปที่ 13 บรรทัดแรก
ให้คลิ๊กที่ “Add new statements”(2) สร้าง Policy resource เพิ่มอีก 3 statements ได้แก่ iot:Publish iot:Receive iot:Subscribe ให้ครบทั้ง 4 statements แล้วคลิ๊กที่ปุ่ม “Create” ถ้ามั่นใจว่ารายละเอียดครบถ้วนเรียบร้อยแล้ว
แต่ถ้าท่านต้องการรีวิวดูก่อน เช็คความถูกต้องให้แน่ใจอีกครั้ง ให้คลิ๊กที่ปุ่ม “JSON”(1) เพื่อขอดูรายละเอียด statements ที่สร้างขึ้นมาทั้งหมดในรูปแบบของ JSON ในหน้านี้ท่านสามารถแก้ไขข้อมูลได้ด้วย เสร็จเรียบร้อย ให้ท่านคลิ๊กที่ปุ่ม “Create”(2)
4. การเชื่อมโยง Certificates กับ Policies
มาถึงตอนนี้ท่านได้สร้าง Things Certificate&Key และ Policies ขึ้นมาใหม่แล้ว มีการเชื่อมโยงเกิดขึ้นแล้วระหว่าง Things กับ Certificate&Key แต่ยังไม่มีการเชื่อมโยงระหว่าง Things Certificate&Key กับ Policies
ในขั้นตอนนี้เราจะผูกการเชื่อมโยงระหว่าง Certificate&Key กับ Policies เพราะถ้าการเชื่อมโยงนี้เกิดขึ้นแล้ว ก็จะทำให้ Things ที่ผูกการเชื่อมโยงกับ Certificate&Key ผูกการเชื่อมโยงกับ Policies ด้วย
จากรูปที่ 16 เร่ิมการสร้างการผูกการเชื่อมโยงระหว่าง Certificate&Key กับ Policies ให้ไปที่เมนูด้านซ้ายมือ “Certificate”(1) คลิ๊กหนึ่งครั้ง จะแสดงหน้ารายการ Certificate ที่มีอยู่ในระบบขึ้นมาในพื้นที่ด้านขาวมือ ให้คลิ๊กเลือก Certificate ที่สร้างมาล่าสุด(1) โดยดูที่ date-time ในแถวของ “Created”
ให้คลิ๊กที่ drop down ของปุ่ม “Actions”(2) จะปรากฎเมนูย่อยขึ้นมา ให้เลือกที่ “Attach policy”(3)
จากรูปที่ 17 ระบบจะแสดงหน้าต่างให้เลือก Policies ที่ต้องการ ให้ท่านคลิ๊กที่หน้าตัวเลือก “airnode2_policy”(4) จากนั้นคลิ๊กที่ปุ่ม “Attach policies”(5)
ถ้าท่านต้องการตรวจเช็คการเชื่อมโยง ทำได้โดยการคลิ๊กที่ “Certificate ID” ตามรูปที่ 18
ตามรูปที่ 19 ที่ TAB Policies ท่านจะเจอรายการ “airnode_policy” แสดงอยู่ในลิส ซึ่งก็คือ “Policy name” ที่สร้างขึ้นมาก่อนหน้านั่นเอง
ให้ท่านคลิ๊กที่ TAB Things ตามรูปที่ 20 ท่านจะเจอรายการ “iot_airnode2” แสดงอยู่ในลิส ซึ่งก็คือ “Thing name” นั่นเอง
มาถึงตอนนี้ Things Certificate&Key ก็ผูกการเชื่อมโยงสำเร็จแล้ว พร้อมใช้งาน
5. การเตรียม Arduino Sketches เชื่อมต่อ AWS IoT Core
ก่อนอื่นต้องเช็คก่อนว่า ท่านมีไลบรารี่ใช้งานสำหรับตัวอย่างนี้ครบหรือยัง ตามตัวอย่างจะใช้ Arduino Libraries ทั้งหมด 3 ตัว
ถ้าท่านยังไม่มีไลบรารี่ สามารถดาวน์โหลดได้ตามลิงค์ข้างล่างนี้
ดาวน์โหลดได้ที่นี่ >> Library_AWS_IOT_Testing
- ไลบรารี่ ModbusMaste สำหรับอ่านค่า Modbus RTU
- ไลบรารี่ ArduinoJson สำหรับแปลงรูปแบบข้อความเป็น JSON
- ไลบรารี่ PubSubClient สำหรับรับส่งความโดยโปรโตคอล MQTT
ผู้เขียนยังได้เตรียม CODE สำหรับการทดสอบตามตัวอย่างนี้ ไว้ให้ท่าน สามารถดาวน์โหลดไปศึกษาได้ตามลิงค์ข้างล่างนี้
ดาวน์โหลดได้ที่นี่ >> AWS_IOT_CORE_ESP32
- AWS_IOT_CORE_ESP32.ino
- AWSkey.h
ให้ท่านคัดลอกโฟล์เดอร์ “AWS_IOT_CORE_ESP32” ที่ดาวน์โหลดมา ไปเก็บในโฟล์เดอร์ “Arduino” จากนั้นให้เปิดไฟล์ AWS_IOT_CORE_ESP32.ino ขึ้นมา ให้ท่านแก้ไขค่าพารามิเตอร์ของ WiFi คือค่า SSID[] และ PASSWORD[] ให้เป็นของท่านเองที่สามารถเชื่อมต่อกับอินเตอร์เน็ตได้ และเปลี่ยนค่า AWS_ENDPOINT[] ที่แสดงอยู่ใน AWS IoT Core ของท่าน
const char WIFI_SSID[] = “xxxx”;
const char WIFI_PASS[] = “xxxx”;
const char AWS_ENDPOINT[] = “xxx-ats.iot.us-east-1.amazonaws.com”;
ลิงค์ AWS IoT Endpoint ท่านสามารถดูได้ที่เมนู AWS IoT->Setting ตามรูปที่ 21 ที่บริเวณข้างใต้ “Endpoint” จะมีลิงค์แสดงอยู่ ให้ท่านคัดลอกเก็บไว้และนำมาใส่ในตัวแปร AWS_ENDPOINT[] ใน Arduino Sketchs
Arduino Sketch:
AWS_IOT_CORE_ESP32.ino
ใน Arduino Sketch ท่านจะพบว่ามี TAB แสดงอยู่ด้านบนอยู่ 2 TAB ให้ท่านคลิ๊กไปที่ AWSkey.h ภายใน Sketch ให้ท่านแก้ไขค่าตัวแปรค่าความปลอดภัย Certificate และ Key ต่างๆ
ตามรูปที่ 23 ให้ท่านใช้โปรแกรมอ่าน text editor ทั่วไป เช่น node pad เปิดอ่านข้อมูลในไฟล์
เปิดไฟล์ “AmazonRootCA.pem” ขึ้นมา เสร็จแล้วคัดลอกข้อความที่อยู่ข้างในไฟล์มาวางไว้ที่ตัวแปร AWS_CERT_CA[] ใน TAB AWSkey.h
เปิดไฟล์ “xxxx-certificate.pem.crt” ขึ้นมา เสร็จแล้วคัดลอกข้อความที่อยู่ข้างในไฟล์มาวางไว้ที่ตัวแปร AWS_CERT_CRT[] ใน TAB AWSkey.h
เปิดไฟล์ “xxxx-private.pem.key” ขึ้นมา เสร็จแล้วคัดลอกข้อความที่อยู่ข้างในไฟล์มาวางไว้ที่ตัวแปร AWS_CERT_PRIVATE[] ใน TAB AWSkey.h
Arduino Sketch:
AWSkey.h
หลังจากที่ท่านได้แก้ไขค่าต่างๆ แล้ว มาถึงตอนนี้ Arduino Sketch ก็พร้อมที่จะอัพโหลดแล้ว ให้ท่านตรวจสอบความผิดพลาดใน CODE อีกครั้ง โดยการกดที่ปุ่ม “Verify” ในโปรแกรม Arduino ถ้าสำเร็จไม่เจอข้อผิดพลาดอะไร ให้ท่านคลิ๊กที่ปุ่ม “Upload” เพื่อโหลด Sketch ไปยังโมดูล ESP32 ใน MiniLink
หลังจากอัพโหลดสำเร็จ IoT Devices ก็พร้อมทำงานแล้ว โดยมันจะเริ่มติดต่อกับ WiFi Access Point ที่ได้ตั้งค่าไว้ ถ้าเชื่อมต่อสำเร็จ มันจะเร่ิมอ่านค่าเซ็นเซอร์โดย ModbusRTU นำมาสร้าง Message จากนั้นมันจะร้องขอการเชื่อมต่อไปยัง AWS IoT Core โดยโปรโตคอล MQTT แล้วส่งข้อความ Public Message ออกไป
6. การดู Message ที่ IoT device ส่งมา
จริงๆ แล้วมันก็คือโปรโตคอล MQTT v3.1.1 ที่เราคุ้นเคยกัน ถ้าต้องการดู message ก็เพียงแค่ subscribe topic ที่ต้องการดูนั่นเอง แต่ความพิเศษของ AWS IoT Core คือความสามารถในการกำหนดสิทธิ์ต่างๆ ให้กับ IoT device ทำให้ข้อมูลมีความปลอดภัยสูง และความง่ายในการสร้าง Policies ให้กับ Things บนโปรโตคอล MQTT
ตามรูปที่ 24 ไปที่เมนู “MQTT test client” แล้วเลือก TAB “Subscribe to a topic” ให้ระบุ MQTT Topic ที่ต้องการดู Message ที่ IoT devices ส่งมา ตามตัวอย่างนี้ให้ระบุ “airnode/uplink” จากนั้นคลิ๊กที่ปุ่ม “Subscribe”
หลังจากที่ IoT devices ส่งข้อความ Publish message ตาม Topic ที่กำหนด ตามตัวอย่างนี้คือ “airnode/uplink” ไปยัง AWS IoT Core ถ้าสำเร็จ ข้อความนั้นจะแสดงในหน้าต่างด้านขาวมือ เป็นรูปแบบ JSON ตามตัวอย่างรูปที่ 25
ใช้โปรแกรม MQTT client เชื่อมต่อ AWS IoT Core
โปรแกรมสำหรับทดสอบ MQTT ที่ผู้เขียนใช้เป็นประจำก็คือโปรแกรม MQTT.fx เพราะใช้งานง่ายและรองรับหลายระบบปฏิบัติการ รวมถึงเป็น open source อีกด้วย ถ้าใครยังไม่มีโปรแกรม สามารถดาวน์โหลดได้ตามลิงค์ข้างล่างนี้
>> ดาวน์โหลดโปรแกรม MQTT.fx เวอร์ชั่น 1.7.1
หลังจากที่ดาวน์โหลดและติดตั้งโปรแกรมแล้ว ให้ท่านเปิดโปรแกรม MQTT.fx ขึ้นมา แล้วตั้งค่าการเชื่อมต่อ ให้คลิ๊กที่เครื่องหมายฟันเฟืองตามรูปที่ 26
จากนั้นให้คลิ๊กที่เครื่องหมายบวกด้านล่างฝั่งซ้ายมือ เพื่อสร้าง Profiles ขึ้นมาใหม่ แล้วตั้งค่าและกรอกข้อมูลตามรูปที่ 27
Profile Name: AWS IoT Core
Profile Type: MQTT Broker
Broker Address: ค่านี้คือ Endpoint ให้ดูรายละเอียดเพิ่มเติมตามรูปที่ 21
Broker Port: 8883
Client ID: clientid_iot_airnode2 (ค่านี้ได้ถูกกำหนดใน Policies ตามรูปที่ 13)
CA File: AmazonRootCA.pem (ตามรูปที่ 23)
Client Certificate File: xxxx-certificate.pem.crt (ตามรูปที่ 23)
Client Key File: xxxx-private.pem.key (ตามรูปที่ 23)
หลังจากตั้งค่าเสร็จเรียบร้อยให้คลิ๊กที่ปุ่ม “Ok”
ตามรูปที่ 28 ทดสอบเชื่อมต่อจากโปรแกรม MQTT client ภายนอกไปยัง AWS IoT Core ให้คลิ๊กที่ปุ่ม “Connect” ถ้าการเชื่อมต่อสำเร็จ จะเห็น icon รูปหลอดไฟด้านขาวมือเป็นสีเขียว ที่ปุ่ม “Connect” จะเปลี่ยนเป็นสีเทา ตอนนี้โปรแกรม MQTT.fx ก็พร้อมที่จะรับส่งความแล้ว
ตามรูปที่ 29 ทดลองการรับข้อความจาก AWS IoT ให้คลิ๊กที่ TAB “Subscribe” จากนั้นระบุ Topic ที่ต้องการ Subscribe ในตัวอย่างนี้คือ “airnode/downlink”
กลับไปที่ AWS IoT Core เพื่อทดลองส่งข้อความไปยัง MQTT Topic “airnode/download” ที่ตอนนี้มีโปรแกรม MQTT.fx ทำการ subscribe รอรับข้อความอยู่ด้วย
ตามรูปที่ 30 ไปที่เมนู MQTT test client ที่ฝั่งด้านขาวมือให้คลิ๊กที่ TAB “Publish to topic” ใน Message payload ให้ระบุข้อความในรูปแบบ JSON ท่ีต้องการ แล้วคลิ๊กที่ปุ่ม “Publish”
หลังจากที่มีการส่งข้อความ Publish message ไปยัง MQTT Topic “airnode/downlink” โปรแกรม MQTT.fx ก็จะได้รับข้อความในทันที ทำให้มีข้อความแสดงที่หน้า debug ของโปรแกรมในรูปแบบของ JSON ตามรูปที่ 31
การสร้าง IoT Rules Action
การส่งกลับข้อความ MQTT Re-publish ไปยัง IoT device
ในตอนนี้ IoT device โหนด MiniLink (ESP32) ก็สามารถเชื่อมต่อและส่งข้อความไปยัง AWS IoT Core ได้แล้ว แต่ทำได้เพียงแค่แสดงใน MQTT test client เท่านั้น ไม่ได้เอาไปทำอะไรต่อ ก็เหมือนกับที่เราใช้ MQTT ทั่วไป ที่สามารถดูข้อความใน Subscribe แล้วข้อความเก่าก็เร่ิมหายไป มีข้อความใหม่เข้ามาแทนที่
ถ้าเราจะนำข้อความไปใช้งานต่อ จะทำอย่างไร ?
ในตัวอย่างนี้จะสาธิตการนำข้อความที่ได้รับจาก IoT devices ไปสร้างการแจ้งเตือน ถ้าค่า temperatue ที่ส่งมาสูงกว่า 30
{
"nid": “clientid_iot_airnode2”,
"temperature": 26.1,
"humidity": 71.1,
"pm1": 21,
"pm2.5": 31,
"pm10": 35
}
เร่ิมสร้างการแจ้งเตือนโดยการสร้าง Rule ใหม่ ตามรูปที่ 32 ที่เมนูฝั่งด้านซ้ายมือให้ คลิ๊กที่ “Rules” หนึ่งครั้ง แล้วฝั่งด้านขวามือ ให้คลิ๊กที่ปุ่ม “Create”
ตามรูปที่ 33 เราจะตั้งชื่อ rule ว่า “IoT_Alarm” ให้ระบุในช่อง “Name” ในส่วนของ “Describtion” ท่านสามารถระบุข้อความโน๊ตทั่วไป ในที่นี่จะระบุ “Alert when temperatue > 30 C”
ที่ Rule Query statement ให้ระบุ SQL ตามข้างล่างนี้
SELECT *, timestamp() as logtime FROM 'airnode/uplink' WHERE temperature > 30
ตามรูปที่ 34 เลื่อนลงมาด้านข้าง จะพบกับปุ่ม “Add action” อยู่บริเวณใต้หัวข้อ “Set one or more actions” ให้คลิ๊กหนึ่งครั้งเพื่อเร่ิมสร้าง Action
ตามรูปที่ 35 ระบบจะแสดงรายการ Service มาให้เลือกใช้งาน ให้ท่านเลือก “Republish a messase to as AWS IoT Topic”
จากนั้นคลิ๊กที่ปุ่ม “Configure action” ตามรูปที่ 36
ตามรูปที่ 37 ในช่อง “*Topic” ให้ระบุ “airnode/downlink” จากนั้นคลิ๊กที่ปุ่ม “Create Role” จะมีหน้าต่างแสดงให้สร้าง IAM role ใหม่ เพื่ออนุญาติให้ AWS IAM สามารถเข้าถึงแหล่งข้อมูล Rule ที่สร้างใหม่ได้ ให้ตั้งชื่อ “IoT_Alert_Role” ในช่อง “Name” จากนั้นคลิ๊กที่ปุ่ม “Create role”
ตามรูปที่ 38 จะเป็นขั้นตอนสุดท้ายในการสร้าง Rule ที่ได้ผูกเชื่อมโยงกับ Action แล้ว ให้ท่านคลิ๊กที่ปุ่ม “Create rule” เป็นอันเสร็จส้ิน
มาทดสอบ รอรับข้อความที่มีค่า temperatue สูงกว่า 30 กันดู ให้ไปที่เมนู MQTT test client ที่ TAB “Subscribe to a topic” ให้ระบุ “airnode/downlink” เสร็จแล้วให้คลิ๊กที่ปุ่ม “Subscribe”
ถ้ามีข้อความที่ IoT device ส่งมา มีค่า temperatue มากกว่า 30 ระบบ AWS IoT Core จะทำการ “Republish a messase to as AWS IoT Topic” ไปที่ “airnode/downlink” ในทันที ท่านจะเห็นว่ามีข้อความแสดงในหน้า console log ตามรูปที่ 39 ค่า temperature = 31.5 ซึ่งมากกว่า 30
ถ้าท่านดูที่ข้อความ ท่านจะพบว่ามีค่า “logtime” เพิ่มเติมมาด้วย ค่านี้ได้มาตอนที่เราสร้าง Rule นั่นเอง ท่านสามารถย้อนกลับไปดูการทำ Query ตามรูปที่ 33
ตามรูปที่ 40 ถ้าท่านใช้โปรแกรม MQTT client ภายนอก เช่น MQTT.fx แล้วทำการ Subcribe ที่ Topic “airnode/downling” ท่านก็จะเห็นข้อความใน console log เช่นเดียวกัน
มาถึงส่วนสุดท้ายของบทความแล้ว ผู้เขียนคิดว่าท่านคงพอเห็นภาพแล้วว่า ท่านจะสามารถเชื่อมต่อ IoT device กับ AWS IoT Core และนำข้อความไปใช้งานต่อได้อย่างไร ผู้เขียนพยามจัดลำดับเนื้อหาที่คิดว่าเกี่ยวข้องกับ IoT มานำเสนอเป็นแนวทาง เพื่อให้ท่านเกิดไอเดียสามารถนำไปประยุกต์ใช้งานจริงได้
AWS IoT Core ยังมีรายละเอียดอีกมากมายนัก สิ่งที่ผู้เขียนนำเสนอเป็นเพียงหัวข้อหลักเท่านั้น ถ้าท่านใดต้องการศึกษาเพิ่มเติม สามารถเข้าไปดูเอกสารออนไลน์ตามลิงค์นี้ https://docs.aws.amazon.com/iot/latest/developerguide/what-is-aws-iot.html
ผู้เขียนมีความตั้งใจที่จะนำเสนอการใช้ IoT-LoRaWAN-NBIOT สำหรับพัฒนา SMART CITY เพื่อให้ผู้ที่สนใจนำไปพัฒนาต่อยอดสร้างนวัตกรรมใหม่ๆ ขอเป็นส่วนหนึ่งเล็กๆ น้อยๆ ช่วยผลักดันประเทศของเราให้เข้าสู่ยุคดิจิตอล Thailand 4.0 อย่างแท้จริง
ติดตามข่าวสารทาง facebook ได้ที่ลิงค์นี้
Facebook กลุ่ม IoT-SmartCity