Voilà que je resort mon arduino de mes cartons, motivé à dépoussierer le code de ma 'boite musicale'. Et quel ne fut pas ma surprise quand le package rxtx refusa de s'installer suite a des erreurs de compilation.
Vous commencez peut-etre a me connaitre ; je n'ai pas abandonné pour si peu. Voilà donc que je me retrouve a publier ce petit billet, acompagné des instructions pour patcher et installer la derniere version de rxtx sous votre systéme
Avec une traduction anglaise aproximative, pour que nos amis non-francophone ne soient pas en reste.
Step 1 : Arduino package
Install the aur arduino package using the well known and loved binnary : yaourt.
Installez le package arduino en utilisant la commande yaourt :
yaourt -S arduino |
Step 2 : Download, patch and install rxtx
Download the pre-release zip from http://rxtx.qbang.org/wiki/index.php/Download :
Telechargez la pre-release depuis http://rxtx.qbang.org/wiki/index.php/Download :
wget http://rxtx.qbang.org/pub/rxtx/rxtx-2.2pre2.zip unzip rxtx-2.2pre2.xip cd rxtx-2.2pre2 |
Launch configure with the --disable-lockfile option :
Lancez configure avec l'option --disable-lockfile :
./configure --disable-lockfile |
Here, if you try to compile, you'll probably have a "UTS_RELEASE" undefined error. To correct that, first locate the file utsrelease.h(find /usr/ -name 'utsrelease.h'). In my case, he is in "/lib/modules/3.8.4-1-ARCH/build/include/generated/". Then, include this file to config.h (It's a file generated by configure.) , so that that constant will be defined everywhere.
Ici, si vous tentez de compiler, vous aurez probablement une erreur "UTS_RELEASE" est indéfinit. Pour coriger ce problème, commencez par trouver le fichier utsrelease.h (find /usr/ -name 'utsrelease.h'). Pour ma part, il se trouvait dans "/lib/modules/3.8.4-1-ARCH/build/include/generated/". Ensuite, incluez le dans config.h(C'est un fichier généré par configure), de facon à ce que la constant soit définie partout.
echo "\n#include \"/lib/modules/3.8.4-1-ARCH/build/include/generated/utsrelease.h\"\n" >> config.h |
Now, we have to add the ttyACMx devices to the list of checked devices. We just need to modify the file src/gnu/io/RXTXCommDriver.java, and add an entry into an array (ttyACM). See the diff file here :
Maintenant, on doit ajouter ttyACM à la liste des périphériques. On modifit le fichier src/gnu/io/RXTXCommDriver.java en ajoutant une entrée à un tableau (ttyACM). Regardez le fichier diff suivant :
--- src/gnu/io/RXTXCommDriver.java.back 2013-03-31 14:14:38.718567087 +0200
+++ src/gnu/io/RXTXCommDriver.java 2013-03-31 14:08:38.728149384 +0200
@@ -577,6 +577,7 @@
"ttyS", // linux Serial Ports
"ttySA", // for the IPAQs
"ttyUSB", // for USB frobs
+ "ttyACM",// linux CDC ACM devices
"rfcomm", // bluetooth serial device
"ttyircomm", // linux IrCommdevices (IrDA serial emu)
}; |
The line marked with a plus is the one added.
La ligne marqué d'un plus est celle ajoutée.
Then, compile and install!
Maintenant, compilez et installez!
make && sudo make install |
Use your arduino
You can now launch the arduino IDE (command arduino) and upload a test sketch (like blink). You can select your arduino uno wich will probably show as "ttyACM0" in the device list.
Vous pouvez maintenant lancer l'IDE arduino (commande arduino) et charger un programme de test. Vous pouvez selectionner votre carte dans la liste des periphérique, probablement sous le nom "ttyACM0".
Quelques infos
On désactive l'option --diseable-lockfile pour faire disparaitre des messages d'erreur parlant d'impossibilité d'écrire les fichiers de lock. On ajouter le bon fichier .h contenant UTS_RELEASE pour eviter de stupide erreur de compilation (le fichier dans le quel est définit la macro a chang'e récamment). Enfin, il est necessaire de modifier le code de rxtx (lisez les commentaires, vous verez qu'on vous demande explicitement de rajouter les devices manquant, en vous proposant la liste de tous ceux possible, et elle est bien longue!) pour que vous puissiez utiliser ttyACMx. Une autre solution serait d'ajouter un lien symbolique dans /dev/ d'un ttyUSBx vers un ttyACMx, par exemple (ttyUSB figure dans le tableau o`u nous avons ajouter ttyACM).
Bref, en fin de compte, si vous ne parvenez pas à utiliser votre arduino et que vous avez une erreur du type "processing.app.SerialNotFoundException: Port série « /dev/ttyACM0 » non trouvé", c'est peut-etre tout simplement que ttyACM ne figure pas dans les périphériques accepté par rxtx.
Références :
- http://arduino.cc/en/Guide/troubleshooting#toc1 rubrique Drivers / Linux.
- https://wiki.archlinux.org/index.php/Arduino