capteur-i2c.sh
El reflejo Linux para cualquier sensor I2C: barrer el bus con i2cdetect, confirmar que el chip está y leer unos registros con i2cget. Salida directa en el terminal sin escribir una línea de código de aplicación.
Hardware necesario
Un Compute Module 3/3 Lite (BCM2837) en una Compute Module IO Board v3, alimentada a 5 V, con Raspberry Pi OS (Bullseye) en tarjeta SD o eMMC. 1 sensor I2C (BMP280, MPU6050, SSD1306...) — alimentar a 3,3 V.
Cableado
SDA/SCL a los pines I2C del conector (localizarlos en la doc de la placa), VCC 3,3 V, GND. Activar el bus en el firmware/device tree.
Funcionamiento
i2cdetect -y envía peticiones a todas las direcciones e imprime las respuestas; i2cget lee un registro. El script comprueba la dirección antes de leer. En Bullseye: sudo apt install python3-gpiozero y ejecute python3 su_script.py. Los pines siguen la numeración BCM (GPIO17, GPIO18…) que expone la IO Board.
Para ir más lejos
Encadenar con una conversión en Python (py-smbus), o guionizar la lectura periódica en un cron para registrar presión/temperatura.
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