การเขียนโปรแกรมแบบฝังสำหรับผู้เริ่มต้น: Arduino หรือ Raspberry Pi? [ปิด]


32

ฉันเป็นนักเรียนวิทยาศาสตร์คอมพิวเตอร์และฉันกระตือรือร้นที่จะขยายความรู้ของฉันเกี่ยวกับการเขียนโปรแกรมฝังตัวและวิศวกรรมไฟฟ้า

ฉันได้อ่านที่นี่ว่าการใช้เครื่องมือเช่นไมโครคอนโทรลเลอร์ Arduino เป็นวิธีที่ดีในการเริ่มต้น

ฉันเป็นโปรแกรมเมอร์ Java และ Python เป็นหลัก แต่มีประสบการณ์บางอย่างใน C ++ นอกจากนี้ฉันได้เล่นกับ ArchLinux

โครงการเล็ก ๆ ที่ฉันอยากทำคือควบคุมหลอดไฟบางส่วนผ่าน Wi-Fi ผ่าน Arduino / Pi ของฉัน

จากสิ่งที่ฉันอ่านทั้ง Pi และ Arduino นั้นมีไว้สำหรับนักเรียน แต่ฉันไม่สามารถคิดได้ว่าจะเหมาะกับใครบางคนเช่นฉันที่ต้องการเข้าใจว่าคอมพิวเตอร์ทำงานอย่างไรในระดับต่ำ

ในฐานะผู้เริ่มต้นฉันจะพบกับคำถามมากมายดังนั้นชุมชนขนาดใหญ่และเป็นประโยชน์ (ซึ่งฉันได้ยิน Pi) เป็นข้อดีที่ยิ่งใหญ่

ดังนั้นอันไหนที่เหมาะสำหรับผู้เริ่มต้นการเรียนรู้ด้วยตนเอง: Arduino หรือ Raspberry Pi

ขอบคุณล่วงหน้า.

แก้ไข:

จากคำตอบที่ดีมากของคุณและยังเหล่านี้worthwile บทความฉันมาถึงต่อไปนี้

สรุปผลการวิจัย

  1. ฉันเลือก Arduino เป็นจุดเริ่มต้นในการเขียนโปรแกรมแบบฝังเนื่องจากเป็นระบบที่ง่ายกว่า Pi และให้ฉันทำงานใกล้ชิดกับโลหะได้ง่ายขึ้น

  2. มีค่ามากขึ้น: ฉันอาจศึกษาAVRหรือไมโครคอนโทรลเลอร์mbedในภายหลังเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับรายละเอียดในระดับต่ำของการคำนวณ

  3. อุปกรณ์ทั้งสองอนุญาตให้ฉันตั้งโปรแกรมโดยไม่มีระบบปฏิบัติการซึ่งเป็นสิ่งที่ฉันต้องการ (ตอนแรก)

  4. ฉันยังพบ โครงการที่ใช้ Pi เพื่อควบคุม Arduino ฉันพบว่าสิ่งนี้น่าสนใจเนื่องจากอุปกรณ์ทั้งสองมีราคาไม่แพงมากและฉันชอบใช้พลังของ Linux ที่สามารถทำงานกับ Pi ได้

  5. นอกจากนี้ฉันได้พบหนังสือเล่มนี้ที่จะช่วยให้ฉันเรียนรู้เพิ่มเติมเกี่ยวกับวิศวกรรมไฟฟ้าในขณะที่ทำการทดลองกับ Arduino

  6. ดูเหมือนยากที่จะทำโครงการหลอดไฟของฉันกับ Arduino แต่ก็ไม่เป็นไร ฉันแน่ใจว่าฉันสามารถคิดโครงการสร้างแรงจูงใจอื่น ๆ หรือได้รับแรงบันดาลใจที่นี่หรือที่นี่

ขอบคุณสำหรับคำตอบของคุณ


2
Arduino นั้นง่ายกว่า ฉันขอแนะนำว่าเป็นจุดเริ่มต้นที่ดีกว่าสำหรับ "ผู้เริ่มต้นสอนตัวเอง" ปัจจุบัน Arduino มีชุมชนผู้ผลิต add-on ที่ใหญ่ขึ้นเช่นสำหรับ "shields" (แผงวงจรหลักแบบปลั๊กอิน) Pi นั้นคุ้มค่ากว่า แต่ฉันคิดว่ามีอินเทอร์เฟซระดับต่ำน้อยกว่า (จำนวน GPIO, I2C และอื่น ๆ ) กว่ารุ่นอื่น ๆ ของ Arduino ฉันมีหนึ่งในแต่ละถ้าคุณมีความสนใจในสิ่งระดับต่ำฉันจะใช้ Pi
RedGrittyBrick

คำตอบ:


35

หากคุณต้องการ "เข้าใจวิธีการทำงานของคอมพิวเตอร์ในระดับต่ำ" จริงๆแล้วอาจเป็นที่ถกเถียงกันอยู่ว่า Arduino หรือ Raspberry Pi ไม่เหมาะ ทั้งสองแพลตฟอร์มเหล่านี้ (ฮาร์ดแวร์และซอฟต์แวร์) ได้รับการออกแบบมาโดยเฉพาะเพื่อซ่อนรายละเอียดระดับต่ำเพื่อให้ง่ายสำหรับผู้ที่ไม่สนใจรายละเอียดเหล่านั้นเพื่อบรรลุเป้าหมายระดับสูงขึ้นโดยการสร้างแอปพลิเคชันแบบฝัง

แต่ฉันขอแนะนำให้เลือกตระกูล CPU ที่มีสถาปัตยกรรมชุดคำสั่งที่ค่อนข้าง "สะอาด" และเรียนรู้วิธีตั้งโปรแกรมในภาษาแอสเซมบลี ตัวอย่างเช่นฉันได้ทำการเข้ารหัสเริ่มต้นจำนวนมากในมินิคอมพิวเตอร์ PDP-11 ซึ่งมีสถาปัตยกรรม 16 บิตที่สะอาดมาก ฉันบอกว่าตระกูล TI MSP430 คล้ายกันมาก ในตระกูล 8 บิตที่ทันสมัยอาจเป็นที่ถกเถียงกันอยู่ว่า AVR นั้นค่อนข้างสะอาดกว่า PIC หรือคุณอาจไปโรงเรียนเก่าและดู M68K หรือแม้แต่ Z80

ดังนั้นมันขึ้นอยู่กับว่าเป้าหมายของคุณคืออะไร: คุณต้องการสร้างแอปพลิเคชันแบบฝังหรือคุณต้องการศึกษาโปรเซสเซอร์ด้วยตนเองหรือไม่?

หากคุณต้องการเริ่มต้นด้วยอดีตและจากนั้นเลื่อนไปยังส่วนหลังในภายหลังบางทีคุณควรเริ่มต้นด้วย Arduino ในตอนนี้จากนั้นย้ายไปยังการเขียนโปรแกรมตัวประมวลผล AVR พื้นฐานในระดับที่ต่ำกว่าในภายหลัง

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


ขอบคุณฉันต้องการเริ่มต้นด้วยการสร้างแอปพลิเคชันที่ฝังตัวและอาจจะไปศึกษาโปรเซสเซอร์ในภายหลัง
Matthias Braun

1
คุณสามารถเขียนโปรแกรมโลหะเปลือย Pi โดยไม่มีปัญหาใด ๆ ไม่จำเป็นต้องรู้โครงสร้างพื้นฐานใด ๆ เพียงเพิกเฉยต่อวิดีโอเสียงและระบบเครือข่ายและคุณมีชิป ARM ที่รวดเร็วพร้อม RAM มากมายซึ่งคุณโหลดจากการ์ด SD หรือวาง bootloader บนการ์ด SD และดาวน์โหลดแอปพลิเคชันของคุณไปที่ RAM โดยใช้พอร์ตอนุกรม
Wouter van Ooijen

2
สำหรับการพัฒนาและเผาโลหะเปลือยเปล่า Arduino พร้อมพร้อมที่จะบูตโหลดเดอร์และความต้องการเริ่มต้นที่ง่ายขึ้นอย่างมากนั้นจะง่ายกว่ามากที่จะไปด้วย (กล่าวคือเป็นบอร์ด ATMEGA dev)
Chris Stratton

