Yeni Başlayanlar İçin Gömülü Programlama: Arduino veya Raspberry Pi? [kapalı]


32

Bilgisayar bilimi öğrencisiyim ve gömülü programlama ve elektrik mühendisliği konusundaki bilgilerimi genişletmek için sabırsızlanıyorum.

Burada Arduino mikrodenetleyicisi gibi araç kullanmanın başlamanın iyi bir yol olduğunu okudum .

Ben öncelikle bir Java ve Python programcısıyım ama C ++ 'da biraz deneyime sahibim. Ayrıca ArchLinux ile oynamıştım.

Yapmak istediğim küçük bir proje, bazı ampulleri Wi-Fi üzerinden Arduino / Pi üzerinden kontrol etmektir .

Hem Pi'yi hem de Arduino'yu okuduklarımdan öğrenciler içindir, ancak bilgisayarların düşük seviyede nasıl çalıştığını anlamak isteyen benim için hangisinin daha uygun olduğunu bulamıyorum.

Yeni başlayan biri olarak birçok soru ile karşılaşacağım, yani Pi'nin duyduğu büyük ve yardımsever bir topluluk büyük bir artı.

Peki hangisi kendi kendine öğrenen bir başlangıç ​​için daha uygun: Arduino veya Raspberry Pi?

Şimdiden teşekkürler.

Düzenle:

Sizin çok büyük cevaplarınızdan ve ayrıca bu değerli makalelerinizden , aşağıdakilere geldim

Sonuçlar

  1. Arduino'yu gömülü programlamaya giriş noktası olarak seçiyorum çünkü Pi'den daha basit bir sistem ve metale daha kolay çalışmamı sağlıyor.

  2. Daha derinlemesine değer var: Bilgisayarın düşük seviye ayrıntıları hakkında daha fazla şey öğrenmek için daha sonra AVR veya mbed mikrodenetleyicileri çalışabilirim .

  3. Her iki cihaz da, bir işletim sistemi olmadan programlanmama izin veriyor, istediğim bu (ilk başta).

  4. Ayrıca bir Arduino'yu kontrol etmek için bir Pi kullanan projeler buldum . Her iki cihaz da oldukça uygun olduğundan bu merak uyandırıcıdır ve Pi ile çalışan Linux'un gücünü kullanmayı seviyorum.

  5. Ek olarak , Arduino ile deney yaparken elektrik mühendisliği hakkında daha fazla bilgi edinmeme yardımcı olacak bu kitabı buldum .

  6. Ampul projemi Arduino ile birlikte yapmak zor görünüyor. Ama bu sorun değil. Diğer motive edici projeleri düşünebilir veya burada ya da burada ilham alabilirim .

Cevaplarınız için hepinize teşekkür ederim.


2
Arduino daha basittir. Bunun “kendi kendine öğreten bir başlangıç” için daha iyi bir başlangıç ​​noktası olduğunu düşünüyorum. Arduino'nun şu anda daha büyük bir eklenti üreticileri topluluğu var, örneğin "kalkanlar" (eklenti ekli panolar). Pi, para için daha iyi bir değerdir, ancak birçok Arduino türünden daha az düşük seviye arabirime (GPIO sayısı, I2C vb.) Sahip olduğunu düşünüyorum. Her birinden bir tane var, eğer Pi'yi kullanacağım düşük seviyeli şeylerle daha az ilgileniyorsanız.
RedGrittyBrick 10:12

Yanıtlar:


35

Eğer gerçekten “bilgisayarların düşük seviyede nasıl çalıştığını anlamak” istiyorsanız, Arduino veya Raspberry Pi'nin uygun olmadığı söylenebilir. Bu platformlarda (kendi donanım ve yazılım) Her ikisi de için özel olarak tasarlanmıştır gizlemek insanlar için kolay yapmak amacıyla düşük seviyesinde ayrıntıları yok gömülü uygulamalar oluşturarak onların üst düzey hedefleri gerçekleştirmek için bu ayrıntıları önemsiyorum.

