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
Un ODROID-C4 (Amlogic S905X3, 4 Cortex-A55, 4 GB) con Armbian o Ubuntu de Hardkernel, con Ethernet gigabit, receptor IR y conector de 40 pines. 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.
Ejecución
En Armbian (kernel mainline): apt install gpiod python3-gpiod; el C4 expone dos chips, gpio y gpio_ao (gpiodetect); el LED azul también se controla vía /sys/class/leds.
Variantes
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