To pytanie dotyczy między innymi tego, czy istnieje duża krzywa uczenia się między używaniem Pythona na Raspberry Pi do prototypowania punktu końcowego a użyciem mikrokontrolera.
Niewątpliwie istnieje znaczna poprawa zużycia energii (kosztem zmniejszonej przepustowości procesora), więc istnieją dobre powody, aby przyjąć podejście MCU dla produktu, który musi być zasilany z baterii.
Jednym z potencjalnych powodów pozostania przy komputerze jednopłytkowym z systemem Linux jest to, że nie ma nowego oprogramowania do nauki (powyżej Python lub podobnego), zakładając, że aplikacja może być napisana w języku wysokiego poziomu (w którym powinno być dużo standardu biblioteki).
Na wbudowanej platformie programistycznej prawdopodobne są C ++ (mbed lub arduino) lub micropython. Mam wrażenie, że nie różnią się one znacznie i nie są bardziej złożone niż pisanie kodu do uruchomienia pod Linuksem - chociaż platformy mają indywidualne zalety. Czy przegapiłem coś, co jest istotne dla programisty?
W szczególności pytam o punkty końcowe IoT - więc nie jest konieczne posiadanie pełnych zasobów systemu Linux dla aplikacji, którymi jestem zainteresowany. Warto również podkreślić, że względy mocy i opóźnienia sprawiają, że implementacja mcu jest trudnym wymaganiem w tego typu aplikacjach.
źródło
To zależy od tego, co próbujesz zrobić.
Największą luką jest to, że wspomniany mikrokontroler (taki jak Arduino) nie obsługuje wielozadaniowego systemu operacyjnego, takiego jak Linux. Oznacza to, że jeśli twoja aplikacja zależy od wielozadaniowości lub wielowątkowości, uruchomienie Arduino może być znacznie trudniejsze lub nawet niemożliwe.
Druga luka to wsparcie sprzętowe. Na przykład Raspberry Pi obsługuje kamery, USB audio, Ethernet, WiFi po wyjęciu z pudełka. Żadna z tych funkcji nie jest obsługiwana bezpośrednio przez Arduino i chociaż możesz używać różnych osłon (takich jak host USB, Ethernet lub WiFi), korzystanie z nich nie jest tak proste, jak korzystanie z sieci na Raspberry Pi.
Trzecią luką są dostępne zasoby. Większość mikrokontrolerów nie zbliża się nawet do zasobów oferowanych przez Raspberry Pi. Na przykład, nawet pierwszy Raspberry Pi oferował procesor działający z częstotliwością 700 MHz z 256 MB pamięci RAM i może być używany z pamięcią 32 GB. Typowe Arduino Uno oparte na ATMEGA328 działa z częstotliwością 16 MHz i ma 32 KB pamięci i 2 KB pamięci RAM.
Korzystanie z Raspberry Pi jest zdecydowanie łatwiejsze dla programistów pochodzących z komputerów PC. Główne zalety korzystania z mikrokontrolerów to:
Jeśli żadne z nich nie jest ważne, korzystanie z Raspberry Pi zdecydowanie ma sens.
źródło
TAK, to duży skok od programowania w Pythonie do programowania przy użyciu typowych narzędzi językowych opartych na języku C na mikrokontrolerze. W rzeczywistości w wielu przypadkach może być konieczne napisanie części, jeśli nie wszystkich, aplikacji w języku asemblera.
Jak już wskazano w innych odpowiedziach, mikrokontrolery są bardzo ograniczone pod względem zasobów, a zatem tracisz wszystkie wygody systemu operacyjnego Linux i wszystkie narzędzia, które możesz uruchamiać lokalnie. Iteracja z Arduino IDE jest bardzo wolna w porównaniu do uruchamiania lokalnych skryptów.
Chociaż mam duże doświadczenie zawodowe z mikrokontrolerami i mikroprocesorami, wolę prowadzić moje osobiste projekty przy użyciu sprzętu RPi z niektórymi Arduinos do krytycznych rzeczy w czasie rzeczywistym. Zajmowałem się także Beagle Bone Black i pod pewnymi względami jest to wygodniejsze niż używanie RPi z jednym lub kilkoma Arduinos.
źródło
Tak, duża różnica
Różnica jest jak w dzień iw nocy, zarówno w odniesieniu do sprzętu, jak i oprogramowania. Brak ważnego porównania.
Kiedy używać którego
Użyj Arduino, jeśli ...
We wszystkich innych przypadkach Pi jest znacznie bardziej przyjazny dla użytkownika. Pi to po prostu kolejny (wolny) komputer.
Nie zrozum mnie źle. Posiadam Pi i używam go do kilku usług Linux w mojej sieci. Często też programuję Arduinos (głównie Pro Micros). Oba są świetne, lubię je tak samo, ale mają bardzo różne scenariusze użytkowania.
Na twoje pytanie dotyczące trudności - jest względne. Jedynym trudnym dla mnie Arduino było debugowanie problemów z taktowaniem, szczególnie w połączeniu z wątpliwą elektroniką (tj. Zakłócenia elektromagnetyczne, zbyt długie kable itp.). Jeśli jesteś biegły w swoim wybranym języku (tj. C dla Arduino IDE), powinieneś być w stanie włamać się do wszystkich bibliotek, które zatrudniasz. Mimo to zawsze będzie bardziej skomplikowane niż Pi, w którym możesz na przykład użyć wybranego języka skryptowego do rzeczy, które nie są krytyczne pod względem czasowym - zawsze będą one łatwiejsze do opracowania i debugowania.
źródło
Uważam, że jest kilka punktów, które nie zostały jeszcze wyraźnie określone.
Środowisko programistyczne jest zupełnie inne. Możesz faktycznie opracować oprogramowanie Pi na Pi - możesz nawet użyć GUI, jeśli chcesz. Wbudowane są zaawansowane narzędzia do debugowania, a także bardzo dużo tego, co jest dostępne dla dowolnego systemu komputerowego.
Kontrolery będą musiały zostać opracowane / emulowane na osobnym komputerze, a następnie przesłane do kontrolera w celu ostatecznego przetestowania.
Pi może działać praktycznie w dowolnym języku, w którym chcesz go zaprogramować, mikrokontrolery zwykle mają jeden lub dwa.
Pi może obsługiwać wiele systemów operacyjnych (w tym Windows IoT i kilka systemów specjalnych), wbudowane kontrolery zwykle nie uruchamiają „Systemu operacyjnego”.
Także jeśli chodzi o środowisko wykonawcze / system operacyjny - uruchomienie Pi zajmuje kilka sekund - jeśli chcesz coś zrobić w ciągu tych pierwszych kilku sekund, pi nie będzie dla ciebie działać. Ponadto, chyba że zastosujesz jakieś ekstremalne środki, aby zapobiec jakiemukolwiek zapisywaniu w pamięci, naprawdę nie powinieneś po prostu wyłączać zasilania, musisz wykonać „Wyłączenie” i trochę poczekać. Może to również ograniczyć niektóre zastosowania.
Kolejny punkt po wdrożeniu, o którym nie wspominałem. Nie jestem pewien, w jaki sposób jestem absolutnie pewien, że odpowiednio zabezpieczyłem Pi - że żadna agencja nie umieściła gdzieś małego fragmentu kodu, który w niektórych okolicznościach umożliwia nieautoryzowany dostęp - bez usuwania go ze wszystkich sieci i wyłączania wszystkich mechanizmów dostępu bezprzewodowego . Mikrokontrolery są dość łatwe do zabezpieczenia, ponieważ piszesz prawie cały kod działający na tym urządzeniu.
Oczywiście, zawsze możesz opracować własny obraz Pi bez prawdziwego systemu operacyjnego i przejąć całą płytę / procesor, co prawie uczyniłoby z niego potężny / drogi mikrokontroler ze wszystkimi powiązanymi zaletami / wadami. Ktoś prawdopodobnie już to zrobił, ale ostatnio czegoś takiego nie szukałem.
źródło
Różnica między tworzeniem aplikacji za pomocą Pi może być bardzo różna lub nieco podobna do tworzenia aplikacji za pomocą mikrokontrolera ze względu na różnice sprzętowe, a także różnice w łańcuchu narzędzi programistycznych.
Dostępna jest szeroka gama mikrokontrolerów, które są od 8 do 64 bitowych procesorów i mają od kilku K pamięci RAM do kilku gigabajtów pamięci RAM. Bardziej wydajne mikrokontrolery zapewniają bardziej wrażenia podobne do Pi. Mikrokontrolery o mniejszych zdolnościach nie.
I nawet w przypadku Pi istnieją duże różnice między programowaniem dla systemu operacyjnego Windows 10 IoT a programowaniem dla Raspian, Mate lub innego systemu operacyjnego opartego na Linuksie. Windows 10 IoT wymaga komputera programistycznego korzystającego z zestawu narzędzi Visual Studio ze zdalnym debuggerem ukierunkowanym na środowisko Universal Windows Program (UWP). Programowanie dla Raspian lub Mate można faktycznie wykonać na Pi za pomocą narzędzi dostępnych na Pi.
Protokół ograniczonej aplikacji jest używany w przypadku małych, ograniczonych urządzeń używanych w środowisku Internetu rzeczy. Aby zapoznać się z różnorodnością sprzętu i oprogramowania mikrokontrolera, ta strona implementacji protokołu CoAP przedstawia środowisko, na które jest kierowana. Wspomina o systemie operacyjnym Contiki, o którym słyszałem niejasno, oraz o bardziej znanych systemach operacyjnych, takich jak iOS, OSX i Android. Wspomniane języki programowania to Java, JavaScript, C, C #, Ruby, Go, Erlang, Rust i Python.
Łańcuch narzędzi używany do programowania z mikrokontrolerem różni się w zależności od producenta, a także od tego, jakie zasoby są dostępne ze społeczności programistów i inicjatyw typu open source. W niektórych przypadkach otrzymujesz asembler krzyżowy, w innych dostajesz kompilator krzyżowy C, aw innych dostajesz ładny łańcuch narzędzi ze wszystkimi dzwonkami, gwizdkami i emulatorami i podobny do łańcucha narzędzi Visual Studio dla IoT Windows 10.
Rzeczywiste środowisko programistyczne dla mikrokontrolera może wymagać użycia programatora EEPROM i narzędzi programowych do utworzenia nowego obrazu i przekazania go do urządzenia lub urządzenie może mieć niezbędną łączność, aby umożliwić pobranie nowego obrazu za pośrednictwem połączenia szeregowego lub połączenie sieciowe.
Mam wrażenie, że większość mikrokontrolerów ma kompilator krzyżowy C, chociaż kompilator może obsługiwać tylko starsze standardy, takie jak K&R, a może C98. Kompilatory krzyżowe typu C często mają niestandardowe słowa kluczowe dla funkcji specyficznych dla mikroprocesora, na przykład słowa kluczowe
far
inear
dla wskaźników ze starymi procesorami 8080 i 8086 z ich segmentowaną pamięcią.Istnieją również języki specjalne, które są ukierunkowane na mikrokontrolery, takie jak język programowania FORTH . Języki te często mają konstrukcję wykonawczą ukierunkowaną na goły metal, dzięki czemu nie ma innego systemu operacyjnego niż język wykonawczy.
System operacyjny może wahać się od praktycznie nieistniejącego systemu Linux po gołą kostkę, aż po specjalistyczny system operacyjny, taki jak freeRTOS lub Windows Embedded lub w pełni funkcjonalny Linux lub Microsoft Windows. Zobacz ten projekt SourceForge MINIBIAN dla Raspberry Pi . Zobacz także ten eBook, Baking Pi: Operating Systems Development, który opisuje rozwój podstawowego systemu operacyjnego dla Raspberry Pi w asemblerze.
Ten artykuł z Visual Studio Magazine, Programowanie Internetu rzeczy za pomocą Visual Studio , zawiera omówienie wielu różnych dostępnych urządzeń, a następnie omówienie korzystania z Visual Studio IDE do programowania w systemach Linux i Windows.
...
Konkretny przykład aplikacji mikrokontrolera
Jest to obraz płytki mikrokontrolera z automatycznego ekspresu do kawy. Wydaje się, że jest to standardowy element automatycznych ekspresów do kawy produkowanych w Chinach. Strona internetowa producenta jest wydrukowana na płytce drukowanej.
Obraz składa się z dwóch widoków. Widok po lewej stronie jest z tyłu płyty zawierającej mikrokontroler i obwody podtrzymujące. Widok z prawej strony to przód tablicy z ekranem LCD i zestawem przycisków, które służą do ustawiania aktualnego czasu i wykonywania czynności takich jak programowanie czasu rozpoczęcia itp.
Widok z prawej strony mieści się w uchwycie, który następnie wpasowuje się w otwór z przodu ekspresu do kawy. Przełączniki na dolnej płytce drukowanej są uruchamiane przełącznikami wahacza. Wyświetlacz LCD, który wydaje się być specjalnym przeznaczeniem, służy do wyświetlania aktualnego czasu i statusu, a także do wyświetlania interfejsu użytkownika podczas zmiany ustawień ekspresu do kawy. Czerwona dioda LED służy do wskazania, kiedy ekspres do kawy faktycznie robi kawę oraz do wskazania, kiedy zostanie to zrobione przez wyłączenie podświetlenia.
Mikrokontrolerem jest ELAN Microelectronics Corp EM78P447NAM (arkusz danych), który jest 8-bitowym mikrokontrolerem. Niektóre podstawowe statystyki pokazują, jakie to małe i minimalne urządzenie, jednak działa dobrze zgodnie z przeznaczeniem. Celem jest opracowanie oprogramowania, które jest następnie pobierane do pamięci ROM raz w ramach produkcji.
źródło