🛠 Lire un capteur I²C (BME280) sur le bus i2c-1 du connecteur Pi-2

Pine64 PINE A64 / PINE A64+ (Allwinner A64) · intermediaire · Schéma : IMG-pine64-intermediaire-2-capteur-i2c-bme280.svg — PINE A64 sur breadboard avec un module BME280 branche sur SDA/SCL du connecteur 40 broches (broches PH2/PH3 annotees), alimente en 3,3V, terminal affichant i2cdetect -r 1 avec 0x76 detecte et valeurs brutes lues en Python

Objetivos

En las imágenes mainline de la PINE A64, el bus i2c-1 está activado de forma predeterminada en el device tree (&i1c1 con el grupo de pines i2c1_pins en PH2/PH3 del conector Pi-2, incluyendo resistencias de pull-up): un sensor I²C funciona sin necesidad de overlay. Vas a conectar un BME280 (temperatura/presión/humedad), detectarlo con i2cdetect y leerlo en Python mediante smbus2 — comprendiendo la numeración: PH2 = (H−A)×32 + 2 = 226, PH3 = 227, si necesitas reproducir la configuración pinctrl manualmente.

Material

Código completo

# Lister les bus puis scanner le bus 1 (&i2c1 activé dans le DTS) :
i2cdetect -l
i2cdetect -r 1        # doit afficher 76 (ou 77)
#!/usr/bin/env python3
"""Lecture brute d'un BME280 sur i2c-1 (broches PH2/PH3 du connecteur Pi-2)."""
import smbus2, time

BUS  = 1          # &i2c1 est activé dans sun50i-a64-pine64.dts
ADDR = 0x76       # 0x77 si la broche CSB est tirée à 1
bus = smbus2.SMBus(BUS)
assert bus.read_byte_data(ADDR, 0xD0) in (0x52, 0x53), "pas de BME280 (id?)"
bus.write_byte_data(ADDR, 0xF4, 0x27)   # temp x1, press x1, mode normal
bus.write_byte_data(ADDR, 0xF5, 0x00)   # veille 1 Hz
time.sleep(0.1)
print("octets bruts pression:", bus.read_i2c_block_data(ADDR, 0xF7, 6))
# Pour des unités lisibles, utiliser un driver (adafruit-blinka, bme280-i2c) ;
# les formules de compensation complètes sont dans la datasheet BME280.

Verificación esperada

i2cdetect -r 1 muestra 76: el bus i2c-1 existe, las resistencias de pull-up del DTS están funcionando y el sensor responde. El script de Python imprime los 6 bytes sin procesar de la presión (registros 0xF7–0xFC) que varían cuando se presiona el sensor con el dedo. La prueba de identidad (0xD0 = 0x52) valida la conexión antes de cualquier medición — la aserción falla ruidosamente si el cableado es incorrecto.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales