Lập trình nhúng cho người mới bắt đầu: Arduino hay Raspberry Pi? [đóng cửa]


32

Tôi là sinh viên khoa học máy tính và tôi mong muốn mở rộng kiến ​​thức về lập trình nhúng và kỹ thuật điện.

Tôi đã đọc ở đây rằng sử dụng các công cụ như vi điều khiển Arduino là một cách tốt để bắt đầu.

Tôi chủ yếu là một lập trình viên Java và Python nhưng có một số kinh nghiệm về C ++. Hơn nữa, tôi đã chơi với ArchLinux.

Một dự án nhỏ tôi muốn làm là kiểm soát một số bóng đèn thông qua Wi-Fi qua Arduino / Pi của tôi.

Từ những gì tôi đã đọc cả Pi và Arduino đều dành cho sinh viên nhưng tôi không thể tìm ra cái nào phù hợp hơn cho những người như tôi muốn hiểu cách máy tính hoạt động ở mức độ thấp.

Khi mới bắt đầu, tôi sẽ gặp nhiều câu hỏi, vì vậy một cộng đồng lớn và hữu ích (mà tôi nghe thấy Pi có) là một điểm cộng lớn.

Vì vậy, cái nào phù hợp hơn cho người mới bắt đầu tự học: Arduino hoặc Raspberry Pi?

Cảm ơn trước.

Chỉnh sửa:

Từ nhiều câu trả lời tuyệt vời của bạn và cũng có những worthwile bài báo tôi đến sau

Kết luận

  1. Tôi chọn Arduino làm điểm khởi đầu cho lập trình nhúng vì đây là hệ thống đơn giản hơn Pi và cho phép tôi làm việc gần với kim loại dễ dàng hơn.

  2. Có một giá trị trong việc đi sâu hơn: Tôi có thể nghiên cứu các bộ vi điều khiển AVR hoặc mbed sau đó để tìm hiểu thêm về các chi tiết cấp thấp của máy tính.

  3. Cả hai thiết bị đều cho phép tôi lập trình mà không cần hệ điều hành, đó là điều tôi muốn (lúc đầu).

  4. Tôi cũng tìm thấy các dự án sử dụng một Pi để điều khiển Arduino. Tôi thấy điều này hấp dẫn vì cả hai thiết bị đều có giá cả phải chăng và tôi thích sử dụng sức mạnh của Linux có thể chạy trên Pi.

  5. Ngoài ra, tôi đã tìm thấy cuốn sách này sẽ giúp tôi tìm hiểu thêm về kỹ thuật điện trong khi thử nghiệm với Arduino.

  6. Có vẻ khó thực hiện dự án bóng đèn của tôi với Arduino. Nhưng không sao. Tôi chắc chắn rằng tôi có thể nghĩ về các dự án thúc đẩy khác hoặc lấy cảm hứng ở đây hoặc ở đây .

Cảm ơn tất cả các câu trả lời của bạn.


2
Arduino đơn giản hơn. Tôi đề nghị đó là điểm khởi đầu tốt hơn cho "người mới bắt đầu tự học". Arduino hiện có một cộng đồng lớn hơn của các nhà sản xuất tiện ích bổ sung, ví dụ như "khiên chắn" (bảng con). Pi có giá trị tốt hơn cho tiền nhưng tôi nghĩ rằng có ít không gian cấp thấp hơn (số GPIO, I2C, v.v.) so với nhiều biến thể Arduino. Tôi có một trong số đó, nếu bạn ít quan tâm đến những thứ cấp thấp tôi sẽ sử dụng Pi.
RedGrittyBrick

Câu trả lời:


35

Nếu bạn thực sự muốn "hiểu cách máy tính hoạt động ở mức độ thấp", thì có thể lập luận rằng cả Arduino và Raspberry Pi đều không phù hợp. Cả hai nền tảng này (phần cứng và phần mềm của chúng) được thiết kế đặc biệt để ẩn các chi tiết cấp thấp nhằm giúp những người không quan tâm đến những chi tiết đó dễ dàng thực hiện các mục tiêu cấp cao hơn bằng cách tạo các ứng dụng nhúng.

