Funksensor mit Bosch sensortec BME680 / Luftgüte

Begonnen von juergs, 28 Oktober 2017, 18:05:43

Vorheriges Thema - Nächstes Thema

juergs

#195
Hallo Peter,

https://forum.fhem.de/index.php?action=dlattach;topic=78619.0;attach=87791 habe ich das PDF abgelegt.

Und die Einbindung für den ESP8266:
https://www.bjoerns-techblog.de/2017/11/bme680-mit-nodemcu-an-ttn/

Könnte ähnlich für den AVR zu handhaben sein ...

Eclipse-Variante

ZitatThe Arduino IDE now supports .a and .so files in libraries. See instructions in the precompiled property documentation here:
https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5:-Library-specification#libraryproperties-file-format.
Ausschnitt:
precompiled - (feature not yet released, will be available in arduino-builder >1.3.25) set to true to allow the use of .a (archive) and .so (shared object) files.
The .a/.so file must be located at src/{build.mcu} where {build.mcu} is the architecture name of the target the file was compiled for.
Ex: cortex-m3 for the Arduino DUE. The static library should be linked as an ldflag.

ZitatLong story short, binary libraries are more complex than you think and you should avoid them in open source projects, especially when using C++




hdgucken

Hallo Jürgen,

bin bei den vielen Beiträgen in den letzten Stunden gar nicht recht hinterher gekommen  ;D

Also,
Zitat von: juergs
Ist es die ESP-SDK-Version ?
Nein, habe die selbe Version: 1.20.0-26

src/SSD1306AsciiWire.h:61:2: warning: #warning set400kHz() disabled for this CPU. [-Wcpp]
#warning set400kHz() disabled for this CPU.

Das habe ich nicht ! Vielleicht mit etwas geringerem Takt probieren ?

Zitat
Bei angeschlossenem RFM geht nichts mehr, also erst mal Aufbau, Verdrahtung und die Soft-SPI-Funktionalität prüfen...
Hier ist SoftSPI angesagt, damit Du die Pins frei wählen kannst. Musst aber bestimmt einige Warteschleifen einfügen,
habe SoftSPI bei 8MHz Systemtakt verwendet, beim ESP sind es jetzt aber 80MHz !

Gruß Thomas


juergs

#197
Hallo Thomas,

danke für die Infos.

Habe das Gefühl: OLED und ESP ist ein richtig kniffliges Thema.
Verwendet man verschiedene Libs beeinflussen die sich gegenseitig. Schaltet man aus und wieder ein, funktioniert es plötzlich nicht mehr ...
Dieser Fehler ist tückisch:
Zitatespcomm_sync failed error: espcomm_open failed
Der schließt und öffnet die Serielle im Sekundentakt....

Ich versuche eine passende Soft-SPI-Lib u finden, die das für den ESP regeln kann ....

Heute habe ich Wemos D1 und separate OLED-Module bekommen, diese laufen allerdings mit Adresse 0x78 ....
... und habe sie noch nicht zum Laufen gebracht ....

Jürgen

hdgucken

#198
Hallo Jürgen,

Zitat
Dieser Fehler ist tückisch: Der schließt und öffnet die Serielle im Sekundentakt....
Das könnte an der Verdrahtung von GPIO3 (ESP.D9) bei Dir liegen, das ist RXD0 der Seriellen,
den und GPIO1 = TXD0 (D10 an Deinem Board) darfst Du nicht verwenden, wenn die Serielle verwendet wird  :o

Ich fürchte, Du mußt den RFM doch direkt and den ESP löten, wäre aber auch nicht weiter tragisch, denke ich  ;)

Gruß Thomas

juergs

#199
Hallo Thomas,

das Board bekommt man in der Arduino-IDE in dem Modus nicht wieder zurück...
Mit dem ESP8266Flasher nur, wenn man den ricchtigen Zeitpunkt erwischt ....
War schon am Überlegen, den ESP auszulöten und zu ersetzen.

Aktueller Stand: OLED auf dem Wroom2-Board funktioniert, mit Wemos-D1 und 128x64-OLED
geht noch nicht. Habe auch die Info gefunden, dass der Controller SSD1106 auch verbaut sein könnte.

ZitatOLED screen, internal drive chip: SH1106 (Operation and SSD1306 same)

Mühsam nährt sich das Eichhörnchen...  :o