13

Arduino สามารถใช้กับ Arduino SDE ซึ่งให้การทำงานบางอย่างในลักษณะ 'ซ่อนเร้น' แต่ยังสามารถใช้กับแอสเซมเบลอร์ธรรมดา C หรือ C ++ (และอาจมีภาษาอื่นอีกมากมาย แต่ดูเหมือนจะเป็นภาษาอื่น ๆ พบน้อย) มีบอร์ดเสริมที่หลากหลายที่เรียกว่า shields เป็นกรณีส่วนใหญ่ที่มีซอฟต์แวร์รองรับที่ทำงานร่วมกับ Arduino SDE การรวมหลายโล่เข้าด้วยกันอาจเป็นเรื่องยุ่งยาก อีเธอร์เน็ตเป็นไปได้ แต่นั่นเป็นการยืดความสามารถ โฮสต์ USB สแต็กเป็น AFAIK เกินความสามารถ

Arduino ดั้งเดิมนั้นมีชิป AVR แต่มีทางเลือกตามชิป PICs และ LPC (ARM)

Raspberry Pi ได้รับการออกแบบให้เป็นคอมพิวเตอร์บอร์ดเดี่ยวที่ใช้ลีนุกซ์ลดขนาดลง เช่นนี้มันสามารถตั้งโปรแกรมในภาษาที่หลากหลาย (จากแอสเซมเบลอร์ถึง Python และทุกอย่างที่อยู่ระหว่าง Inlculiding C และ C ++) มันอาจเป็นโฮสต์ USB ดังนั้นจึงไม่มีปัญหาในการเพิ่มดองเกิล USB USB Pi PCB มีตัวเชื่อมต่อ IO ซึ่งมีพินบางตัวให้ใช้งานและคุณสามารถเข้าถึงพินเหล่านั้นได้จากแอพ Linux ของคุณ แต่มันรู้สึกค่อนข้างงุ่มง่าม

แม้ว่ามันจะไม่ได้ถูกออกแบบมาเพื่อใช้ในทางดังกล่าว แต่ก็ไม่มีปัญหาในการตั้งโปรแกรมโลหะเปลือยของ Raspberry Pi (= ไม่มีระบบปฏิบัติการใด ๆ ) ตอนนี้คุณสามารถเข้าถึงหมุด IO ได้โดยตรงและรวดเร็ว แต่คุณสูญเสียความสามารถในการเรียกใช้ไดรเวอร์ Liunux ดังนั้นการเพิ่ม WiFi จะทำได้ยาก AFAIK ที่ยังมีนามสกุลฮาร์ดแวร์ไม่มาก (พร้อมกับไลบรารีซอฟต์แวร์) สำหรับ RaPi เช่นเดียวกับ Arduino แต่ความรู้สึกของฉันคือการเปลี่ยนแปลงนี้

ทั้งหมดที่ฉันบอกว่าคุณไม่สามารถไปผิดด้วย แต่ถ้าคุณต้องการ WiFi จริง ๆ ฉันขอแนะนำ RaPi กับ Linux


1
จุดหนึ่งที่ไม่ดีของราสเบอร์รี่ Pi คือการขาดเอกสารอย่างเป็นทางการ ส่วนใหญ่เป็นสิ่งที่ Broadcom เป็นกรรมสิทธิ์ซึ่งเป็นความลับสุดยอดที่มนุษย์ปุถุชนไม่สามารถสัมผัสได้ หากต้องการความเร็ว ARM มีแพลตฟอร์มอื่นที่มีเอกสารที่ดีกว่าสำหรับงานโลหะเปลือยซึ่งมีราคาถูกและง่ายกว่าเมื่อเทียบกับ Raspberry Pi ในทางกลับกัน Raspberry Pi นั้นใกล้กว่า "คอมพิวเตอร์จริง" มากกว่าชุด ARM ราคาถูกมากมายจาก Texas Instruments, STmicro หรือ Freescale
AndrejaKo

