Comment programmer une carte arduino (Yun) en python ?

Bonjour à tous.

Voilà je cherche maintenant depuis lomptemps à programmer une carte arduino en python.
Quand je dit programmer en python, cela veut dire que soit le code sur la carte arduino est un code python, soit que je peut commander la carte en python depuis un PC.
C'est à dire sans coder la moindre ligne en C. Je veut pouvoir gérer les entrée et sorties de la carte (par exemple pour allumer une LED) seulement avec du python.
Je me suis aperçu avec une arduino Uno que l'on pouvait faire réagir la carte avec un code python externe (de puis un PC), mais que les fonction d'allumage/alimentation d'une sortie devait être codées en C. Seul la partie "traitement des données" est réalisé en python.
Depuis peu j'ai acquis une carte Arduino Yun, qui possède un noyau linux supportant Python.
Or j'ai beaucoup de mal à trouver des informations un tant soit peu exploitables, et je ne comprends pas bien le fonctionnement du code python sur cette carte:
Peut-on programmer la carte arduino Yun seulement en python ? Pas seulement embarquer un code python dans le noyaux linux et l'interfacer avec le C du code arduino, mais vraiment gérer toutes les entrées/sorties de la carte ?
Comment fonctionne les librairies "Bridge" dont j'entend (enfin je vois :)) parler sur le net ? Permettent elle seulement de transférer des infos entre python et le C, ou vraiment de programmer en python cette carte ?

J'avoue avoir passer énormément de temps :frowning: à chercher des tutos, des bouts de code, juste des explications, et je ne trouve que des interfaçages Python/C. Sommes nous dans un monde de masochistes ou tous veullent faire du C et pas de Python ? :stuck_out_tongue:
Ou n'ai-je pas compris quelques chose ?

Comment faire ? Quelqu'un a-t-il déjà chercher/réussi à programmer son Arduino en python ? Est ce seulement possible ?

Merci beaucoup de votre aide.

NB: si je demande s'il existe un moyen de programmer seulement en Python, c'est parce que j'adore ce langage, que je ne connait pas le C et que je ne veut pas l'apprendre.
Donc merci d'éviter de me répondre qu'il faut me mettre au C, que je gagnerai du temps, etc. :0
Merci.

Bonsoir,
As-tu fait une recherche, sur qui tu sais, avec "cross compiler python for arduino" ou "compile python for arduino" ?
@+

Si tu regardes un peu l'architecture de la carte tu vois que d'un coté tu as l'équivalent d'une Leonardo et de l'autre une machine Linux. Donc coté machine Linux tu peux coder en Python encore que le processeur n'est pas un foudre de guerre, par contre coté "Leonardo" tu es condamné au C.
Si tu ne voulais faire que du Python je pense que tu as fait une erreur de casting.

Bonjour,

Tu t'est planté de carte pour faire du uniquement du python.
Il te faudrait plutôt un Cubieboard, Olinuxino, Raspberry Pi, etc.

L'arduino Yun c'est un noyaux linux pour la partie réseau et une carte arduino Leonardo pour les entrées/sorties.
A moins de faire un programme (en c) qui fait le lien python/leonardo embarqué tu ne pourras pas coder uniquement en python.

Dans la mesure où le micro-contrôleur de l'Arduino doit être programmé en C et où tu ne veux pas apprendre le C, ton besoin est d'avoir une solution déjà toute prête (c'est-à-dire une solution où tu n'écriras pas une seule ligne de C).
Tu as alors deux possibilités:

Dans le second cas, ça fonctionne avec Firmata, qui est un protocole de communication que tu vas charger sur ta Uno et qui te permettra de l'interfacer avec ton PC sur lequel tu feras tourner ton programme en Python. Dans le premier cas c'est différent car le processeur utilisé n'est pas du même type que les Arduino "classiques". La référence au "Duino" est due à la possibilité de connecter des shields.
En tout cas, dans les deux cas ça fait exactement ce que tu veux: tu programmes en Python et tu ne vois pas le C. Après, si tu ne veux pas du tout qu'il y ait du C, et bien... ce n'est pas possible. D'ailleurs, l'interpréteur Python est écrit en C...

Merci à tous de vos réponses !
Ce n'est pas que je ne veut pas de C, c'est que je préfère éviter le plus possible d'avoir à y toucher. Venant du python ça se compend :P.
Et d'ailleurs c'est justement parce que python c'est du C que je ne voit pas pourquoi on ne pourrait pas en faire. Je me suis dit qu'il suffirai de le compiler avant, puis de l'avoyer sur la carte. Mais ainsi je ne peut utiliser les fonctions d'entrées/sorties fournies avec l'arduino. Comment les utiliser dans un code python ?