/EDIT: Habe mal versuchsweise ESPEASY auf dem D1 installiert. Das OLED konfiguriert (0x3C ist Standard-Einstellung)
Und siehe da, Display geht mit I2C-Adresse 0x3C. Trotz auf dem Display aufgedruckte I2C-Adresse 0x77 (!?).
Ich probiere mal die Initialisierung des OLEDS von ESPEASY aus....

hdgucken

Hallo Jürgen,

auf dem WEMOS D1 mini mit dem SH1106 Controller, sollte meine Software laufen, schon mal probiert ?

Ohne BH1750 und RFM69 müsstest Du im Setup halt
for (;;); // spin fo rever
vorrübergehend auskommentieren (beim RFM69 und BH1750) und mal sehen, was dann passiert  8)

Gruß Thomas

juergs

#201
Hallo Thomas,

mit der Adafruit-Lib funktionieren (bei mir) die display.println Methoden-Aufrufe nicht.
Die Original-Lib hat vermutlich Problem beim Zugriff auf das pgm_read-Makro (nur Warning).
Unter der ESP-Infrastruktur reicht es aus ein #include <pgmspace> zu setzen.
Dann ist zwar das Warning des Compilers weg, Textausgabe funktioniert trotzdem nicht.

Ich weiß jetzt, dass die println-Methode als Vererbung auf die Print-Klasse zur Verfügung steht.
Diese verlangt eigentlich "nur" die Implementierung von zwei abstrakten write-Methoden.

Die Ursache, warum das mit meiner (original) Adafruit-Version nicht klappt .... schwierig herauszufinden.
Deshalb wird das bei mir wohl mit Deiner Version (mit meinem Compile) wohl nicht klappen.
Der Diff auf Deine LIB ergab bei mir nichts wesentlich unterschiedliches.
Compiliere mit Arduino-Version 1.8.3.

Dann muss ich eine abgespeckte Version von Deinem Code erstellen ...   

Ich habe ein kleine OLED-Lib bei der man die Cursor-Position setzen muss um Text auszugeben,
aber auf den Komfort der println-Methode verzichten muss. (Zumindest im Moment.)

Diese hier bietet ein Menü: https://github.com/lexus2k/ssd1306
ist aber etwas umfangreich ...

Die hier ist klein:
https://github.com/bentor/oled/tree/master/OzOLED

Oder diese hier: https://github.com/greiman/SSD1306Ascii funktioniert ebenfalls.
Die sehen vielversprechend aus. Die SSD1306Ascii hat auch ein println implementiert. Funktioniert aber nicht mit dem D1 ... :-\
/Edit:
//Wire.begin(D1,D2);         
  Wire.begin();

Die LIB "SSD1306Ascii" mag die Initialisierung von Wire nicht: Konstruktor mit explizit D1 und D2 gesetzt.  ::)
Bei den verschiedenen Libs ist die Reihenfolge im Konstruktor auch SCl und SDA gedreht ...

Kann jetzt also die "SSD1306Ascii" verwenden!  :D
Prüfe auch noch mal auf dem WROOM2-Board nach ...


Schwierig, sich nicht zu verzetteln ...

Auch hier nutzbar:
Zitat/**
*   Attiny85 PINS
*             ____
*   RESET   -|_|  |- 3V
*   SCL (3) -|    |- (2)
*   SDA (4) -|    |- (1)
*   GND     -|____|- (0)
*
*   Atmega328 PINS: connect LCD to A4/A5
*/

Widme mich jetzt dem RFM69 und SPI auf dem D1-mini ....
Wenn das geht, auch das Wroom2-Board ...

Grüße
Jürgen





juergs

#202
Sorry, wenn ich wegen dem OT-OLED-Gedöns nerve:

Beim D1-mini-Board funktioniert eine Anzeige nur mit:
Wire.begin();

Beim Wroom2-Board nur mit
Wire.begin(D1,D2);     
Jeweils mit der gleichen Arduino Board-Einstellung auf "WEMOS D1 R2 & mini" und dem gleichen Code!

Das OLED-Display erwartet 400KHz I2C-Takt. 100 KHz geht nicht.
Das D1-Board regiert sehr sensibel mit Resets und "USB-Port busy" Meldungen.
Ist schwierig, es wieder zum "Kooperieren" zu überzeugen ...
Irgendwie hat sich auch die Autoreset-Funktion verabschiedet ... Vielleicht nützt ein 100nF an Reset.

Das sollte es jetzt gewesen sein. Ein "println" ist also mit "SSD1306Ascii" machbar.

hdgucken

Hallo Jürgen,

