i2c-smbus-temp-monitor-9.ino

BIOSSTAR BIWCL-PAT: SBC industrial de 3,5" con Intel Wildcat Lake · Archivo : i2c-smbus-temp-monitor-9.ino · Lenguaje : Python · Uso : Lire des capteurs de température environnementaux via le bus I2C/SMBus exposé sur les connecteurs d'extension.

Interroge périodiquement un capteur de température connecté via le bus I2C industriel pour le monitoring environnemental.

Installez python3-smbus. La BIWCL-PAT dispose de bus I2C accessibles via ses connecteurs internes (vérifiez le schéma électrique pour les broches SDA/SCL). Ce code suppose l'adresse 0x48 (standard LM75). Pour le déployer, activez le bus I2C dans le BIOS/UEFI si nécessaire. L'exécution nécessite les permissions d'accès au device node. C'est utile pour surveiller la température du boîtier industriel ou des process critiques. Le SoC Wildcat Lake offre une faible consommation, adaptée à cette tâche de surveillance continue.

i2c-smbus-temp-monitor-9.ino

import smbus
import time
import sys

# La carte BIWCL-PAT expose les bus I2C via ses headers internes ou modules d'extension
# Adresse typique d'un capteur LM75/DS18B20 (interface I2C) : 0x48
I2C_BUS = 1
ADDR = 0x48
TEMP_REG = 0x00

def read_temperature(bus, addr):
    try:
        # Lecture brut du registre de température (MSB/LSB)
        msb = bus.read_byte_data(addr, TEMP_REG)
        # Note : Certains capteurs nécessitent la lecture de deux octets
        # temp_raw = (msb << 8) | lsb
        # temp = temp_raw >> 6
        
        # Conversion simplifiée pour un capteur 16-bit standard
        if msb > 127:
            msb -= 256
        return msb
    except IOError:
        return None

def main():
    try:
        bus = smbus.SMBus(I2C_BUS)
    except OSError:
        print("Error: Could not open I2C bus. Check /dev/i2c-* devices.")
        sys.exit(1)

    print(f"Monitoring I2C Sensor at Bus {I2C_BUS}, Addr 0x{ADDR:X}")
    
    try:
        while True:
            temp = read_temperature(bus, ADDR)
            if temp is not None:
                print(f"Temp: {temp}°C - Timestamp: {time.strftime('%H:%M:%S')}")
            else:
                print("Sensor read failed. Check wiring and power (3.3V/5V on header).")
            time.sleep(1)
    except KeyboardInterrupt:
        print("\nMonitoring stopped.")
        bus.close()

if __name__ == "__main__":
    main()

← Volver a la ficha