ทดสอบใช้งานบอรด์ IoT 'Espino32' กับ IoTtweet

 Isaranu,  11.9.2017 , 

อาทิตย์ก่อน ได้รับข้อความจากพี่โอ๊ตแห่ง ThaiEasyElec ว่าช่วงนี้พอจะมีเวลาบ้างหรือเปล่า จะให้ลองใช้งานบอร์ด IoT (Internet of Things) ตัว ใหม่หน่อย เพราะว่าบอร์ดนี้ใช้ชิปตระกูล ESP32 ซึ่งเป็นชิพ WiFi module ตัวล่าสุดจากผู้พัฒนา Espressif.

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

มาเข้าเรื่องเลยดีกว่าครับ, หลังจากที่ได้คุยกันเป็นที่เรียบร้อย บอร์ดก็มาถึงมือผมอย่างรวดเร็ว (บอกแล้วว่าส่งเร็วจริง) เปิดออกมาก็เป็นชุดบอร์ด ที่ยังไม่ได้ใส่ Header มาให้นะครับ จัดการบัดกรีเรียบร้อยด้วยเวลาไม่นาน.





นอกจากนี้แล้ว, ยังมีสติกเกอร์ pinout มาให้ด้วย คือจริงๆแล้วใต้บอร์ดน่ะ ก็มี print อยู่แล้วนะ แต่เวลาใช้งานจริงๆ เราจะไม่รู้เลยว่าขาไหนเป็นขา ไหน พอมีสติกเกอร์มาให้ ก็สบายเลยครับ จัดการแปะเข้าไปที่ด้านข้างของ Header เป็นอันเรียบร้อย.





ทำความรู้จัก Espino32

ก่อนจะรัน code, เรามาสำรวจ บอร์ดกันหน่อย ว่าใช้มีคุณสมบัติอะไรบ้าง ตัว Controller เป็น References module ESP-WROOM-32 ด้านในจะ เป็นชิป ESP32 จาก Espressif.


ESP32 เป็น WiFi chip รันที่ 2.4 GHz และมี Bluetooth module 4.2 มาให้ใช้งานด้วย (ESP8266 ไม่มีนะจ๊ะ) ความต่างระหว่าง ESP8266 กับ ESP32 หลักๆเลยก็คือ ESP8266 เป็น Single-core processor, ESP32 เป็นแบบ Dual-core. GPIO ของ ESP8266 อยู่ที่ 17 port, ส่วน ESP อยู่ที่ 32 port. ความละเอียด ADC(Analog Digital Conversion) สำหรับ ESP8266 อยู่ที่ 10 bit, ในขณะที่ ESP32 อยูที่ 12 bit

นอกจากนี้ ยังมีส่วนที่ ESP8266 ไม่มี แต่มีเพิ่มเข้ามาใน ESP32 ก็คือ DAC(Digital to Analog converter), Touch sensor และ Temperature sensor (จริงๆมีมากกว่านี้ แต่ถ้าจะเขียนให้หมด คงไม่ต้องทดสอบพอดี 555, ที่น่าสนใจและจะเอามาเขียนบทความถัดๆไปคือ การเพิ่มเข้ามาของ DAC และ Touch sensor ครับ)

เอาล่ะ ร่ายมาซะยาวเลย, เพิ่งเห็นว่ายังไม่ได้บอกชื่อบอร์ดเลย 55. บอร์ดนี้ชื่อว่า "Espino32" ครับ ใครเคยใช้ Espino รุ่นแรกก็จะทราบดีว่า คุณภาพดีมาก และรุ่นนี้ก็เช่นกันครับ

ก่อนจะไปเริ่มรัน code, เราต้องเพิ่มรายชื่อบอรด์ Espino32 เข้าไปใน Arduino IDE กันก่อน โดยที่เราจะต้องติดตั้ง arduino-esp32 library ซึ่งวิธี การติดตั้ง ให้เข้าไปอ่านใน github:arduino-esp32 เลยจ้า จะอยู่ล่างๆหน่อย มีทั้ง Window และ MacOS หลังจากเพิ่มเสร็จแล้ว ก็ restart Arduino IDE ใหม่ แล้วก็ไปที่ Tool > Board แล้วก็หารายชื่อ "ThaiEasyElec's Espino32" ถ้าเจอ เป็นอันเสร็จเรียบร้อย






ไฟกระพริบ

ต่อไปจะเริ่มจาก code ที่ maker ทุกท่านจะต้องลองกันก่อนเลยคือ "ไฟกระพริบ" เรียกว่า ต้องลองกระพริบไฟกันก่อน แล้วค่อยหย่อนลงโหลดอง ได้ 555

ขั้นตอนง่ายๆครับ เปิด Arduino IDE ขึ้นมา เสียบสาย usb, เลือกอุปกรณ์ "ThaiEasyElec's Espino32". จากนั้นก็ไปที่ Examples > Basics > Blink เลยครับ Built-in LED จะต่ออยู่ที่ขา GPIO16 นะครับ จากนั้นก็ upload code แล้วกระพริบไฟกันเลย.




