capteur-i2c.sh

BeagleBone Black (TI Sitara AM3358) · Archivo : capteur-i2c.sh · Lenguaje : Bash · Uso : Détecter et lire un capteur sur le bus I2C en ligne de commande

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

Una BeagleBone Black (TI AM3358) con la imagen Debian oficial, alimentada a 5 V por mini-USB, con sus conectores P8/P9 a 3,3 V (¡nunca 5 V en los 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. En Debian: sudo apt install gpiod python3-gpiod; los pines P8/P9 tienen nombres del árbol de dispositivos (gpioinfo). Las entradas analógicas AIN0-6 están en P9 (1,8 V máx, vía IIO).

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

← Volver a la ficha