ผลต่างระหว่างรุ่นของ "การพัฒนาเฟิร์มแวร์ด้วย Arduino IDE"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
 
(ไม่แสดง 13 รุ่นระหว่างกลางโดยผู้ใช้คนเดียวกัน)
แถว 3: แถว 3:
 
แพลทฟอร์ม [https://en.wikipedia.org/wiki/Arduino Arduino] ประกอบไปด้วยฮาร์ดแวร์ไมโครคอนโทรลเลอร์แบบเปิดและซอฟต์แวร์ IDE เพื่อสนับสนุนการพัฒนาเฟิร์มแวร์ เนื่องด้วยความง่ายในการนำมาต่อเชื่อมกับอุปกรณ์อื่น ๆ บวกกับความสะดวกในการพัฒนาเฟิร์มแวร์ผ่าน Arduino IDE และไลบรารีมาตรฐาน ทำให้มีผู้นิยมใช้งานกันอย่างแพร่หลายทั่วโลก เกิดเป็นชุมชนผู้พัฒนาขนาดใหญ่ที่ร่วมกันสร้างสรรค์ไลบรารีเสริมและโปรเจ็คอีกมากมายนับไม่ถ้วน
 
แพลทฟอร์ม [https://en.wikipedia.org/wiki/Arduino Arduino] ประกอบไปด้วยฮาร์ดแวร์ไมโครคอนโทรลเลอร์แบบเปิดและซอฟต์แวร์ IDE เพื่อสนับสนุนการพัฒนาเฟิร์มแวร์ เนื่องด้วยความง่ายในการนำมาต่อเชื่อมกับอุปกรณ์อื่น ๆ บวกกับความสะดวกในการพัฒนาเฟิร์มแวร์ผ่าน Arduino IDE และไลบรารีมาตรฐาน ทำให้มีผู้นิยมใช้งานกันอย่างแพร่หลายทั่วโลก เกิดเป็นชุมชนผู้พัฒนาขนาดใหญ่ที่ร่วมกันสร้างสรรค์ไลบรารีเสริมและโปรเจ็คอีกมากมายนับไม่ถ้วน
  
เนื่องด้วยฮาร์ดแวร์ Arduino ใช้ชิปไมโครคอนโทรลเลอร์เบอร์ Atmega328 ซึ่งเป็นตระกูล AVR และเป็นตระกูลเดียวกันกับชิป Atmega168 ที่ใช้บนบอร์ดหลักของวิชา Practicum จึงทำให้เราสามารถนำเอาสภาพแวดล้อมการพัฒนาเฟิร์มแวร์ของ Arduino และไลบรารีที่มีอยู่หลากหลายมาปรับใช้งานได้โดยง่าย
+
เนื่องด้วยฮาร์ดแวร์ Arduino ใช้ชิปไมโครคอนโทรลเลอร์เบอร์ Atmega328 ซึ่งเป็นรุ่นเดียวกันกับชิปที่ใช้บนบอร์ดหลักของวิชา Practicum จึงทำให้เราสามารถนำเอาสภาพแวดล้อมการพัฒนาเฟิร์มแวร์ของ Arduino และไลบรารีที่มีอยู่หลากหลายมาปรับใช้งานได้โดยง่าย
  
 
== การติดตั้ง Arduino IDE (สำหรับผู้ใช้คอมพิวเตอร์ส่วนตัว) ==
 
== การติดตั้ง Arduino IDE (สำหรับผู้ใช้คอมพิวเตอร์ส่วนตัว) ==
แถว 9: แถว 9:
  
 
== การตั้งค่า Arduino IDE ให้พร้อมใช้งานบอร์ด Practicum ==
 
== การตั้งค่า Arduino IDE ให้พร้อมใช้งานบอร์ด Practicum ==
เลือกเมนู File &rarr; Preferences ป้อน URL <code>http://ecourse.cpe.ku.ac.th/practicum/board/package_cpeku_index.json</code> ในกล่อง Additional Boards Manager URL
+
เลือกเมนู File &rarr; Preferences (หรือ Arduino &rarr; Preferences... บน OSX) ป้อน URL <code>http://ecourse.cpe.ku.ac.th/practicum/board/package_cpeku_index.json</code> ในกล่อง Additional Boards Manager URL
  
 
[[Image:arduino-preference.png|center|400px|thumb]]
 
[[Image:arduino-preference.png|center|400px|thumb]]
แถว 21: แถว 21:
 
[[Image:arduino-board-install.png|center|400px|thumb]]
 
[[Image:arduino-board-install.png|center|400px|thumb]]
  
เลือกในเมนู Tools &rarr; Board จะปรากฏหมวด CPE-KU Practicum Boards ซึ่งประกอบไปด้วยบอร์ดสองรายการ คือ Practicum Board v3 และ v4 ให้เลือกใช้รายการ Practicum Board v3
+
เลือกในเมนู Tools &rarr; 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 &rarr; New) แล้วทดลองพิมพ์โค้ดต่อไปนี้
+
สร้างสเกตช์ใหม่บน Arduino IDE (เมนู File &rarr; New) แล้วทดลองพิมพ์โปรแกรมต่อไปนี้
  
 
<syntaxhighlight lang="C">
 
<syntaxhighlight lang="C">
แถว 43: แถว 43:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
กดปุ่ม Reset บนบอร์ดไมโครคอนโทรลเลอร์เพื่อเข้าสู่บูทโหลดเดอร์ แล้วเลือกเมนู Sketch &rarr; Upload (หรือกด Ctrl-U) ไฟ LED สีเขียวบนเมนบอร์ดจะกระพริบเป็นจังหวะทุก ๆ ครึ่งวินาที
+
กดปุ่ม Reset บนบอร์ดไมโครคอนโทรลเลอร์เพื่อเข้าสู่บูทโหลดเดอร์ แล้วเลือกเมนู Sketch &rarr; 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>
 +
 
 +
== การตรวจสอบขนาดของเฟิร์มแวร์ ==
 +
เนื่องจากหน่วยความจำแฟลชที่ใช้บันทึกเฟิร์มแวร์ของไมโครคอนโทรลเลอร์มีขนาดจำกัด การตรวจสอบขนาดของเฟิร์มแวร์ที่พัฒนาขึ้นจึงเป็นสิ่งที่ควรปฏิบัติ โดยเฉพาะอย่างยิ่งชิป Atmega328p ที่ใช้บนบอร์ด Practicum มีขนาดแฟลช 32 กิโลไบต์ แต่ถูกนำไปใช้เป็นบูตโหลดเดอร์ไปแล้ว 4 กิโลไบต์ จึงเหลือพื้นที่ให้จัดเก็บเฟิร์มแวร์ได้อีกเพียง 28 กิโลไบต์ (28672 ไบต์) การอัพโหลดเฟิร์มแวร์ที่มีขนาดใหญ่กว่านี้ลงไปบนชิปจึงอาจสร้างความเสียหายแก่ส่วนที่เป็นบูตโหลดเดอร์ได้
 +
 
 +
การตรวจสอบขนาดของเฟิร์มแวร์ทำได้โดยใช้เมนู Sketch &rarr; 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

Arduino-preference.png

เลือกในเมนู Tools → Board → Board Manager

Arduino-board-manager.png

เลื่อนรายการลงมาที่ตัวเลือก CPE-KU Practicum by Chaiporn Jaikaeo แล้วคลิ้กปุ่ม Install

Arduino-board-install.png

เลือกในเมนู Tools → Board จะปรากฏหมวด CPE-KU Practicum Boards ให้เลือกใช้รายการ Practicum Board v3.x

Arduino-board-new.png

ทดสอบการพัฒนาเฟิร์มแวร์บน 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 ทำกระบวนการคอมไพล์โค้ดแบบไม่ต้องอัพโหลดไบต์โค้ดลงสู่ชิป ขนาดของเฟิร์มแวร์ที่คอมไพล์แล้วจะถูกแสดงไว้ในกล่องแสดงสถานะด้านล่างของหน้าต่าง ดังแสดง

Arduino-verify.png

เปรียบเทียบขนาดเฟิร์มแวร์

หัวข้อที่แล้วแสดงตัวอย่างโปรแกรม 2 โปรแกรมที่ทำงานเหมือนกันทุกประการ โดยโปรแกรมแรกเขียนตามเฟรมเวิร์กของ Arduino ส่วนโปรแกรมที่สองเขียนด้วยภาษาซีปกติ ทดลองเปรียบเทียบขนาดของเฟิร์มแวร์ที่ได้จากโค้ดทั้งสองว่าแตกต่างกันอย่างไร