Bunun yerine, göreceli olarak "temiz" bir talimat kümesi mimarisine sahip bir CPU ailesi seçmenizi ve bunu assembly dilinde nasıl programlayacağınızı öğrenmenizi tavsiye ederim. Örneğin, çok temiz bir 16-bit mimariye sahip olan bir PDP-11 minibilgisayarına ilk kodlamamın çoğunu yaptım. Bana, TI MSP430 ailesinin çok benzer olduğu söylendi. Modern 8-bit ailelerde, AVR'nin PIC'den biraz daha temiz olduğu söylenebilir. Veya eski okula gidebilir ve M68K ya da Z80'e bakabilirsiniz.

Yani, aslında amaçlarınızın gerçekte ne olduğuna bağlı: Gömülü uygulamalar oluşturmak mı istiyorsunuz, ya da işlemcileri kendileri mi incelemek istiyorsunuz?

Birincisiyle başlamak ve daha sonra ikincisine daha fazla geçmek istiyorsanız, belki şimdi Arduino ile başlamalı ve ardından AVR işlemcisini daha düşük bir seviyede programlamaya geçmelisiniz.

Bu öneriyi kısmen, önerdiğiniz uygulamanın basit doğası ve kısmen de geçiş yolu nedeniyle yapıyorum. Pi'deki düşük seviyeli programlamaya geçmek çok daha zor. Sadece devam edebilmesi için biraz yazılım "altyapısı" gerektiren karmaşık bir SoC'ye dayanıyor. AVR ile, eğer bu tür bir eğilime sahipseniz kolayca "çıplak metale" kadar kolayca programlayabilirsiniz.


Teşekkürler, gömülü uygulamalar oluşturmaya başlamak istiyorum ve belki daha sonra işlemcileri incelemek istiyorum.
Matthias Braun

1
Pi çıplak bir metali sorunsuzca programlayabilirsiniz, herhangi bir altyapı bilmenize gerek yok. Sadece videoyu, sesi ve ağı görmezden gelin ve sizin için SD karttan yüklenen, bol miktarda RAM içeren hızlı bir ARM yongasına sahipsiniz. Alternatif olarak, SD karta bir önyükleyici takın ve uygulamanızı bir seri bağlantı noktası kullanarak RAM'e indirin.
Wouter van Ooijen,

2
Yakma ve çarpma çıplak metal gelişimi için, Arduino önyükleyici yüklemeye hazır ve önemli ölçüde daha basit başlangıç ​​gereksinimleri ile gitmek çok daha kolay olacak (yani, bir ATMEGA geliştirme kartı gibi davranmak)
Chris Stratton

13

Bir Arduino, 'gizli' bir şekilde işlevsellik sağlayan Arduino SDE ile birlikte kullanılabilir, ancak düz montajcı, C veya C ++ ile de kullanılabilir (ve muhtemelen birçok başka dilde kullanılabilir, ancak bunlar görünmektedir) Daha az yaygın). Kalkan denilen çok çeşitli eklenti kartlar vardır, çoğu durumda Arduino SDE ile bütünleşen destek yazılımı vardır. Birden fazla kalkanın birleştirilmesi zor olabilir. Ethernet mümkün, ancak bu yetenekleri genişletiyor. USB host yığını, yeteneklerinin ötesinde AFAIK'dir.

Orijinal Arduino bir AVR yongası içeriyor, ancak PIC ve LPC (ARM) yongalarına dayalı alternatifler var.

Ahududu Pi, küçültülmüş bir Linux çalıştıran tek kartlı bir bilgisayar olarak tasarlanmıştır. Bu şekilde çok çeşitli dillerde programlanabilir (assembler'den Python'a ve aralarındaki her şey, C ve C ++ dahil). Bir USB host olabilir, bu yüzden bir USB WiFi dongle eklemek sorun olmamalıdır. Pi PCB üzerinde bazı pinlerin mevcut olduğu bir IO konektörü vardır ve bu pinlere Linux uygulamanızdan erişebilirsiniz, ancak biraz sakar hissettirir.

