Communication serial en Java (RXTX)

Dans le cadre du serveur Java qui remplacera bientôt l’interface graphique python contrôlée par ssh, nous avons dû résoudre le problème de la communication entre l’Arduino et le Raspberry. Puisque ils sont connectés par usb, nous nous sommes intéressés à la librairie RXTX pour java.

Vous pourrez trouver toutes sortes d’informations sur l’installation et l’utilisation de cette librairie ici.

Il est possible que vous ayez déjà cette librairie si vous utilisez l’IDE Arduino.

Nous aimerions partager avec vous la classe « SerialCommunication » basée sur les classes de la librairie RXTX (gnu.io.*). Nous n’avons probablement rien inventé de nouveau et nous nous sommes largement inspirés des exemples proposés par le wiki. Nous trouvons juste que cette classe englobe tous nos besoins et est pratique à utiliser.

Créez un objet SerialCommunication:

SerialCommunication serialCom = new SerialCommunication();

Etablissez une connection sur le port(p.ex.) »/dev/ttyS33″ à la vitesse de 9600 bauds:

SerialCom.connect("/dev/ttyS33", 9600);

Remarque: java RXTX ne cherche que des ports dans « /dev/ttySxx » or l’Arduino se trouvera probablement sur « /dev/ttyACM0 ». Pour résoudre ce problème, créez un symlink entre « /dev/ttyACM0 » et un port inexistant dans les « /dev/ttySxx » (p.ex. /dev/ttyS33):

#sudo ln -s /dev/ttyACM0 /dev/ttyS33

Ce lien disparait chaque fois que vous éteignez l’ordinateur, donc pensez à le recréer ou écrivez un bash script =).

Petite information

Bonjour à tous,

Ces dernières semaines ont été riches en développements, problèmes , solutions et même en nouvelles piste. Tout d’abord, jusqu’à présent, nous utilisions VNC pour la connexion distante. Malheureusement, à cause cde cela, il y a un conflit de manager de fenêtres X (celle que nous utilisons pour controller le véhicule entre autres. Sachant que notre programme en python qui permet de faire fonctionner le véhicule ayant une interface graphique contenue dans une fenêtre X est lui-même dans une fenêtre X (celle de VNC-Viewer. Le problème est que les données sont biaisées lors du transfert de packet. En effet, notre code est à l’écoute du clavier et l’orsque une touche est enfoncéee, le code envoie une lettre qui sera interprété par le Raspberry Pi et l’Arduino, et lorsque nous la relachons, le code envoie une autre lettre. Lorsque nous utilisons ce code via VNC-Client, nous ne parvenons pas à bloquer la répétitions de touches, ce qui fait que le véhicule avance par saccade. Pour remédier à ce problème, nous avons fait en sorte de ne plus passer par VNC-Viewer, mais par SSH (avec un tunnel X), ce qui marche parfaitement. Après avoir discuté avec plusieurs personne de ce problèmes, nous avons décidé de terminer tout d’abord le drone avec le code python, puis, au vu du temps restant, de recommencer à coder, mais cette fois-ci, en Java. Cette fois-ci, il y aura plus de difficultés dans le sens où nous allons devoir inclure dans notre code la communication entre le serveur et le client. Nous allons commencer par le faire en UDP-IP avant de peut-être le faire en TCP-IP. Nous nous imposons comme délais (pour le python), mercredi prochain.

Liste des Achats

Bonjours à tous,

Voici une liste de ce dont vous aurez besoin pour faire ce projet, nous n’avons pas inclus les tournevis, clous, et autres.

  1. Un véhicule roulant miniaturisé. Par exemple une ancienne voiture radiocommandée est parfait, il vous suffit de garder le chassis, le moteur et le servo-moteur.
  2. Un Arduino (un Arduino Uno va très bien, mais si vous avez un diduino ou une variante de l’Arduino, il n’y a pas de problème) Site Arduino
  3. Un Raspberry Pi (avec les accessoires, listés ici:Accessoires Raspberry Pi)
  4. Une batterie externe (nous utilisons ici une Tecknet de 7000mAh, ce qui est largement suffisant)
  5. Un ordinateur portable fonctionnant sous Linux, MacOS ou Windows. (Nous parlerons soit de Windows, soit de Linux)(pour certaines tâches, il est préférable d’avoir Linux, mais vous pouvez créer une machine virtuelle si besoin est).
  6. Une webcam
  7. Un capteur de distance (par exemple un « HC-SR04 »)

Avec tous ce matos, vous pouvez construire un UGV. Le capteur de distance n’est peut être pas indispensable, mais il permet d’éviter certains crashs. Vous pouvez maintenant commencer à construire votre drone en commençant par ici.