Iot หรือ Internet of Thing คือแนวคิดในการเชื่อมโยงอุปกรณ์ทุกสิ่งให้สื่อสารกันได้ผ่านระบบอินเตอร์เน็ต ในบทเรียนนี้จะมาเริ่มต้นกัน
บทเรียนนี้จะเป็นการเพิ่ม Section ใหม่ของ Daydev นั่นคือ IoT หรือ Internet of Things ซึ่งเราสามารถจะไปศึกษา บริบทหรือทฤษฎีของเจ้า IoT มากมายในเว็บไซต์หรือ Google ดังนั้นในส่วนของทฤษฏีจะละไว้ ไปหาศึกษากันเอง สำหรับ Daydev แล้วเราจะเป็นการเริ่มทำ Labs กันเลย
บอร์ด Arduino หรือไมโครคอนโทรลเลอร์ตระกูล AVR เป็นรูปแบบ Open Source ของ Hardware และ Software ใช้พื้นฐานของภาษา C ในการเขียนคำสั่ง ซึ่งเป็นหัวใจหลักของการทำ Labs IoT มีหลากหลายชนิด สามารถศึกษาได้ใน https://www.facebook.com/groups/arduino.thai/
เตรียมความพร้อมของอุปกรณ์
ESP8266
สำหรับ บอร์ดที่จะใช้ในการศึกษาของ Daydev จะเป็น ESP8266 เพราะมี firmware ของ Serial to WiFi โดยการวาง Roadmap ของบทเรียนนั้นคือการ เชื่อมต่อกับ แอพพลิเคชันที่พัฒนาขึ้นด้วย Android Studio ให้ได้
NodeMCU
เป็นแพลตฟอร์มของการพัฒนา IoT เบื้องต้นที่มีทั้ง Framework และ ตัวชุดอัพเด็ต Firmware ที่เป็น Opensource ที่สามารถทำงานร่วมกับ WiFi ในตอนนี้เราจะใช้ Ver 3 มาเป็นชุดพัฒนา
โปรแกรม Arduino IDE
เป็นชุดพัฒนา IDE สำหรับเขียน ภาษา C/C++ ลงบน บอร์ด แลพ Flash ผ่าน USB ได้โดยตรง การติดตั้ง Arduino IDE สามารถทำได้โดย ดาวน์โหลดโปรแกรมติดตั้งที่
http://www.arduino.cc/en/main/software
เมื่อเข้าไปที่หน้าเว็บไซต์ให้เลือกระบบปฏิบัติการที่ต้องการติดตั้ง
ขั้นตอนต่อมาคือติดตั้ง USB Driver ของ NodeMCU Version (CH340-341), โดยสามารถเข้าไปดาวน์โหลด Driver ได้ที่ https://github.com/nodemcu/nodemcu-devkit/tree/master/Drivers แล้วเลือก Windows หรือ Linux สำหรับ Mac OS X นั้นจำเป็นต้องลง Driver ที่ถูก Signed Verified ของ Mac มาแล้ว แนะนำให้ลองดาวน์โหลดที่: http://blog.sengotta.net/wp-content/uploads/2015/11/CH34x_Install_V1.3.zip
การตั้งค่า Environment เบื้องต้นของ Arduino IDE
เมื่อทำการติดตั้ง Driver เป็นที่เรียบร้อยแล้วเราจำเป็นต้องตั้งค่าบอร์ดเป็น NodeMCU ให้เราไปที่ File->Preference
เพิ่ม http://arduino.esp8266.com/stable/package_esp8266con_index.json ในช่องชอง Additional Boards Manager URLs แล้วกด OK
หลังจากนั้นไปที่เมนู Tools ไปที่ Board: “XXXX” หาเมนู Board Manager…
ค้นหา esp8266 ในช่องค้นหา ทำการติดตั้ง Install
เมื่อติดตั้งเป็นที่เรียบร้อยเราจะมี Board ให้เลือก จากเมนู Tools เราจะมีตัวเลือกใหม่คือ “NodeMCU 1.0(ESP-12E Module)” เลือก
แล้วลองกด Tools-> Get Board Info ว่าพร้อมหรือไม่ หากพบดังตัวอย่างแปลว่าพร้อมแล้วในการทำงาน
การเลือก PORT
สำหรับ Windows ไปที่เมนู Tools->Port:”COM5″ สำหรับ Mac ต้องเลือก USBDriverPort ที่ลงจาก Preference Driver
โครงสร้างภาษา C สำหรับ Arduino
หากเราเริ่มต้นทำงานสำหรับ Arduino แล้วเราจะพบโครงสร้างเบื้องต้นดังนี้:
เมธอด setup() มีหน้าที่คือการตั้งค่า Initialize ตัวแปร หรือค่าต่างๆในครั้งแรกครั้งเดียวเมื่อเริ่มทำงาน ส่วน เมธอด loop() เป็นเมธอด หรือฟังก์ชันหลักที่จะทำงานไปไม่รู้จบ เราจะมาเขียนประมวลผลในส่วนนี้
ส่วนของ Board NodeMCU Version 3
บอดร์ดจะถูกแบ่งออกเป็น สองฝั่งคือฝั่งของ Analog (A) ด้านซ้าย และ Digital (D) ด้านขวา โดยโครงสร้างของ NodeMCU นั้นจะมี การเทียบขา GPIO แบบเดิมกับ สัญญาณ D ดังนี้
- D0 = GPIO16
- D1 = GPIO5
- D2 = GPIO4
- D3 = GPIO0
- D4 = GPIO2
- D5 = GPIO14
- D6 = GPIO12
- D7 = GPIO13
- D8 = GPIO15
- D9 = GPIO3
- D10 = GPIO10
ตัวอย่างแรกของการเขียนโปรแกรมภาษา C ควบคุม NodeMCU
สำหรับนักพัฒนาโปรแกรมคำสั่ง Hello World คือคำสั่งแรกในการทดสอบการทำงาน แต่สำหรับ IoT นั้นคำสั่งแรกคือการบังคับให้ไฟกระพริบ ดังนั้นอุปกรณ์ที่เราต้องใช้คือ LED 1 ตัว สายไฟ ผู้เมีย 2 สาย
หลักของไฟฟ้าเบื้องต้น LEDs จะมีขาอยู่ 2 ขาให้สังเกตขาที่สั้นกว่า ขาที่สั้น (ขั้ว -) นั้นจำเป็นที่จะต้องต่อกับ Ground
ดังนั้นให้สังเกต ตัวย่อบนบอร์ดที่เขียนว่า GND ที่ย่อมาจาก Gound
ส่วนขาขั้ว + จะมีขาที่ยาวกว่า ให้เชื่อมไปที่ช่อง D2 หรือ GPIO4
ทำการเขียนโปรแกรมภาษา C ดังนี้:
void setup() { pinMode(D2,OUTPUT); } void loop() { digitalWrite(D2,1); delay(1000); digitalWrite(D2,0); delay(1000); }
วิธีการ UPLOAD ตัวภาษา C ไปยังบอร์ดให้ทำการ Verifiy Code
ก่อนหลังจากนั้น Upload
จะเห็นผลลัพธ์ว่า ไฟจะกระพริบ 1 วินาที (1000 มิลลิวินาที) แล้ว ดับ 1 วินาที
ถ้าเราต้องการ Interact กับ สถานะของการเปิดปิดไฟ เบื้องต้น เราสามารถทำได้โดยการเพิ่ม ปุ่มสำหรับควบคุมลงไป
จำไว้ว่าการต่อโครงสร้างของปุ่มเป็นดังนี้:
สาย ที่ขาฝั่งซ้ายด้านล่าง สีม่วง ต่อไปยัง GND ของ D
สายที่ขาฝั่งขวาด้านบน สีน้ำตาล ต่อไปยัง D4
แก้ไขคำสั่งดังนี้:
boolean state = 0; boolean passed_state; boolean button; void setup() { pinMode(D2,OUTPUT); pinMode(D4,INPUT_PULLUP); } void loop() { button = digitalRead(D4); if(button == 0 and passed_state ==1){ delay(10); if(digitalRead(D4) == 0){ state = !state; digitalWrite(D2,state); } } passed_state = button; }
ให้ state ของการเปิดไฟเป็น 0 ครั้งแรกเก็บลงตัวแปร state หลังจากนั้นตั้งตัวแปร passed_state ขึ้นมา เก็บค่าสถานะของหลอด LEDs ก่อนหน้า ติดคือ 1 ไม่ติดคือ 0
ตั้งตัวแปร button มารับค่าที่รับจากปุ่มผ่าน digitalRead โดยเชื่อมต่อปุ่มไปที่ D0 เพื่อรับค่าจาก D4 หลังจากนั้นทำการตรวจสอบค่า ถ้ามีการกดปุ่ม ค่าที่อ่านได้คือ 0 โดยค่าก่อนหน้าต้องเป็น 1 ทำการหน่วงเวลา delay(10) หรือ 10 มิลลิวินาที เพื่อกันการกดปุ่มซ้ำระหว่างที่ทดสอบ เพื่อจะได้ไม่คลาดเคลื่อนหลังจากนั้นทำการตรวจสอบ อ่านค่าข้อมูลจาก D2 ถ้าพบว่าค่ายังเท่ากับ 0 แสดงว่ามีการกดปุ่มจริง บังคับให้ไฟติด
ตัวอย่าง:
บทเรียนแรกนี้ก็จะเป็นบทเริ่มต้นให้เราได้ทำการ พัฒนา IoT ให้สามารถใช้ได้จริง และพาเรารู้หลักการเขียนโปรแกรมภาษา C เบื้องต้น สำหรับผู้ที่สนใจ
One Comment