Espino กับจอ OLED

กระพริบได้ละ หยอดลงโหลได้ .. 555
เอามาเล่นกันต่อดีกว่า ต่อไปจะเป็นการนำมาเชื่อมต่อกับ sheild อื่นๆดูบ้าง ผมจะลองเอามาต่อกับจอ OLED SSD1306 โดยจะใช้ library Adafruit_SSD1306.h ครับ ใครที่ยังไม่ได้ install Adafruit_SSD1306.h ก็เข้าไปที่ Library Manager ค้นหาชื่อ แล้วก็ติดตั้งกันได้เลยจ้า อ้อ..แล้วก็ติดตั้ง Adafruit_GFX.h ด้วยครับ


ขั้นตอนต่อไปก็ต่อสายจาก OLED กับ Espino32 ตามนี้จ้า
OLED | Espino32
Vcc - 3.3v
Gnd - Gnd
SCL - 22/SCL
SDA - 21/SDA

ซึ่ง code ทั้งหมดในบทความนี้ ผมเตรียมไว้ให้แล้วที่ github:Isaranu/IoTtweet-Espino32 เข้าไปแล้วสิ่งที่ต้องทำอย่างแรกเลยคือ กด Star ให้ ผมด้วยนะ 555. Code สำหรับ OLED นี้ ให้ใช้ไฟล์ที่ชื่อว่า simple_oled_ssd1306.ino นะครับ โหลดจาก github มาเสร็จ ก็ upload ลง Espino32 ได้เลย


นอกจากนี้แล้ว code ทั้งหมดในบทความนี้ ผมเตรียมไว้ใน Examples ของ Library ของ IoTtweetESP32 ด้วยครับ ถ้าเข้าไป install ใน libraries manager ก็จะมี code ตัวอย่างให้ใช้งานได้ทันที ให้ใช้เวอร์ชั่น v0.1.5 นะครับ



มาเล่นกับ RGB LED ring

ตัวอย่างถัดไป, จะลองเล่นกับ Neopixel RGB LED ring ขนาด 16 ดวง ซึ่ง gadgets ชิ้นนี้ได้มาจากตอนที่ไปเปิดบูธงาน Chiang Mai Maker Party 2016 ครับ จำราคาไม่ได้แล้ว เราจะเอามาต่อตามนี้จ้า
RGB LED Ring | Espino32
Vcc - Vcc
Gnd - Gnd
DI - 9/SD2

ก่อนที่จะเริ่ม upload code, ตัวนี้ต้อง install library เพิ่มอีก 1 ตัวคือ Adafruit_NeoPixel.hŽ ตัวอย่างนี้ให้ใช้ code ชื่อ led_ring_neopixel.ino ครับ ในตัวอย่างจะทำเป็นสีแบบ random 0 ถึง 255 ในตำแหน่ง RGB แล้วก็ให้แสดงสีออกมาแต่ะดวงครับ




อ่านอุณหภูมิ ความชื้นกันหน่อย

เมื่อมาถึงตรงนี้แล้ว ต้องไม่พลาดกับการอ่านค่าอุณหภูมิและความชื้นจากเซนเซอร์ DHT ซึ่งในบทความนี้ผมจะใช้ DHT22 ที่มีความแม่นยำใน การอ่านสูง (คือสูงกว่า DHT11 ตัวสีฟ้า) สำหรับการต่อสายระหว่าง DHT22 กับ Espino32 ก็มีดังนี้จ้า
DHT22 | Espino32
Vcc - Vcc
Gnd - Gnd
Data - 10/SD3



ตัวอย่าง code ที่ใช้อ่านค่าจากเซนเซอร์ DHT นี้ชื่อ Žsimple_logging_dht.ino นะครับ สามารถนำไป upload ลงใน Espino32 ได้เลยจ้า หลังจาก upload เสร็จเรียบร้อย ก็จะเห็นค่าอุณหภูมิกับความชื้นขึ้นที่ Serial monitor ครับ





ส่งค่าขึ้น Cloud "IoTtweet"

ถัดไปก็จะเป็นการนำข้อมูลต่างๆ ส่งขึ้นระบบ cloud กันซักที ในบทความนี้จะใช้บริการของ "IoTtweet" - Internet of Things platform ที่มี ฟีเจอร์เด่นๆเรื่องการออกแบบหน้าจอได้ ไม่ว่าจะเป็นการเลือกใช้ widgets ต่างๆ, การวาง Layout ตำแหน่งของ widgets แต่ละตัว, การปรับสี, การตั้งชื่อ และทั้งหมดนี้ก็มาในรูปแบบการใช้งานแบบ "Drag & Drop" ที่แรกของไทยครับ (เว็บนี้เป็นของคนไทยจ้า)




