ลองเล่น Intel Galileo เมื่อ x86 ทั้งเครื่องเหลือขนาดเล็กกว่าฝ่ามือ

by lew
22 July 2014 - 18:04

คอมพิวเตอร์ขนาดเล็กที่สมบูรณ์ในชิปตัวเดียว หรือใช้ชิปประกอบร่วมกันไม่กี่ตัวในกลุ่มไมโครคอนโทรลเลอร์ (microcontroller) หรือ system-on-chip ทั้งหลายได้ครับความนิยมมานานในงานควบคุมโรงงานหรือภาคการศึกษาและวิจัยต่างใช้ชิปในสถาปัตยกรรมที่ความซับซ้อนต่ำ และใช้ผลิตชิปกินพลังงานต่ำกันมาเป็นเวลานานนับสิบปี

โลกของคอมพิวเตอร์ฝังตัวที่ใช้ชิปเหล่านี้ก็พัฒนาขึ้นพร้อมกับเทคโนโลยีการผลิตที่ไปไกลขึ้นเรื่อยๆ วันนี้ชิปกินพลังงานต่ำเช่น ARM มีชุดคำสั่งที่ซับซ้อนไม่ต่างจากพีซีเต็มรูปแบบเมื่อหลายปีก่อน ปีที่แล้วอินเทลก็ออกชิป x86 ในตระกูล Quark ที่เตรียมบุกตลาด

อินเทลเลือกที่จะสาธิตชิป Quark ด้วยการร่วมมือกับโครงการ Arduino เพื่อสร้างบอร์ด Galileo ขึ้นมา บอร์ดราคา 60 ดอลลาร์ ที่ภายในเป็นชิป x86 แบบ 32 บิตพร้อมหน่วยความจำแฟลชและแรมในตัว ทำให้มันเป็นพีซีสมบูรณ์แบบในเครื่องเดียว

โครงการ Arduino นั้นแต่เดิมเลือกใช้ชิป AVR ของบริษัท Atmel ที่ประสิทธิภาพต่ำแต่ราคาถูกมาปรับปรุงกระบวนการอัพโหลดซอฟต์แวร์ขึ้นชิปจากเดิมต้องใช้เครื่องเฉพาะ มาประกอบเข้ากับ IDE เพื่อให้ง่ายต่อการพัฒนา นักพัฒนาต้องจำเพียงแค่ว่าใช้บอร์ดรุ่นไหนและต้องการอ่านหรือเขียนค่าออกไปยังขาใด ก็สามารถเลือกตัวแปรแล้วส่งค่าออกไปได้ทันที เทียบกับโปรแกรมเมอร์ยุคเก่าที่ต้องเปิดตารางหาค่าหน่วยความจำของขาแต่ละขาเพื่อส่งค่าหรืออ่านค่าแล้ว Arduino พัฒนาได้ง่ายจนกระทั่งใช้เรียนรู้ในวิชาเรียนระดับมัธยมได้

แม้ว่าจะทำงานได้ง่าย ทำให้คนทั่วไปเข้าถึงโลกของคอมพิวเตอร์เพื่อการควบคุมอุปกรณ์ไฟฟ้า หรืออ่านค่าจากเซ็นเซอร์อุณหภูมิหรือความชื้นได้โดยง่าย แต่ข้อจำกัดสำคัญของ Arduino รุ่นเดิมๆ ก็คือพลังประมวลผลที่จำกัด การประมวลผลที่ซับซ้อน การเชื่อมต่ออินเทอร์เน็ต กลายเป็นงานที่ยาก บอร์ดเสริมเพื่อเชื่อมต่ออินเทอร์เน็ตกลับมีความซับซ้อนสูง ผู้ผลิตจำนวนมากรวมถึงตัว Arduino เองก็รู้ถึงปัญหานี้ดีและพยายามแก้ปัญหาด้วยการออกแบบบอร์ดที่มีชิปพลังประมวลผลสูงมาประกบ เช่น Arduino Yun หรือ Arduino TRE ด้วยความที่บอร์ดเหล่านี้มีชิปแยกกัน ทำให้หลายตั้งต้องเขียนโปรแกรมสองแบบ คือเขียนโปรแกรมบนชิป AVR บน Arduino IDE และเขียนโปรแกรมบนชิป ARM หรือ MIPS อีกครั้ง

