🛠 Connecter un capteur externe en I²C et SPI

Adafruit Feather nRF52840 Express · intermediaire · Schéma : IMG-nrf52840-feather-intermediaire-3-nrf52840-spi-i2c-capteur-externe.svg — Feather nRF52840 reliée à un module BMP280 en I²C (SDA/SCL) et à un module SPI, pull-up sur le bus, broches 3V3 et GND communes.

Objectifs

Câbler et lire un capteur externe (exemple : BMP280/BME680) sur les bus I²C et SPI du nRF52840. Le SoC route SPI, UART, I²C et I²S sur n'importe quelle broche (PSEL), mais attention aux pièges propres à la Feather : les 3 maîtrès SPI lents partagent leurs instances avec les maîtrès I²C, et le SPIM3 rapide est HS sous alimentation batterie.

Matériel

Code complet

// nrf52840-spi-i2c-capteur-externe.ino
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_BMP280.h>

Adafruit_BMP280 bmp;               // par defaut: I2C sur Wire

void setup {
  Serial.begin(115200);
  Wire.begin;                    // TWI sur les broches Feather SDA/SCL
  // AVERTISSEMENT: board.SPI/SPI par defaut peut allouer SPIM3 (<=32 MHz),
  // qui NE FONCTIONNE PAS sur batterie (bug matériel documente par Adafruit,
  // la ligne ne devient correcte que lorsque VUSB est alimente). Sur batterie,
  // forcez un SPIM lent: SPIClass spi(SPI1); ou workaround CircuitPython.
  if (!bmp.begin_I2C(0x76, &Wire)) {
    Serial.println("BMP280 absent sur 0x76 (essayer 0x77)");
    while (1) delay(100);
  }
  Serial.println("BMP280 OK");
}

void loop {
  Serial.print(bmp.readTemperature, 2); Serial.print(" C  ");
  Serial.print(bmp.readPressure / 100.0f, 2); Serial.println(" hPa");
  delay(1000);
}

Vérification attendue

Température et pression défilent chaque seconde. Un Wire.scan I²C liste l'adresse du module (0x76 ou 0x77). Le test est reproductible sur USB et sur batterie uniquement si vous n'avez pas utilisé SPIM3 — testez les deux alimentations avant de valider un projet portable.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels