Outils pour utilisateurs

Outils du site


issue122:python

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
issue122:python [2017/07/14 11:04] d52frissue122:python [2017/07/16 14:10] (Version actuelle) auntiee
Ligne 3: Ligne 3:
 The first thing we have to do is get the RPi Bluetooth connected to the Arduino. I’m going to assume that you already have the proper bluetooth software installed on your RPi. I’ve installed bluetooth-5.23-2+rpi2, bluez-5.23-2+rpi2, bluez-firmware-1.2-3+4rpi1, pi-bluetooth-0.1.3 and pulseaudio-module-bluetooth-5.0-13 on my RPi3. I’m sure that some of those are not needed for basic bluetooth communications. There are many places on the web that can explain the process. Once you get everything installed, connect to your Arduino bluetooth device. I had to use “1234” during the pairing process. I also marked it as a trusted device.** The first thing we have to do is get the RPi Bluetooth connected to the Arduino. I’m going to assume that you already have the proper bluetooth software installed on your RPi. I’ve installed bluetooth-5.23-2+rpi2, bluez-5.23-2+rpi2, bluez-firmware-1.2-3+4rpi1, pi-bluetooth-0.1.3 and pulseaudio-module-bluetooth-5.0-13 on my RPi3. I’m sure that some of those are not needed for basic bluetooth communications. There are many places on the web that can explain the process. Once you get everything installed, connect to your Arduino bluetooth device. I had to use “1234” during the pairing process. I also marked it as a trusted device.**
  
-Heureux de voir revoir sur notre projet « Température/humidité via Bluetooth ». Comme vous vous en souvenez, nous avons tout mis au point sur un smartphone. Ce mois-ci, nous allons travailler pour mettre les choses en place sur le Raspberry Pi.+Heureux de vous revoir sur notre projet « Température/humidité via Bluetooth ». Comme vous vous en souvenez, nous avons tout mis au point sur un smartphone. Ce mois-ci, nous allons travailler pour mettre les choses en place sur le Raspberry Pi.
  
-La première chose que nous devons faire est de connecter le bluetooth du RPi à l'Arduino. Je vais supposer que le logiciel bluetooth correct est déjà installé sur votre RPi. J'ai installé bluetooth-5.23-2+rpi2, bluez-5.23-2+rpi2, bluez-firmware-1.2-3+4rpi1, pi-bluetooth-0.1.3 et pulseaudio-module-bluetooth-5.0-13 sur mon RPi3. Je suis sûr que certains de ceux_ci ne sont pas nécessaires pour des communications simples en bluetooth.Il y a beaucoup d'endroits sur le Web qui peuvent expliquer le processus. Une fois que tout est installé, connectez votre dispositif bluetooth de l'Arduino. J'ai dû utiliser « 1234 » pendant le processus d'appairage. Je l'ai aussi marqué comme dispositif de confiance.+La première chose que nous devons faire est de connecter le Bluetooth du RPi à l'Arduino. Je vais supposer que le logiciel bluetooth correct est déjà installé sur votre RPi. J'ai installé luetooth-5.23-2+rpi2, bluez-5.23-2+rpi2, bluez-firmware-1.2-3+4rpi1, pi-bluetooth-0.1.3 et pulseaudio-module-bluetooth-5.0-13 sur mon RPi3. Je suis sûr que certains de ceux-ci ne sont pas nécessaires pour des communications simples en bluetooth.Il y a beaucoup d'endroits sur le Web qui peuvent expliquer le processus. Une fois que tout est installé, connectez-vous à votre dispositif bluetooth de l'Arduino. J'ai dû utiliser « 1234 » pendant le processus d'appairage. Je l'ai aussi coché comme dispositif de confiance.
    
 **Once we have it paired and trusted, we need to do some command-line magic to create a virtual serial port named ‘rfcomm1’. **Once we have it paired and trusted, we need to do some command-line magic to create a virtual serial port named ‘rfcomm1’.