alles gut, bei den Problemen würde ich auch verrückt werden  ;)
Habe gerade nachgeschaut, ich arbeite mit Arduino 1.8.5,
das esp Paket "esp8266 by ESP8266 Community" ist Version 2.3.0.

RFM auf dem D1 mini sollte ja eigentlich relativ problemlos gehen  8)
Auf dem Wroom2 würde ich direkt an das esp Modul löten.

So, dann viel Erfolg ...

Gruß Thomas

juergs

#204
Hallo Zusammen,
ein gutes neues Jahr !

@hdgucken:
bin jetzt mit dem D1-mini soweit, dass alles geht!
Bis auf die fehlermeldung in FHEM: 

Zitat
2018.01.01 19:37:04 0: Server started with 1055 defined entities (fhem.pl:15676/2017-12-23 perl:5.014002 os:linux user:fhem pid:22900)
2018.01.01 19:37:29 1: PERL WARNING: Use of uninitialized value in addition (+) at ./FHEM/36_CustomSensor.pm line 217.
2018.01.01 19:37:29 1: PERL WARNING: Use of uninitialized value in addition (+) at ./FHEM/36_CustomSensor.pm line 218.
2018.01.01 19:37:29 1: ERROR: empty name in readingsBeginUpdate
2018.01.01 19:37:29 1: stacktrace:
2018.01.01 19:37:29 1:     main::readingsBeginUpdate           called by ./FHEM/36_CustomSensor.pm (226)
2018.01.01 19:37:29 1:     main::CustomSensor_Parse            called by fhem.pl (3702)
2018.01.01 19:37:29 1:     main::Dispatch                      called by ./FHEM/36_LaCrosseGateway.pm (686)
2018.01.01 19:37:29 1:     main::LaCrosseGateway_Parse         called by ./FHEM/36_LaCrosseGateway.pm (460)
2018.01.01 19:37:29 1:     main::LaCrosseGateway_Read          called by fhem.pl (3487)
2018.01.01 19:37:29 1:     main::CallFn                        called by fhem.pl (685)
2018.01.01 19:37:29 1: PERL WARNING: Use of uninitialized value $name in concatenation (.) or string at fhem.pl line 4416.

...
Zitat2018.01.01 19:37:29 1: PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4151.
2018.01.01 19:37:29 1: ERROR: >06< returned by the CustomSensor ParseFn is invalid, notify the module maintainer
2018.01.01 19:38:07 1: PERL WARNING: Bareword found where operator expected at (eval 222) line 1, near "] CO2"
2018.01.01 19:38:07 3: eval: { LGW [BME680] CO2 }
2018.01.01 19:38:07 1: PERL WARNING:    (Missing operator before CO2?)
2018.01.01 19:38:07 3: eval: { LGW [BME680] CO2 }
2018.01.01 19:38:07 1: ERROR evaluating { LGW [BME680] CO2 }: syntax error at (eval 222) line 1, near "LGW ["

Daten und IAQ werden erzeugt
Zitat[647233] P: 987.03| T: 20.67| rH: 41.70| IAQ: 30  30 (1)| Gas: 111.62| UBat: 3.27V| Light: 0lx
[650233] P: 987.01| T: 20.67| rH: 41.72| IAQ: 33  31 (1)| Gas: 111.25| UBat: 3.27V| Light: 0lx
[653233] P: 986.94| T: 20.67| rH: 41.76| IAQ: 36  33 (1)| Gas: 110.88| UBat: 3.27V| Light: 0lx
[656233] P: 987.01| T: 20.67| rH: 41.79| IAQ: 34  34 (1)| Gas: 110.95| UBat: 3.27V| Light: 0lx
[659233] P: 987.01| T: 20.67| rH: 41.80| IAQ: 37  35 (1)| Gas: 110.66| UBat: 3.27V| Light: 0lx
[662233] P: 986.97| T: 20.67| rH: 41.80| IAQ: 37  35 (1)| Gas: 110.66| UBat: 3.27V| Light: 0lx
[665233] P: 986.92| T: 20.68| rH: 41.82| IAQ: 32  35 (1)| Gas: 110.95| UBat: 3.27V| Light: 0lx
[668233] P: 986.86| T: 20.67| rH: 41.85| IAQ: 37  36 (1)| Gas: 110.51| UBat: 3.27V| Light: 0lx

Habe noch eine Mittelwert-Bildung hinzugefügt, mit dem Risiko das BSEC-Timing zu stören ....
Steigt aber nach einiger Zeit mit einem WDT-Error aus.

