cm3588-gpio-i2c-control-7.ino
Python example using smbus2 to query an I2C sensor (e.g., BMP280) via RK3588 hardware buses, including device ID verification.
The CM3588 includes multiple I2C controllers. Enable I2C1 in the Device Tree (dts) or via system config tools. Install 'smbus2' and 'gpiod'. GPIO pins must be mapped correctly according to the specific carrier board used.
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é.")