การใช้งาน UNO WiFi R3 ATmega328P ESP8266 เบื้องต้น
ในบอร์ดจะมี MCU อยู่ 2 ตัว คือ ATmega328P กับ ESP8266 โดย บอร์ดนี้สามารถใช้ได้ 3 รูปแบบด้วยกัน คือ
- ใช้เป็น Arduino UNO ธรรมดา
- ใช้เป็น ESP8266
- ให้ ATmega328P กับ ESP8266 ทำงานร่วมกัน
บอร์ดนี้มีโหมดการทำงานทั้งหมด 4 โหมดด้วยกัน การกำหนดโหมดทำโดยการเซ็ตที่ Dip Switch ที่อยู่บริเวณกลางบอร์ด โดยมีรูปแบบดังนี้
รายการอุปกรณ์
ขั้นตอนการทํางาน
1. ติดตั้งโปรแกรม Arduino IDE
สำหรับการเขียนโปรแกรมของ Arduino IDE นั้นจะใช้ภาษา C/C++ ซึ่งเป็นรูปแบบภาษาซีประยุกต์แบบหนึ่ง ที่มีโครงสร้างการทำงานของตัวภาษาโดยรวม คล้ายกับ ภาษาซีมาตรฐาน (ANSI-C) ทั่วๆไป เพียงแต่ได้มีการปรับปรุงเพื่อลดความยุ่งยากในการใช้งานลง เพื่อให้ผู้ใช้สามารถใช้งาน เขียนโปรแกรมได้ง่าย และสะดวกมากกว่าเขียนภาษาซี แบบมาตรฐาน
Arduino integrated development environment หรือเรียกสั้นๆว่า โปรแกรม Arduino IDE เป็นโปรแกรมที่ “แจกฟรี” ภายใต้เงื่อนไขในการใช้งานลักษณะ Open source ซึ่ง Arduino IDE จะทำหน้าที่ ติดต่อ ระหว่าง คอมพิวเตอร์ ของเรา (Windows, Mac OS X และ Linux) กับ บอร์ด Arduino ซึ่งโปรแกรมนี้ออกแบบให้ง่ายต่อการเขียนโค้ดและอัปโหลดโค้ดที่เราเขียน เข้าสู่ บอร์ด UNO+WiFi R3
โดย Download ตัวติดตั้งได้จาก
https://www.arduino.cc/en/Main/Software
เลือก Windows Installer, for Windows 7 and up
คลิกเลือก JUST DOWNLOAD (หากต้องการร่วมบริจาคช่วยการพัฒนา Arduino Software สามารถกด CONTRIBUTE & DOWNLOAD)
เมื่อดาวน์โหลดเสร็จแล้ว ให้ติดตั้งตามที่โปรแกรมแนะนำ
2. เพิ่มบอร์ด ESP8266 ให้ Arduino IDE
เราจะต้องอัปเดตผู้จัดการบอร์ดด้วย URL ที่กำหนดเอง โดยเปิดโปรแกรม Arduino IDE และไปที่ File -> Preferences
คัดลอก URL ด้านล่างลงใน Additional Board Manager URLs: แล้ว คลิก OK
http://arduino.esp8266.com/stable/package_esp8266com_index.json
จากนั้นไปที่ตัวจัดการบอร์ดโดยไปที่ Tools -> Board: -> Boards Manager…
ที่ช่องค้นหา พิมพ์ esp8266 จะพบ esp8266 by ESP8266 Community แล้วคลิก Install
INSTALLED แสดงการติดตั้งสำเร็จ แล้วปิดหน้าต่างลงไป
3. ตรวจสอบ Port ของบอร์ด UNO WiFi R3
เชื่อมต่อสาย USB จาก คอมพิวเตอร์ ไปที่บอร์ด UNO WiFi R3
ที่ Device Manager ไปที่ Ports (COM & LPT) จะพบ USB-SERIAL CH340 ในตัวอย่างเป็น (COM8) แสดงว่าคอมพิวเตอร์ของเราสามารถ ติดต่อสื่อสารกับ บอร์ด UNO WiFi R3 ได้แล้ว
ถ้าไม่พบให้ทำการติดตั้ง Driver
http://www.mediafire.com/download/c9pyi2u7g93iqt6/CH341SER.ZIP
4. ทำงานร่วมกันระหว่าง Arduino UNO กับ ESP8266
ก่อนอื่นต้องทำความเข้าใจว่า ในบอร์ดนี้ เป็นบอร์ดผสม โดยมีไมโครคอนโทรลเลอร์ 2 ตัวอยู่ในบอร์ดเดียวกัน คือ Arduino UNO (ATmega328P) ต้นแบบจากประเทศอิตาลี และ ESP8266 ต้นแบบจากประเทศจีน
โดย Arduino UNO มีขา อินพุต/เอาต์พุต จำนวนมากพอสมควรแต่ใช้ WiFi ไม่ได้ แต่ ESP8266 ใช้ WiFi ได้ แต่มีขา อินพุต/เอาต์พุต น้อย ซึ่งอาจจะไม่เพียงพอในการใช้งานบางโปรเจค
ดังนั้นเพื่อให้เกิดประโยชน์สูงสุดในการใช้งานบอร์ดนี้ เราจะเรียนรู้ การทำงานร่วมกันระหว่าง Arduino UNO กับ ESP8266 โดย จะสื่อสารกันผ่านพอร์ตอนุกรมแบบ UART โดยมีการเชื่อมต่อดังนี้
- Arduino UNO Tx <-> ESP8266 Rx
- Arduino UNO Rx <-> ESP8266 Tx
โดยบอร์ดนี้จะทำการเชื่อมต่อโดยอัตโนมัติ เมื่อเราเซ็ท Dip Switch 1 และ 2 เป็น On และถ้าจะให้ทั้ง 2 ทำงานร่วมกัน ต้องโหลดโปรแกรมให้กับแต่ละ ไมโครคอนโทรลเลอร์
UART หรือชื่อเต็ม Universal Asynchronous Receiver and Transmitter เป็นการสื่อสารข้อมูลผ่านพอร์ตอนุกรมแบบอะซิงโครนัส (asynchronous serial communication) ระหว่างอุปกรณ์ต่าง ๆ ซึ่งนิยมใช้เป็นการสื่อสารระหว่างไมโครคอนโทรลเลอร์ด้วยกัน การทำงานแบบอะซิงโครนัสหมายความว่าจะไม่มีสัญญาณนาฬิกา (clock signal) ส่งออกมาจากตัวส่งหรือตัวรับเพื่อกำหนดจังหวะการรับส่งข้อมูล แต่จะกำหนดผ่านโดยการตั้งความเร็วในการรับส่งข้อมูลของอุปกรณ์ดังกล่าวแทน
4.1 อัพโหลดโค้ด Arduino UNO
การอัพโหลดโค้ดให้กับ Arduino UNO ให้เซ็ท Dip Switch โดยให้ตัวที่ 3 และ 4 เป็น On ที่เหลือเป็น Off หมด
เปิดโปรแกรม Arduino IDE เขียนโปรแกรม และ อัพโหลด ตามโค้ดด้านล่างนี้
void setup() {
pinMode(13, OUTPUT);
Serial.begin(115200);
}
void loop() {
while (Serial.available()) {
char inChar = (char)Serial.read();
if (inChar == 'a') {
digitalWrite(13, HIGH);
}
else if (inChar == 'b') {
digitalWrite(13, LOW);
}
}
}
อธิบายโค้ด
- ที่ฟังก์ชั่น setup() ใช้คำสั่ง Serial.begin(115200) เพื่อเป็นการตั้งความเร็วในการรับส่งข้อมูลระหว่าง UNO กับ ESP8266
- ที่ฟังก์ชั่น loop() จะคอยอ่านข้อมูลที่ส่งมาจากการสื่อสารผ่านพอร์ตอนุกรมแบบ UART โดยถ้าข้อมูลเป็น a ก็จะสั่งให้ LED ที่อยู่บนบอร์ด “ติด” ถ้าข้อมูลเป็น b ก็จะสั่งให้ LED ที่อยู่บนบอร์ด “ดับ” และโปรแกรมนี้ก็จะรอรับการสั่งงานจาก ESP8266 ไปเรื่อยๆ
การอัพโหลดโค้ด
ไปที่ Tools -> Board -> Arduino AVR Boards -> เลือกบอร์ดเป็น Arduino UNO
เลือก Port โดยไปที่ Tools -> Port -> COM8
(โดย COM8 แต่ละเครื่องจะไม่เหมือนกัน ให้เลือกตามที่ปรากฎ)
คลิกที่ Upload
รอจนกระทั่งขึ้น Done uploading. ที่แถบด้านล่าง แสดงว่าเราอัพโหลดโปรแกรมลงบอร์ดได้สำเร็จแล้ว
4.2 อัพโหลดโค้ด ESP8266
การอัพโหลดโค้ดให้กับ ESP8266 ต้องเซ็ท Dip Switch โดยให้ตัวที่ 5 กับ 6 และ 7 เป็น On ที่เหลือเป็น Off หมด
เขียนโปรแกรม และ อัพโหลด ตามโค้ดด้านล่างนี้
void setup() {
Serial.begin(115200);
}
void loop() {
Serial.print("a");
delay(1000);
Serial.print("b");
delay(1000);
}
อธิบายโค้ด
- ที่ฟังก์ชั่น setup() ใช้คำสั่ง Serial.begin(115200) เพื่อเป็นการตั้งความเร็วในการรับส่งข้อมูลระหว่าง UNO กับ ESP8266
- ที่ฟังก์ชั่น loop() ใช้คำสั่ง Serial.print(“a”) เพื่อส่งค่าเป็นตัวอักษร a ออกมา และ คำสั่ง delay(1000) คือรอ 1 วินาที แล้วจึงส่งค่าเป็นตัวอักษร b ออกมา ด้วยคำสั่ง Serial.print(“b”) และรอ 1 วินาที วนลูปไปเรื่อยๆ
การอัพโหลดโค้ด
ไปที่ Tools -> Board -> ESP8266 Boards -> เลือกบอร์ดเป็น Generic ESP8266 Module
เลือก Port โดยไปที่ Tools -> Port -> COM8
(โดย COM8 แต่ละเครื่องจะไม่เหมือนกัน ให้เลือกตามที่ปรากฎ)
คลิกที่ Upload
ในระหว่าง Upload ในขณะที่ขึ้นข้อความว่า Connecting ………
ให้กดปุ่ม MCU RESET ค้างไว้ระยะนึง แล้วปล่อย
รอจนกระทั่งขึ้น Done uploading. ที่แถบด้านล่าง แสดงว่าเราอัพโหลดโปรแกรมลงบอร์ดได้สำเร็จแล้ว
4.3 ทดสอบการทำงาน ระหว่าง Arduino UNO กับ ESP8266
ให้เซ็ท Dip Switch 1 และ 2 ให้เป็น On เพื่อเชื่อมระหว่าง UNO กับ ESP8266 ที่เหลือให้ Off หมด และให้กดปุ่ม MCU RESET 1 ครั้ง
ถ้าพบว่า LED สีฟ้า บนบอร์ด กระพริบ ติด-ดับ แสดงว่า ESP8266 กับ Arduino UNO สามารถสื่อสารและทำงานร่วมกันได้แล้ว