J'ai entendu parler de la librairie Bridge de la Yun, et j'ai vu passer des librairies bridge en python officielle. Ne permette-t-elle pas de commander les entrées et sorties depuis le coeur linux en python ?
J'avoue ne pas du tout comprendre comment elle marche, je n'ai trouvé aucune doc dessus, aucun tuto.
Je trouve bête qu'ils sit impossible de tout commander en python, puisque la carte intégre de base de quoi interfacer le python du linux avec le C de la Leaonardo. Pourquoi les fabricants de la carte ne se sont-ils pas dit qu'ils pouvaient se simplifier la vie et celle des utilisateurs ?

Bon sinon je chercherai du coté de PyDuino et Firmata (c'est pas top ces 2 modules qui ont le même nom ;)). J'ai toujours mon Uno, donc je peut voir comment faire avec elle. Ca marche aussi avec la Yun ?

Par rapport au perfs se n'est pas un problème, je ne construirai pas un serveur de-la-mort-qui-tue avec. Au mieux je ferait du streaming depuis ma webcam (VLC permet de le faire et s'interface en python). Et en compilant ou en utilisant des astuces (pour ceux qui connaissent, de la vectorisation avec NumPy, ou en utilisant Cython) je peut gagner en perfs un facteur 10 à 14. Déjà testé. Un fois j'ai battu un équivalent en C (un peu mal codé).

Merci encore de vos réponses.

La meilleure réponse à "comment fonctionne la Yun et à quoi sert Bridge" est ce schéma:

Tu as 2 micros, l'un qui se programme en C et qui peut gérer des E/S, l'autre que tu peux programmer en Python et qui ne gère pas les E/S. Conclusion, pour gérer les E/S depuis le coeur Linux, tu utilises Bridge qui comme son nom l'indique est un pont entre les 2 micros, utilisant une liaison série.
Si tu veux faire du Python et avoir l'impression de gérer les E/S de façon native, le mieux est de changer de carte (voir ma réponse précédente).

Et puis comme souvent, il y a une autre façon de voir les choses: que veux-tu faire au final ?
Si c'est allumer une led (ou un peu plus compliqué), franchement tu aurais tort de refuser le C car grâce à l'environnement Arduino tu as des fonctions de haut niveau qui te permettent de ne pas trop mettre les mains dans le cambouis.
Si c'est pour faire du serveur Web ou du streaming vidéo, c'est de toute façon la partie Linux de la Yun que tu vas utiliser et tu n'auras besoin de faire ni du C ni du Python car il y a des modules Linux qui existent déjà pour faire tout ça.

Bon je vais chercher du coté de Pyduino (celui pour arduino, pas pour PCduino). Tant que je n'ai pas à toucher au C, cela me convient. :slight_smile:
Le problème c'est que à cause de l'existence de son "double" du même nom, impossible de trouver ou le télécharger !?
Quelqu'un l'aurai-t-il déjà téléchargé/utilisé ?

Par rapport à ce que je veux faire au final, mes cartes me serviront pour de nombreuses choses différentes.
Pour le streaming vidéo je le ferait facilement et avec plus de contrôle en python.
Par rapport au C et à "mettre les mains dans le cambouis", la je dit non ! J'essaye actuellement de faire fonctionner un capteur de température qui écrit sur une carte SD, je galère énormément en C, malgrès les multiples exemples: aucun ne se compile de base !
Je préfère me compliquer la vie à chercher en Python, vu le gain futur...

Encore merci de vos réponses.

Pyduino pour Arduino se télécharge ici:
https://code.google.com/p/pyduino/

Tu as aussi un lien vers Firmata, que tu dois uploader sur ta carte.

Le streaming video en Python sur une Yun, quand tu auras réussi préviens-moi.

Le streaming video en Python sur une Yun, quand tu auras réussi préviens-moi.

Je ne sais pas si au niveau ressources de la Yun cela peut être faisable, mais si c'est le cas oui je te préviendrai ;).

Bon j'ai un problème avec Pyduino:

Tu as aussi un lien vers Firmata, que tu dois uploader sur ta carte.