Grüße,
Jürgen

EDIT: nach FHEM Update:
Zitat2018.01.01 20:11:07 3: LGW: Unknown code OK CC 6 6 8 42 9 135 0 98 0 0 0 17 0 96 , help me!
2018.01.01 20:14:24 3: LGW: Unknown code OK CC 6 6 8 42 9 135 0 37 0 0 0 6 116 52 , help me!
2018.01.01 20:20:24 3: LGW: Unknown code OK CC 6 6 9 42 9 135 0 41 0 0 0 16 137 96 , help me!
2018.01.01 20:22:57 3: mapleCUL433: Unknown code P12#7511BA7BFF7F7F8F, help me!
2018.01.01 20:27:22 3: LGW: Unknown code OK CC 6 6 16 42 9 135 0 37 0 0 0 6 113 99 , help me!
2018.01.01 20:27:22 3: LGW: Unknown code OK CC 6 6 16 42 9 135 0 37 0 0 0 6 113 99 , help me!
2018.01.01 20:29:53 3: LGW: Unknown code OK CC 6 6 16 42 9 135 0 37 0 0 0 6 68 100 , help me!
2018.01.01 20:31:28 3: LGW: Unknown code OK CC 6 6 16 42 9 135 0 37 0 0 0 6 102 128 , help me!
2018.01.01 20:31:28 3: LGW: Unknown code OK CC 6 6 16 42 9 135 0 37 0 0 0 6 102 128 , help me!

juergs

#205
Hier meine Code-Änderungen für das D1-mini Board.
Sowie ein vorläufiger Draft-Schaltpan dazu.
Die SSD1306ASCII-Lib und eine Bin-Datei ist mit beigefügt.

Erweitert: Vcc für den ESP und Mittelwertbildung für IAQ mit 6 Readings.
Die Unterscheidung Adafruit- und SSD1306ASCII-Lib ist nur auf letztere ausgeprägt, baue ich aber ein.
Falls es keine Probleme mit der Adafruit-Lib geben sollte, kann man switchen.
Funktionierende VCC-Messung  für ESP mit Workaround eingebaut. (Siehe Kommentare in Code)

BME680-Breakout: Watterot
OLED-Modul: weiss .

Der WDT-Fehler kommt sporadisch nach unterschiedlichen Zeiten ...
Mein D1mini ist allerdings auch sehr unstabil ...  :o

Evtl. spendiere ich noch ein 100µF Elko auf die 3V3-Leitung oder einen separaten 3V3-LDO-Regler auf 5V.

Spezieller Dank an hdgucken.


PeMue

#206
Zitat von: juergs am 01 Januar 2018, 20:04:59
Hier meine Code-Änderungen für das D1-mini Board.
Bis auf das OLED macht der nano LGW das gleiche (oder war's dasselbe  ????).

Gruß PeMue
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

JoWiemann

Zitat von: PeMue am 01 Januar 2018, 20:08:26
Bis auf das OLED macht der nano LGW das gleiche (oder war's dasselbe  ????).

Gruß PeMue

Nun ja, wir essen die gleiche Birne, können unser aber die selbe nur teilen  ;)

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

juergs

#208
Zitat von: PeMue am 01 Januar 2018, 20:08:26
Bis auf das OLED macht der nano LGW das gleiche (oder war's dasselbe  ????).

Gruß PeMue

Hallo PeMue,
ja im Prinzip vom Schaltplan her schon, ist aber für die CustomSensor-Implementierung von hdgucken.
Aber auch die Vorstufe für das andere WROOM2-Board, welches wohl nur mit Soft-SPI läuft. 
Leider nur Draft-Version .. mit Adapter für das D1+OLED-Board und Verkabelung für den RFM69  ;)
Für den Fall, dass es jemand interessieren sollte...  :D
Zitatnano LGW
Schau mir den mal an ...

ZitatNun ja, wir essen die gleiche Birne, können unser aber die selbe nur teilen  ;)
Softwaretechnisch:  gleiche = Typ  und  selbe = Instanz
Automobiltechnisch: SachNummer und   IdentNummer  ....    ;)



PeMue

Zitat von: PeMue am 01 Januar 2018, 20:08:26
Bis auf das OLED macht der nano LGW das gleiche (oder war's dasselbe  ????).
Habe oben den Link zum aktuellen Schaltplan eingefügt.

Gruß PeMue
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser