import serial import time import sys parameter = sys.argv[1:] # Exclude the script name #print("Parameters received:") port='/dev/'+parameter[0] coefficient = int(parameter[1]) #coefficient = 4 def read_cairsens(port, baudrate=9600, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, databits=serial.EIGHTBITS, timeout=1): """ Lit les données de la sonde CAIRSENS via UART. /usr/bin/python3 /var/www/nebuleair_pro_4g/envea/read_value.py ttyAMA4 4 :param port: Le port série utilisé (ex: 'COM1' ou '/dev/ttyAMA0'). :param baudrate: Le débit en bauds (ex: 9600). :param parity: Le bit de parité (serial.PARITY_NONE, serial.PARITY_EVEN, serial.PARITY_ODD). :param stopbits: Le nombre de bits de stop (serial.STOPBITS_ONE, serial.STOPBITS_TWO). :param databits: Le nombre de bits de données (serial.FIVEBITS, serial.SIXBITS, serial.SEVENBITS, serial.EIGHTBITS). :param timeout: Temps d'attente maximal pour la lecture (en secondes). :return: Les données reçues sous forme de chaîne de caractères. """ try: # Ouvrir la connexion série ser = serial.Serial( port=port, baudrate=baudrate, parity=parity, stopbits=stopbits, bytesize=databits, timeout=timeout ) #print(f"Connexion ouverte sur {port} à {baudrate} bauds.") # Attendre un instant pour stabiliser la connexion time.sleep(2) # Envoyer une commande à la sonde (si nécessaire) # Adapter cette ligne selon la documentation de la sonde #ser.write(b'\r\n') ser.write(b'\xFF\x02\x13\x30\x01\x02\x03\x04\x05\x06\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x12\xAF\x88\x03') # Lire les données reçues data = ser.read_until(b'\n') # Lire jusqu'à la fin de ligne ou un autre délimiteur data = ser.readline() print(f"Données reçues brutes : {data}") #print(f"Données reçues (utf-8) : {data.decode('utf-8').strip()}") # Extraire le 20ème octet if len(data) >= 20: byte_20 = data[19] # Les indices commencent à 0, donc 19 pour le 20ème octet #print(f"20ème octet en hexadécimal : {hex(byte_20)}") #print(f"20ème octet en nombre : {byte_20}") else: print("Données reçues insuffisantes pour extraire le 20ème octet.") # Fermer la connexion ser.close() #print("Connexion fermée.") return byte_20 * coefficient except serial.SerialException as e: print(f"Erreur de connexion série : {e}") return None # Exemple d'utilisation if __name__ == "__main__": port = port # Remplacez par votre port série (ex: /dev/ttyAMA0 sur Raspberry Pi) baudrate = 9600 # Débit en bauds (à vérifier dans la documentation) parity = serial.PARITY_NONE # Parité (NONE, EVEN, ODD) stopbits = serial.STOPBITS_ONE # Bits de stop (ONE, TWO) databits = serial.EIGHTBITS # Bits de données (FIVEBITS, SIXBITS, SEVENBITS, EIGHTBITS) data = read_cairsens(port, baudrate, parity, stopbits, databits) if data: print(data)