Programowanie Arduino za pomocą Pythona zamiast C / C ++

36

Nie jestem zbyt dobrze zaznajomiony z językiem C i zastanawiałem się, czy istnieje sposób, w jaki można użyć Pythona do programowania Arduino. Najprawdopodobniej wymagałoby to innego IDE, aby móc samodzielnie debugować skrypty.

JVarhol
źródło
2
Istnieje kilka alternatyw dla programowania Arduino, jedną z nich jest BitLash i istnieje podstawowy interpreter . Istnieje kilka opcji podczas wyszukiwania w Internecie, ale nauka C / C ++ ostatecznie się opłaci.
jippie
Dzięki, w rzeczywistości jestem coraz lepszy w C, po prostu nie tak dobry jak w Pythonie.
JVarhol
2
powiązane, bardziej ogólne pytanie: „Opcje programowania Arduino inne niż C ++”
David Cary
Czy malinowy PI jest opcją?
Paul

Odpowiedzi:

26

Bardzo trudno będzie uruchomić jakikolwiek skrypt Pythona bezpośrednio na Arduino. Powodem jest to, że jest to język interpretowany, więc oprócz zwykłego skryptu tekstowego potrzebujesz tłumacza na pokładzie. Prawdopodobnie na to wszystko nie wystarczy.

Najlepszym rozwiązaniem byłoby prawdopodobnie znalezienie sposobu na skompilowanie skryptu Python do natywnego kodu maszynowego (tak działa C / C ++). Wierzę, że istnieją projekty, które mogłyby zrobić coś takiego na innych platformach, ale (o ile mi wiadomo) nie ma takich, które by to zrobiły z powodzeniem dla Arduino.

Więcej przydatnych informacji na temat tego pytania można znaleźć na stronie Przepełnienie stosu: czy istnieje sposób na „skompilowanie” kodu Pythona w Arduino (Uno) .

Peter Bloomfield
źródło
15

Tak, możliwe jest (nieco) zaprogramowanie Arduino za pomocą Pythona. Jednym z takich projektów w Github jest Python Arduino Prototyping API v2 . Zapewnia bardzo podstawowe funkcje, takie jak cyfrowe we / wy i analogowe we / wy.

Można to wykorzystać do bardzo prostych projektów.


* Ten projekt to trochę włamanie do „programowania” płyty za pomocą połączenia szeregowego. Przekazuje polecenia przez połączenie szeregowe do szkicu uruchomionego na płycie, który następnie „wykonuje” polecenie Python.

asheeshr
źródło
Czy więc tablica musi być podłączona do komputera, aby uruchomić kod?
JVarhol
@JVarhol Dziwne, tak.
asheeshr
1
Cóż, to dość gówniane. Łatwiej byłoby użyć Raspberry Pi.
JVarhol
8

Istnieje projekt, który przenosi maszynę wirtualną Python do mikrokontrolerów, w tym Arduino Mega .

Oto cytat z Ardunio Mega README , który daje wyobrażenie o tym, jak to może być (choć tego nie testowałem!):

Oto przykładowa sesja z użyciem ipm ::

ipm> import avr, sys
ipm> avr.ddrA(0xff)
ipm> avr.portA(0)       # Pins 22-29 all at 0 V
ipm> avr.portA(0xa5)
ipm> sys.heap()
(2622, 7424)
Matthew G.
źródło
3

Z dużym powodzeniem stosowałem pyserial w kontrolowaniu pinów na arduino. Twoja stacja robocza (laptop itp.) Uruchamia skrypt Pythona, który następnie komunikuje się w czasie rzeczywistym z arduino.

Nie jest to dokładnie to samo, co uruchamianie skryptu bezpośrednio na arduino, ale robiłem o wiele więcej, niż myślałem, że arduino może sobie z tym poradzić (analiza muzyki, trafienie w interfejs API REST itp.).

ukłon
źródło
3

Inną opcją do rozważenia jest Arduino Yun . Oprócz układu AVR, który ma większość Arduinos, zawiera on także układ MIPS z systemem Linux. Ponieważ jest to linux, możesz łatwo uruchomić kod Pythona, a każdy pakiet czysto pythonowy może być łatwo zainstalowany.

Jednak wszystkie interesujące możliwości wejścia / wyjścia dotyczą układu AVR, a nie układu MIPS. Projekty takie jak Autobahn i LininoIO rozwiązują ten problem, uruchamiając specjalny program na układzie AVR, który wykonuje operacje wejścia / wyjścia zgodnie z instrukcjami z układu MIPS.

DaveP
źródło
0

Wiemy, że jest to otwarty problem w programowaniu Arduino i ogólnie w świecie osadzonym. Na rynku dostępne są różne rozwiązania, takie jak MicroPython, ale większość z nich jest dedykowana do konkretnych płyt i nie pozwala na utrzymanie systemu w czasie rzeczywistym. Pracujemy nad rozwiązaniem! VIPER to wirtualna maszyna Pythona dla Arduino DUE i wszystkich 32-bitowych architektur ARM, działająca na systemie operacyjnym czasu rzeczywistego. Oznacza to, że możesz opracowywać skrypty Pythona, które mogą być wyeksportowane przez Arduino DUE, UDOO, Spark (wszystkie płyty), a także na nowych płytach nukleonowych ST. Ponadto, jeśli potrzebujesz wysokiej wydajności i jesteś biegły w C, możesz opracowywać moduły w czasie rzeczywistym dla VIPER, które mogą być wywoływane i zarządzane przez skrypty Pythona.

Możesz zobaczyć VIPER w akcji tutaj http://bit.ly/kickviper

Daniele Mazzei
źródło
To nie jest otwarty problem. python to straszny język wcięć.
user2497
0

Możesz nauczyć się od C (AVR), jak działają czujniki, ale wymaga to dużo więcej czasu. Arduino IDE Code i Python Code dla Arduino używają funkcji C Code, aby uprościć sprawę. Python i Arduino IDE, jeśli używają Firmaty, używają komunikacji szeregowej i myślisz, że sam kodujesz.

xrhstos
źródło
-1

Tak. Python może być używany do programowania Arduino, po prostu importując pyfirmata, które mogą arduino interfejsować z Pythonem.

jestem szczęściarzem
źródło
Prawdziwe. Ale nie o to prosi OP.
sempaiscuba
-8

Obawiam się, że Arduino IDE nie używa języka C / C ++. Pochodzi z Processing IDE i ma dość uproszczoną składnię podobną do C / Java.

Andrzej Marczak
źródło
9
Arduino IDE to C ++: wykonuje pewne minimalne przetwarzanie wstępne (poprzedza „#include <Arduino.h>” i deklaracje dla zdefiniowanej funkcji), a następnie wywołuje zwykły kompilator C ++ (GNU g ++).
Edgar Bonet
Jest to samo IDE, a nie język programowania wywodzący się z przetwarzania.
Peter Bloomfield
Praktycznie nikt nie dba o wdrożenie IDE na Arduino. Chodzi o to, aby móc napisać Python, który działa skutecznie na Arduino.
wallyk