PaxCounter mit Umweltsensor

Es gibt viele gute Gründe warum man an den PaxCounter auch noch einen Umweltsensor anschließen sollte: Etwa um zu sehen wieviele Menschen an einem bestimmten Ort sind, wenn dieser kalt, warm, trocken oder feucht ist. Aber auch etwa für eine Toilette die nach einer bestimmten Anzahl von Nutzenden vielleicht gereinigt werden sollte oder gelüftet.

Das läßt sich gut mit einem Bosch BME 680 Sensor messen. Der BME680 ist ein Umgebungssensor für Luftfeuchtigkeit, Druck, Temperatur und Luftgüte also Flüchtige organische Verbindungen (Volatile Organic Compounds, kurz VOC).

Als Platine für den PaxCounter verwende ich den TTGO Beam, der hat auch gleich ein noch GPS drauf. Den kann man zusammen mit dem BME680 gleich bei AliExpress bestellen. Beim TTGO darauf achten, das man den Beam für 868 Mhz für Europa bestellt.

Verkabelungsschema für den TTGO Beam und den BME680

Nachdem wir das Zeugs von AliExpress bekommen haben, also nach 6 Wochen, können wir uns dann ans Basteln machen: Eigentlich müßen wir wenig machen. Einfach an beide Boards Pins anlöten, die werden mitgeschickt und die dann mit Steckkabeln verbinden. Als Gehäuse nehmen sie was gefällt, etwa eine Vesperbrotdose oder sich eines im 3D Druck ausdrucken. Strom kann man von einer großen USB Powerbank bekommen.

Nachdem wir es zusammen gebaut haben, müßen wir den Code auf den PaxCounter flashen. Dafür gibt es eine schöne Anleitung, die ich für das Make Magazin aufgeschrieben habe.

Wir setzten aber in der Platformio.ini Datei das Semikolon vor

;env_default = generic

und entfernen es bei:

env_default = ttgobeam

Dann machen wir noch die beschriebenen Änderungen in der paxcounter.conf und loraconf.h, sowie in der ota.conf.

Nun kann es sein, das wir neben diesen Änderungen noch die Adresse des Sensors ändern müßen. Dazu finden wir in der Datei

src/hal/ttgobeam_new.h

die Programmzeile 16. Die müßen wir unkommentieren.

#define HAS_BME GPIO_NUM_21, GPIO_NUM_22 // SDA, SCL

Beim Bluedot ist 0x77 die default Adresse. Falls der Sensor (z.B. mehrere Sensoren im Parallelbetrieb) über die Alternativ-Adresse 0x76 angesprochen wird, muss das SDO pin vom BME680 mit GND verbunden werden.

Beim PaxCounter wird die standard BOSCH Library verwendet. Hier ist die Definition:

/** BME680 I2C addresses */#define BME680_I2C_ADDR_PRIMARY UINT8_C(0x76)#define BME680_I2C_ADDR_SECONDARY UINT8_C(0x77

Die Datei bme680_defs.h (liegt im Ordner /lib/Bosch-BSEC) muss also geändert werden:

/** BME680 I2C addresses */#define BME680_I2C_ADDR_PRIMARY UINT8_C(0x77)#define BME680_I2C_ADDR_SECONDARY UINT8_C(0x76

Referenz vom TTN Mapper:

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.

  1. Den Pin SDO auf dem Breakout mit GND verbinden, damit nutzt das BME Breakout die 0x76
  2. In der bme680_defs.h die Adressen anpassen, bzw. tauschen.
  3. 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;