Arduino Leonardo problème de compilation/uploading sous linux

Mesdames messieurs bonjour,

Je me permets de vous demander conseil, si ce sujet a déjà été abordé veuillez m'excuser de vous faire perdre votre temps (et le mien ^^).

Voila je programme depuis un petit moment sur un Arduino Uno pour un projet personnel sur un Quadrotor. En voyant le nouvel Arduino Leonardo je me suis dit "chouette il est moins chère et plus fin et j'aurais pas à dé-souder toutes les pins pour ressouder mes fils". Bref!

Au début je pensais que l'utilisation du logiciel était entièrement transparente. J'ai vite vue que non. Par conséquent j'ai trouvé sur internet comment changer le fichier "board.txt" pour identifier les paramètres intrinsèques de Leonardo. Mais malheureusement ça ne compile pas....

A ma première ligne de code qui n'est ni un #include ni un #define il me retourne l'erreur suivante :

..../arduino/hardware/arduino/cores/arduino/HardwareSerial.h:64:23: fatal error: usb_api.h: aucun fichier de ce nom existant.

Du coup ma première question serait : que faire? Et en réfléchissant un peu : où trouver cette API?

Merci par avance pour votre aide.

Mike!

Salut,

Pourquoi avoir modifié le fichier boards.txt. La Leonardo est censée être prise en charge par Arduino 1.0.1, non ?

Bonjour,

MikeLarson:
Au début je pensais que l'utilisation du logiciel était entièrement transparente. J'ai vite vue que non. Par conséquent j'ai trouvé sur internet comment changer le fichier "board.txt" pour identifier les paramètres intrinsèques de Leonardo. Mais malheureusement ça ne compile pas....

Les choses ne sont pas si simple et transparente avec les cartes leonardo :wink:
C'est pas du tout la même chose qu'une carte arduino classique.

Quelques liens :
http://arduino.cc/forum/index.php/topic,112471.0.html
[Test] Olimexino-32U4 (Arduino Leonardo compatible) et arduino 1.0.1 | Skyduino - Le DIY à la française (2eme partie)
[Hack] Utiliser teensyduino avec une carte arduino leonardo ou compatible leonardo | Skyduino - Le DIY à la française (pour les curieux)

MikeLarson:
..../arduino/hardware/arduino/cores/arduino/HardwareSerial.h:64:23: fatal error: usb_api.h: aucun fichier de ce nom existant.

Du coup ma première question serait : que faire? Et en réfléchissant un peu : où trouver cette API?

C'est un fichier de base inclut dans l'ide arduino 1.0.1 qui est obligatoire pour pouvoir coder sur une carte arduino leonardo.

SesechXP:
Pourquoi avoir modifié le fichier boards.txt. La Leonardo est censée être prise en charge par Arduino 1.0.1, non ?

Je suis sous linux, j'ai effectué un traditionnel sudo apt-get install arduino en pensant que ça me donnerais la dernière version. Mais apparement j'ai eu tord.... Surtout que sur le site est marqué que pour Linux il n'y a pas de modification à faire pour programmer sur Leonardo (donc dans ma tête pas de soucis). C'est pour cela que j'ai changé à la main le board.txt. Mais je pense qu'il vaudrait mieux avoir l'IDE complète, car je pense ne pas l'avoir.... Je regarderais ça ce soir.

skywodd:
Bonjour,

Quelques liens :
http://arduino.cc/forum/index.php/topic,112471.0.html
[Test] Olimexino-32U4 (Arduino Leonardo compatible) et arduino 1.0.1 | Skyduino - Le DIY à la française (2eme partie)
[Hack] Utiliser teensyduino avec une carte arduino leonardo ou compatible leonardo | Skyduino - Le DIY à la française (pour les curieux)

Merci pour ces liens c'est vraiment intéressant!! Du coup j'ai encore posté un commentaire... Mais sur ta page!!!
Je continue d'étudier tout ça et je fais des retours

Merci à vous deux!!

Mike

MikeLarson:
Je suis sous linux, j'ai effectué un traditionnel sudo apt-get install arduino en pensant que ça me donnerais la dernière version. Mais apparement j'ai eu tord.... Surtout que sur le site est marqué que pour Linux il n'y a pas de modification à faire pour programmer sur Leonardo (donc dans ma tête pas de soucis). C'est pour cela que j'ai changé à la main le board.txt. Mais je pense qu'il vaudrait mieux avoir l'IDE complète, car je pense ne pas l'avoir.... Je regarderais ça ce soir.