3
AFAIK การไม่มีเอกสารประกอบอยู่ในวิดีโอและอาจเป็นส่วนเสียง (แต่ฉันอ่านว่าไดรเวอร์สำหรับชิ้นส่วนเหล่านั้นตอนนี้เปิดแหล่งที่มาแล้วดังนั้นอย่างน้อยก็มีเอกสารบางรูปแบบถ้าคุณต้องการใช้ชิ้นส่วนเหล่านั้น) ถ้าคุณแกล้งทำเป็น ส่วนเหล่านั้นไม่ได้มีคุณเหลือปังจำนวนมาก (RAM และพลังงาน CPU) สำหรับ bucks ของคุณ ใครสนใจว่ามีสิ่งเพิ่มเติมที่คุณไม่ต้องการใช้ในแอปพลิเคชันไมโครคอนโทรลเลอร์ทั่วไป ฉันไม่ต้องการเอ็นจิ้นกราฟิกเต็มรูปแบบ และถ้าฉันต้องการอินเทอร์เฟซระดับพิกเซล
Wouter van Ooijen

มันไม่ได้เป็นเพียงเสียงและวิดีโอเอกสาร GPIO ของ pi นั้นกระจัดกระจายมากเมื่อเทียบกับอุปกรณ์ฝังตัวทั่วไป
Chris Stratton

1
ฉันไม่มีปัญหาในการใช้ GPIO โดยใช้เอกสารที่มี คุณพบปัญหาหรือไม่?
Wouter van Ooijen

4

ในความคิดของฉันมันลงมาที่นี้: คุณต้องการที่จะเขียนโปรแกรมในระบบปฏิบัติการหรือบนฮาร์ดแวร์ของตัวเอง (เรียงลำดับของการสร้างระบบปฏิบัติการของคุณเอง)?

ด้วย RaspberryPi คุณจะต้องใช้ Debian Linux ไม่เป็นไรและ Linux มีประโยชน์จริงๆ หากคุณเรียนรู้ว่าคุณสามารถเติบโตไปยังพีซีเครื่องอื่น ๆ เซิร์ฟเวอร์ ฯลฯ คุณอาจจะเขียนโปรแกรมใน Python อีกครั้งถ้าคุณคุ้นเคยกับมันเพราะมันดีและใช้งานได้ง่ายบน Pi

หากในอีกทางหนึ่งคุณต้องการดูว่าการเขียนโปรแกรมอะไรเล็ก ๆ น้อย ๆ ราคาถูกและประหยัดพลังงานลองใช้ Arduino รหัสทั้งหมดของคุณทำงานบนชิปตัวน้อยนั้นคุณสามารถลบออกจากบอร์ด (ถ้าเป็น DIP) และวางลงบนเขียงและดูด้วยตัวคุณเองว่าฮาร์ดแวร์ขนาดเล็กที่คุณต้องใช้ในการทำงานคอมพิวเตอร์ขั้นพื้นฐานขนาดเล็กนั้นเป็นอย่างไร อย่างน้อยก็น่าอัศจรรย์สำหรับฉัน ทุกสิ่งที่คุณเขียนจะทำงานบนชิปตัวเองดังนั้น "OS" ทั้งหมดจะเป็นลูปรันไทม์ตัวน้อยของคุณ Arduino IDE / ภาษาเป็นสิ่งที่ดีในการเริ่มต้นด้วย แต่ภายหลังการลงไปที่ C / C ++ จะมีประโยชน์พอที่จะรู้ หากคุณเข้าใจในจุดนั้นจริงๆคุณสามารถใช้ทักษะ C ของคุณกับชิป ARM Cortex M หรือไมโครชิป MSP430 ของไมโครชิพได้อย่างง่ายดาย

ฉันขอแนะนำให้คุณไปสู่ ​​Arduino ถ้าคุณสนใจที่จะเรียนรู้ EE และภาษาแบบฝังส่วนใหญ่เป็นเพราะวิธีการที่ง่ายในการสร้างวงจรของคุณเองสำหรับส่วน EE คุณไม่สามารถเอาชิปของ Raspberry Pi ออกจากบอร์ดของคุณเองหรือทำกับฮาร์ดแวร์ได้อย่างง่ายดาย นอกจากนี้ยังเป็นระบบ Linux เพียงหมุน VM ที่จุดนั้นและเรียนรู้ Linux ที่นั่น