Thay vào đó, tôi khuyên bạn nên chọn một họ CPU có kiến ​​trúc tập lệnh tương đối "sạch" và học cách lập trình nó bằng ngôn ngữ lắp ráp. Ví dụ, tôi đã thực hiện rất nhiều mã hóa đầu tiên của mình trên máy tính mini PDP-11, có kiến ​​trúc 16 bit rất sạch sẽ. Tôi nói rằng gia đình TI MSP430 rất giống nhau. Trên các gia đình 8 bit hiện đại, có thể lập luận rằng AVR sạch hơn PIC một chút. Hoặc bạn có thể đến trường cũ và nhìn vào M68K hoặc thậm chí là Z80.

Vì vậy, nó thực sự phụ thuộc vào mục tiêu của bạn thực sự là gì: Bạn có muốn tạo các ứng dụng nhúng hay bạn muốn tự nghiên cứu bộ xử lý?

Nếu bạn muốn bắt đầu với cái trước và sau đó chuyển nhiều hơn về cái sau, có lẽ bạn nên bắt đầu với Arduino ngay bây giờ, sau đó chuyển sang lập trình bộ xử lý AVR cơ bản ở mức thấp hơn sau này.

Tôi đưa ra khuyến nghị này một phần vì tính chất đơn giản của ứng dụng mà bạn đề xuất và một phần vì đường dẫn di chuyển. Việc chuyển sang lập trình cấp thấp trên Pi khó khăn hơn nhiều. Nó dựa trên một SoC phức tạp đòi hỏi khá nhiều "cơ sở hạ tầng" phần mềm chỉ để làm cho nó hoạt động. Với AVR, bạn có thể dễ dàng lập trình xuống "kim loại trần" nếu bạn quá nghiêng.


Cảm ơn, tôi muốn bắt đầu với việc tạo các ứng dụng nhúng và có thể sau đó sẽ nghiên cứu bộ xử lý.
Matthias Braun

1
Bạn có thể lập trình một kim loại trần Pi mà không có vấn đề gì, không cần biết bất kỳ cơ sở hạ tầng nào. Chỉ cần bỏ qua video, âm thanh và kết nối mạng, và bạn có chip ARM tốc độ cao với nhiều RAM, được nạp cho bạn từ thẻ SD. Hoặc, đặt bộ tải khởi động vào thẻ SD và tải ứng dụng của bạn xuống RAM bằng cổng nối tiếp.
Wouter van Ooijen

2
Để đốt cháy và phát triển kim loại trần, Arduino với bộ tải khởi động sẵn sàng và yêu cầu khởi động đơn giản hơn rất nhiều sẽ trở nên đơn giản hơn rất nhiều (ví dụ, coi nó như một bảng mạch ATMEGA)
Chris Stratton

13

Một Arduino có thể được sử dụng với Arduino SDE, cung cấp một số chức năng theo cách 'ẩn', nhưng nó cũng có thể được sử dụng với trình biên dịch đơn giản, C hoặc C ++ (và có thể với nhiều ngôn ngữ khác, nhưng dường như là các ngôn ngữ khác ít phổ biến). Có rất nhiều bảng bổ trợ có sẵn được gọi là khiên, hầu hết các trường hợp có phần mềm hỗ trợ tích hợp với Arduino SDE. Kết hợp nhiều lá chắn có thể là khó khăn. Ethernet là có thể, nhưng đó là mở rộng khả năng. Ngăn xếp máy chủ USB là AFAIK vượt quá khả năng của nó.

Arduino ban đầu chứa một chip AVR, nhưng có những lựa chọn thay thế dựa trên chip PIC và LPC (ARM).

Raspberry Pi được thiết kế để trở thành một máy tính một bo mạch chạy Linux thu nhỏ. Do đó, nó có thể được lập trình bằng nhiều ngôn ngữ khác nhau (từ trình biên dịch mã cho đến Python và mọi thứ nằm giữa, bao gồm cả C và C ++). Nó có thể là máy chủ lưu trữ USB, vì vậy sẽ không có vấn đề gì khi thêm khóa USB WiFi. Pi PCB có một đầu nối IO có sẵn một số chân và bạn có thể truy cập các chân đó từ ứng dụng Linux của mình, nhưng nó cảm thấy hơi vụng về.