เรามาเริ่มจากการทดสอบส่งค่าขึ้น IoTtweet กันก่อนเลยแล้วกันครับ ก่อนอื่นต้องเข้าไปสมัครใช้งาน IoTtweet กันก่อน เข้าไปที่ IoTtweet แล้วก็ Signup ได้เลย

หลังจาก Signup และ activate เสร็จเรียบร้อยแล้ว ก็เข้าไปที่ Dashboard ซึ่งจะเห็นเป็นหน้าว่างๆนะครับ ต้องทำการเพิ่ม device กันก่อน ให้กด ที่ปุ่ม My IoT garage. จากนั้นก็เพิ่มอุปกรณ์โดยกรอกรายละเอียดตามช่องด้านล่างครับ แล้วก็กด add เราก็จะได้ Key อุปกรณ์มาครับ Key นี้เราจะเอาไว้ใช้ใน code บน Arduino IDE นะครับ



กลับมาที่หน้า Dashboard อีกครั้ง, ต่อไปเราจะสร้างหน้า Dashboard ขึ้นมา โดยจะเพิ่ม widgets แต่ละตัวเข้าไป ให้กดที่ Edit layout. จากนั้นก็ เลือกที่ Create chart, แล้วก็ลากวางได้ตามใจชอบ ถัดไปก็ทำการ setting ค่า config ต่างๆของ chart กัน

สำหรับ slot data ที่มีให้ใช้, จะมีให้ 4 slot ในตัวอย่างนี้ ผมจะใช้ทั้ง 4 slot เลยนะครับ

เสร็จเรียบร้อยก็กด Save layout แล้วเราก็กลับไปที่ Arduino IDE กันอีกรอบ, ให้เปิด code ตัวอย่างใน github ที่ชื่อ send_data_to_dashboard.ino. ใน code ให้แก้ไข paramter ตามนี้ครับ

userid : ให้ใส่เลข id ของ account IoTtweet ลงไป จะเป็นเลข 6 หลัก สังเกตได้จากหน้าเว็บด้านขวา เมื่อ Login

key : ให้เอา key จากใน My IoT garage มาใส่ลงในนี้

ssid : ชื่อ WiFi ที่เราจะเชื่อมต่อ

password : password ของ WiFi ที่เราจะเชื่อมต่อ


ในตัวอย่างนี้ ผมทำการ random เลขขึ้นมาชุดหนึ่ง แล้วส่งไปยัง dashboard ก่อนที่เราจะเริ่มใช้งานจริงในการส่งค่าจากเซนเซอร์ครับ เมื่อแก้ไข code เสร็จแล้ว ก็กด upload ได้เลย จากนั้นก็รอดูผลที่หน้า dashboard ครับ



ประยุกต์ใช้งานร่วมกัน

ที่นี้ เรามาประยุกต์ใช้งาน DHT, OLED และ IoTtweet กัน ก็เปรียบเสมือนการทำ Smart farm ในบ้านแบบย่อมๆ เป็นการวัดค่าความชื้นและ อุณหภูมิของพืชผักที่เราปลูกไว้ พร้อมทั้งสามารถแสดงผลผ่านหน้าจอ OLED ได้ด้วย

จาก code ใน github, ให้เปิดไฟล์ที่ชื่อว่า dht_oled_IoTtweet.ino แก้ค่า parameter ต่างๆให้เรียบร้อย แล้วก็ upload



ถัดไป, ไปที่ dashboard ทำการแก้ไขค่า config บางส่วนให้สอดคล้องกับค่าที่ส่งมาครับ จัดเรียง widget ใหม่ให้สวยงาม เท่านี้ก็เรียบร้อย :)







สำหรับการควบคุม Espino32 ผ่านทางหน้าจอ Dashboard เช่นการเปิดปิดไฟ ผมจะมาเล่าให้ฟังในบทความถัดไปนะครับ และสัญญาว่าจะมา พร้อมกับการประยุกต์ใช้งานอย่างอื่นที่น่าสนใจอีกด้วยครับ
Code ทั้งหมดในบทความนี้ สามารถดาวน์โหลดได้จาก   github: IoTtweetESP32

* ขอบคุณพี่โอ๊ต ThaiEasyElec สำหรับเอื้อเฟื้ออุปกรณ์ในการทดสอบครั้งนี้ครับ *
ท่านใดสนใจบอร์ด Espino32 ตัวนี้ ก็สามารถเข้าไปชอปปิ้งกันได้ที่ ThaiEasyElec ตามลิงก์นี้ได้เลยจ้า

ซื้อ Espino32 จาก ThaiEasyElec มีโปรโมชั่นลูกค้าที่ซื้อผ่าน LINE @thaieasyelec ตั้งแต่วันนี้ ถึง วันศุกร์ที่ 15 นี้ ราคารวม VAT แล้ว และส่งฟรีครับ

Isaranu.