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 10:00] 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  I made a shell script that contained those lines so I could run it as needed.+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 157: Ligne 157:
    
 The next line uses only some of the parameters available since the others aren’t needed. The important one is the timeout parameter. If we set the timeout to “none”, the system will wait forever (blocking) until the specified number of characters have been received in the .read command. If we set the timeout to 0, the system will return immediately, returning 0 or more characters from the port. We, however will set the timeout to 1 second. You can specify the number of seconds for the system to wait and you can use a float value.** The next line uses only some of the parameters available since the others aren’t needed. The important one is the timeout parameter. If we set the timeout to “none”, the system will wait forever (blocking) until the specified number of characters have been received in the .read command. If we set the timeout to 0, the system will return immediately, returning 0 or more characters from the port. We, however will set the timeout to 1 second. You can specify the number of seconds for the system to wait and you can use a float value.**
 +
 +Cependant, cette série est sur l'utilisation de Python ; aussi, pour poursuivre, nous écrirons un programme simple pour communiquer avec notre Arduino.
 +
 +Un programme simple dans le terminal
 +
 +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 importent la bibliothèque pyserial et paramètrent le port série.
 +
 +import serial
 + 
 +port = "/dev/rfcomm1"
 +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 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 177: Ligne 192:
         ser.close()         ser.close()
         exit()**         exit()**
 +        
 +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.
 + 
 +# open the serial port - ouverture du port série
 +
 +if ser.isOpen():
 +     print(ser.name + ' is open...')
 + 
 +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:
 +    cmd = raw_input("Enter command or 'exit':")
 +    # for Python 2
 +    # cmd = input("Enter command or 'exit':")
 +        # for Python 3
 +    if cmd == 'exit':
 +        ser.close()
 +        exit()
    
 **Now that there is something in the cmd variable, we encode it to ascii, append a CRLF to it, and then write it to the serial port. We then use the ser.readlines() command to get the data from our Arduino. We actually have several options here to read from the serial port. If we had used ser.read(), we would have had to specify the number of bytes to be received. Since that can change depending on the command we send, that option isn’t really a good one without a lot of work. We also could have used the ser.readline() command, but that only reads up to the CRLF being sent in, so while good for the “T” or “H” command, the “A” command which sends two lines, would have some problems. The timeout value we set earlier is important, since the system would block until the CRLF is returned.  **Now that there is something in the cmd variable, we encode it to ascii, append a CRLF to it, and then write it to the serial port. We then use the ser.readlines() command to get the data from our Arduino. We actually have several options here to read from the serial port. If we had used ser.read(), we would have had to specify the number of bytes to be received. Since that can change depending on the command we send, that option isn’t really a good one without a lot of work. We also could have used the ser.readline() command, but that only reads up to the CRLF being sent in, so while good for the “T” or “H” command, the “A” command which sends two lines, would have some problems. The timeout value we set earlier is important, since the system would block until the CRLF is returned. 
Ligne 191: 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.1500019239.txt.gz · Dernière modification : 2017/07/14 10:00 de d52fr