capteur-i2c.sh

Hardkernel ODROID-XU4 (Samsung Exynos5422) · 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

Un ODROID-XU4 (Samsung Exynos5422, 4 Cortex-A15 + 4 Cortex-A7, 2 GB) con Ubuntu de Hardkernel o Armbian, con Ethernet gigabit y puerto 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.

Ejecución

En Ubuntu de Hardkernel o Armbian: apt install gpiod python3-gpiod; el conector de 40 pines aparece en gpiodetect (chips gpiochip0/1 en Exynos), revisa los pines con gpioinfo.

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

← Volver a la ficha