Jestem studentem informatyki i chętnie poszerzam swoją wiedzę na temat programowania wbudowanego i elektrotechniki.
Przeczytałem tutaj, że korzystanie z narzędzi takich jak mikrokontroler Arduino to dobry sposób na rozpoczęcie.
Jestem przede wszystkim programistą Java i Python, ale mam pewne doświadczenie w C ++. Ponadto bawiłem się ArchLinux.
Mały projekt, który chciałbym wykonać, to kontrolowanie niektórych żarówek za pośrednictwem Wi-Fi za pośrednictwem mojego Arduino / Pi.
Z tego, co przeczytałem, zarówno Pi, jak i Arduino są przeznaczone dla studentów, ale nie mogę ustalić, który jest bardziej odpowiedni dla kogoś takiego jak ja, który chce zrozumieć, jak działają komputery na niskim poziomie.
Jako początkujący napotkam wiele pytań, więc duża i pomocna społeczność (którą słyszę, że ma Pi) jest dużym plusem.
Który z nich jest bardziej odpowiedni dla początkujących samouków: Arduino lub Raspberry Pi?
Z góry dziękuję.
Edytować:
Z wielu wspaniałych odpowiedzi, a także z tych wartościowych artykułów , doszedłem do następujących
Wnioski
Wybieram Arduino jako punkt wejścia do programowania wbudowanego, ponieważ jest to prostszy system niż Pi i pozwala mi łatwiej pracować z metalem.
Wchodzenie głębiej: warto studiować AVR lub mikrokontrolery wbudowane w późniejszym czasie, aby dowiedzieć się więcej o szczegółach komputerowych na niskim poziomie.
Oba urządzenia pozwalają mi programować bez systemu operacyjnego, czego właśnie chcę (na początku).
Ja również znaleźć projekty , które używają jednego Pi do sterowania Arduino. Uważam to za intrygujące, ponieważ oba urządzenia są dość przystępne i lubię korzystać z mocy Linuksa, która może działać na Pi.
Dodatkowo znalazłem tę książkę, która powinna pomóc mi dowiedzieć się więcej o elektrotechnice podczas eksperymentów z Arduino.
Wydaje mi się trudne wykonanie mojego projektu żarówki z Arduino. Ale jest dobrze. Jestem pewien, że mogę wymyślić inne motywujące projekty lub czerpać inspirację tutaj lub tutaj .
Dziękuję wszystkim za odpowiedzi.
źródło
Odpowiedzi:
Jeśli naprawdę chcesz „zrozumieć, jak działają komputery na niskim poziomie”, można argumentować, że ani Arduino, ani Raspberry Pi nie są odpowiednie. Obie platformy (ich sprzęt i oprogramowanie) zostały zaprojektowane specjalnie w celu ukrycia szczegółów niskiego poziomu, aby ułatwić osobom, które nie dbają o te szczegóły, osiągnięcie celów wyższego poziomu poprzez tworzenie aplikacji osadzonych.
Zamiast tego poleciłbym wybranie rodziny procesorów, które mają stosunkowo „czystą” architekturę zestawu instrukcji i nauczenie się programowania w języku asemblera. Na przykład wiele wczesnego kodowania zrobiłem na minikomputerze PDP-11, który ma (cóż, miał) bardzo czystą 16-bitową architekturę. Powiedziano mi, że rodzina TI MSP430 jest bardzo podobna. W nowoczesnych 8-bitowych rodzinach można argumentować, że AVR jest nieco czystszy niż PIC. Możesz też przejść do starej szkoły i spojrzeć na M68K, a nawet Z80.
Tak więc naprawdę zależy to od tego, jakie są Twoje cele: czy chcesz tworzyć aplikacje osadzone, czy też chcesz studiować same procesory?
Jeśli chcesz zacząć od pierwszego, a następnie przejść do drugiego później, być może powinieneś zacząć od Arduino, a następnie przejść do programowania podstawowego procesora AVR na niższym poziomie później.
Podaję to zalecenie częściowo ze względu na prostą naturę aplikacji, którą zasugerowałeś, a częściowo ze względu na ścieżkę migracji. O wiele trudniej jest migrować do programowania niskiego poziomu na Pi. Opiera się na złożonym SoC, który wymaga sporo „infrastruktury” oprogramowania, aby go uruchomić. Dzięki AVR możesz łatwo programować aż do „gołego metalu”, jeśli masz na to ochotę.
źródło
Arduino może być używane z Arduino SDE, które zapewnia pewną funkcjonalność w „ukryty” sposób, ale może być również używane z prostym asemblerem, C lub C ++ (i prawdopodobnie z wieloma innymi językami, ale wydaje się, że są mniej popularne). Istnieje szeroka gama dostępnych dodatków, zwanych osłonami, w większości przypadków z oprogramowaniem pomocniczym, które integruje się z Arduino SDE. Łączenie wielu tarcz może być trudne. Ethernet jest możliwy, ale to rozszerza możliwości. Stos hostów USB wykracza poza możliwości AFAIK.
Oryginalne Arduino zawiera układ AVR, ale istnieją alternatywy oparte na układach PIC i LPC (ARM).
Raspberry Pi został zaprojektowany jako komputer jednopłytkowy z obniżonym Linuksem. Jako taki może być programowany w wielu różnych językach (od asemblera do Pythona i wszystkiego między nimi, z uwzględnieniem C i C ++). Może to być host USB, więc dodanie klucza USB WiFi nie powinno być problemem. Płytka drukowana Pi ma złącze IO, na którym dostępne są niektóre piny, i możesz uzyskać dostęp do tych pinów z aplikacji Linux, ale wydaje się to trochę niezdarne.
Chociaż nie został zaprojektowany do użycia w taki sposób, nie ma problemu z programowaniem Raspberry Pi bare metal (= bez żadnego systemu operacyjnego). Teraz masz bezpośredni i szybki dostęp do pinów IO, ale tracisz możliwość uruchamiania sterowników Liunux, więc dodanie WiFi będzie trudne. AFAIK jak dotąd nie ma tylu rozszerzeń sprzętowych (z towarzyszącymi bibliotekami oprogramowania) dla RaPi, jak dla Arduino, ale mam przeczucie, że to może się zmienić.
Podsumowując, powiedziałbym, że nie możesz się pomylić z żadnym z nich, ale jeśli naprawdę chcesz WiFi, polecam RaPi z Linuksem.
źródło
Moim zdaniem sprowadza się to do tego: czy chcesz programować w systemie operacyjnym, czy na samym sprzęcie (coś w rodzaju tworzenia własnego systemu operacyjnego)?
Z RaspberryPi będziesz prawie używać Debiana Linux. W porządku, a Linux jest naprawdę przydatny. Jeśli się tego nauczysz, możesz rozwinąć się na inne komputery, serwery itp. Prawdopodobnie będziesz programować w Pythonie, jeśli znasz go, ponieważ jest to przyjemne i łatwe do zrobienia na Pi.
Jeśli natomiast chcesz zobaczyć, jak to jest zaprogramować coś naprawdę małego, taniego i o niskiej mocy, wypróbuj Arduino. Cały twój kod działa na tym małym chipie, możesz nawet usunąć go z płyty (jeśli jest to DIP) i umieścić go na płycie kontrolnej i przekonać się, jak mało sprzętu potrzebujesz, aby podstawowy komputer działał. To było dla mnie co najmniej niesamowite. Wszystko, co napiszesz, będzie działało na samym układzie, więc cały „system operacyjny” będzie twoją małą pętlą. Arduino IDE / język jest fajny na początek, ale później przejście do C / C ++ będzie bardzo przydatne. Jeśli naprawdę w to wejdziesz, możesz łatwo wykorzystać swoje umiejętności C na innych mikro, takich jak układy ARM Cortex M lub TI MSP430, aby uzyskać naprawdę niską moc.
Sugeruję, abyś poszedł w kierunku Arduino, jeśli bardziej zależy ci na nauce EE i języków osadzonych, głównie ze względu na łatwość tworzenia własnych obwodów dla części EE. Nie można bardzo łatwo usunąć układu Raspberry Pi z własnej płyty lub zbytnio popsuć sprzętem; także jest to właściwie system Linux. Po prostu uruchom maszynę wirtualną w tym miejscu i naucz się tam Linuksa.
źródło
To, co jest właściwe, naprawdę zależy od szczegółów zadania.
Jeśli potrzebujesz Wi-Fi, prawdopodobnie znajdziesz Raspberry Pi jako bardziej opłacalne rozwiązanie, ponieważ możesz użyć taniego klucza Wi-Fi.
Jednak pi ma pewną złożoność - po stronie oprogramowania, choć masz pewne doświadczenie z konfiguracją Linuksa, a także z ograniczeniami zasilania - kilka dongli Wi-Fi będzie działać bezpośrednio, dla innych będziesz potrzebował zasilanego koncentratora lub lutować obejścia wokół polifusów.
Na ścieżce Arduino, jeśli nie otrzymasz adaptera Wi-Fi, który implementuje pełny stos sieci i symuluje kanał szeregowy, wykorzystasz dużą część dostępnej pamięci do implementacji sieci; ludzie to robią, ale może być ciasno.
W opinii, żadna platforma nie jest naprawdę idealna do tego zadania - pi okazuje się być bardziej zabawką z ograniczeniami mocy, wystającym mocowaniem karty SD i ukrytą dokumentacją, niż byłaby idealna jako wbudowany blok konstrukcyjny, a Arduino ma niewiele zasobów na pokładzie w swojej cenie. To powiedziawszy, nie ma zbyt wielu popularnych alternatyw, które są lepsze, chociaż istnieje długa historia hakowania cyfrowych we / wy na routerach Wi-Fi opartych na systemie Linux, a niektóre z nich są obecnie konkurencyjne tanie / kompaktowe.
źródło
Poleciłbym procesor mbed. Ma dobrą równowagę wysokiego poziomu abstrakcji (na początek) w C ++, a następnie możesz zejść do C i rozpocząć pracę na niższym poziomie.
Gdy już osiągniesz szybkość i wygodę korzystania z przerw, pomiarów czasu i informacji o czytaniu (zarówno analogowych, jak i cyfrowych), przejdź do prostej PIC. Podoba mi się 16F886, to da ci znacznie lepsze wyobrażenie o tym, co faktycznie dzieje się na poziomie rejestru. Użyj kompilatora Hi-Tech C jako punktu wyjścia, nie musisz iść do montażu, chyba że naprawdę tego chcesz.
Dzięki PIC możesz zacząć martwić się zużyciem energii, rozmiarem programu, pamięcią, opóźnieniami czasowymi.
Stamtąd możesz wrócić do większego procesora, takiego jak mbed lub arduino, wiedząc, że masz lepsze pojęcie o tym, co dzieje się w środku.
źródło
Zacząłem od Arduino i kiedy zrozumiałem, jak to działa, przeniosłem się na Pic i możemy powiedzieć, że się udało. Z Arduino zrobiłem kilka efektownych projektów i jest to łatwe, ponieważ w Internecie masz wiele przykładów kodu. Raspberry pi wciąż rośnie i nie ma takiej pomocy jak Arduino. Więc moim zdaniem polecam zacząć od Arduino, a kiedy zdobędziesz jakiś poziom, przejdź do mikrokontrolera.
źródło