Mặc dù nó không được thiết kế để được sử dụng theo cách như vậy, nhưng không có vấn đề gì khi lập trình Raspberry Pi kim loại trần (= không có bất kỳ HĐH nào). Bây giờ bạn có quyền truy cập trực tiếp và nhanh chóng vào các chân IO, nhưng bạn mất khả năng chạy trình điều khiển Liunux, vì vậy việc thêm WiFi sẽ khó khăn. AFAIK vẫn chưa có nhiều phần mở rộng phần cứng (có thư viện phần mềm đi kèm) cho RaPi như với Arduino, nhưng cảm giác ruột của tôi là điều này có thể thay đổi.

Nói chung, tôi muốn nói rằng bạn không thể sai với một trong hai, nhưng nếu bạn thực sự muốn WiFi, tôi khuyên bạn nên giới thiệu RaPi với Linux.


1
Một điểm xấu của Raspberry Pi là thiếu tài liệu chính thức. Đó chủ yếu là những thứ Broadcom độc quyền tuyệt mật mà những người bình thường không thể chạm vào nó. Nếu cần tốc độ ARM, có những nền tảng khác có tài liệu tốt hơn nhiều cho công việc kim loại trần rẻ và dễ kiếm hơn so với Raspberry Pi. Mặt khác, Raspberry Pi gần với "máy tính thật" hơn nhiều bộ dụng cụ ARM giá rẻ khác nhau từ Texas Cụ, STmicro hoặc Freescale.
AndrejaKo

3
AFAIK thiếu tài liệu trên video và có thể là các phần âm thanh (nhưng tôi đọc rằng trình điều khiển cho các phần đó hiện đang mở nguồn - vì vậy, có ít nhất một số dạng tài liệu nếu bạn muốn sử dụng các phần đó.) Nếu bạn chỉ giả vờ những phần đó không có ở đó bạn còn lại rất nhiều tiếng nổ (sức mạnh RAM và CPU) cho số tiền của bạn. Ai quan tâm rằng có những thứ bổ sung mà bạn không muốn sử dụng trong ứng dụng vi điều khiển thông thường? Tôi không cần một công cụ đồ họa toàn diện. Và nếu tôi cần một giao diện cấp pixel thì nó sẽ ở đó.
Wouter van Ooijen

Không chỉ là âm thanh và video, tài liệu GPIO của pi rất thưa thớt so với các thiết bị nhúng thông thường.
Chris Stratton

1
Tôi không gặp khó khăn khi sử dụng GPIO bằng tài liệu có sẵn. Bạn đã tìm thấy bất kỳ vấn đề?
Wouter van Ooijen

4

Theo ý kiến ​​của tôi, vấn đề này nằm ở chỗ: bạn có muốn lập trình trong HĐH hoặc trên chính phần cứng (cách tạo ra HĐH của riêng bạn) không?

Với RaspberryPi, bạn sẽ sử dụng Debian Linux khá nhiều. Điều đó tốt và Linux thực sự hữu ích. Nếu bạn học được điều đó, bạn có thể phát triển trên các máy tính, máy chủ khác, v.v. Bạn có thể sẽ lập trình lại bằng Python nếu bạn quen thuộc với nó bởi vì nó rất hay và dễ thực hiện trên Pi.

Mặt khác, nếu bạn muốn xem những gì nó muốn lập trình một cái gì đó thực sự nhỏ bé, rẻ tiền và năng lượng thấp, hãy thử Arduino. Tất cả mã của bạn chạy trên con chip nhỏ đó, bạn thậm chí có thể loại bỏ nó khỏi bảng (nếu là mã DIP) và đặt nó lên bảng và xem chính bạn cần bao nhiêu phần cứng để máy tính nhỏ hoạt động. Điều đó là khá tuyệt vời với tôi ít nhất. Mọi thứ bạn viết sẽ chạy trên chính con chip đó, vì vậy toàn bộ "HĐH" của nó sẽ là vòng lặp nhỏ của bạn. Arduino IDE / ngôn ngữ là tốt để bắt đầu với nhưng sau này xuống C / C ++ sẽ khá hữu ích để biết. Nếu bạn thực sự thích nó vào thời điểm đó, bạn có thể dễ dàng sử dụng các kỹ năng C của mình trên các vi mạch khác như chip ARM Cortex M hoặc MSP430 của TI để có công suất rất thấp.

