แกะกล่องไปจนถึงทดลองใช้งานบอร์ด AIS DEVIO NB-DEVKIT I รับส่งค่าผ่าน MQTT

Arnon Thongtem
4 min readJan 17, 2020

--

สวัสดีครับ ฉลองบทความแรกหลังจากย้ายมา medium วันนี้เราจะมาแกะกล่องและทดลองใช้งานบอร์ด AIS DEVIO NB-DEVKIT I ซึ่งเป็นบอร์ดพัฒนา IoT ตัวล่าสุดจากทาง AIS กันครับ ดูจากนอกกล่องก็ดูขรึมคลุมโทรด้วยโทนสีดำเขียว พิมพ์ UV มาอย่างสวยงาม พร้อมโลโก้ AIS AIAP ด้านข้างกล่อง ซึ่งพอเราลองแกะกล่องออกมาดู ก็พบว่าเป็นบอร์ดที่น่าสนใจมากตัวนึง เพราะอะไรเดี๋ยวเรามาว่ากันทีหลัง

โดยบนบอร์ด DEVIO NB-DEVKIT I จะประกอบไปด้วย ส่วนประมวลผล(MCU), Sensor และ Connectivity พร้อมใช้งานได้ทันที แต่ก่อนจะไปพูดถึงเรื่องอื่น เรามาพูดถึงรูปร่างหน้าตาบอร์ดกันก่อนดีกว่าครับเดี๋ยวเค้าจะหาว่าไม่แกะกล่องจริงๆ

แกะกล่องอย่างแผ่วเบา

กล่องดูน่าแกะ พอแกะก็น่าใช้ พอจะใช้อ้าว ใช้ยังไง

พอเราไปหยิบแว่นขยายมาส่องดูบนบอร์ด(เพราะทุกอย่างเล็กมาก) ก็พบว่าในส่วนของ MCU ที่ติดมาบนบอร์ดคือ ESP32 โดยเป็นโมดูล ESP32-WROOM-32 ของทางบริษัท Espressif ซึ่งในปัจจุบันถือเป็นสุดยอดความนิยมของเหล่าบรรดา Maker เนื่องจากมีราคาไม่สูง มีกลุ่ม Community ของนักพัฒนาขนาดใหญ่มากกกกก

เผยให้เห็นโฉมหน้าและโฉมหลังของบอร์ดแบบไม่มีปิดบัง

โดย sensor ที่ติดมาบนบอร์ด นั้นเราลองพลิกดูที่หลังกล่องพบข้อมูลแจ้งว่าสามารถวัดค่า Humidity,Temperature และ Ambient Light ได้ เราเลยมาลองพิจารณาดูที่บนตัวบอร์ดด้วยความสุขุมและรอบคอบ เราก็ได้พบกับเซ็นเซอร์เบอร์ HDC1080 จากบริษัท texas instruments สำหรับวัดค่า Humidity,Temperature ซึ่งเชื่อมต่อกับ ESP32 ของเราด้วย I2C โดยมีคุณสมบัติตามตารางด้านล่างนี้เลย

และเท่านั้นยังไม่พอสำหรับ 10 สายแรก เรายังพบเซ็นเซอร์เบอร์ TEMT6000X01 จากบริษัท Vishay ด้วยซึ่งตัวนี้จะวัดค่า Ambient Light ในย่านที่สายตามนุษย์มองเห็นและให้ผลลัพธ์แบบ Analog ซึ่งเดี๋ยวเราจะไปไล่วงจรกันต่อไป เดี๋ยวต้องไปหาไฟเพิ่มก่อนบอร์ดดำเพ่งยากมาก

จ๊ะเอ๋นี่ไงเซ็นเซอร์อยู่ตรงนี้

และจะพลาดไม่ได้เลยก็คือการพูดถึงส่วนสุดท้ายที่เป็นส่วนสำคัญที่สุดของบอร์ดนี้ (เพราะมันเป็นบอร์ดพัฒนา IoT ไง) คือเรื่องการเชื่อมต่อ(Connectivity ) นั่นเอง ซึ่งบอร์ด DEVIO NB-DEVKIT I นี้สามารถเชื่อมต่อแบบไร้สายได้ทั้ง LPWAN ด้วยเทคโนโลยี NB-IoT ผ่าน module SIM7020E จากบริษัท Simcom โดยในกล่องให้สายอากาศมาพร้อมใช้งาน (ดีมากเสาแบบนี้มันไม่กินที่) และ WiFi 802.11 b/g/n + Bluetooth (4.2 BLE) บนตัว ESP32 เอง เรียกว่าได้ครบทุกระยะและความครอบคลุมทุกการนำไปใช้เลยทีเดียว

