Unverträglichkeiten zwischen verschiedenen Librarys?


#1

Hallo,

ich wollte zu meinem Standardskript (HDC1080, TSL45315&VEML60,70, BMP280 und Feinstaubsensor) das Display hinzufügen, das die Temperatur anzeigen soll. Wenn ich dann dazu die Bibliothek “SenseBoxMCU.h” einbinde, erscheint folgende Fehlermeldung; " addMeasurement(UVINTESENSOR_ID, VEML.getUV());"
die damit offensichtlich nichts zu tun hat. Kommentiere ich die Zeile
SenseBoxMCU.h wieder aus ist alles in Ordnung.
Beißt sich die SenseBoxMCU.h mit den anderen Bibliotheken?


#3

danke für den Hinweis. gibt es irgendwo eine Möglichkeit zu sehen welche Librarys in SenseBoxMCU schon eingebunden sind?


#4

Die senseBox MCU Library wird vorallem für die Code Generierung in Blockly verwendet. Einige Funktionen wurden vereinfacht, sodass die Code Erstellung über Blockly einfacher durchgeführt werden kann. Dokumentiert ist die Library und ihre Funktionen hier.

Der Sketch der senseBox:home verwendet die Libraries, die vom Hersteller der Sensoren kommen daher kann es teilweise zu Überschneidungen kommen. Um das Display in den bereits vorhandenen Sketch der senseBox:home zu integrieren müssen die folgenden Libraries integriert werden:

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <senseBoxIO.h>

Das Display wird dann über dem Setup definiert:

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

Anschließend im Setup () initialisiert:

senseBoxIO.powerI2C(true);
delay(2000);
display.begin(SSD1306_SWITCHCAPVCC, 0x3D);
display.display();
delay(100);
display.clearDisplay();

und kann dann in der loop() über folgenden Befehle angesprochen werden:

display.setCursor(0,0);
display.setTextSize(1); // Verändere Schriftgröße hier 
display.setTextColor(WHITE,BLACK); // Verändere Schriftfarbe hier
display.println("senseBox rocks!");// Gebe hier an was dein Display anzeigen soll! Hier kannst du auch die Ergebnisse deiner Messwerte 
display.display();

#5

das ist eine ausführliche und schlüssige Antwort. Werde ich gleich mal ausprobieren.


#6

Keine Fehlermeldungen mehr aber Display bleibt dunkel.
Bin im Moment ratlos.


#7

Versuche doch mal folgenden Code:

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <senseBoxIO.h>

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

void setup() {
  // put your setup code here, to run once:
senseBoxIO.powerI2C(true);
delay(2000);
display.begin(SSD1306_SWITCHCAPVCC, 0x3D);
display.display();
delay(100);
display.clearDisplay();
}

void loop() {
  // put your main code here, to run repeatedly:
display.setCursor(0,0);
display.setTextSize(1); // Verändere Schriftgröße hier 
display.setTextColor(WHITE,BLACK); // Verändere Schriftfarbe hier
display.println("senseBox rocks!");// Gebe hier an was dein Display anzeigen soll! Hier kannst du auch die Ergebnisse deiner Messwerte 
display.display();
}

Damit sollte zumindest etwas auf dem Display angezeigt werden. Manchmal hilft es nach dem Hochladen noch einen Reset über den Resetbutton auszuführen.


#9

@mario

Bedeutet das, dass die Library senseBoxMCU.h und die Library senseBoxIO.h nicht zusammen verwendet werden können?


#10

Doch diese beiden können zusammen verwendet werden. Inkompatibel sind zum Beispiel die senseBoxMCU.h und die HDC100X.h. Die senseBoxMCU.h wird aktuell ausschließlich für Blockly verwendet und sollte auch nur in dem Zusammenhang verwendet werden.
Für das Display wird allerdings nur die folgenden Libraries benötigt: Adafruit_GFX.h und
Adafruit_SSD1306.h.

Deinen Sketch kann ich nicht überprüfen, da einiges an der formatierung verloren gegangen ist. Du solltest allerdings auch die ID’s für die senseBox und Sensoren nicht öffentlich posten und auch deine Wifi Zugangsdaten sind zurzeit frei einsehbar.


#11

Danke für den Hinweis. Habe ich sofort befolgt


#12

@mario
Habe nochmal einen Versuch gemacht mit Blockly:
Das Display blitzt mit dem Adafruit-Logo kurz auf danach nur dunkel.

Hier der Sketch

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

double T;
double F;

#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();
//Setup Serial Print
Serial.begin(9600);

}

void loop() {
T = hdc.getTemperature();
F = hdc.getHumidity();
display.setCursor(0,0);
display.setTextSize(1);
display.setTextColor(WHITE,BLACK);
display.println(“Temperatur”);
display.println(double(T));
Serial.println(T);
display.setCursor(0,16);
display.setTextSize(1);
display.setTextColor(WHITE,BLACK);
display.println(double(F));
Serial.println(F);
display.clearDisplay();
display.display();
delay(3000);

}


#13
display.clearDisplay(); 
display.display();

Die beiden Zeilen zeigen wieso es nicht geht. Du löscht den Inhalt des Display bevor du ihn eigentlich anzeigen lässt. In Blockly sieht es wahrscheinlich wie folgt aus:


Hier wird der Inhalt des Displays gelöscht bevor er angezeigt wurde.

Der Inhalt wird angezeigt und anschließend gelöscht --> der richtige Weg :wink:


#14

@mario

Danke es funktioniert. Bei Blockly habe nicht ganz aufgepasst. Trivialer Fehler.