Communication série avec Java sur puce ARM
Extrait du PoBot
http://www.pobot.org
Communication série avec
Java sur puce ARM
- L'association - Nos réalisations - Logiciels -
Date de mise en ligne : dimanche 8 juillet 2012
PoBot
Copyright © PoBot Page 1/5
Communication série avec Java sur puce ARM
Sommaire
Le programme
La solution
La Raspberry Pi est équipée d'un processeur ARM. Bien que l'essentiel des fonctionnalités demandées à un
micro-ordinateur soient supportées, il y a quelques cas particuliers.
C'est le cas de la communication série depuis une application Java. Le langage Java sait parler avec un port
série (USB, etc..) grâce à des bibliothèques (RXTXcomm.jar par exemple). Mais derrière, il délègue le travail au
système d'exploitation, avec des bibliothèques systèmes (DLL sous Windows, shared objects ou SO sous Linux).
Donc même si vous avez écrit un programme Java très simple, et que vous emmenez avec vous sur votre carte à
base d'ARM toutes les bibliothèques (jar Java et SO Linux), il faut que le système que vous utilisez soit compatible.
Par exemple la bibliothèque librxtxSerial.so est fournie pour Linux 32 bits ou Linux 64 bits, mais ne fonctionne pas
sur ARM.
Le programme
On a écrit un programme pour contrôler une Arduino depuis une application Processing. Le programme (code source
dans l'article cité) est écrit en Java et l'éditeur de programmes Processing permet de compiler le programme et de
l'exporter sous forme d'une application Java.
Avec un PC et une Arduino connectée en USB, on fait simplement :
atelier@pobot:~$ cd /source/Processing/NonoLeds
atelier@pobot:NonoLeds$ cd NonoLeds
atelier@pobot:NonoLeds$ ./NonoLeds
Cela revient à appeler le programme Java :
java -Djava.library.path="./lib" -cp "./lib/NonoLeds.jar:./lib/core.jar" NonoLeds
Si on essaie sur la Raspberry Pi (ou toute autre carte Linux à base de processeur ARM), on obtient une erreur sur la
librairie RXTX.
Copyright © PoBot Page 2/5
Communication série avec Java sur puce ARM
La solution
On va installer sur notre RPi encore de nouveaux paquets issus des stocks de programmes pour ARM (repositories
GNU/Linux), en l'occurence librxtx-java :
pi@raspberrypi:~$ sudo apt-get install librxtx-java
...
Get:1 http://ftp.uk.debian.org/debian/ squeeze/main librxtx-java armel 2.2pre2-2 [179 kB]
...
On peut lire au milieu du long message d'installation qu'il a téléchargé une version "debian squeeze armel", donc
compatible avec notre carte et le système d'exploitation Debian qu'on a installé.
Cette installation a posé dans l'arborescence des bibliothèques différentes versions de .so compatibles Linux. On
peut afficher la liste du répertoire JNI (pour Java Native Interface, la médiation entre la machine virtuelle Java et la
machine réelle Raspberry Pi) :
pi@raspberrypi:~$ ls /usr/lib/jni
libjava-access-bridge-jni.so librxtxI2C.la librxtxParallel.so
librxtxRaw-2.2pre1.so librxtxSerial.la
libjava-access-bridge-jni.so.0 librxtxI2C.so librxtxRS485-2.2pre1.so
librxtxRaw.la librxtxSerial.so
libjava-access-bridge-jni.so.0.0.0 librxtxParallel-2.2pre1.so librxtxRS485.la
librxtxRaw.so
librxtxI2C-2.2pre1.so librxtxParallel.la librxtxRS485.so
librxtxSerial-2.2pre1.so
Si on se place maintenant dans le répertoire des bibliothèques de notre application Java Processing, on identifie le
.so à modifier :
pi@raspberrypi:~$ cd NonoLeds/lib/
pi@raspberrypi:~/NonoLeds/lib$ ls
NonoLeds.jar RXTXcomm.jar arduino.jar core.jar librxtxSerial.so serial.jar
pi@raspberrypi:~/NonoLeds/lib$ mv librxtxSerial.so librxtxSerial.x86
pi@raspberrypi:~/NonoLeds/lib$ cp /usr/lib/jni/librxtxSerial.so .
pi@raspberrypi:~/NonoLeds/lib$ ls
NonoLeds.jar RXTXcomm.jar arduino.jar core.jar librxtxSerial.so librxtxSerial.x86 serial.jar
pi@raspberrypi:~/NonoLeds/lib$
On remonte et c'est parti !
Copyright © PoBot Page 3/5
Communication série avec Java sur puce ARM
pi@raspberrypi:~/NonoLeds/lib$ cd ..
pi@raspberrypi:~/NonoLeds$ ./NonoLeds
Stable Library
=========================================
Native lib Version = RXTX-2.2pre2
Java lib Version = RXTX-2.1-7
WARNING: RXTX Version mismatch
Jar version = RXTX-2.1-7
native lib Version = RXTX-2.2pre2
[0] "/dev/ttyACM0"
Copyright © PoBot Page 4/5
Communication série avec Java sur puce ARM
OH JE KIFFE !!! Moins de deux heures pour :
télécharger Firmata dans l'Arduino de Nono
écrire le programme Processing et l'exporter vers la RPi
empêcher le démarrage du serveur X et utiliser un framebuffer virtuel
remplacer la bibliothèque JNI du port série pour ARM
documenter le tout pour servir aux prochains utilisateurs de la Raspberry Pi
Une petite vidéo pour fêter ça :
Le robot Nono fonctionne avec Arduino / Firmata...
[http://www.dailymotion.com/video/xs1nd3_le-robot-nono-fonctionne-avec-arduino-firmata-processing_tech] par
JulienPobot [http://www.dailymotion.com/JulienPobot]
Copyright © PoBot Page 5/5
1 / 5 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !