Diese Anleitung ist veraltet, die neuere Version findet ihr hier.
Diese Anleitung bezieht sich auf die BSEC Library Version 1.4.5.1 vom 16.11.2017
Eine meiner letzten Errungenschaften, ist ein Breakout mit dem BME680 von watterott. Der Sensor liefert Temperatur, Luftfeuchtigkeit, Luftdruck und einen Indoor Air Quality (IAQ) Wert. Für die Berechnung der IAQ wird aber eine spezielle Library von Bosch benötigt, die alles etwas verkompliziert. Ich hatte anfänglich meine Schwierigkeiten alles ans Laufen zu bekommen und hoffe das ich hiermit einigen helfen kann. Ein generelles Problem besteht aber weiterhin. Ich bekommen keine TXCOMPLETE Event geliefert, obwohl die Daten übertragen werder und somit steht der Datenversand immer noch an. Einzig durch einen Reset der LMIC, wie bei der Initialisierung, ermöglicht mir Daten wiederholt zu schicken. Mit einem „Hello World“ Sketch und dem gleichen Pin Mapping ist es kein Problem, aber mit meinem aktuellen BME680 Code schon. Somit ist OTAA auch nicht möglich. Eventuell hat hier jemand eine Idee für mich.
BME680 Vorbereitungen
Zunächst müssen wir uns die BSEC Software besorgen. Diese kann, nach Akzeptierung der Lizenzvereinbarungen, direkt von Bosch geladen werden. Ihr entpackt anschließend das Zip-File.
Arduino IDE anpassen
Wenn ihr bereits den NodeMCU in die Arduino IDE eingebunden habt, könnt ihr diesen Abschnitt überspringen.
Ihr Öffnet die Arduino IDE und geht auf Datei >> Voreinstelungen >> Zusätzich Boardverwalter-URLs und tragt dort folgenden Link ein.
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Anschließend wechselt ihr zu Werkzeuge >> Board >> Boardverwalter und sucht nach ESP8266 und installiert dort ESP8266 Community.
BSEC integrieren
Die BSEC beihaltet vorgefertigte Librarys, welche beim Kompilieren mit eingebunden werden müssen, dazu müssen ein Paar Anpssungen vorgenommen werden. Normalerweise solltet ihr die Software eures Boards unter <USER-HOME>\AppData\Local\Arduino15\packages\esp8266\ finden.
1. Kopiert die Datei algo\bin\ESP8266\libalgobsec.a aus dem BSEC Paket nach hardware\esp8266\2.3.0\tools\sdk\lib.
2. Die Linker Datei hardware\esp8266\2.3.0\tools\sdk\ld\eagle.app.v6.common.ld muss ebenfalls angepasst werden. Fügt folgende Zeile ein:
*libalgobsec.a:(.literal .text .literal.* .text.*)
nach
*libm.a:(.literal .text .literal.* .text.*)
3. Anschließend müssen wir dem Linker noch anweisen BSEC zu integrieren. Erweitert dazu folgende Zeile in der Datei hardware\esp8266\2.3.0\platform.txt
compiler.c.elf.libs=-lm -lgcc
um
-lalgobsec
Soft- und Hardware Konfiguration
Ihr erstellt nun einen Ordner bsec_iot_example und kopiert folgende Dateien aus dem BSEC Paket. Anschließend sollt euer Ordner neun Dateien enthalten. Der Ordner sollte den Namen bsec_iot_example haben, da das .ino File auch so heißt und euch die Arduino IDE nicht mit der bekannte Fehlermeldung kommt und einen weiteren Ordner erzeugt.
- aus /algo:
bsec_datatypes.h
bsec_interface.h
- aus /API: (alle .h und .c Dateien)
bme680.c
bme680.h
bme680_defs.h
- aus/example
bsec_integration.c
bsec_integration.h
bsec_iot_example.ino
Das BME680 Breakout von Watterott verwendet als Default die I²C Adresse 0x77, die BSEC Library aber 0x76 per Default. Es gibt nun drei Möglichkeiten dieses Problem zu beseitigen, ihr braucht nur eine auswählen.
- Den Pin SDO auf dem Breakout mit GND verbinden, damit nutzt das BME Breakout die 0x76
- In der bme680_defs.h die Adressen anpassen, bzw. tauschen.
- In der bsec_integration.c auf die Secondary umschreiben
Für Punkt 2 müsst ihr folgende Zeilen in der bme680_defs.h anpassen. Tauscht einfach die Adressen oder schreibt eure Werte rein.
/** BME680 I2C addresses */
#define BME680_I2C_ADDR_PRIMARY UINT8_C(0x77)
#define BME680_I2C_ADDR_SECONDARY UINT8_C(0x76)
Für Punkt drei ändert ihr in der bsec_integration.c folgende Zeile. Ich habe dort den Eintrag Primary gegen Secondary getauscht.
bme680_g.dev_id = BME680_I2C_ADDR_SECONDARY;
Den I²C -Bus habe ich auf GPIO 0 und 2 gelegt. Passt dieses euren Wünschen an.
Wire.begin(0,2); //GPIO SDA und SCL D3,D4
Damit sollte euer Sketch kompilieren und laufen. Ein Kleinigkeit noch für alle die kein LoRaWAN nutzen. Bosch hat einen Offset von 5°C eingebaut, diesen solltet ihr entfernen oder euren Gegebenheiten anpassen.
ret = bsec_iot_init(BSEC_SAMPLE_RATE_LP, 0.0f, bus_write, bus_read, sleep, state_load, config_load);
Anschließend habe ich noch alles um die nötigen LoRaWAN Einstellungen angepasst damit ich den Node mit TTN nutzen konnte. Das Ergebnis findet ihr auf GitHub, ist aber nicht sehr schön und hat halt den EV_TXCOMPLETE Bug. Eventuell hat jemand eine Idee.
Das Schaltbild sieht so aus. Die Pinbelegung findet ihr im Sketch auf GitHub.
TTN Anpassen
Damit ist der Payload Decoder gemeint. Somit habt ihr eure Daten gut aufbereitet.
[code lang="java"] function Decoder(b, port) { var temp = (b[0] | b[1]&amp;amp;lt;&amp;amp;lt;8 | (b[1] &amp;amp;amp; 0x80 ? 0xFF&amp;amp;lt;&amp;amp;lt;16 : 0)) / 100; var hum = (b[2] | b[3]&amp;amp;lt;&amp;amp;lt;8 | (b[3] &amp;amp;amp; 0x80 ? 0xFF&amp;amp;lt;&amp;amp;lt;16 : 0)) / 100; var iaq = (b[4] | b[5]&amp;amp;lt;&amp;amp;lt;8 | (b[5] &amp;amp;amp; 0x80 ? 0xFF&amp;amp;lt;&amp;amp;lt;16 : 0)) / 100; var press = (b[6] | b[7]&amp;amp;lt;&amp;amp;lt;8 | (b[8] &amp;amp;amp; 0x80 ? 0xFF&amp;amp;lt;&amp;amp;lt;16 : 0))/10; return { env: { temp: temp, hum: hum, iaq: iaq, press: press }, }; } [/code]
Ich hoffe ich konnte euch etwas helfen und eventuell fällt jemandem ja ein, wie ich den Bug beheben kann.
Hallo Björn,
nachdem Reinhard mich auf Dein Blog aufmerksam gemacht hat, habe ich Deine Doku heute mal nach vollzogen.
– es scheint mit dem 16.11. eine neue .ZIP von Bosch zu geben. Da ist alles etwas „ge-streamlined“ und von Dir dokumentierte Files fehlen, dennoch kompiliert die .ino ohne Fehler, wenn man die Files einfach weg läßt.
Vielleicht solltest Du noch schreiben, wo man das Verzeichnis „bsec_iot_example“ , denn das erschießt sich m.E. erst, wenn man sieht, dass man eine .ino reinkopiert.
– ich habe im Sketch noch #include hinzugefügt, da sonst mein I²C auf Pin D5 und D6 nicht wollte.
Viele Grüße von Zülpicher Platz
Klaus
Hallo Klaus,
danke für die Infos, ich werde morgen mal schauen was sich geändert hat. Eventuell sollte ich die ESP8266WiFi.h ebenfalls einbinden, den ich vermute mein TXCOMPLETE Problem hat was mit dem I²C Bus und dem Pin für DIO1 zu tun.
Die Anmerkung zum Ordner habe ich auch gleich aufgenommen.
Grüße aus Sülz,
Björn
hmmm.. ESP8266WiFi.h fehlt in meinem Kommentar 🙂
Punkt „2.In der bme680.h die Adressen anpassen, bzw. tauschen.“
ist jetzt in der bme680_defs.h
Warum hast du auf dem RFM9x Board den G0 Pin nicht verbunden, wohl aber unnützerweise den G2? Ich habe ein ähnliches Setup wie du, habe auch ein Schaltbild wie du auf meinem Blog http://wolfgangklenk.wordpress.com
Danke für den Hinweis, leider ist der Fehler nur im Schaltbild und nicht in der tatsächlichen Schaltung. Schade, das hätte den Fehler erklärt.
Hast du denn den BME680 inkl BSEC mit LoRaWAN sauber am laufen?
Hallo Björn,
wollte mir nun auch so einen Sensor zusammenbauen. Besteht der Bug immer noch, oder ist der mittlerweile beseitigt?
Hi,
ich konnte das Problem bisher nicht lösen und habe dann irgendwann aufgegeben. Mittels ABP und dem Workarround funktioniert alles jedoch wunderbar.
Hi,
ich wollte mal fragen, wie deine Erfahrungen mit dem bme680 sind. Konntest du Luftqualitätswerte sehen, die logisch waren?
Was für Ursachen hatte das? Ich frage, da ich diesen Sensor zum erkennen von Katzenklo Gängen nutzen möchte
Die Idee ist, wenn es stinkt soll ein Lüfter angehen.
VG,
Christian
Hallo Christian,
also für mich sind die Werte logisch, aber ob sie dir helfen, bzw. der BME in deinem Anwendungsfall etwas feststellt, kann ich dir nicht beantworten.
Mein BME680 ist in einem Büro mit zehn Mitarbeitern im Einsatz. Am Tag korrelieren die Werte mit deren eines CO2 Sensors. Wird nicht gelüftet steigen die Werte an, und sinken sobald Frischluft in den Raum kommt. In der Nacht, steigen die Werte ebenfalls leicht an. Hier vermute ich das Ausdünstungen aus PCs usw. als Quelle.
Infos zu den VOCs
Probier es einfach mal aus.
Grüße,
Björn
Hallo!
Ist die ESP8266 Library für den Boardmanager im Arduino IDE gelöscht? Ich finde sie nicht.
Gruß
Thomas
Hallo Thomas,
nein die gibt es noch. Du musst aber noch händisch tätig werden:
Arduino IDE anpassen
Wenn ihr bereits den NodeMCU in die Arduino IDE eingebunden habt, könnt ihr diesen Abschnitt überspringen.
Ihr Öffnet die Arduino IDE und geht auf Datei >> Voreinstelungen >> Zusätzich Boardverwalter-URLs und tragt dort folgenden Link ein.
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Anschließend wechselt ihr zu Werkzeuge >> Board >> Boardverwalter und sucht nach ESP8266 und installiert dort ESP8266 Community.
Grüße,
Björn