🛠 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

Objectifs

Sur les images mainline de la PINE A64, le bus i2c-1 est activé d'office dans le device tree (&i1c1 avec le groupe de broches i2c1_pins sur PH2/PH3 du connecteur Pi-2, pull-ups inclus) : un capteur I²C fonctionne sans overlay. Tu vas câbler un BME280 (température/pression/humidité), le détecter avec i2cdetect, et le lire en Python via smbus2 — en comprenant la numérotation : PH2 = (H−A)×32 + 2 = 226, PH3 = 227, si tu dois rejouer la config pinctrl à la main.

Matériel

Code complet

# 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.

Vérification attendue

i2cdetect -r 1 affiche 76 : le bus i2c-1 existe, les pull-ups du DTS font leur travail, le capteur répond. Le script Python imprime les 6 octets bruts de pression (registres 0xF7–0xFC) qui varient quand on presse le capteur du doigt. Le test d'identité (0xD0 = 0x52) valide la liaison avant toute mesure — l'assertion échoue bruyamment si le câblage est faux.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels