ผลต่างระหว่างรุ่นของ "การพัฒนาเฟิร์มแวร์ด้วย Arduino IDE"
Chaiporn (คุย | มีส่วนร่วม) |
Chaiporn (คุย | มีส่วนร่วม) |
||
(ไม่แสดง 25 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน) | |||
แถว 3: | แถว 3: | ||
แพลทฟอร์ม [https://en.wikipedia.org/wiki/Arduino Arduino] ประกอบไปด้วยฮาร์ดแวร์ไมโครคอนโทรลเลอร์แบบเปิดและซอฟต์แวร์ IDE เพื่อสนับสนุนการพัฒนาเฟิร์มแวร์ เนื่องด้วยความง่ายในการนำมาต่อเชื่อมกับอุปกรณ์อื่น ๆ บวกกับความสะดวกในการพัฒนาเฟิร์มแวร์ผ่าน Arduino IDE และไลบรารีมาตรฐาน ทำให้มีผู้นิยมใช้งานกันอย่างแพร่หลายทั่วโลก เกิดเป็นชุมชนผู้พัฒนาขนาดใหญ่ที่ร่วมกันสร้างสรรค์ไลบรารีเสริมและโปรเจ็คอีกมากมายนับไม่ถ้วน | แพลทฟอร์ม [https://en.wikipedia.org/wiki/Arduino Arduino] ประกอบไปด้วยฮาร์ดแวร์ไมโครคอนโทรลเลอร์แบบเปิดและซอฟต์แวร์ IDE เพื่อสนับสนุนการพัฒนาเฟิร์มแวร์ เนื่องด้วยความง่ายในการนำมาต่อเชื่อมกับอุปกรณ์อื่น ๆ บวกกับความสะดวกในการพัฒนาเฟิร์มแวร์ผ่าน Arduino IDE และไลบรารีมาตรฐาน ทำให้มีผู้นิยมใช้งานกันอย่างแพร่หลายทั่วโลก เกิดเป็นชุมชนผู้พัฒนาขนาดใหญ่ที่ร่วมกันสร้างสรรค์ไลบรารีเสริมและโปรเจ็คอีกมากมายนับไม่ถ้วน | ||
− | เนื่องด้วยฮาร์ดแวร์ Arduino ใช้ชิปไมโครคอนโทรลเลอร์เบอร์ Atmega328 | + | เนื่องด้วยฮาร์ดแวร์ Arduino ใช้ชิปไมโครคอนโทรลเลอร์เบอร์ Atmega328 ซึ่งเป็นรุ่นเดียวกันกับชิปที่ใช้บนบอร์ดหลักของวิชา Practicum จึงทำให้เราสามารถนำเอาสภาพแวดล้อมการพัฒนาเฟิร์มแวร์ของ Arduino และไลบรารีที่มีอยู่หลากหลายมาปรับใช้งานได้โดยง่าย |
== การติดตั้ง Arduino IDE (สำหรับผู้ใช้คอมพิวเตอร์ส่วนตัว) == | == การติดตั้ง Arduino IDE (สำหรับผู้ใช้คอมพิวเตอร์ส่วนตัว) == | ||
− | + | ดาวน์โหลดและติดตั้ง Arduino IDE เวอร์ชันล่าสุดได้จากเว็บ [https://www.arduino.cc/en/Main/Software Arduino - Software] | |
− | == | + | == การตั้งค่า Arduino IDE ให้พร้อมใช้งานบอร์ด Practicum == |
− | เลือกเมนู File → Preferences | + | เลือกเมนู File → Preferences (หรือ Arduino → Preferences... บน OSX) ป้อน URL <code>http://ecourse.cpe.ku.ac.th/practicum/board/package_cpeku_index.json</code> ในกล่อง Additional Boards Manager URL |
− | [[Image:arduino-board- | + | [[Image:arduino-preference.png|center|400px|thumb]] |
+ | |||
+ | เลือกในเมนู Tools → Board → Board Manager | ||
+ | |||
+ | [[Image:arduino-board-manager.png|center|400px|thumb]] | ||
+ | |||
+ | เลื่อนรายการลงมาที่ตัวเลือก '''CPE-KU Practicum by Chaiporn Jaikaeo''' แล้วคลิ้กปุ่ม Install | ||
+ | |||
+ | [[Image:arduino-board-install.png|center|400px|thumb]] | ||
− | เลือกในเมนู Tools → Board จะปรากฏหมวด CPE-KU Practicum Boards | + | เลือกในเมนู Tools → Board จะปรากฏหมวด CPE-KU Practicum Boards ให้เลือกใช้รายการ Practicum Board v3.x |
[[Image:arduino-board-new.png|center|400px|thumb]] | [[Image:arduino-board-new.png|center|400px|thumb]] | ||
== ทดสอบการพัฒนาเฟิร์มแวร์บน Arduino IDE == | == ทดสอบการพัฒนาเฟิร์มแวร์บน Arduino IDE == | ||
− | สร้างสเกตช์ใหม่บน Arduino IDE (เมนู File → New) | + | สร้างสเกตช์ใหม่บน Arduino IDE (เมนู File → New) แล้วทดลองพิมพ์โปรแกรมต่อไปนี้ |
<syntaxhighlight lang="C"> | <syntaxhighlight lang="C"> | ||
แถว 29: | แถว 37: | ||
{ | { | ||
digitalWrite(PIN_PD3, LOW); | digitalWrite(PIN_PD3, LOW); | ||
− | delay( | + | delay(250); |
digitalWrite(PIN_PD3, HIGH); | digitalWrite(PIN_PD3, HIGH); | ||
− | delay( | + | delay(250); |
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | กดปุ่ม Reset บนบอร์ดไมโครคอนโทรลเลอร์เพื่อเข้าสู่บูทโหลดเดอร์ แล้วเลือกเมนู Sketch → Upload (หรือกด Ctrl-U) ไฟ LED สีเขียวบนเมนบอร์ดจะกระพริบเป็นจังหวะทุก ๆ ครึ่งวินาที สังเกตว่าโปรแกรมข้างต้นไม่มีฟังก์ชัน <code>main()</code> เนื่องจาก Arduino จะสร้างฟังก์ชัน <code>main()</code> ขึ้นมาในระหว่างกระบวนการคอมไพล์ พร้อมทั้งเรียกฟังก์ชัน <code>setup()</code> และ <code>loop()</code> ให้โดยอัตโนมัติ | ||
+ | |||
+ | อย่างไรก็ตาม Arduino IDE สามารถรับโค้ดภาษาซีปกติที่มีฟังก์ชัน <code>main()</code> อยู่แล้วได้ (ด้วยข้อจำกัดบางประการ) กรณีนี้ Arduino จะไม่สร้างฟังก์ชัน <code>main()</code> ขึ้นมาให้ ดังนั้นโปรแกรมด้านล่างจึงคอมไพล์บน Arduino IDE ได้เช่นกัน | ||
+ | |||
+ | <syntaxhighlight lang="C"> | ||
+ | #include <avr/io.h> | ||
+ | #include <util/delay.h> | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | DDRD = 0b00001000; | ||
+ | while (1) | ||
+ | { | ||
+ | PORTD = 0b00000000; | ||
+ | _delay_ms(250); | ||
+ | PORTD = 0b00001000; | ||
+ | _delay_ms(250); | ||
+ | } | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | == การตรวจสอบขนาดของเฟิร์มแวร์ == | |
+ | เนื่องจากหน่วยความจำแฟลชที่ใช้บันทึกเฟิร์มแวร์ของไมโครคอนโทรลเลอร์มีขนาดจำกัด การตรวจสอบขนาดของเฟิร์มแวร์ที่พัฒนาขึ้นจึงเป็นสิ่งที่ควรปฏิบัติ โดยเฉพาะอย่างยิ่งชิป Atmega328p ที่ใช้บนบอร์ด Practicum มีขนาดแฟลช 32 กิโลไบต์ แต่ถูกนำไปใช้เป็นบูตโหลดเดอร์ไปแล้ว 4 กิโลไบต์ จึงเหลือพื้นที่ให้จัดเก็บเฟิร์มแวร์ได้อีกเพียง 28 กิโลไบต์ (28672 ไบต์) การอัพโหลดเฟิร์มแวร์ที่มีขนาดใหญ่กว่านี้ลงไปบนชิปจึงอาจสร้างความเสียหายแก่ส่วนที่เป็นบูตโหลดเดอร์ได้ | ||
+ | |||
+ | การตรวจสอบขนาดของเฟิร์มแวร์ทำได้โดยใช้เมนู Sketch → Verify/Compile ซึ่งเป็นการสั่งให้ Arduino IDE ทำกระบวนการคอมไพล์โค้ดแบบไม่ต้องอัพโหลดไบต์โค้ดลงสู่ชิป ขนาดของเฟิร์มแวร์ที่คอมไพล์แล้วจะถูกแสดงไว้ในกล่องแสดงสถานะด้านล่างของหน้าต่าง ดังแสดง | ||
+ | |||
+ | [[Image:arduino-verify.png|center|400px|thumb]] | ||
+ | |||
+ | === เปรียบเทียบขนาดเฟิร์มแวร์ === | ||
+ | หัวข้อที่แล้วแสดงตัวอย่างโปรแกรม 2 โปรแกรมที่ทำงานเหมือนกันทุกประการ โดยโปรแกรมแรกเขียนตามเฟรมเวิร์กของ Arduino ส่วนโปรแกรมที่สองเขียนด้วยภาษาซีปกติ ทดลองเปรียบเทียบขนาดของเฟิร์มแวร์ที่ได้จากโค้ดทั้งสองว่าแตกต่างกันอย่างไร |
รุ่นแก้ไขปัจจุบันเมื่อ 04:42, 25 เมษายน 2562
- วิกินี้เป็นส่วนหนึ่งของรายวิชา 01204223
แพลทฟอร์ม Arduino ประกอบไปด้วยฮาร์ดแวร์ไมโครคอนโทรลเลอร์แบบเปิดและซอฟต์แวร์ IDE เพื่อสนับสนุนการพัฒนาเฟิร์มแวร์ เนื่องด้วยความง่ายในการนำมาต่อเชื่อมกับอุปกรณ์อื่น ๆ บวกกับความสะดวกในการพัฒนาเฟิร์มแวร์ผ่าน Arduino IDE และไลบรารีมาตรฐาน ทำให้มีผู้นิยมใช้งานกันอย่างแพร่หลายทั่วโลก เกิดเป็นชุมชนผู้พัฒนาขนาดใหญ่ที่ร่วมกันสร้างสรรค์ไลบรารีเสริมและโปรเจ็คอีกมากมายนับไม่ถ้วน
เนื่องด้วยฮาร์ดแวร์ Arduino ใช้ชิปไมโครคอนโทรลเลอร์เบอร์ Atmega328 ซึ่งเป็นรุ่นเดียวกันกับชิปที่ใช้บนบอร์ดหลักของวิชา Practicum จึงทำให้เราสามารถนำเอาสภาพแวดล้อมการพัฒนาเฟิร์มแวร์ของ Arduino และไลบรารีที่มีอยู่หลากหลายมาปรับใช้งานได้โดยง่าย
เนื้อหา
การติดตั้ง Arduino IDE (สำหรับผู้ใช้คอมพิวเตอร์ส่วนตัว)
ดาวน์โหลดและติดตั้ง Arduino IDE เวอร์ชันล่าสุดได้จากเว็บ Arduino - Software
การตั้งค่า Arduino IDE ให้พร้อมใช้งานบอร์ด Practicum
เลือกเมนู File → Preferences (หรือ Arduino → Preferences... บน OSX) ป้อน URL http://ecourse.cpe.ku.ac.th/practicum/board/package_cpeku_index.json
ในกล่อง Additional Boards Manager URL
เลือกในเมนู Tools → Board → Board Manager
เลื่อนรายการลงมาที่ตัวเลือก CPE-KU Practicum by Chaiporn Jaikaeo แล้วคลิ้กปุ่ม Install
เลือกในเมนู Tools → Board จะปรากฏหมวด CPE-KU Practicum Boards ให้เลือกใช้รายการ Practicum Board v3.x
ทดสอบการพัฒนาเฟิร์มแวร์บน Arduino IDE
สร้างสเกตช์ใหม่บน Arduino IDE (เมนู File → New) แล้วทดลองพิมพ์โปรแกรมต่อไปนี้
void setup()
{
pinMode(PIN_PD3, OUTPUT);
}
void loop()
{
digitalWrite(PIN_PD3, LOW);
delay(250);
digitalWrite(PIN_PD3, HIGH);
delay(250);
}
กดปุ่ม Reset บนบอร์ดไมโครคอนโทรลเลอร์เพื่อเข้าสู่บูทโหลดเดอร์ แล้วเลือกเมนู Sketch → Upload (หรือกด Ctrl-U) ไฟ LED สีเขียวบนเมนบอร์ดจะกระพริบเป็นจังหวะทุก ๆ ครึ่งวินาที สังเกตว่าโปรแกรมข้างต้นไม่มีฟังก์ชัน main()
เนื่องจาก Arduino จะสร้างฟังก์ชัน main()
ขึ้นมาในระหว่างกระบวนการคอมไพล์ พร้อมทั้งเรียกฟังก์ชัน setup()
และ loop()
ให้โดยอัตโนมัติ
อย่างไรก็ตาม Arduino IDE สามารถรับโค้ดภาษาซีปกติที่มีฟังก์ชัน main()
อยู่แล้วได้ (ด้วยข้อจำกัดบางประการ) กรณีนี้ Arduino จะไม่สร้างฟังก์ชัน main()
ขึ้นมาให้ ดังนั้นโปรแกรมด้านล่างจึงคอมไพล์บน Arduino IDE ได้เช่นกัน
#include <avr/io.h>
#include <util/delay.h>
int main()
{
DDRD = 0b00001000;
while (1)
{
PORTD = 0b00000000;
_delay_ms(250);
PORTD = 0b00001000;
_delay_ms(250);
}
}
การตรวจสอบขนาดของเฟิร์มแวร์
เนื่องจากหน่วยความจำแฟลชที่ใช้บันทึกเฟิร์มแวร์ของไมโครคอนโทรลเลอร์มีขนาดจำกัด การตรวจสอบขนาดของเฟิร์มแวร์ที่พัฒนาขึ้นจึงเป็นสิ่งที่ควรปฏิบัติ โดยเฉพาะอย่างยิ่งชิป Atmega328p ที่ใช้บนบอร์ด Practicum มีขนาดแฟลช 32 กิโลไบต์ แต่ถูกนำไปใช้เป็นบูตโหลดเดอร์ไปแล้ว 4 กิโลไบต์ จึงเหลือพื้นที่ให้จัดเก็บเฟิร์มแวร์ได้อีกเพียง 28 กิโลไบต์ (28672 ไบต์) การอัพโหลดเฟิร์มแวร์ที่มีขนาดใหญ่กว่านี้ลงไปบนชิปจึงอาจสร้างความเสียหายแก่ส่วนที่เป็นบูตโหลดเดอร์ได้
การตรวจสอบขนาดของเฟิร์มแวร์ทำได้โดยใช้เมนู Sketch → Verify/Compile ซึ่งเป็นการสั่งให้ Arduino IDE ทำกระบวนการคอมไพล์โค้ดแบบไม่ต้องอัพโหลดไบต์โค้ดลงสู่ชิป ขนาดของเฟิร์มแวร์ที่คอมไพล์แล้วจะถูกแสดงไว้ในกล่องแสดงสถานะด้านล่างของหน้าต่าง ดังแสดง
เปรียบเทียบขนาดเฟิร์มแวร์
หัวข้อที่แล้วแสดงตัวอย่างโปรแกรม 2 โปรแกรมที่ทำงานเหมือนกันทุกประการ โดยโปรแกรมแรกเขียนตามเฟรมเวิร์กของ Arduino ส่วนโปรแกรมที่สองเขียนด้วยภาษาซีปกติ ทดลองเปรียบเทียบขนาดของเฟิร์มแวร์ที่ได้จากโค้ดทั้งสองว่าแตกต่างกันอย่างไร