capteur-i2c.sh

Banana Pi BPI-M2 Zero (Allwinner H2+ / H3) · Fichier : capteur-i2c.sh · Langage : Bash · Usage : Détecter et lire un capteur sur le bus I2C en ligne de commande

Le réflexe Linux pour tout capteur I2C : balayer le bus avec i2cdetect, vérifier la présence de la puce puis lire quelques registres avec i2cget. Sortie directe dans le terminal, sans écrire une ligne de code applicatif.

Matériel requis

Un Banana Pi BPI-M2 ZERO (Allwinner H2+, format Pi Zero) sur image Armbian, alimenté en 5 V par son port micro-USB dédié, avec son connecteur 40 broches compatible Raspberry Pi. 1 capteur I2C (BMP280, MPU6050, SSD1306...) — alimenter en 3,3 V.

Branchement

SDA/SCL sur les broches I2C du connecteur (les repérer dans la doc de la carte), VCC 3,3 V, GND. Activer le bus dans le firmware/device tree.

Fonctionnement

i2cdetect -y envoie des requêtes sur toutes les adresses et affiche les réponses ; i2cget lit un registre. Le script vérifie l'adresse avant de lire. Sous Armbian : sudo apt install gpiod, puis gpiodetect (gpiochip0 = banques PA-PE, gpiochip1 = PL) et gpioinfo pour retrouver les lignes du connecteur (noms CON2-Pxx).

Pour aller plus loin

Enchaîner avec une conversion en Python (py-smbus), ou scripter la lecture périodique dans un cron pour journaliser pression/température.

capteur-i2c.sh

#!/bin/bash
# Detection et lecture d'un capteur I2C (ex. BMP280 en 0x76) avec i2c-tools.
# Installation : sudo apt install i2c-tools
# Activer le bus I2C (raspi-config / device tree overlay / dtb selon la carte).

set -u
BUS="${1:-1}"   # numero de bus (sortie de i2cdetect -l)

echo "== Bus I2C disponibles =="
i2cdetect -l || { echo "noyau sans I2C ? activer le bus"; exit 1; }

echo
echo "== Balayage du bus ${BUS} =="
i2cdetect -y "${BUS}" || exit 1

ADRESSE="${2:-0x76}"
if i2cdetect -y "${BUS}" | grep -q "${ADRESSE#0x}"; then
  echo
  echo "== Lecture de ${ADRESSE} (16 octets) =="
  i2cget -f -y "${BUS}" "${ADRESSE}" 0x00    # ID de puce (0x58/0x5D BMP280)
  i2cget -y "${BUS}" "${ADRESSE}" 0xfa       # LSB pression (registre brut)
  i2cget -y "${BUS}" "${ADRESSE}" 0xfb
  i2cget -y "${BUS}" "${ADRESSE}" 0xfc
  echo "(brut a convertir avec les registres de calibration de la doc)"
else
  echo "Aucune puce a ${ADRESSE} : verifier cable/alimentation/adresse"
  exit 2
fi

← Retour à la fiche