Her ne kadar bu şekilde kullanılmak üzere tasarlanmamış olsa da, Raspberry Pi çıplak metalini programlamak sorun değil (= işletim sistemi olmadan). Artık IO pinlerine doğrudan ve hızlı erişime sahipsiniz, ancak Liunux sürücülerini çalıştıramazsınız, bu yüzden WiFi eklemek zor olacak. AFAIK, RaPi için Arduino için olduğu kadar donanım ekleri (beraberinde gelen yazılım kütüphaneleriyle birlikte) bulunmuyor, ancak benim içgüdümüm bunun değişebileceği yönünde.

Sonuçta ikisinde de yanlış gidemeyeceğinizi söyleyebilirim, ancak gerçekten WiFi istiyorsanız, Linux'ta RaPi'yi öneririm.


1
Ahududu Pi'nin kötü bir nokta, resmi belgelerin olmaması. Çoğunlukla, ölümlülerin dokunamadığı çok gizli özel Broadcom eşyaları. ARM hızına ihtiyaç duyulursa, çıplak metal işleri için Raspberry Pi'ye kıyasla daha ucuz ve elde edilmesi daha kolay olan belgelere sahip başka platformlar da vardır. Öte yandan, Raspberry Pi, Texas Instruments, STmicro veya Freescale'den gelen çeşitli ucuz ARM kitlerinden "gerçek bir bilgisayara" çok daha yakındır.
AndrejaKo

3
AFAIK dokümantasyon eksikliği video ve belki de ses parçaları üzerinde (ancak bu parçaların sürücülerinin açık kaynaklı olduğunu okudum - bu yüzden bu parçaları kullanmak istiyorsanız en azından bir tür dokümantasyon var.) bu parçalar orada değil, paranızın karşılığını fazlasıyla alacak kadar çok miktarda (RAM ve CPU gücü) kaldı. Tipik bir mikrodenetleyici uygulamasında kullanmak istemediğiniz ilave şeyler olduğu kimin umrunda? Tam gelişmiş bir grafik motoruna ihtiyacım yok. Ve eğer piksel düzeyinde bir arayüze ihtiyacım olursa, orada.
Wouter van Ooijen,

Sadece ses ve video değil, pi'nin GPIO belgeleri de normal gömülü aygıtlara kıyasla çok seyrek.
Chris Stratton,

1
Kullanılabilir belgeleri kullanarak GPIO'ları kullanırken hiç sorun yaşamadım. Herhangi bir sorun buldunuz mu?
Wouter van Ooijen,

4

Kanımca şuna inanıyorum: bir işletim sisteminde mi yoksa donanımın kendisinde mi programlamak istiyorsunuz (kendi işletim sisteminizi yapmak)?

Bir RaspberryPi ile Debian Linux kullanacaksınız. Bu iyi ve Linux gerçekten yararlıdır. Bunu öğrenirseniz, diğer PC'lere, sunuculara vb. Yetişebilirsiniz. Pito'da yapması kolay ve güzel olduğu için muhtemelen alıştıysanız Python'da tekrar programlama yapacaksınız.

Öte yandan, gerçekten küçük, ucuz ve düşük güçte bir şey programlamanın nasıl bir şey olduğunu görmek istiyorsanız, Arduino'yu deneyin. Tüm kodunuz oradaki küçük çip üzerinde çalışıyor, hatta tahtadan (DIP olanıysa) çıkarabilir ve bir breadboard'a koyabilir ve basit bir küçük bilgisayar çalışması için ne kadar az donanıma ihtiyacınız olduğunu kendiniz görebilirsiniz. En azından benim için oldukça şaşırtıcıydı. Yazdığınız her şey o çipin üzerinde çalışacak ve bu nedenle tüm "İşletim Sistemi" sizin küçük çalışma döngünüz olacak. Arduino IDE / dil ile başlamak güzel ama daha sonra C / C ++ 'a inmek oldukça faydalı olacaktır. Bu noktada gerçekten ele alırsanız, C becerilerinizi ARM Cortex M çipleri veya TI'nin MSP430'ları gibi diğer mikrolarda gerçekten düşük güç için kolayca kullanabilirsiniz.

