RS-232
Revenir au sommaire du RasberryPi
Choix et identification du port série
RaspberryPI (ttyAMA0)
Pour pouvoir utiliser le port série disponible sur les broches 13 (GND) 14 (TxD) et 15 (RxD), nous allons suivre les étapes suivantes (basées sur une installation propre wheezy-raspbian)
0. Ouvrons un terminal sur le Raspberry, ou connectons nous au Raspberry Pi par SSH.
1. une copie de sauvegarde de notre fichier /boot/cmdline.txt pour pouvoir revenir si besoin à la configuration d'origine.
sudo cp /boot/cmdline.txt /boot/cmdline_backup.txt
2. Editons ce fichier /boot/cmdline.txt file :
sudo nano /boot/cmdline.txt
Ce fichier contient:
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
Nous devons supprimer les paramètres référençant le port UART série (ttyAMA0), ce qui nous donne:
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
Rappel pour quitter nano et sauvegarder : CTRL+X et on répond aux questions.
3. Nous Commentons la ligne suivante dans /etc/inittab:
#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
4. Reboot du Raspberry Pi
sudo reboot
interface RS232 par USB
votre interface se connectera toute seule, il vous suffira de faire alors un
dmesg | grep tty
vous avez de visible ttyUSBx où x représente le numéro de votre interface (ttyUSB0)
Configuration
Pour connaitre la configuration actuelle :
stty -F /dev/ttyUSB0
qui nous reponds :
speed 9600 baud; line = 0; -brkint -imaxbel
Communication
Communiquer vers le périphérique par le shell est aisée :
echo "hello world" > /dev/ttyAMA0
# ou
echo "hello world" > /dev/ttyUSB0
Ecriture RS232 via le shell
créons un fichier nommé rs232.sh et éditons le !
cd ~/www # plaçons nous dans notre home/pi/www
geany rs232.sh # editons le fichier rs232.sh
plaçons y le code
#!/bin/bash
#---------------------------------------------------------------------
stty -F /dev/ttyAMA0 115200 cs8 -cstopb -parenb -cooked min 1 time 1
#---------------------------------------------------------------------
# -e interpréter les caractères déspécifiés par une contre-oblique
# \r = retour chariot
# \n = nouvelle ligne
#---------------------------------------------------------------------
echo -e "hello \r\n" > /dev/ttyUSB0
# ou echo -e "hello \r\n" > /dev/ttyAMA0
#---------------------------------------------------------------------
________ POUR ttyAMA0 (RS232 sur la carrte raspberryPI uniquement) ________
Le problème principal de ce code est qu'il faut être root pour le lancer, l'utilisateur pi n'est pas autorisé à jouer avec :
La méthode consiste à chercher qui gère les droits !
sudo grep tty /lib/udev/* -iRH
nous donne le résultat suivant
/lib/udev/rules.d/91-permissions.rules:SUBSYSTEM=="tty", GROUP="dialout" /lib/udev/rules.d/91-permissions.rules:# vc devices (all members of the tty subsystem) /lib/udev/rules.d/91-permissions.rules:KERNEL=="tty", MODE="0666", GROUP="root" /lib/udev/rules.d/91-permissions.rules:KERNEL=="tty[0-9]*", GROUP="root" /lib/udev/rules.d/91-permissions.rules:KERNEL=="pty*", MODE="0666", GROUP="tty" /lib/udev/rules.d/91-permissions.rules:KERNEL=="iseries/vtty*", GROUP="root"
notre idée est donc d'autoriser notre utilisateur pi ( puis www-data ) pour utiliser les interfaces
sudo addgroup pi dialout
sudo addgroup www-data dialout
donner des droits root peut s'averer dangereux et n'est jamais recommander, nous allons donc descendre les tty dans un groupe moins élevé
sudo nano /lib/udev/rules.d/91-permissions.rules # et nous modifions les lignes
/lib/udev/rules.d/91-permissions.rules:SUBSYSTEM=="tty", GROUP="dialout" /lib/udev/rules.d/91-permissions.rules:# vc devices (all members of the tty subsystem) /lib/udev/rules.d/91-permissions.rules:KERNEL=="tty", MODE="0666", GROUP="dialout" /lib/udev/rules.d/91-permissions.rules:KERNEL=="tty[0-9]*", GROUP="dialout" /lib/udev/rules.d/91-permissions.rules:KERNEL=="pty*", MODE="0666", GROUP="tty" /lib/udev/rules.d/91-permissions.rules:KERNEL=="iseries/vtty*", GROUP="dialout"
Maintenant le script peut être lancé sans le sudo