Programmazione di un Arduino usando Python, piuttosto che C / C ++


36

Non sono molto abile con il linguaggio C e mi chiedevo se esiste un modo in cui python potesse essere usato per programmare un Arduino. Ciò richiederebbe probabilmente un IDE diverso per poter eseguire il debug degli script stessi.


2
Ci sono un paio di alternative per programmare Arduino, una è BitLash e c'è un interprete di base . Ci sono un paio di opzioni quando cerchi in Internet, ma l'apprendimento del C / C ++ alla fine pagherà.
jippie,

Grazie, in realtà sto migliorando un po 'in C, ma non come in Python.
JVarhol,


Un PI lampone è un'opzione?
Paul,

Risposte:


26

Sarà estremamente difficile ottenere qualsiasi tipo di script Python in esecuzione direttamente su Arduino. Il motivo è che si tratta di un linguaggio interpretato, quindi è necessario un interprete integrato oltre allo script di testo normale. Probabilmente non ci sarà abbastanza memoria per tutto ciò.

La tua scommessa migliore sarebbe probabilmente trovare un modo per compilare uno script Python in codice macchina nativo (che è come funziona C / C ++). Credo che ci siano progetti in giro per fare qualcosa del genere per altre piattaforme, ma (per quanto ne so) nessuno che lo faccia ancora con successo per Arduino.

Potresti trovare alcune informazioni più utili su questa domanda in Stack Overflow: c'è un modo per "compilare" il codice Python su un Arduino (Uno) .


15

Sì, è (in qualche modo) possibile programmare Arduino usando Python. Uno di questi progetti su Github è l' API di Python Arduino Prototyping v2 . Fornisce funzionalità di base come l'I / O digitale e l'I / O analogico.

Questo può essere usato per progetti molto semplici.


* Questo progetto è un po 'un trucco per "programmare" la scheda usando la connessione seriale. Passa i comandi sulla connessione seriale a uno schizzo in esecuzione sulla scheda che "esegue" il comando Python.


Quindi la scheda deve essere collegata a un computer per poter effettivamente eseguire il codice?
JVarhol,

@JVarhol Stranamente, sì.
asheeshr,

1
Bene, è piuttosto schifoso. Sarebbe più facile usare un Raspberry Pi.
JVarhol,

8

Esiste un progetto che porta una macchina virtuale Python ai microcontroller, incluso Arduino Mega .

Ecco una citazione dell'Ardunio Mega README , che dà un'idea di come potrebbe essere (ma non l'ho provato!):

Di seguito è riportata una sessione di esempio che utilizza 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)

3

Ho usato pyserial con grande successo nel controllo dei pin sull'arduino. La workstation (laptop, ecc.) Esegue uno script Python che comunica in tempo reale con Arduino.

Non è esattamente come eseguire lo script direttamente sull'arduino, ma stavo facendo un po 'più di quanto pensassi che l'arduino potesse gestire (alcune analisi musicali, colpire un API REST, ecc.).


3

Un'altra opzione da considerare è l' Arduino Yun . Oltre al chip AVR di cui dispone la maggior parte degli Arduinos, include anche un chip MIPS con Linux. Dal momento che è Linux, puoi facilmente eseguire il codice Python e qualsiasi pacchetto Pure-Python può essere facilmente installato.

Tuttavia, tutte le interessanti funzionalità di input / output si trovano sul chip AVR, non sul chip MIPS. Progetti come Autobahn e LininoIO risolvono questo problema eseguendo un programma speciale sul chip AVR che esegue le operazioni di I / O sotto le istruzioni del chip MIPS.


0

Sappiamo che questo è un problema aperto nella programmazione di Arduino e nel mondo embedded in generale. Esistono varie soluzioni disponibili sul mercato come MicroPython, ma la maggior parte sono dedicate a schede specifiche e non consentono di mantenere il sistema in tempo reale. Stiamo lavorando a una soluzione! VIPER è una macchina virtuale Python per Arduino DUE e tutte le architetture ARM a 32 bit che gira su un sistema operativo in tempo reale. Ciò significa che è possibile sviluppare script Python che possono essere eseguiti da Arduino DUE, UDOO, Spark (tutte le schede) e anche sulle nuove schede ST nucleo. Inoltre, se hai bisogno di prestazioni elevate e sei esperto in C, puoi sviluppare moduli in tempo reale per VIPER che possono essere chiamati e gestiti dagli script Python.

Puoi vedere VIPER in azione qui http://bit.ly/kickviper


Non è un problema aperto. python è un orribile linguaggio di rientro.
user2497

0

Potresti imparare da C (AVR) come funzionano i sensori ma richiede molto più tempo. Arduino IDE Code e Python Code per Arduino utilizzano le funzioni del codice C per semplificare le cose. Python e Arduino IDE se usano Firmata usano la comunicazione seriale e pensi di scrivere codice.


-1

Sì. Python può essere usato per programmare un Arduino, semplicemente importando pyfirmata, che può interfacciare l'arduino con Python.


Vero. Ma non è questo ciò che l'OP chiede.
sempaiscuba,

-8

Temo che Arduino IDE non usi il linguaggio C / C ++. Deriva dall'IDE di elaborazione e ha una sintassi semplificata simile a C / Java.


9
L'IDE di Arduino è C ++: esegue un minimo di preelaborazione (antepone "#include <Arduino.h>" e dichiarazioni per la funzione che hai definito), quindi chiama un normale compilatore C ++ (GNU g ++).
Edgar Bonet,

È l'IDE stesso piuttosto che il linguaggio di programmazione che deriva dall'elaborazione.
Peter Bloomfield,

Praticamente a nessuno interessa implementare l'IDE su Arduino. Il punto è poter scrivere Python che si esegue in modo efficiente su Arduino.
Wallyk,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.