Hardwarenahe Programmierung

You are viewing an older revision! See the latest version

I2C Pinänderung

Mit dem ESP32 kann fast jeden Pin auf I2C eingestellt werden. Es wird die Wire.h-Bibliothek verwendet, um mit Geräten zu kommunizieren, die I2C verwenden:

Wire.begin(I2C_SDA, I2C_SCL);

Allerdings funktioniert das nicht immer, wenn z.B. die Bibliothek des Sensors direkt verwendet wird, da diese die Pins überschreiben, wenn keine eigene Wire-Instanz übergeben werden kann. In diesen Fällen muss die CPP-Bibliotheksdatei genauer angesehen werden, wie eigene TwoWire-Parameter übergeben werden können.

Hier ein Beispielprogramm zum Lesen vom BME280 mit anderen Pins, z. B. GPIO 33 als SDA und GPIO 32 als SCL:

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

#define I2C_SDA 33
#define I2C_SCL 32

#define SEALEVELPRESSURE_HPA (1013.25)

TwoWire I2CBME = TwoWire(0);
Adafruit_BME280 bme;

unsigned long delayTime;

void setup() {
  Serial.begin(115200);
  Serial.println(F("BME280 test"));
  I2CBME.begin(I2C_SDA, I2C_SCL, 100000);

  bool status;

  // default settings
  // (you can also pass in a Wire library object like &Wire2)
  status = bme.begin(0x76, &I2CBME);  
  if (!status) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
  }

  Serial.println("-- Default Test --");
  delayTime = 1000;

  Serial.println();
}

void loop() { 
  printValues();
  delay(delayTime);
}

void printValues() {
  Serial.print("Temperature = ");
  Serial.print(bme.readTemperature());
  Serial.println(" *C");
  
  // Convert temperature to Fahrenheit
  /*Serial.print("Temperature = ");
  Serial.print(1.8 * bme.readTemperature() + 32);
  Serial.println(" *F");*/
  
  Serial.print("Pressure = ");
  Serial.print(bme.readPressure() / 100.0F);
  Serial.println(" hPa");

  Serial.print("Approx. Altitude = ");
  Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
  Serial.println(" m");

  Serial.print("Humidity = ");
  Serial.print(bme.readHumidity());
  Serial.println(" %");

  Serial.println();
}


All wikipages