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 =).

Publicités

Faire un backup

Bonjour à tous,

Pour continuer ce tuto, je vais vous expliquer comment fair une sauvegarde (ou backup) de la carte SD. En effet, cela prend un certain temps pour installer tous les logiciels sur la carte, sans compter le temps de mettre l’image de base sur la carte. C’est pourquoi je vous conseille de régulièrement faire une sauvegarde de votre carte. Pour ce faire, vous aurez besoin d’une machine fonctionnant sur Linux (quoiqu’avec MacOS, cela devrait aussi marcher, mais je n’ai pas testé).

Tout d’abord, insérez votre carte dans votre ordinateur (ou dans un lecteur de carte SD), ensuite taper

sudo fdisk -l

(si vous n’êtes pas sous Debian, tapez df)

et là, vous devriez être capable didentifier votre carte SD grâce à la taille de celle-ci. Notez son emplacement (c’est moi, c’est /dev/mmcblk).

Ensuite, c’est très simple, il ne vous reste plus qu’à lancer la commande suivante:

sudo dd if=/dev/sdb | gzip -9 > ./raspberry-20130705-sdb.img.gz

et vous attendez tranquillement, ça va prendre un bon moment. Il vous restera alors une image compressée de votre carte SD.

Ou alors, il y a une solution plus rapide, c’est qu’à la place d’e copier bit après bit l’image, on peu y copier des megaBit. c’est pourquoi je lance toujours la commande suivante:

sudo dd  if=/dev/sdb | gzip -9 ./raspberry-20130705-sdb.img.gz bs=1024

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.

Démarrer le Raspberry Pi pour la première fois

Bonjour à tous, je continue le tutoriel sur le Raspberry Pi. Ici, nous allons voir comment faire pour configurer son Raspberry Pi.

Donc, pour commencer, vous branchez le Raspberry Pi, à une TV. Vous branchez une souris, un clavier, le câble Ethernet et la carte SD avec Raspbian. Et pour finir, vous allumez le tout avec le secteur. Le Raspberry Pi va démarrer. ça prend du temps la première fois, alors ne paniquez pas. Après un petit moment, il y a une page qui s’ouvre, avec une liste défilante. la souris ne fonctionne pas à ce moment, alors utilisez les touches fléchées et les touches Entrées, Escape et Tab.

panneau de démarrage

Sur « information », vous aurez un descriptifs des points, mais je vais vous aider un peu. Première chose à faire si vous n’avez pas encore partitionné la carte avec Gparted, c’est de aller dans « Expand root partition to fill SD card ». Vous appuyez sur Entrée et vous attendez. Une fois cette manip faite, allez dans « configure_keyboard » et choisissez votre clavier. Si vous voulez le clavier suisse (français). Il faut aller dans la langue allemand et choisir le clavier suisse. Ensuite, vous pouvez si vous le souhaitez, changer le mot de passe de l’utilisateur pi (par défaut, c’est « raspberry »). Vous pouvez optionnellement choisir le lieu et le fuseau horaire de chez vous, mais c’est pas la chose la plus utile. Si vous le souhaitez, vous pouvez overclocker votre Raspberry Pi (i.e augmenter la puissance du Raspberry Pi, mais attention, ça va faire chauffer le Raspberry Pi!!!!!!) Pour connaître la température du processeur. il faut taper:

/opt/vc/bin/vcgencmd measure_temp

Allez dans « boot_behaviour » et faites en sorte que le Raspberry Pi boot sur le desktop directement (on pourra toujours accéder à ce panneau en tapant la commande: raspi-config).

Une fois ces manips faites, vous pouvez aller sous « finish » et appuyer sur Entrée. Une fois sur le bureau. Ouvrer terminal et tapez la commande suivante:

sudo reboot

Ou alors:

sudo shutdown -r now

Le Raspberry Pi va maintenant redémarrer. Attendez un petit moment. (il faut environ 40 à 50 secondes au Raspberry Pi pour démarrer, ce qui est assez rapide quand même ^^ ).

Une fois le Raspberry Pi allumé, je vous invite à continuer le tutoriel ici

Comment avoir Raspbian sur son Raspberry Pi

Bonjours à tous,

Sur ce post, je vais commencer à expliquer comment faire pour installer Raspbian sur votre Raspberry Pi. Avant toute chose, je vais éclaircir le point que plus d’un lecteur ne comprendra pas. C’est quoi un Raspberry Pi? Un Raspberry Pi, c’est ça:

Voici un Raspberry Pi

Le Raspberry Pi est un ordinateur à bas prix de la taille d’une carte de crédit. Il possède deux ports USB 2.0, un port Ethernet, un sortie HDMI, 26 Pin GPIO (pas très important pour l’instant) une sortie audio et vidéo, 512Mb de RAM avec un processeur cadancé à 0.7 Gh (avec la possibilité de l’overclocker à 1Gh). Ce Raspberry Pi est l’ordinateur central du drone. Ceci dit, il peut servir à beaucoup d’autres usages, puisque c’est un ordinateur. Evidemment, un ordinateur ne vient pas sans un système d’exploitation. Dans notre projet, nous allons utiliser Raspbian, soit un environnement UNIX, mais qui à été adapté pour notre cher Raspberry Pi. Pour utiliser pleinement votre Raspberry Pi. Il vous faudra quelques accessoires.  Pour une liste complète de ce qu’il vous faut pour l’ensemble du projet, voici le lien: ici

Voici une liste de ce dont vous aurez besoin pour une utilisation complète du Raspberry Pi:

  • Un Raspberry Pi
  • Un câble HDMI (deux HDMI mâles)
  • Un Transformateur de 1A 5V (un chargeur dans le genre iPhone, Samsung et autre va très bien)
  • un câble USB(mâle) => MicroUSB (mâle) (pour l’alim)
  • Un Hub USB compatible (Edimax EW-7811Un)
  • Un câble Ethernet
  • Un récepteur USB wi-fi compatible (wi-fi compatible). Nous utilisons un Edimax EW-7811Un
  • Une souris à fil (sans bluetooth, ou alors c’est à vos risques et périls)
  • Un clavier à fil (sans bluetooth, ou alors c’est à vos risques et périls)
  • Une webcam compatible (compatibilité). Nous utilisons une Logitech Webcam C270
  • Une carte SD de minumum 4 Go (je vous conseille de en prendre une de 8Go) avec au moins 30 m/s d’écriture/lecture.

Très bien, commençons le tuto maintenant. Tout d’abord, il vous faut un Raspberry Pi. Vous pouvez en trouver par exemple ici: achat . Vous pouvez le commander où vous le souhaiter, mais faites simplement attention à deux chose, la première, à acheter la version européenne/américaine et non la version chinoise (cette dernière est facillement reconnaissable car la carte est rouge, la deuxième chose, c’est de prendre la version B, celle avec un port Ethernet etc…

Où sont les ports en questions

Pour commencer à utiliser votre Raspberry Pi, vous devez faire ces quelques étapes:

  1. Connecter le Raspberry Pi à un écran par le biais d’un câble HDMI. 
  2. Connecter le clavier et la souris aux deux ports USB du Raspberry Pi
  3. Brancher le câble Ethernet au Raspberry Pi (LAN)
  4. Mettre la carte SD dans le lecteur de carte SD. (Si vous n’avez pas encore mis l’image sur la carte SD, cliquer sur ce lien:  ici
  5. Brancher le Raspberry Pi au secteur à l’aide du câble USB et du chargeur iPhone
  6. Allumer l’écran
  7. Attendre sans paniquer car l’initialisation de la carte peut prendre un moment.

Pour continuer ce tuto, voici le lien de la suite