Ligne 23: Ligne 23:
 The big thing you should take away from this is the mac address of the bluetooth device (hopefully the arduino) that you are connected to. You will be using this address in the next command.** The big thing you should take away from this is the mac address of the bluetooth device (hopefully the arduino) that you are connected to. You will be using this address in the next command.**
  
-Une fois que nous avons appairé et garanti, nous devons faire un peu de magie en ligne de commande pour créer un port série virtuel appelé « rfcomm1 ».+Une fois que nous l'avons appairé et garanti, nous devons faire un peu de magie en ligne de commande pour créer un port série virtuel appelé « rfcomm1 ».
  
 Saisissez dans un terminal : Saisissez dans un terminal :
Ligne 37: Ligne 37:
 pi@raspberrypi:~ $ pi@raspberrypi:~ $
  
-De tout ça, la chose importante que vous devriez mettre de côté c'est l'adresse mac et le dispositif bluetooth (avec un peu de chance, c'est l'Arduino) auquel vous êtes connecté. Vous utiliserez cette adresse dans la prochaine commande.+De tout ça, la chose importante que vous devriez mettre de côté c'est l'adresse mac du dispositif bluetooth (avec un peu de chance, c'est l'Arduino) auquel vous êtes connecté. Vous utiliserez cette adresse dans la prochaine commande.
    
 **Now, type: **Now, type:
Ligne 63: Ligne 63:
 sudo rfcomm bind /dev/rfcomm1 98:D3:31:30:49:B1 sudo rfcomm bind /dev/rfcomm1 98:D3:31:30:49:B1
    
-où 98:D3:31:30:49:B1 est l'adresse mac du module bluetooth H05/06 de l'Arduino qui a été obtenue de la commande hcitool ci-dessus. La votre sera différente, donc, utilisez-.+où 98:D3:31:30:49:B1 est l'adresse mac du module bluetooth H05/06 de l'Arduino qui a été obtenue par la commande hcitool ci-dessus. La vôtre sera différente, donc, utilisez-la.
  
 Maintenant, tapez dans le terminal : Maintenant, tapez dans le terminal :
Ligne 77: Ligne 77:
 pi@raspberrypi:~ $  pi@raspberrypi:~ $ 
    
-Ceci vous indique que vous disposez d'un port série ouvert dans le dispositif bluetooth de l'Arduino.+Cela vous indique que vous disposez d'un port série ouvert dans le dispositif bluetooth de l'Arduino.
    
 **Finally, in the terminal type: **Finally, in the terminal type:
Ligne 139: Ligne 139:
 Terminal ready Terminal ready
    
-Ceci vous permettra d'envoyer un « T » pour Température, un « H » pour Humidité et un « A » pour les deux.+Ceci vous permettra d'envoyer un « T » pour la température, un « H » pour l'humidité ou un « A » pour les deux.
    
-Vous aurez à répéter la plupart de ce processus à chaque fois que vous redémarrerez le RPi. J'ai fait un script shell qui contient ces lignes, de sorte que je peux le lancer suivant le besoin.+Vous devrez répéter la plupart de ce processus chaque fois que vous redémarrerez le RPi. J'ai fait un script shell qui contient ces lignes, de sorte que je peux le lancer à la demande.
    
 **However, this series is about using Python, so, next, we’ll write a simple program to communicate with our Arduino. **However, this series is about using Python, so, next, we’ll write a simple program to communicate with our Arduino.
Ligne 164: Ligne 164:
 Ci-dessous, ce programme très simple en Python nous permettra de communiquer avec l'Arduino via le port série. Ci-dessous, ce programme très simple en Python nous permettra de communiquer avec l'Arduino via le port série.
  
-Les trois premières lignes importe la bibliothèque pyserial et paramètre le port série.+Les trois premières lignes importent la bibliothèque pyserial et paramètrent le port série.
  
 import serial import serial
Ligne 171: Ligne 171:
 baud = 19200 baud = 19200
  