Intel Galileo กลับเลือกเส้นทางที่ต่างออกไป อินเทลตัดชิป AVR ออกไปจากบอร์ด แล้วใช้ชิป Quark เข้ามาแทนทั้งหมด พร้อมกับเพิ่มขา GPIO (ขาสำหรับอ่านค่าระดับสัญญาณไฟ หรือส่งค่าออก) ด้วยชิปเล็กๆ สำหรับการเพิ่มขาที่ไม่มีพลังประมวลผลใดๆ พร้อมกับปรับแต่ง Arduino IDE รุ่นของตัวเองขึ้นมาเฉพาะ

เมื่อเปิดบอร์ดขึ้นมาติดตั้งไดร์เวอร์และเปิด IDE สำเร็จแล้ว (ผมเองมีปัญหาระหว่างเปิด IDE บนวินโดวส์ แต่บนลินุกซ์ไม่มีปัญหาอะไร) ก็จะได้ IDE เหมือน Arduino ทุกประการ รวมถึงฟังก์ชั่น setup และ loop ตัวอย่างพื้นฐานเช่น Blink นั้นก็รันได้ทันที

กระบวนการภายในของ Galileo มันคือลินุกซ์ Yocto ที่ใช้ชุดซอฟต์แวร์ busybox (แบบเดียวกับใน OpenWRT และแอนดรอยด์) ทางอินเทลดัดแปลงทั้งตัวลินุกซ์และตัว IDE ทำเหมือนว่าโค้ดกำลังรันอยู่บนไมโครคอนโทรลเลอร์ เราสามารถเขียนอ้างถึง "ขา" ต่างๆ ของบอร์ดได้ตามปกติ

แต่ภายในแล้ว โค้ดที่เราเขียนลงไปจะกลายเป็นโปรเซสบนลินุกซ์ที่รันบนบอร์ด Galileo อีกทีหนึ่ง ด้วยความที่เป็นลินุกซ์เต็มรูปแบบ ทำให้เราสามารถสั่งฟังก์ชั่น system หรือ printf ได้

การเชื่อมต่อกับคอมพิวเตอร์ของเราเมื่อต่อสาย USB ครั้งแรก เครื่องของเราจะมองเห็น Galileo เป็นพอร์ตซีเรียลขึ้นมาพอร์ตหนึ่งสามารถอัพเดตเฟิร์มแวร์และลงเขียนโปรแกรมใหม่ลงไปได้ แต่หากต้องการใช้ความสามารถเครือข่ายบนบอร์ดจะบูตจาก micro SD แทน โดยดาวน์โหลดเฟิร์มแวร์ใหม่มาเอง การติดตั้งไม่ใช่ใช้ท่าพิสดารเช่นการติดตั้งลินุกซ์ทั่วไป เราต้องใช้ micro SD ที่ฟอร์แมตเป็น FAT ปกติมาแตกไฟล์ 7z วางลงไป จากนั้นเสียบ micro SD แล้วรันต่อได้

เมื่อติดตั้งลินุกซ์ตัวเต็มลงในบอร์ดแล้วความสามารถต่างๆ ที่มีจะสามารถใช้ได้ครบ เราสามารถรัน SSH server ขึ้นมารอรับการเชื่อมต่อผ่านเครือข่าย หรืออาจจะซื้อการ์ด Wi-Fi มาติดตั้งเพิ่มได้บนช่อง mini PCIe