J'ai bien uploadé comme demandé dans le readme le fichier Standard Firmata dans ma Yun.
Je lance pyduino avec python, tout fonctionne.
J'essaye le code d'exemple fourni avec, en testant un allumage toutes les secondes de la led 13 (cette led s'allume sur la Yun quand du courant est envoyé sur la sortie digitale n°13), et la c'est le drame: Quand je branche ma Yun, la led 13 clignote, ainsi qu'une led branchée sur la sortie digitale n°13. Donc cette sortie marche.
La led Rx clignote bien toute les secondes, comme prévue (j'envoi des données toutes les secondes).
Pourtant la led ne clignote pas !
Idem pour toute les sortie digitale. La Yun recoit mais ne s'allume pas !

Est-ce un bug ? Ou ai-je mal fait quelque chose ?

De mon côté ça marche, j'ai lancé la commande suivante:
python example.py COM18 2 13

Moi ça marche pas ^^.
Tu est bien sur une Yun ?
Peut tu me donner l'adresse de téléchargement de ton pyduino et de ton firmata ? Au cas ou je n'aurait pas la bonne version.

Merci. :slight_smile:

Oui, c'est bien une Yun.
Pour firmata, j'ai chargé sur la Yun l'exemple de l'IDE en version 1.5.4 (Fichier --> Exemples --> Firmata --> StandardFirmata). Après avoir sélectionné "Yun" dans la liste des cartes, bien sûr.
Pour Pyduino, j'ai téléchargé ces fichiers: https://code.google.com/p/pyduino/source/browse/#svn%2Ftrunk

Je n'ai rien de connecté sur les broches de la Yun. Elle est juste branchée sur l'ordi via l'USB.

Ok merci maintenant tout marche. Ma version été juste plus ancienne de 11 jours. :disappointed_relieved:
Par contre dans le fichier d'exemple il y a une syntaxe que je ne connaissait pas (en python): [pin >> 3]
Quel est ce '>>' ? Je ne trouve rien sur Google.

Merci je votre aide.

Plus de retour quand j'aurai fait du streaming en python ^^.

C'est le décalage de bit (binaire [Les recettes Python de Tyrtamos]).

Le décalage de bit ?? J'avoue ne pas vraiment comprendre à quoi il sert dans le code, mais une fois le mien modifié ça marche. Bien.
J'ai fait un test avec plusieurs LED, tout fonctionne.
Par contre j'ai un capteur de température/hygrométrie DHT11, ça:

Et j'ai lu dans des codes d'exemples (en C) qu'il été numérique, pas analogique, et qu'il fallait donc une librairie spéciale pour l'utiliser. Pyduino permet-il d'utiliser ce capteur ? Ou est-il limiter à de simple entrées/sorties basiques ? Dans ce cas la puis-je retraiter la sortie de ce capteur pour optenir la température ?

Autre question pour rendre mon code nomade, je vais l'embarquer dans la partie Linux de ma Yun: comment l'interfacer avec la partie Leonardo ? Par quel port ? Sur mon PC (sous un OS Linux) je passe par le port /dev/ttyACMX (X est un numéro). Sous ce linux la il faut passer par Bridge ? Comment l'utiliser en python ?

J'ai beaucoup de questions en tête ces derniers temps :D.
Merci encore de ton aide.

Un décalage de bit sera à faire une multiplication ou une division par 2 beaucoup plus rapidement qu'en faisant une multiplication classique.

Avec ton capteur d'humidité, tu atteints les limites de ce qui est faisable en Python avec de l'Arduino. Si tu veux continuer à utiliser Firmata, tu dois y inclure la bibliothèque C du DHT11... et donc faire un peu de C.
Faire tout en Python n'est pas jouable car entre l'Arduino et ton script Python, tu as la lenteur d'une liaison série. Donc tu ne pourras pas utiliser tous les capteurs qui fonctionnent avec des protocoles digitaux comme celui-ci. A moins de faire tout le traitement bas niveau dans le programme Arduino (modification de Firmata).

Si tu veux faire du 100% Yun, le même prinicipe s'applique: au lieu de faire tourner ton script sur un PC, tu le fais sur la partie Linino et tu communiques avec la partie Arduino via la liaison série (je ne sais pas comment elle s'appelle mais l'info doit bien trainer quelque part).
Ceci pourra peut-être t'aider: http://www.instructables.com/id/Interface-Arduino-to-MySQL-using-Python/?ALLSTEPS

bonjours a tous
j'ai un petite problem, comment rajouté l'atmegaS128 sur le logiciel d'arduino afin de le programmé?