EE ve gömülü dilleri öğrenmeye daha fazla önem veriyorsanız, çoğunlukla EE bölümü için kendi devrelerinizi yapmanın ne kadar kolay olmasından dolayı Arduino'ya gitmenizi öneririm. Raspberry Pi'nin çipini kendi kartınıza kolayca kaldıramazsınız veya donanımı çok fazla karıştıramazsınız; Ayrıca hemen hemen bir Linux sistemi. Sadece bu noktada bir VM döndürün ve orada Linux'u öğrenin.


3

Uygun olan, gerçekten görevin detaylarına bağlıdır.

Wifi ihtiyacınız varsa, ucuz bir wifi dongle kullanabildiğinizden, muhtemelen daha uygun maliyetli bir çözüm olarak bir Ahududu Pi bulacaksınız.

Bununla birlikte, pi bazı karmaşıklıklara sahiptir - yazılım tarafında, linux konfigürasyonunda biraz deneyiminiz olmasına rağmen ve güç kaynağı sınırlamalarında da - birkaç wifi dongle doğrudan çalışacaktır, diğerleri için güçlü bir hub'a veya lehimleme işlemlerine ihtiyacınız olacak polyfuses çevresinde.

Arduino yolunda, tam bir ağ yığını uygulayan ve bir seri kanalı simüle eden bir wifi bağdaştırıcısı almadığınız sürece, ağ uygulaması için kullanılabilir belleğinizin büyük bir bölümünü kullanmanız gerekecek; insanlar bunu yapar, ancak sıkı bir uyum olabilir.

Bir düşünce olarak, hiçbir platform bu görev için gerçekten ideal değildir - pi, güç sınırlamaları, SD kart montajını takma ve gömülü bir yapı bloğu olarak ideal olandan daha az belgeleme belgesine sahip bir oyuncaktan daha fazlasıdır. Arduino'nun fiyatı için çok az kaynak var. Bununla birlikte, linux tabanlı wifi yönlendiricilerine dijital G / Ç'leri hacklemenin uzun bir geçmişi olmasına rağmen, çok daha yaygın olan pek çok popüler alternatif bulunmadığını ve bunlardan bazılarının rekabet açısından ucuz / kompakt olduğunu söyledi.


3

Mbed işlemciyi tavsiye ederim. C ++ 'da yüksek seviyede soyutlama dengesi vardır (başlamak için) ve sonra C ye bırakıp daha düşük bir seviyede çalışmaya başlayabilirsiniz.

Kesintilerle hız ve rahatlığa ulaştıktan sonra, zamanlamalar ve okuma bilgileri (hem analog hem de dijital) daha sonra basit bir PIC'ye inin. 16F886'yı beğendim, bu size kayıt düzeyinde gerçekte neler olduğu hakkında daha iyi bir fikir verecektir. Hi-Tech C derleyicisini başlangıç ​​noktası olarak kullanın, gerçekten istemediğiniz sürece montaja gerek kalmaz.

PIC ile güç tüketimi, program boyutu, bellek, zamanlama gecikmeleri hakkında endişelenmeye başlayabilirsiniz.

Oradan içeride neler olup bittiğini daha iyi bir fikriniz olduğunu bilerek mbed veya arduino gibi daha büyük bir işlemciye geri dönebilirsiniz.


2

Arduino ile başladım ve nasıl çalıştığını anladığım zaman Pic'e taşındım ve başardığını söyleyebiliriz. Arduino ile gösterişli projeler yaptım, ve kolay çünkü webde birçok kod örneğiniz var. Ahududu pi hala büyüyor ve Arduino kadar yardım yok. Bu yüzden benim görüşüme göre, Arduino ile başlamanızı ve bir seviye aldığınızda bir mikrodenetleyiciye geçmenizi öneririm.


2
Gönderilen zamanı izlemedim, sadece önerilen konularda ortaya çıktı ve sadece yardım etmek istedim.
Manuel Joaquín
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.