เกือบลืมบอกไปว่าเจ้า SIM7020E เนี่ยมันดีเลิศมากนะครับเพราะเราสามารถส่งข้อมูลได้ทั้ง UDP และ TCP เลย เท่านั้นไม่พอ พอเราได้ TCP มาเราก็ได้อย่างอื่นตามมาอีกเพียบทั้ง HTTP,HTTPS,MQTT ดังนั้นรวมๆแล้วมันจะสนับสนุนประมาณนี้ LWM2M/COAP/MQTT/TCP/UDP/HTTP/HTTPS รอจะใช้ไม่ไหวแล้วล่ะสิไปซื้อครับ
ซึ่งรายละเอียดช่องทางการจำหน่ายสามารถติดต่อสอบถามได้ที่บูธ AIS IoT Space ในงาน Bangkok Maker Faire 2020 ระหว่างวันที่ 18–19 มกราคม 2563 นี้ได้หรือจากทางเว็บไซต์ของ AIS Playgroud โดยราคาวางจำหน่ายอยู่ที่ 2,474.50 THB รวมค่าบริการรายปี ปีแรกเรียบร้อย

ในส่วนอื่นๆของบอร์ดก็มีรายละเอียดเพิ่มเติมนิดหน่อยคือมีหลอด LED สีเขียวที่สามารถควบคุมได้ผ่าน ESP32 และมีส่วนของ battery connector ให้เราสามารถใช้งานร่วมกับแบตเตอรี่ได้เลยโดยไม่ต้่องยุ่งยากเรื่องแหล่งจ่ายไฟหากต้องการนำไปใช้งานจริงๆ

ทดลองใช้งาน

ก่อนการเริ่มใช้งาน เนื่องจากในกล่องไม่มีเอกสารรายละเอียดต่างๆ เพราะเราได้มารีวิวก่อนเปิดตัว แต่ไม่ใช่ปัญหาอะไรครับ เราวัดไล่วงจรดูได้โดยใช้สายตาอันแหลมคม ก็จะพบว่าโมดูล ESP32 นั้นเชื่อมต่อกับโมดูล SIM7020E เพื่อรับส่งข้อมูลกันแบบ Serial โดยใช้ UART2 ของแต่ละบอร์ดในการคุยกัน ซึ่งใน SIM7020E นั้นตั้งค่ามาให้ใช้ Baudrate ที่ 9600 bps ในการสื่อสาร (ข้อควรระวัง หากจะเชื่อมต่อจาก MCU ตัวอื่นเข้าไปเพื่อใช้งาน SIM7020 แทน ESP32 คือแรงดันที่ใช้คือ 1.8V เกินก็สวัสดีครับ)

และเราสามารถเปิดใช้งาน SIM7020E ได้ทั้งผ่านการโปรแกรมเพื่อสั่งเปิดจาก ESP32 หรือทำการกดปุ่ม PWR_KEY บนบอร์ดก็ได้ โดยขา IO26 ของ ESP32 เชื่อมต่อกับขา PWRKEY ของ SIM7020E เพื่อใช้ส่งสัญญาณควบคุม เมื่อเราต้องการเปิดใช้งานตัว SIM7020E ก็เพียงดึงสัญญาณ PWRKEY ลงกราวด์เป็นระยะเวลา 800ms แล้วปล่อยคืนกลับไปที่ระดับ Vcc ตัว SIM7020E ก็จะเปิดขึ้นมาให้เราใช้งานได้

เราจะมาทดลองแบบง่ายๆแบบส่งผ่าน AT Command แบบ manual ไปยัง SIM7020E กันก่อนเพื่อทดสอบคำสั่งต่างๆ โดยไปเอาตัวอย่างจาก https://www.arduino.cc/en/Tutorial/SerialPassthrough มาแก้ไขค่าให้ตรงกับบอร์ดของเราดังโค้ดด้านล่างนี้ โดยเลือกอย่าลืมเลือกบอร์ดใน Arduino เป็น ESP32 Dev Module

จากนั้นเราทดลองเปิด Serial Monitor ขึ้นมาเพื่อทดสอบคำสั่ง AT Command บางส่วนกัน เพื่อทดลองการเชื่อมต่อเข้าไปยังเครือข่ายและดูค่าสถานะต่างๆ อย่าลืมกดปุ่ม PWR_KEY เพื่อเปิด SIM7020E กันด้วย

เรียบร้อยครับตอนนี้เราเชื่อมต่อเข้ากับเครือข่ายได้แล้ว แปลว่าแถวบ้านเราสัญญาณ NB-IoT ครอบคลุมมาถึงแล้วดังนั้นก่อนจะทดลองส่งค่าขึ้นไป เรามาลองหาทางอ่านค่าจากเซ็นเซอร์กันก่อนดีกว่า

ทดลองอ่านค่า Humidity และ Temperature

จากตอนแกะกล่องที่เราส่องดูแล้วว่าเซ็นเซอร์วัดค่า Humidity และ Temperature เป็นเซ็นเซอร์เบอร์ HDC1080 เราก็เปิด Arduino มาหา Library ที่เค้าทำแจกกันจาก Library manager กันก่อนเลยว่าเจอมั้ย เจอเราก็สบายไป