Ne jamais prendre les version des dépots apt de l'ide arduino. :wink:
Toujours prendre l'archive la plus récente sur le site arduino.cc.

Les dépôts ne sont jamais mis à jour pratiquement.
Il y a peu c'était encore la version 0018, puis il ont dénié passer en 0023, aujourd'hui je ne sait même pas quelle version il ont en stock ...

skywodd:
Les dépôts ne sont jamais mis à jour pratiquement.
Il y a peu c'était encore la version 0018, puis il ont dénié passer en 0023, aujourd'hui je ne sait même pas quelle version il ont en stock ...

Ceci expliquerait cela...... Bon ben je fais ça ce soir alors, peut être que mes problèmes seront résolus.

Merci

C'est déjà plus à jour (1.0.1) dans les dépots Debian :

(pas encore testé , mais 1.0.1 apporte la prise en charge de Leonardo)

skywodd:
Les dépôts ne sont jamais mis à jour pratiquement.
Il y a peu c'était encore la version 0018, puis il ont dénié passer en 0023, aujourd'hui je ne sait même pas quelle version il ont en stock ...

Depuis Ubuntu 12.04 c'est la version 1.0. Pour les autres distributions je ne sais pas...

Ne jamais prendre les version des dépots apt de l'ide arduino. smiley-wink
Toujours prendre l'archive la plus récente sur le site arduino.cc.

Faux faux et faux c'est tout le contraire.
En tout cas avec Debian et donc avec Ubuntu qui est basée sur Debian testing/Sid. Soit la quasi totalité des utilisateurs de Linux.

La version stable est certes toujours en 018 : c'est normal pour une stable les versions ne changent pas, il n'y a que des mises à jour de sécurité. La stable Debian c'est du béton, c'est fait pour les serveurs.

Par contre même avec une stable il est possible d'utiliser les dernières versions de l'IDE arduino qui sont revues par des informaticiens de chez Debian et qui ont de ce fait des utilitaires gcc et avr plus à jour que dans l'IDE officielle Arduino.

Méthode :
-Incorporer les dépots "testing" et "Sid" dans le fichier sources.list
-Créer un fichier préférence afin d'éviter de se retrouver automatiquement en Sid.

Pour, à partir d'une stable, charger manuellement la dernière version disponible dans testing :
#aptitude install -t testing nom_du_paquet

Vie d'un paquet chez Debian :
-Paquet entièrement nouveau ou profondément changé = zone "experimental" (pour kamikase) puis passage en Sid.
-Nouvelle mise à jour : passage de 2 semaines à 1 mois dans le dépôt SID (Still In Developement)
-Après validation dans SID passage dans Testing

Changement de version de distribution :
Pas de contrainte marketing ni d'actionnaires à rémunérer : chez Debian ça sort quand c'est prêt.
Et c'est prêt en moyenne tout les 2 ans/2ans et demi.

J'ai personnellement vérifié que dans la version 1.00 officielle Arduino pour linux la version avr-libc était en retard par rapport à celle disponible dans le paquet debian testing !

Il faudrait un jour arrêter de rabâcher les vieilles fausses affirmations sur Linux qui ont vraiment la vie dure.

68tjs:
La version stable est certes toujours en 018 : c'est normal pour une stable les versions ne changent pas, il n'y a que des mises à jour de sécurité. La stable Debian c'est du béton, c'est fait pour les serveurs.

Les paquets en unstable sous debian c'est pas l'approche logique d'un utilisateur debian, debian = stabilité.
Si la team arduino fourni des archives d'installation linux x32 et x64 ainsi qu'un script d'installation des dépendances c'est pas pour rien.

68tjs:
Par contre même avec une stable il est possible d'utiliser les dernières versions de l'IDE arduino qui sont revues par des informaticiens de chez Debian et qui ont de ce fait des utilitaires gcc et avr plus à jour que dans l'IDE officielle Arduino.

Ce qui n'est absolument pas un avantage puisque l'ide arduino est testé avec seulement quelques version de avr-gcc.
Il y a par exemple une version de avr-gcc qui est complétement corrompu avec l'ide arduino (je me rappelle plus de la version exacte, mais ça avait fait grand bruit)