3

สิ่งที่เหมาะสมจริง ๆ ขึ้นอยู่กับรายละเอียดของงาน

หากคุณต้องการ wifi คุณน่าจะพบว่า Raspberry Pi เป็นโซลูชั่นที่คุ้มค่ากว่าเพราะคุณสามารถใช้ wifi dongle ราคาถูกได้

อย่างไรก็ตาม Pi มีความซับซ้อน - ในด้านซอฟต์แวร์แม้ว่าคุณจะมีประสบการณ์เกี่ยวกับการกำหนดค่าลินุกซ์และในข้อ จำกัด ด้านแหล่งจ่ายไฟ - ดองเกิล wifi สองสามตัวจะทำงานได้โดยตรงสำหรับคนอื่น ๆ ที่คุณต้องการฮับขับเคลื่อน รอบ polyfuses

บนเส้นทาง Arduino ยกเว้นว่าคุณได้รับอะแดปเตอร์ไร้สายที่ใช้สแต็กเครือข่ายเต็มรูปแบบและจำลองช่องสัญญาณอนุกรมคุณจะต้องใช้หน่วยความจำที่มีอยู่จำนวนมากสำหรับการใช้งานเครือข่าย คนทำมัน แต่มันอาจจะแน่น

ตามความเห็นแล้วทั้งสองแพลตฟอร์มไม่เหมาะสำหรับงานนี้ - pi กลายเป็นของเล่นที่มีข้อ จำกัด ด้านพลังงานเพิ่มขึ้นอีกนิดหน่อยยื่น SD การ์ดเมาท์และระงับเอกสารมากกว่าที่จะเหมาะสำหรับบล็อกอาคารแบบฝังตัว และ Arduino มีทรัพยากรในตัวสำหรับราคาเพียงเล็กน้อย ที่กล่าวว่ามีทางเลือกที่นิยมกันอย่างแพร่หลายไม่มากนักซึ่งมีความเหนือกว่าแม้ว่าจะมีประวัติแฮ็กดิจิตอล I / O บนเราเตอร์ไร้สายที่ใช้ Linux เป็นหลักและบางส่วนก็มีราคาถูก / กะทัดรัด


3

ฉันจะแนะนำหน่วยประมวลผล mbed มีความสมดุลที่ดีของสิ่งที่เป็นนามธรรมในระดับสูง (เพื่อให้คุณเริ่มต้น) ใน C ++ จากนั้นคุณสามารถเลื่อนลงไปที่ C และเริ่มทำงานในระดับที่ต่ำกว่า

เมื่อคุณมีความเร็วและสะดวกสบายกับการขัดจังหวะเวลาและข้อมูลการอ่าน (ทั้งแบบอะนาล็อกและดิจิตอล) จากนั้นเลื่อนลงไปที่ PIC แบบง่าย ฉันชอบ 16F886 สิ่งนี้จะทำให้คุณมีความคิดที่ดีขึ้นเกี่ยวกับสิ่งที่เกิดขึ้นจริงในระดับการลงทะเบียน ใช้คอมไพเลอร์ Hi-Tech C เป็นจุดเริ่มต้นไม่จำเป็นต้องไปประกอบเว้นแต่คุณต้องการจริงๆ

ด้วย PIC คุณสามารถเริ่มกังวลเกี่ยวกับการใช้พลังงานขนาดโปรแกรมหน่วยความจำระยะเวลาที่ล่าช้า

จากตรงนั้นคุณสามารถย้ายกลับไปที่โปรเซสเซอร์ขนาดใหญ่เช่น mbed หรือ arduino โดยรู้ว่าคุณมีความคิดที่ดีขึ้นเกี่ยวกับสิ่งที่เกิดขึ้นภายใน


2

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


2
ฉันไม่ได้ดูเวลาโพสต์มันก็ปรากฏให้ฉันเห็นในหัวข้อที่แนะนำและฉันเพียงต้องการที่จะช่วย
Manuel Joaquín
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.