Tôi khuyên bạn nên đi về phía Arduino nếu bạn quan tâm nhiều hơn đến việc học EE và các ngôn ngữ nhúng, chủ yếu là do việc tạo các mạch của riêng bạn cho phần EE dễ dàng như thế nào. Bạn không thể dễ dàng tháo chip của Raspberry Pi sang bo mạch của riêng bạn hoặc làm hỏng phần cứng nhiều; cũng là một hệ thống Linux. Chỉ cần quay một VM tại thời điểm đó và tìm hiểu Linux ở đó.


3

Những gì phù hợp thực sự phụ thuộc vào các chi tiết của nhiệm vụ.

Nếu bạn cần wifi, bạn có thể sẽ tìm thấy Raspberry Pi là một giải pháp hiệu quả hơn về chi phí, vì bạn có thể sử dụng một dongle wifi giá rẻ.

Tuy nhiên, pi có một số phức tạp - về phía phần mềm, mặc dù bạn có một số kinh nghiệm về cấu hình linux và cũng có những hạn chế về nguồn cung cấp - một vài thiết bị phát wifi sẽ hoạt động trực tiếp, đối với những người khác, bạn sẽ cần một trung tâm hỗ trợ hoặc bỏ qua hàn xung quanh các polyfuses.

Trên đường dẫn Arduino, trừ khi bạn có bộ điều hợp wifi thực hiện ngăn xếp mạng đầy đủ và mô phỏng kênh nối tiếp, cuối cùng bạn sẽ sử dụng một phần lớn bộ nhớ khả dụng của mình để thực hiện kết nối mạng; mọi người làm điều đó, nhưng nó có thể là một phù hợp chặt chẽ.

Theo quan điểm, không có nền tảng nào thực sự lý tưởng cho nhiệm vụ này - pi hóa ra là một món đồ chơi nhiều hơn với những hạn chế về sức mạnh của nó, nhô ra trên thẻ SD và giữ lại tài liệu hơn là lý tưởng như một khối xây dựng nhúng, và Arduino có ít tài nguyên trên tàu với giá của nó. Điều đó nói rằng, không có nhiều lựa chọn thay thế phổ biến rộng rãi hơn, mặc dù có một lịch sử lâu dài về việc hack I / O kỹ thuật số trên các bộ định tuyến wifi dựa trên linux, và một số trong số đó hiện có giá rẻ / nhỏ gọn.


3

Tôi muốn giới thiệu bộ xử lý mbed. Nó có một sự cân bằng tốt đẹp của mức độ trừu tượng cao (để giúp bạn bắt đầu) trong C ++ và sau đó bạn có thể thả xuống C và bắt đầu làm việc với mức độ thấp hơn.

Khi bạn đã tăng tốc và thoải mái với các ngắt, thời gian và đọc thông tin (cả tương tự và kỹ thuật số), sau đó chuyển xuống một PIC đơn giản. Tôi thích 16F886, điều này sẽ cho bạn ý tưởng tốt hơn nhiều về những gì đang thực sự diễn ra ở cấp độ đăng ký. Sử dụng trình biên dịch Hi-Tech C làm điểm khởi đầu, không cần phải đi đến lắp ráp trừ khi bạn thực sự muốn.

Với PIC bạn có thể bắt đầu lo lắng về mức tiêu thụ điện năng, kích thước chương trình, bộ nhớ, thời gian trễ.

Từ đó bạn có thể quay trở lại một bộ xử lý lớn hơn như mbed hoặc arduino khi biết rằng bạn có một ý tưởng tốt hơn về những gì đang diễn ra bên trong.


2

Tôi bắt đầu với Arduino và khi tôi hiểu cách thức hoạt động của nó, tôi chuyển sang Pic và chúng tôi có thể nói nó đã thành công. Tôi đã thực hiện một số dự án hào nhoáng với Arduino, và điều đó thật dễ dàng bởi vì trong web bạn có rất nhiều ví dụ về mã. Raspberry pi vẫn đang phát triển và không có nhiều sự trợ giúp như Arduino. Vì vậy, theo tôi, tôi khuyên bạn nên bắt đầu với Arduino và khi bạn đạt được một mức độ nào đó, hãy chuyển sang một vi điều khiển.


2
I didnt watch the posted time, it just appeared to me in the suggested topics and I only wanted to help.
Manuel Joaquín
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.