การสั่งคำสั่งต่างๆ เช่น ให้ขอไอพีจากเราท์เตอร์ อาจจะสั่ง system บนโค้ดที่คอมไพล์จาก Arduino IDE ไปเรื่อยๆ ได้แต่เราสามารถเชื่อมต่อกับแอพพลิเคชั่นของเราผ่านพอร์ตซีเรียลได้อยู่แล้ว จึงมีคนเขียน Poor Man's serial มาให้ใช้งาน ทำให้เราสามารถพิมพ์คำสั่งลินุกซ์ผ่านคอนโซลซีเรียลบน Arduino IDE ได้ทันที

ขาต่างๆ ของบอร์ด Galileo นั้นเป็นอุปกรณ์ภายใน สามารถเรียกอ่านและเขียนผ่านไฟล์เสมือน /sys/device/virtual/gpio/gpio[หมายเลขขา] ได้เลย แม้ว่าเวลาที่เราเขียนค่าขาต่างๆ ผ่าน Arduino IDE เช่นหากเราอยากเขียนค่า "1" ลงในขา 40 ของบอร์ด เราสามารถทำได้ง่ายๆ

cd /sys/device/virtual/gpio/gpio40
echo "out" > direction
echo "1" > value

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

บทสรุป

ความที่ Galileo อยู่ตรงกลาง ระหว่างคอมพิวเตอร์ขนาดเล็ก เช่น Raspberry Pi หรือ Cubieboard ขณะเดียวกันก็มีราคาแพงกว่าบอร์ดราคาถูกอย่าง Arduino อย่างมาก คำถามสำคัญคือ Galileo จะเหมาะกับงานประเภทใด

ในงานการใช้ประกอบการเรียน Galileo จะเหมาะมากกับการสอนเด็กๆ ที่ยังไม่พร้อมจะออปติไมซ์ซอฟต์แวร์มากมายนัก การเชื่อมต่ออุปกรณ์ภายนอกกับคอมพิวเตอร์ที่มีแรมถึง 256 MB ทำให้เด็กๆ สามารถจินตนาการได้เต็มที่ ไม่ถูกจำกัดด้วยสเปคที่แม้แต่ผู้ใหญ่ที่มีความเชี่ยวชาญบางครั้งยังปวดหัว แต่การใช้ Galileo เพื่อการสอนก็ควรระวังว่าอย่าใช้กับเด็กเล็ก เพราะบอร์ดร้อนพอสมควร

แต่สำหรับการใช้งานในอุตสาหกรรม ด้วยราคาที่แพงกว่าคอมพิวเตอร์ในระดับใกล้กันอย่าง Raspberry Pi แต่ซีพียูไม่ได้แรงกว่า Galileo น่าจะเป็นตัวเลือกสำหรับนักพัฒนาที่มีโครงการที่ซับซ้อนอยู่บน Arduino อยู่แล้ว คุณอาจจะมีบอร์ด Arduino พร้อมอุปกรณ์เสริมที่พบว่าทำงานได้ยากเพราะพลังประมวลผลต่ำ หรือต้องการเชื่อมโครงงาน Arduino เข้ากับเน็ตเวิร์ค ที่หากซื้อบอร์ดแลนมาเสริมก็มีราคาแพง Galileo อาจจะเป็นทางเลือกที่ดีกว่า เพราะความเข้ากันได้กับ Arduino ที่ดี ใช้โค้ดร่วมกันได้ค่อนข้างมาก น่าจะลดเวลาการปรับแต่งโค้ดไปได้ แต่สำหรับการเริ่มโครงการใหม่ที่ต้องการเชื่อมต่อเครือข่ายแน่นอน ต้องการพลังประมวลผลสูงๆ การเลือกบอร์ดที่ตรงงานกว่าเช่น Raspberry Pi น่าจะคุ้มค่ากว่า

สุดท้ายขอบคุณทางอินเทลที่ส่งบอร์ดนี้มาให้ทดสอบครับ (ผมร้องขอไปทางอีเมลเอง) ตอนนี้ไม่มีข้อมูลว่ามีขายในเมืองไทยหรือไม่ แต่บอร์ดที่ส่งมาให้ผมมีสติกเกอร์รับประกันของ Ingram Micro

Blognone Jobs Premium