L’Internet des Objets

L’Internet des Objets

24.2 Python

Page précédente Page suivante

Le langage Python est pratique pour analyser les données en réponse à une interrogation.

Les scripts commencent par importer des librairies. Celles-ci peuvent être intégrées dans le système :

apt-cache search python serial
...
python-serial - pyserial – module d’encapsulation d’accès à un port série
...

ou être installées par pip.

# apt install python-pip

L’utilisateur peut alors installer des paquets non intégrés dans sa distribution :

pip install bluepy

Il faut donc commencer par importer quelques librairies :

import serial
import sys
from PIL import Image
import array

Puis ouvrir le port série émulé par le câble USB :

port="/dev/ttyACM1"
dso=serial.Serial(port)

Il est alors possible d’envoyer des chaînes de caractères à l’oscillo et de lire en retour une ligne ou un nombre quelconque d’octets. Si on essaie de trop en lire, l’appel est bloquant.

dso.write('*IDN?\n')
idn = dso.readline()
header_len_block = dso.read(2)

Pour récupérer le graphe d’un signal, il faut :

  • 1. Indiquer le mode d’acquisition (par exemple, le moyennage) :
    dso.write(b':ACQUire:MODe 2\n')

  • 2. indiquer sur combien de mesures la moyenne est réalisée :
    dso.write(b':ACQUire:AVERage 2\n')

  • 3. figer l’écran : dso.write(b':STOP\n')

  • 4. Indiquer le canal à récupérer dso.write(b':ACQUire1:MEMory?\n')

Puis lire le résultat. Si cela se passe bien, l’oscillo renvoie :

  • 1. Le caractère dièse :
    diese = dso.read(1)

  • 2. Un charactère indique la longueur du champ indiquant combien d’octets vont être transmis :
    lg= dso.read(1)

  • 3. Lire la chaîne de caractères :
    datal=dso.read(int(lg))

  • 4. la longueur des données est vraisemblablement de 8008 :

    • (a) l’intervale de temps (période) est un flotant sur 4 octets MSB :
      IT=dso.read(4)

    • (b) le numéro du canal :
      canal=dso.read(1)

    • (c) 3 octets de bourrage :
      inutile=dso.read(3)

    • (d) Enfin les données représentées par un entier signé sur deux octets :

      for i in range(int(data_length/2)-8):
          Y1=dso.read(2)
          V=struct.unpack('h',Y1)
          print(V)
      

Après un petit travail cosmétique, gnuplot affichera des courbes similaires à ce qu’on voit sur l’écran. La figure 24.5 montre un signal sinusoïdal sur l’écran de l’oscilloscope et sur l’écran de l’ordinateur.

(image)

Fig. 24.5 : Couplage Oscilloscope — Informatique.

Et la figure  ?? présente la même chose pour un triangle.

(image)

Fig. 24.6 : Un triangle affiché simultanément sur l’ordinateur.

dso.write(b':DISPLAY:GRAT 1\n')
dso.write(b'channel2:display 0\n')
dso.write(b'channel2:display 1\n')
dso.write(b':DISPlay:OUTPut?\n')

Page précédente Page suivante