68tjs:
J'ai personnellement vérifié que dans la version 1.00 officielle Arduino pour linux la version avr-libc était en retard par rapport à celle disponible dans le paquet debian testing !

Même raison qu'au dessus, la team arduino choisi les versions en fonctions de ce qui marche, pas de ce qui est le plus récent.
Avoir la toute derniére version de la toolchain avr pour coder sous arduino n'est absolument pas utile.

68tjs:
Il faudrait un jour arrêter de rabâcher les vieilles fausses affirmations sur Linux qui ont vraiment la vie dure.

Je suis utilisateurs linux depuis pas mal de temps et désolé quand je veut un programme vraiment à jour je le prend à la source, au concepteur lui même.
Les paquets c'est super (je les utilisent comme tous le monde) parce que c'est automatique suivant le canal de version utilisé, mais tu ne gére en rien les versions qui te sont fourni.
L'exemple type du programme que tu n'installe pas via les paquets : l'utilitaire stlink, tu peut prendre la stable, la unstable ou la experimental tu auras toujours 2 ou 3 version d'écart avec la version SVN à compiler soi même (nigthly).

Un utilisateurs arduino sous linux à deux choix :

  • ce casser la tête à choisir le canal unstable et changer les préf d'installations pour utiliser ce canal
  • prendre le paquets tout prés sur arduino.cc et lancer un script
    Faut pas chercher midi à 14h, quand on ne dév pas en avr-c (ce qui n'est pas ton cas) pas besoin de ce casser la tête avec les versions de avr-gcc.

Yep!

Pour info, la version arduino sous Squeeze (Debian stable) est la 022...Je ne sais pas où vous avez vue que la version actuelle était la 018 ???
Ouppss!!! J'ai dû installer la 022 :stuck_out_tongue_closed_eyes:

En testing, la version dispo est la 1.0.1

Sinon, dans l'ensemble de la discution, je rejoins skywodd, certains logiciels peuvent demeurer à la même version pendant prés de deux évolutions du noyau et il n'y a pas d'autre solution que de se taper une compilation dans le pire des cas si on veut une mise à jour ou profiter des upgrade.
En effet, la communauté linux préfère de loin corriger les (nombreux) bugs de Gnome ou Kde que de travailler sur des logiciels tiers, il y a peu d'intervenant en définitive.

Par contre, certaines comparaisons sont un peu fallacieuses, car comparer les depots svn avec ceux de debian est un peu tirer par les cheveux et aller chercher une version "plus à jour" sur un tel depot, c'est aussi prendre le risque d'être confronté à des bugs ou des incohérences entre les librairies et le logiciel lui même.

En gros, sous linux, tu sais ce que tu fais ou tu ne sais pas !!!

Je dis çà mais je ne dis rien :grin:

Perso, la version 022 me convient parfaitement à ce jour.

@+

Zoroastre.

quand on ne dév pas en avr-c (ce qui n'est pas ton cas)

Qu'est ce que tu en sais ?
Les exemples dans mes notes sur les interruptions PCINT de l'atmega328p ils sont en langage arduino ou en avr-gcc ?

Pour le reste je maintiens l'intégralité de mes propos sur Debian.
Il faut bien comprendre le cycle Debian :

  1. C'est le mainteneur Debian du paquet qui fait les tests de compatibilité, ce n'est pas l'auteur du programme, donc il n'y a pas besoin que l'équipe arduino fasse des tests, et je fais plus confiance au mainteneur Debian qu'à l'équipe arduino.
  2. Les paquets passent obligatoirement en Sid où ils sont déverminés.
  3. Quand ils descendent en testing ils sont fonctionnels parce que Testing bien qu'elle ne soit pas figée est parfaitement fonctionnelle (sauf pendant le mois qui suit un changement de version stable, c'est à dire que quand Wheezy va devenir stable il faudra rester en stable encore un bon mois avant de basculer sur la nouvelle testing).
  4. L'architecture Debian est très stricte, c'est ce qui fait sa solidité, et je n'ai vraiment pas envie de la rendre instable avec la version officielle arduino qui pour moi manque de transparence.

@zoroastre
Les gourous Debian n'ont qu'une seule "interdiction" quant au mélange de différents dépots c'est quand cela oblige à upgrader la libc6. Dans ce cas effectivement on cours de gros risques d'incohérence et autant basculer totalement dans l'autre distribution. Sinon pour rester en stable et bénéficier de nouvelles versions il y a les backports, mais seuls les principaux logiciels sont concernés.

Pour le reste chacun est libre de faire comme il l'entends.
Pour clore le débat une petite réminiscence de 1968 : "Il est interdit d'interdire"

Merci à tous pour ces infos. J'ai donc installé le "bon" IDE d'arduino. Maintenant ça compile, ça upload (par contre c'est super long!!!!!).
Par contre il est vrai que l'utilisation du Serial Monitor est à ch***. Dans l'ancienne version avec mon Uno c'était rapide, là je doit attendre très longtemps (l'ordre de la minute), fermé et réouvrir je ne sais combien de fois mon Serial Monitor pour que ça marche. Alors? Cela vient il de la communication Série? Ou cela vient il de l'IDE?
Pour en savoir plus je vais regarder à l'oscillo les signaux qui transitent et voir ainsi quand la communication ce lance. On verra bien.

Encore merci et bonne journée!

Je vous tiens au courant de la suite voir si ça marche!!

Mike

zoroastre:
Par contre, certaines comparaisons sont un peu fallacieuses, car comparer les depots svn avec ceux de debian est un peu tirer par les cheveux et aller chercher une version "plus à jour" sur un tel depot, c'est aussi prendre le risque d'être confronté à des bugs ou des incohérences entre les librairies et le logiciel lui même.

Oui c'est vrai, mais tout dépend du svn et du "niveau de professionnalisme" du dév en charge du projet.
Il y a quelques bug (c'est inévitable pour une version nigthly) mais ils sont résolu trés rapidement de par la nature "nigthly" même de la branche.
C'est aussi une façon de penser, je suis sur la nigthly, je rencontre un bug, j'ouvre un ticket pour le signaler et cela rend permet de fiabilisé encore plus le code qui finira par passer en stable.

Et puis faire un update en svn / git est (pour moi) aussi simple qu'avec un gestionnaire de paquets.
Un update du dossier, si il ya modif une compilation, et aprés installation, le tout se résumant dans 99% des cas à

svn update && ./configure && make clean && make all && make install

zoroastre:
En gros, sous linux, tu sais ce que tu fais ou tu ne sais pas !!!
Je dis çà mais je ne dis rien :grin:

Tu maitrise et tu fait ton truc, ou tu maitrise pas et tu reste avec les truc de base :wink:

68tjs:

quand on ne dév pas en avr-c (ce qui n'est pas ton cas)

Qu'est ce que tu en sais ?
Les exemples dans mes notes sur les interruptions PCINT de l'atmega328p ils sont en langage arduino ou en avr-gcc ?

Par ma parenthèse j'entends que toi tu sait codé en avr-c, ou du moins tu sait ce que tu fait avec les registres et le datasheet.
Du reste tes notes sur PCint sont en avr-c mixé avec de l'arduino.
Quand on ne s'intéresse pas à ce qui a en dessous de la librairie arduino il n'y as aucun intéret à regarder les versions de avr-gcc que l'on utilise (au risque de faire une erreur dans le choix).

68tjs:
4) L'architecture Debian est très stricte, c'est ce qui fait sa solidité, et je n'ai vraiment pas envie de la rendre instable avec la version officielle arduino qui pour moi manque de transparence.

Tu devrais avoir plus confiance dans la version officiel.
Je suit de trés prés le github de la team arduino et je peut t'assurer que certaines modifications mériteraient même de faire une nouvelle version de l'ide tellement elle sont intéréssante / critique / bénéfique.
Mais chacun ses gouts, moi j'aime les nightly, toi tu est plus unstable, chacun à le droit de faire ses choix comme il l'entend :grin:
(Du reste je tourne avec un ide 1.0.1 svn, au thème graphique arduino 0023, en anglais, avec un core arduino custom et un plugin teensyduino modifié, j'aime bien avoir des trucs pas conventionnel :sweat_smile: )

MikeLarson:
Merci à tous pour ces infos. J'ai donc installé le "bon" IDE d'arduino. Maintenant ça compile, ça upload (par contre c'est super long!!!!!).
Par contre il est vrai que l'utilisation du Serial Monitor est à ch***. Dans l'ancienne version avec mon Uno c'était rapide, là je doit attendre très longtemps (l'ordre de la minute), fermé et réouvrir je ne sais combien de fois mon Serial Monitor pour que ça marche. Alors? Cela vient il de la communication Série? Ou cela vient il de l'IDE?
Pour en savoir plus je vais regarder à l'oscillo les signaux qui transitent et voir ainsi quand la communication ce lance. On verra bien.

A mon avis cela vient de ton ordi, à tu des clef usb bluetooth sur ton ordi (ils sont connu pour ralentir considérablement le serial monitor).
Met à jour la librairie RxTx, elle est peut être trop ancienne pour ton systéme ?

A mon avis cela vient de ton ordi, à tu des clef usb bluetooth sur ton ordi (ils sont connu pour ralentir considérablement le serial monitor).
Met à jour la librairie RxTx, elle est peut être trop ancienne pour ton systéme ?

Non j'ai justement retiré tous les périphériques externes pour éviter ce genre de problème. Mais là depuis ce matin ça upload rapidement (comme avant ^^). Des fois faut pas chercher à comprendre.

Je cherche à résoudre mon problème de communication avec Rx/Tx (qui marchait très bien avant donc ça ne vient pas de la structure des trames que j'envoie). Je vais regardé sur l'oscillo si les trames que j'envoie sont bien celles que je veux envoyer (notamment pour la fréquence).

Merci

Bonjour,

Petite question (hé oui encore...). Comment puis-je mettre à jours ma librairie rx/tx? Ayant l'IDE 1.0.1 je pensais qu'elle le serait mais même si le CDC pour le port série fonctionne bien désormais j'ai des problèmes de synchronisation sur les ports Tx/Rx. En effet j'ai l'impression que la vitesse de communication effective ne correspond pas à la vitesse souhaitée.
Cela peu venir en effet de la librairie si celle-ci n'est pas à jours.

Question parallèle : où puis-je trouver les fichiers ioctl? Car j'aimerais justement vérifier leur contenu.

Encore merci!

Il y a une discussion à ce sujet sur le site de développement de l'IDE arduino
http://code.google.com/p/arduino/issues/list
Issue 14

Je n'ai pas compris si une décision a été prise.
Si Rx/Tx sont toujours fournies par l'IDE arduino dans la version Linuxarduino elles devraient être "cohérentes" avec le reste de l'IDE chargé chez arduino.
Si elles ne sont plus fournies c'est à partir de ta distribution que tu dois les mettre à jour.

Excuse moi si tu as déjà donné la réponse mais quelle est ta distribution ?

MikeLarson:
Comment puis-je mettre à jours ma librairie rx/tx?

Il suffit d'aller chercher la dernière version du driver à la source :
http://rxtx.qbang.org/wiki/index.php/Main_Page

MikeLarson:
Question parallèle : où puis-je trouver les fichiers ioctl? Car j'aimerais justement vérifier leur contenu.

Les fichiers ioctl sont des fichiers bas niveau du kernel linux, tu n'as rien à aller toucher dedans :astonished:
Ce sont des fichiers critiques qui permettent la gestion trés bas niveau du matériel.
http://www.kernel.org/doc/man-pages/online/pages/man2/ioctl.2.html

Bonjour à tous.

Désolé de ne répondre que maintenant mais je n'avais pas internet.

Pour ma distribution il s'agit d'un Xubuntu 11.10 (désolé je me suis trompé ^^)

Je voulais aller voir les fichiers ioctl non pas pour les modifier mais pour voir si la division clock processeur est juste (afin d'obtenir un temps réel non décalé).

Merci pour vos réponses je regarde ça dès ce soir et je vous tiens au courant!!!

Bonne journée à tous.

Mike

Petite remarque : quand j'utilisais l'arduino UNO je n'avais pas de problème avec rx/tx (pour la même distribution. C'est vraiment le passage au nouvel IDE (1.0.1) pour Leonardo qui fait que ça ne marche plus. De plus j'utilisais l'API "NewSoftSerial" qui a été implanté à l'IDE désormais sous le nom (SoftSerial). Cependant quand je chercher a créer une instance "SoftSerial mySerial" il me crache dessus à la compilation. Le .h et .cpp sont bien présent dans le /librairies mais bon...

Je ne m'y suis pas forcement attardé mais je me dit que ça pourrait venir de là?