Programmer un Arduino en utilisant Python, plutôt que C / C ++

36

Je ne suis pas très habile avec le langage C et je me demandais s’il existait un moyen d’utiliser python pour programmer un Arduino. Cela nécessiterait très probablement un IDE différent pour pouvoir déboguer les scripts eux-mêmes.

JVarhol
la source
2
Il existe plusieurs alternatives pour programmer Arduino, dont BitLash et un interpréteur de base . Il existe plusieurs options lorsque vous effectuez une recherche sur Internet, mais apprendre le C / C ++ sera rentable à la fin.
Jippie
Merci, je m'améliore un peu en C, mais pas aussi bien qu'avec Python.
JVarhol
2
question plus générale connexe: "Options de programmation Arduino autres que C ++"
David Cary
Une framboise PI est-elle une option?
Paul

Réponses:

26

Il sera extrêmement difficile d’exécuter un script Python directement sur l’Arduino. La raison en est qu'il s'agit d'un langage interprété. Vous aurez donc besoin de l'interprète intégré en plus du script en texte brut. Il n'y aura probablement pas assez de mémoire pour tout cela.

Votre meilleur pari serait probablement de trouver un moyen de compiler un script Python en code machine natif (comment C / C ++ fonctionne). Je pense qu'il existe des projets autour de faire quelque chose comme ça pour d'autres plates-formes, mais (autant que je sache), aucun ne l'a encore fait avec succès pour Arduino.

Vous trouverez peut-être des informations plus utiles sur cette question sur Stack Overflow: existe-t-il un moyen de "compiler" du code Python sur un Arduino (Uno) .

Peter Bloomfield
la source
15

Oui, il est (un peu) possible de programmer l'Arduino en Python. L'un de ces projets sur Github est l' API v2 de prototypage Arduino Python . Il fournit des fonctionnalités très basiques telles que les E / S numériques et les E / S analogiques.

Ceci peut être utilisé pour des projets très simples.


* Ce projet est un peu un hack pour "programmer" la carte en utilisant la connexion série. Il transmet les commandes via la connexion série à une esquisse exécutée sur le tableau, qui "exécute" ensuite la commande Python.

Asheeshr
la source
La carte doit donc être connectée à un ordinateur pour pouvoir exécuter le code?
JVarhol
@ JVarhol Bizarrement, oui.
Asheeshr
1
Eh bien, cette jolie merde. Il serait plus facile d'utiliser un Raspberry Pi.
JVarhol
8

Un projet apporte une machine virtuelle Python à des micro-contrôleurs, y compris Arduino Mega .

Voici une citation du README Ardunio Mega , qui donne une idée de ce à quoi cela pourrait ressembler (bien que je n’aie pas testé cela!):

Voici un exemple de session utilisant 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.
la source
3

J'ai utilisé pyserial avec un grand succès pour contrôler les broches de l'arduino. Votre poste de travail (ordinateur portable, etc.) exécute un script python qui communique ensuite en temps réel avec l'arduino.

Ce n'est pas tout à fait la même chose que d'exécuter le script directement sur l'arduino, mais je faisais un peu plus que ce que je pensais que l'arduino pouvait gérer (quelques analyses de musique, un api REST, etc.).

hochement
la source
3

Une autre option à considérer est l' Arduino Yun . Outre la puce AVR dont disposent la plupart des Arduinos, il inclut également une puce MIPS sous Linux. Comme il s'agit de linux, vous pouvez facilement exécuter du code python, et n'importe quel paquet pur-python peut être facilement installé.

Cependant, toutes les capacités d’entrée / sortie intéressantes se trouvent sur la puce AVR, pas sur la puce MIPS. Des projets tels que Autobahn et LininoIO résolvent ce problème en exécutant un programme spécial sur la puce AVR qui effectue des opérations d'E / S sur instruction de la puce MIPS.

DaveP
la source
0

Nous savons que la question est ouverte dans la programmation Arduino et dans le monde intégré en général. Il existe différentes solutions sur le marché, telles que MicroPython, mais la plupart d’entre elles sont dédiées à des cartes spécifiques et ne permettent pas de garder le système en temps réel. Nous travaillons sur une solution! VIPER est une machine virtuelle Python pour Arduino DUE et toutes les architectures ARM 32 bits s'exécutant sur un système d'exploitation en temps réel. Cela signifie que vous pouvez développer des scripts Python pouvant être exécutés par Arduino DUE, UDOO, Spark (toutes les cartes) et également sur les nouvelles cartes nucléo ST. De plus, si vous avez besoin de hautes performances et que vous maîtrisez le C, vous pouvez développer des modules en temps réel pour VIPER qui peuvent être appelés et gérés par les scripts Python.

Vous pouvez voir VIPER en action ici http://bit.ly/kickviper

Daniele Mazzei
la source
Ce n'est pas une question ouverte. Le python est un langage d'indentation horrible.
user2497
0

Vous pouvez apprendre de C (AVR) comment fonctionnent les capteurs, mais il faut beaucoup plus de temps. Le code IDE Arduino et le code Python pour Arduino utilisent les fonctions de code C pour simplifier les choses. Python et Arduino IDE s’ils utilisent Firmata, ils utilisent une communication série et vous pensez vous coder vous-même.

Xrhstos
la source
-1

Oui. Python peut être utilisé pour programmer un Arduino, simplement en important pyfirmata, qui peut interfacer l'arduino avec Python.

J'ai de la chance
la source
Vrai. Mais ce n'est pas ce que demande le PO.
Sempaiscuba
-8

Je crains que l'IDE Arduino n'utilise pas le langage C / C ++. Il est dérivé de Processing IDE et a une syntaxe assez simplifiée, semblable à C / Java.

Andrzej Marczak
la source
9
L'EDI Arduino est en C ++: il effectue un prétraitement minimal (ajoute «#include <Arduino.h>» et les déclarations de la fonction que vous avez définie), puis appelle un compilateur C ++ standard (GNU g ++).
Edgar Bonet
C'est l'EDI lui-même plutôt que le langage de programmation dérivé de Processing.
Peter Bloomfield
Pratiquement personne ne se soucie de l'implémentation de l'IDE sur l'Arduino. Le but est de pouvoir écrire Python qui s'exécute efficacement sur l'Arduino.
Wallyk