cm3588-gpio-i2c-control-7.ino

Módulo SOM FriendlyElec CM3588 (Rockchip RK3588) · Archivo : cm3588-gpio-i2c-control-7.ino · Lenguaje : Python · Uso : Lire un capteur environnemental I2C (ex: BMP280) en utilisant les bibliothèques GPIO natives de RK3588.

Ejemplo en Python usando smbus2 para consultar un sensor I2C (ej. BMP280) a través de los buses de hardware RK3588, incluyendo verificación de ID de dispositivo.

El CM3588 incluye múltiples controladores I2C. Habilite I2C1 en el Device Tree (dts) o mediante herramientas de configuración del sistema. Instale 'smbus2' y 'gpiod'. Los pines GPIO deben estar mapeados correctamente según la placa base específica utilizada.

cm3588-gpio-i2c-control-7.ino

import time
import smbus2
import gpiod

# Configuration matérielle CM3588
# Bus I2C1 est généralement disponible sur les pins 3-5 (SDA1/SCL1) via le connecteur 100 broche
# Vérifiez avec 'i2cdetect -y 1' pour voir l'adresse du capteur (ex: 0x76)

I2C_BUS_NUM = 1
SENSOR_ADDRESS = 0x76 # Exemple BMP280
CHIP = "/dev/gpiochip0" # Chip GPIO principal du RK3588
PIN_SDA = 44 # Correspondance physique vers GPIO logique (dépend du pinout exact du carrier board)

try:
    # Initialisation du bus I2C
    bus = smbus2.SMBus(I2C_BUS_NUM)
    
    # Vérification de la présence du capteur
    try:
        device_id = bus.read_byte_data(SENSOR_ADDRESS, 0xD0)
        if device_id != 0x58:
            print(f"Erreur : Device ID inattendu {device_id} (attendu 0x58)")
            exit()
        print("Capteur BMP280 détecté.")
    except OSError:
        print("Erreur : Impossible de communiquer avec le capteur. Vérifiez le câblage et i2cdetect.")
        exit()

    # Lecture simplifiée de la pression (nécessite lecture des coefficients de calibration pour précision réelle)
    print("Lecture en cours...")
    while True:
        try:
            # Lecture des bits de données brutes (simplifié)
            msb = bus.read_byte_data(SENSOR_ADDRESS, 0xF7)
            lsb = bus.read_byte_data(SENSOR_ADDRESS, 0xF8)
            xlsb = bus.read_byte_data(SENSOR_ADDRESS, 0xF9)
            
            adc_p = ((msb << 12) | (lsb << 4) | (xlsb >> 4))
            print(f"Valeur brute pression ADC: {adc_p}")
            time.sleep(1)
        except KeyboardInterrupt:
            break
        except Exception as e:
            print(f"Erreur de lecture: {e}")
            break

finally:
    bus.close()
    print("Bus I2C fermé.")

← Volver a la ficha