Adresse des Displays bzw. ansprechen desselben


#1

in dem Skript, das ich von senseBox zugeschickt bekam, wird auch die Adresse der Sensoren abgefragt; z.B. wird der HDC1080 an Adresse 0x40 gefunden,
Welche Adresse hat das Display, das ja auch über I2C angesprochen wird.
Oder braucht man die Adresse überhaupt nicht?
Wie spricht man das Display an?
Hier die Prozedur checkI2CSensors()

void checkI2CSensors() {

  • byte error;*
  • int nDevices = 0;*
  • byte sensorAddr[] = {41, 56, 57, 64, 118};*
  • tsl = false; veml = false; hdc = false; bmp = false;*
  • Serial.println("\nScanning…");*
  • for (int i = 0; i < sizeof(sensorAddr); i++) {*
  • Wire.beginTransmission(sensorAddr[i]);*
  • error = Wire.endTransmission();*
  • if (error == 0) {*
  •  nDevices++;*
    
  •  switch (sensorAddr[i])*
    
  •  {*
    
  •    case 0x29:*
    
  •      Serial.println("TSL45315 found.");*
    
  •      tsl = true;*
    
  •      break;*
    
  •    case 0x38: // &0x39*
    
  •      Serial.println("VEML6070 found.");*
    
  •      veml = true;*
    
  •      break;*
    
  •    case 0x40:*
    
  •      Serial.println("HDC1080 found.");*
    
  •      hdc = true;*
    
  •      break;*
    
  •    case 0x76:*
    
  •      Serial.println("BMP280 found.");*
    
  •      bmp = true;*
    
  •      break;*
    
  •  }*
    
  • }*
  • else if (error == 4)*
  • {*
  •  Serial.print("Unknown error at address 0x");*
    
  •  if (sensorAddr[i] < 16)*
    
  •    Serial.print("0");*
    
  •  Serial.println(sensorAddr[i], HEX);*
    
  • }*
  • }*
  • if (nDevices == 0) {*
  • Serial.println(“No I2C devices found.\nCheck cable connections and press Reset.”);*
  • while(true);*
  • } else {*
  • Serial.print(nDevices);*
  • Serial.println(" sensors found.\n");*
  • }*
  • //return nDevices;*
    }

#2

Moin,

bei den Beispielprogrammen von der senseBox ist auch ein I2C-Scanner dabei. Der gibt bei mir z. B. folgendes aus:

Scanning…
Device found at 0x3C
Device found at 0x76
done

Das Device 0x3C ist ein OLED-Display, das Device 0x76 ist ein BME280 Sensor.


#3

Moin,

danke für die schnelle Antwort. Habe daraufhin den I2C-Scanner bei mir laufen lassen mit folgendem Ergebnis:

Scanning…
Device found at 0x29 TSL45315
Device found at 0x38 ?
Device found at 0x39 VEML6070
Device found at 0x3D ?
Device found at 0x40 HDC1080
Device found at 0x76 BMP280
done

Hat das Display dann 2 Adressen oder was sollen die beiden Adressen 38 und 3D


#4

Ich denke, dass die Adresse des originalen Displays 0X3D ist. Schau Dir doch mal das Beispiel hier an:

https://sensebox.github.io/books-v2/edu/de/komponenten/zubehoer/led-display.html .

Speziell die Setup()-Funktion.


#5

danke für den Hinweis. habe ein kleines Testprogramm (erfolgreich mit Blockly) geschrieben. Die Adresse kommt dabei nicht vor!

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <senseBoxIO.h>
#include “SenseBoxMCU.h”

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

HDC1080 hdc;

void setup() {
senseBoxIO.powerI2C(true);
delay(2000);
display.begin(SSD1306_SWITCHCAPVCC, 0x3D);
display.display();
delay(100);
display.clearDisplay();
hdc.begin();
}

void loop() {
double temper = hdc.getTemperature();
display.setCursor(0,0);
display.setTextSize(2);
display.setTextColor(WHITE,BLACK);
display.println((String(“Temperatur:”)+String(temper)));
display.display();
delay(1000);

}


#6

Habe mich geirrt. Die Adresse kommt doch vor. Du liegst mit 3D richtig.


#7

Genau, in der Zeile wird die Adresse 0x3D für das Display eingefügt.