cm3588-gpio-i2c-control-7.ino

Module SOM FriendlyElec CM3588 (Rockchip RK3588) · Fichier : cm3588-gpio-i2c-control-7.ino · Langage : Python · Usage : Lire un capteur environnemental I2C (ex: BMP280) en utilisant les bibliothèques GPIO natives de RK3588.

Exemple Python utilisant smbus2 pour interroger un capteur I2C (type BMP280) via les buses hardware du RK3588, avec vérification d'identité.

Le CM3588 dispose de plusieurs contrôleurs I2C. Activez I2C1 dans le fichier de configuration Device Tree (dts) ou via l'interface graphique du système (ex: raspi-config équivalent ou overpi-config). Installez 'smbus2' et 'gpiod'. Les broches GPIO doivent être mappées correctement selon la carte porteuse utilisée.

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é.")

← Retour à la fiche