-La ligne suivante n'utilise que certains des paramètres disponibles car les autres ne sont pas nécessaires. Celui qui est important est le paramètre de fin de délai (timeout). Si celui-ci est mis à « none » (aucun), le système attendra éternellement (=bloqué) jusqu'à ce que le nombre de caractères spécifiés soit reçu par la commande .read. Si nous réglons le timeout à 0, le système répondra immédiatement, renvoyant 0 ou plusieurs caractères de son port. Vous pouvez spécifier le nombre de secondes d'attente du système et vous pouvez une valeur en virgule flottante.+La ligne suivante n'utilise que certains des paramètres disponibles car les autres ne sont pas nécessaires. Celui qui est important est le paramètre de fin de délai (timeout). Si celui-ci est mis à « none » (aucun), le système attendra éternellement (=bloqué) jusqu'à ce que le nombre de caractères spécifiés soit reçu par la commande .read. Si nous réglons le timeout à 0, le système répondra immédiatement, renvoyant 0 ou plusieurs caractères par son port. Vous pouvez spécifier le nombre de secondes d'attente du système et vous pouvez utiliser une valeur en virgule flottante.
    
 **ser = serial.Serial(port, baud, timeout=1) **ser = serial.Serial(port, baud, timeout=1)
Ligne 195: Ligne 195:
 ser = serial.Serial(port, baud, timeout=1) ser = serial.Serial(port, baud, timeout=1)
    
-Dans les deux lignes suivantes, (plus le commentaire), nous vérifions simplement que le port série est ouvert  avec impression de ce fait.+Dans les deux lignes suivantes, (plus le commentaire), nous vérifions simplement que le port série est ouvert avec impression de ce fait.
    
-# open the serial port+# open the serial port - ouverture du port série
  
 if ser.isOpen(): if ser.isOpen():
      print(ser.name + ' is open...')      print(ser.name + ' is open...')
    
-Maintenant vient le plat de résistance du programme. Nous commençons une boucle « foreever », envoyant une demande d'entrée d'une commande ou d'« exit » pour quitter, puis l'attente de la saisie par l'utilisateur.  Ceci fonctionne parfaitement pour notre besoin, car l'Arduino attend aussi une commande.  Cela nous permet aussi de terminer le programme proprement.+Le moment est venu pour le plat de résistance du programme. Nous commençons une boucle « éternelle », envoyant une demande d'entrée d'une commande ou d'« exit » pour quitter, puis l'attente de la saisie par l'utilisateur.  Ceci fonctionne parfaitement pour nos besoins, car l'Arduino attend aussi une commande. Cela nous permet aussi de terminer le programme proprement.
    
 while True: while True:
Ligne 226: Ligne 226:
    
 We’ll see you next month.** We’ll see you next month.**
 +
 +Maintenant qu'il y a quelque chose dans la variable cmd, nous l'encodons en ascii, lui ajoutons CRLF et l'écrivons sur le port série. Ensuite, nous utilisons la commande ser.readlines() pour obtenir les données de l'Arduino. En réalité, nous avons ici plusieurs options pour lire le port série. Si nous avions utilisé ser.read(), nous aurions dû spécifier le nombre d'octets à recevoir. Comme ça peut changer suivant la commande que nous envoyons, cette option n est pas vraiment bonne sans beaucoup de travail. Nous aurions pu aussi utiliser la commande ser.readline(), mais elle ne lit que jusqu'à l'envoi d'un CRLF, ce qui est bien pour une commande « T » ou « H », mais, avec la commande « A » qui envoie deux lignes, il y aurait des problèmes. La valeur du timeout paramétrée précédemment est importante, car le système sera bloqué jusqu'à ce qu'un CRLF soit retourné.
 +
 +    else:
 +        ser.write(cmd.encode('ascii')+'\r\n')
 +        out = ser.readlines()
 +        for l in out:
 +            print l
 + 
 +Le code source (court s'il en est) est disponible sur pastebin à https://pastebin.com/tXWirGCX
 +
 +Voilà ! C'est tout pour ce mois-ci. Nous avons successivement créé le circuit du capteur de température et d'humidité et nous sommes maintenant capables de lire ses valeurs à distance avec un Raspberry Pi utilisant Python.
 +
 +Au mois prochain.
  
issue122/python.1500023080.txt.gz · Dernière modification : 2017/07/14 11:04 de d52fr