เรียบร้อยครับมีแล้ว เราไม่ต้องเขียนเอง เราติดตั้งแล้วเดี๋ยวทดลองกันเลยดีกว่า
เดี๋ยวทดลอง Compile Sketch แล้ว Upload ไปดูผลกันดีกว่า

จากรูปด้านบนเราก็จะสามารถอ่านค่าความชื้นสัมพัทธ์และอุณหภูมิขึ้นมาแสดงผลได้ด้วย Library ของ ชาวบ้านกันเรียบร้อยแล้วครับ เอาล่ะต่อไปคือการไปอ่านค่าแสงแถวๆนี้กันดูครับ โดยตอนที่เราไล่วงจรเราจะพบว่าเจ้าเซ็นเซอร์เบอร์ TEMT6000X01 นั้นต่อเข้ากับ ESP32 ที่ขา IO34 ซึ่งเป็นขา ADC นั่นเอง นั่นไงไล่ถูกจริงๆด้วย ไปเขียนโค้ดเลย

พอเรารู้ขาแล้วก็เอาแบบง่ายๆแบบนี้เลยเนื่องจากเจ้า TEMT6000X0 กราฟของแรงดันกับปริมาณแสงเป็นแบบเชิงเส้น เราก็ไม่ต้องทำอะไรแล้วค่าที่อ่านได้จะอยู่ในช่วง 0–4095 เพราะ ESP32 ให้ค่าความละเอียดที่ 12-bit ขั้นต่อไปก็คือการทดลองส่งค่าขึ้นไปยังเซิร์ฟเวอร์กันดู

ทดลองส่งค่าขึ้นไปยัง Server ผ่าน NB-IoT

เราจะมาทดลองส่งค่าจากเซ็นเซอร์ขึ้นไปยังเซิร์ฟเวอร์กันดู ซึ่งเจ้า SIM7020E ก็สนับสนุนหลาย protocol ซะเหลือเกินก็เลยจะขอทดลองส่งผ่าน protocol MQTT สุดฮิตกันดูเลยก็แล้วกันครับ เรื่องของเรื่องคือมันมี MQTT broker แบบ free ให้ทดลองได้เลยด้วย
โอเคเรามาเตรียมดูชุดคำสั่ง AT Command ของการส่งข้อมูลแบบ MQTT กันดูก่อนดีกว่า

โดยเราจะทดลองกับเซิร์ฟเวอร์ของ http://www.hivemq.com/ เพราะเค้ามีหน้าเว็บให้ใช้งานได้ด้วย ว่าแล้วก็ลองกันเลยครับ เราจะทดลองพิมพ์ AT Command เพื่อ Publish และ Subscribe ข้อมูลกันดูก่อนแล้วค่อยทำโค้ดกันต่อไปทีหลัง

ทดลอง Publish ข้อมูล

ทดลอง connect เข้าไปที่ Server ด้วยคำสั่ง

AT+CMQNEW=”broker.mqttdashboard.com”,”1883",12000,100

AT+CMQCON=0,3,”devioclient”,600,0,0

หลังจากได้ผลลัพธ์กลับมาเป็น OK เราก็ทดลอง Publish ข้อความว่า HELLO ไปโดยการส่งข้อความไปเราต้องแปลงจาก Char เป็น HexString ก่อนดังนี้

AT+CMQPUB=0,”devio”,1,0,0,10,”48454C4C4F”

ข้อความ HELLO ก็จะถูกส่งไปยัง Broker ที่ Topic “devio” และหน้าเว็บที่ทำการ Subscribe ไว้ที่topic เดียวกันก็จะแสดงข้อมูลออกมา

ทดลอง Subscribe ข้อมูล

การ Subscribe ข้อมูลสามารถทำได้ด้วยคำสั่ง

AT+CMQSUB=0,”devio/downlink”,1

เมื่อมีข้อความจาก topic ชื่อ “devio/downlink”ที่ subscribe ไว้เข้ามาจะมีข้อความจาก serial ส่งออกมา เริ่มต้นด้วย +CMQPUB:

+CMQPUB: 0,”devio/downlink”,1,0,0,2,”31"

+CMQPUB: 0,”devio/downlink”,1,0,0,2,”30"

มาถึงตอนนี้เราก็เข้าใจกลไกการรับส่งข้อมูลแบบ MQTT ผ่านบอร์ด AIS DEVIO NB-DEVKIT I กันแบบครบถ้วนแล้ว

ในบทความหน้าเราจะมาทดลองเขียนโปรแกรมที่ทำการอ่านค่าจากเซ็นเซอร์และส่งขึ้นไปยัง MQTT broker และสามารถรับคำสั่งกลับมาควบคุมหลอด LED บนบอร์ดได้ อดใจรอกันหน่อยนะครับ

--

--