web-dev-qa-db-fra.com

Existe-t-il un moyen de "compiler" Python dans un Arduino (Uno)?

J'ai un projet de type robotique avec un Arduino Uno , et pour faire court, j'expérimente avec quelques algorithmes d'IA. Cependant, j'ai besoin d'implémenter des algorithmes de matrice de haut niveau qui seraient assez simples en utilisant NumPy / SciPy , mais ils sont un véritable cauchemar en C ou C++. Même avec les bibliothèques, cela devient tout simplement ridicule.

Existe-t-il un moyen de faire ce projet en Python? Je pense que j'ai entendu quelque chose à propos du Mega ayant cette capacité, mais j'ai un Uno, et le remplacer n'est pas une option à ce stade (cela retarderait un peu le projet.) De plus, je entendu quelque chose à propos de l'utilisation de Python pour communiquer avec l'Arduino via USB, mais je ne peux pas avoir le câble USB pendant que la chose fonctionne. J'ai besoin de pouvoir télécharger le programme et en finir avec lui .

Y a-t-il des options là-bas, ou est-ce que je viens d'atteindre une impasse?

54
Alex Eftimiades

Il y a eu une discussion sur l'utilisation de Python avec la robotique cette année PyConA appelé ( Ah! Je vois que vous avez le machine qui va 'BING'! par le Dr Graeme Cross.

La seule option qu'il a recommandée pour utiliser Python sur une carte à microcontrôleur était PyMite qui, je pense, porte également le nom de Python-On-A-Chip .

Il a été porté sur une gamme de cartes - en particulier, il mentionne l'Arduino Mega qui, selon vous, n'est pas une option pour vous, mais il est possible qu'il soit pris en charge sur d'autres cartes Arduino.

Cependant, comme il s'agit d'une version "batteries non incluses" de Python, il est plus que probable que vous aurez un vrai problème pour que numpy/scipy etc. soit opérationnel.

Comme d'autres affiches l'ont suggéré, la mise en œuvre en C pourrait être la voie de la moindre résistance.

Mise à jour: encore une fois, pas spécifiquement pour Arduino, mais pyMC cherche à fournir python sur une puce. L'auteur déclare qu'il pourrait envisager de développer une version Arduino de pyMCU s'il y a suffisamment d'intérêt.

21
Mark Streatfield

J'ai commencé à travailler sur un "Little Python" en C++ (appelé Pyxie - un jeu sur le compilateur Py CC-Pyc-C), dans le but spécifique de compiler un sous-ensemble sain de python en C++ tel qu'il puisse fonctionner sur un Arduino.

Ceci est loin d'être terminé au moment de la rédaction (0.0.16), mais il peut actuellement compiler un très petit sous-ensemble de python - assez pour que l'exemple "blink" de l'arduino s'exécute. , il a un profil de compilation - ce qui signifie essentiellement "compiler à l'aide de la chaîne d'outils Arduino".

Un programme qu'il peut compiler ressemble à ceci:

led = 13

pinMode(led, OUTPUT)

while True:
  digitalWrite(led, HIGH)
  delay(1000)
  digitalWrite(led, LOW)
  delay(1000)

Cela analyse, effectue une analyse (comme l'inférence de type, etc.), compile en C++, qui est ensuite compilé dans un fichier hexadécimal, que vous pouvez charger sur votre appareil.

Il y a un long chemin à parcourir avant qu'il ne soit utile , mais il progresse et a une feuille de route/etc.

En particulier, une différence clé par rapport à Micropython (et PyMite) est qu'il est conçu pour être compilé sur des appareils trop petits pour exécuter l'une ou l'autre implémentation. (Cela signifie également qu'il est très différent de choses comme ShedSkin qui alors qu'un compilateur Python vers C++ cible des environnements d'exécution plus grands))

5
Michael Sparks

Il sera difficile d'obtenir tout type de script Python s'exécutant directement sur l'Arduino uno. La raison en est qu'il s'agit d'un langage interprété, vous aurez donc besoin d'un interprète à bord en plus du script en texte brut. Il n'y aura probablement pas assez de mémoire pour tout cela dans arduino uno.

Ce que vous pouvez faire de mieux est de trouver un moyen de compiler un Python en code machine natif (c'est ainsi que C/C++ fonctionne). J'ai vu des projets autour de faire quelque chose comme ça pour d'autres plates-formes, mais (pour autant que je sache) aucune qui le fait avec succès pour Arduino uno encore.

vous pouvez visiter http://www.toptechboy.com/using-python-with-arduino-lessons/ pour en savoir plus.

souhaite que cela vous aidera. Merci!

1
shubham kumar