Ich habe mir in Easy EDA ein sehr einfaches PCB designed um den Sensor und einen ESP01 auf den selben Board zu haben im Batteriebetrieb. Ohne lästige Kabel.
Werde die Easy EDA .json anhängen und noch ein Bild vom PCB.
Habe mir dazu von Aliexpress die hier empfohlenen XC6220B331MR-G geordert.
Ebenso 10uf Kondensatoren.
Die Kondensatoren misst mein UT61E mit 8.5uf, naja nicht ideal aber ich denke das sollte passen.
Nun zum Problem:
Der XC6220B331MR-G spuckt 3.3V aus, diese kommen auch beim BME280 Sensor an.
Aber aus irgendeinem mir nicht ersichtlichen Grund, findet der ESP 01S den Sensor, mit dem den meisten Bekannten I2C Scanner nicht.
Sensor Defekt schließe ich aus, funktioniert an einem ESP32 Dev Board am 3.3V Pin.
Meine einzige Vermutung ist, dass der XC6220B331MR-G von Aliexpress das Problem sein könnte, weil Plagiat oder dergleichen.
C1 und C2 sollen so nahe wie möglich am Spannungsregler platziert sein. Deine Leitungen dazwischen sind viel zu lang.
Außerdem empfehle ich einen 100µF Elko direkt an VCC/GND von dem ESP Modul. Ich löte immer einen bedrahteten Aluminium Elko direkt auf das Modul.
Wenn du die Bauteile so anordnest, dass C2 nahe am Spannungsregler und nahe am ESP Modul liegt, kann C2 der 100 µF Kondensator sein (ein Bauteil gespart). Denke aber daran, dass bei MLCC Kondensatoren die Kapazität mit steigender Spannung sinkt. Da sind dann 220µF MLCC oder 100µF in einer anderen Bauart besser geeignet.
Mache die Leitungen von VCC und GND viel breiter. Da fließen zwar im Schnitt nur 70 mA, aber beim Senden hast du hochfrequente Impulse mit einigen hundert mA. Du willst vermeiden, dass das deswegen instabil wird oder gar am falschen Ende Radiowellen abstrahlt.
Den Sensor gleich neben der Antenne ist auch nicht gerade clever.
Welche Werte bzw. was könnte dabei gestört werden?
alle
Ist es wirklich so sehr relevant bzw. störend?
Ja. Das kann sogar zum Ausfall des Sensors führen. Die Energiefelder im unmittelbarem Umfeld der Antenne sind nicht zu unterschätzen. Wenn es nur Spielzeug ist, würde ich um die Antenne herum mindestens 2cm Abstand halten. Bei etwas Wichtigem noch deutlich mehr.
gpio0 und gpio2 haben schon pullups am Modul, sonst würde es nicht booten.
Die meisten BME280 Module die ich gesehen habe haben einen 3V3 Regler on board und funktionieren nur mit 5V zuverlässig -> mal kontrollieren!
Mit soviel sachlich echt wertvollem Input hätte ich nicht gerechnet.
Falls noch nicht ganz klar, ich habe ein BME280 Modul und nicht den nackten Chip, sind da noch keine Rup`s mit verbaut wenn die ja sowieso benötigt werden?
Stefan F. schrieb im Beitrag #7481218:
Die beiden Pins verwenden beim Boot den Chip-internen Pull-Up. Nach dem
Booten sind diese wieder inaktiv. Für I²C wären sie sowieso viel zu
hochohmig.
Sind da diese damit gemeint?
Ich hänge ein Bild an vom Modul.
Also meine To-Do Liste ist folgendermaßen:
Antenne bzw. den Sitz des ESP Chips drehen, dass dieser nach außen zeigt anstatt über dem Board.
C1 weglassen und einen 220uF MLLC so nah wie möglich an den Spannungsregler.
Leiterbahnen von VCC und GND dicker machen.(Gibt es da einen Idealwert?)
Pull-Up Widerstände bei SCL und SDA mit je 2.2kOhm anbringen.
Habt ihr sonst noch Ideen bzw. Verbesserungsvorschläge?
Habe ich alles richtig aufgefasst?
Willst du nicht gleich ein "dev board" verbauen? Die kosten 1.60 und haben usb-seiell, 3.3V stabilisierung und programmierlogik on board. Wird viel einfacher !
Willst du nicht gleich ein "dev board" verbauen? Die kosten 1.60
und
haben usb-seiell und programmierlogik on board. Wird viel einfacher !
Ja, das wäre natürlich um ein Vielfaches einfacher, aber der ESP01 verbraucht meiner Meinung nach Welten weniger Energie als die ganzen Dev-Boards. Diese sind einfach nicht wirklich für den Batteriebetrieb geeignet.
Dieses Teil entlädt die Batterie trotz Deep Sleep in einer Woche, wenn überhaupt, und hat zudem ein ziemlich nerviges Spulenfiepen.
Edit:
Ich habe das PCB nun gemäß eurer Vorschläge angepasst. Die Antenne befindet sich im Freien und ragt aus dem Board heraus. Die Leiterbahnen sind nun mehr als doppelt so dick.
Anbei findet Ihr das korrigierte Design. Sind die Pull-Up-Widerstände so korrekt?
Entschuldigung für die Bilder, irgendetwas hat anscheinend nicht funktioniert. Unter "Datei auswählen" wurde mir nicht angezeigt, dass der Upload erfolgreich war. Daher habe ich es jetzt mehrfach versucht :D
Edit 2:
Auf meinem BME280-Modul ist ein XC6206P332MR LDO verbaut.
Ist es eventuell sogar besser, den Akku direkt an den Sensor zu hängen, ohne davor mit dem für den ESP gedachten XC6220B331MR LDO die Spannung auf 3.3V zu bringen?
Denn laut Datenblatt vom XC6206P332MR:
Output Voltage = VOUT -0.3 ~ VIN + 0.3 V
Ich würde rx, tx und boot gpio0 auf eine prog stecker führen, dann muss das nicht bei jeder version raus-rein.
Dann kannst du noch die DTR auto reset schaltung bauen um beim proggen nicht immer boot-reset drücken zu müssen. Geht dann allse auto.
Ja, das wäre natürlich um ein Vielfaches einfacher, aber der ESP01
verbraucht meiner Meinung nach Welten weniger Energie als die ganzen
Dev-Boards. Diese sind einfach nicht wirklich für den Batteriebetrieb
geeignet.
Trugschluss: Beim ESP01 kannst du (ohne Bastellei mit Fädeldraht) die Stromspaar-Sleep-Modi überhaupt nicht nutzen, der ist für Batteriebetrieb ungeeignet.
Nimm lieber ein nacktes ESP12F-Modul, da geht das. Oder ein DEV-Board, auf dem du (Per Bastelmesser etc) die überflüssigen Stromfresser/LEDs deaktiviert hat.
sind da noch keine Rup`s mit verbaut wenn die ja sowieso
benötigt werden?
Du meinst wohl Pull-Up Widerstände? Ich sehe das einen Chip mit der Beschriftung 103, das sind wohl mehrere 10kΩ Widerstände. Das könnten Pull-Up Widerstände sein. In der Nähe zu dem Funkmodul ist das aber zu hochohmig. Mehr als 2,2 kΩ würde ich da nicht verwenden, selbst wenn die Kommunikation auf eine besonders geringe Taktfrequenz ein gestellt ist.
I2C funktioniert ohne Pullup-Widerstände nicht.
In dem "Schaltplan" kann ich keine erkennen.
Werde ich mich einlesen. Danke!
Das Lesen deines Schaltplanes wäre wesentlich einfacher, wenn du die Signale vernünftig benennen und über Label beschriften würdest. Ein bisschen Aufräumen könnte auch nichts schaden.
Vielleicht schreibst du an die Steckerverbinder sogar ran, was dort jeweils angeschlossen werden soll.
Wenn die Teile ganz nahe nebeneinander stehen, kann ein einziger
Kondensator beide Aufgaben erfüllen:
Bei solchen Aktionen sollte man allerdings einen Blick in das Datenblatt des Spannungsreglers werfen. Nicht jeder Regler ist bei jeder Kapazität stabil.
Insbesondere große Kapazitäten am Reglerausgang können problematisch sein, wenn der ESR nicht hoch genug ist.
Das MME280 Modul hat einen 3V3 LDO sowie den klassischen MosFET Levelshifter und benötigt daher:
a) keine Pullups
b) 5V Versorgung
legt aber die GPIOs des ESP über 10k an 5V - nicht schön aber akzeptabel.
GPIO 0 und 2 müssen lt. Datenblatt definitiv zum Booten aus dem Flash mit Pullups bedient werden, diese sind auf den ESP-01 Modulen bestückt.
Die "Entwicklungsmodule" sind leider auch nicht wirklich alle für Batteriebetrieb geeignet. Der 3V3 Regler ist i.A. weder LDO noch LQC. Und der USB-Seriell Chip saugt meist auch bei Versorgung über 5V. Eine Versorgung über die 3V3 Pins geht immer mal nicht weil der nicht versorgte USB-Seriell Chip dann div Signale low zieht, was den ESP am Booten hindert.
Das MME280 Modul hat einen 3V3 LDO sowie den klassischen MosFET
Levelshifter
Solange Sando nicht in der Lage ist, einen lesbaren Schaltplan zu liefern und keine Daten zum Modul bringt, wird das nichts.
Anhand der Bilder habe ich 3V3-LDO und Levelshifter vermutet, aber es wäre sein Job, zu liefern.
Damit wäre es für einen 3V3-µC ungeeignet, vermutlich findet man auch Boards ohne. Es ist auch nicht verboten, den Lötkolben zu nehmen und den Levelshifter durch zwei Brücken zu ersetzen.
Natürlich kommt auch der 3V3-LDO runter, wie ich es auf einem SD-Interface gemacht habe, weil das System ohnehin 3,3V hat.
Ich würde rx, tx und boot gpio0 auf eine prog stecker führen, dann muss
das nicht bei jeder version raus-rein.
Dann kannst du noch die DTR auto reset schaltung bauen um beim proggen
nicht immer boot-reset drücken zu müssen. Geht dann allse auto.
Danke, das ist eine sehr gute Idee muss ich mich noch einlesen.
Vorrangig sollte der BME aber wenigstens mal Werte liefern.
Trugschluss: Beim ESP01 kannst du (ohne Bastellei mit Fädeldraht) die
Stromspaar-Sleep-Modi überhaupt nicht nutzen, der ist für
Batteriebetrieb ungeeignet.
Nimm lieber ein nacktes ESP12F-Modul, da geht das. Oder ein DEV-Board,
auf dem du (Per Bastelmesser etc) die überflüssigen Stromfresser/LEDs
deaktiviert hat.
Da ich mehrere ESP01 daliegen habe, der ESP12F komplett überdimensioniert ist(Anzahl der Anschlüsse) und zusätzlich noch mehr Bauteile auf der Platine benötigt werden, um ohne große Umwege programmiert werden zu können z.b. wenn ein Update gemacht werden soll, sowie auch teurer ist, nehme ich wenn es geht die vorhandenen Module.
Die Empfehlung, ein Development-Board zu verwenden, kann ich nicht ganz nachvollziehen, da dies ähnliche Bastelarbeit erfordern würde, wie du es beim ESP01-Modul beschrieben hast.
Das Lesen deines Schaltplanes wäre wesentlich einfacher, wenn du die
Signale vernünftig benennen und über Label beschriften würdest. Ein
bisschen Aufräumen könnte auch nichts schaden.
Vielleicht schreibst du an die Steckerverbinder sogar ran, was dort
jeweils angeschlossen werden soll.
Ich habe versucht, den Schaltplan etwas übersichtlicher und besser lesbar zu gestalten. Da ich nicht regelmäßig Schaltpläne erstelle, bin ich nicht mit allen Tricks und Regeln vertraut.
Das MME280 Modul hat einen 3V3 LDO sowie den klassischen MosFET
Levelshifter und benötigt daher:
a) keine Pullups
b) 5V Versorgung
legt aber die GPIOs des ESP über 10k an 5V - nicht schön aber
akzeptabel.
GPIO 0 und 2 müssen lt. Datenblatt definitiv zum Booten aus dem Flash
mit Pullups bedient werden, diese sind auf den ESP-01 Modulen bestückt.
Die "Entwicklungsmodule" sind leider auch nicht wirklich alle für
Batteriebetrieb geeignet. Der 3V3 Regler ist i.A. weder LDO noch LQC.
Und der USB-Seriell Chip saugt meist auch bei Versorgung über 5V. Eine
Versorgung über die 3V3 Pins geht immer mal nicht weil der nicht
versorgte USB-Seriell Chip dann div Signale low zieht, was den ESP am
Booten hindert.
Ich kann dir leider nicht ganz folgen.
Ich verstehe es so:
Also brauche ich die 2.2kOhm Pullups doch nicht?
Muss ich nun mit 5V bestromen oder nicht?
Was heißt i.A., im Auftrag?
Das MME280 Modul hat einen 3V3 LDO sowie den klassischen MosFET
Levelshifter
Solange Sando nicht in der Lage ist, einen lesbaren Schaltplan zu
liefern und keine Daten zum Modul bringt, wird das nichts.
Anhand der Bilder habe ich 3V3-LDO und Levelshifter vermutet, aber es
wäre sein Job, zu liefern.
Damit wäre es für einen 3V3-µC ungeeignet, vermutlich findet man auch
Boards ohne. Es ist auch nicht verboten, den Lötkolben zu nehmen und den
Levelshifter durch zwei Brücken zu ersetzen.
Natürlich kommt auch der 3V3-LDO runter, wie ich es auf einem
SD-Interface gemacht habe, weil das System ohnehin 3,3V hat.
Wenn ich wüsste wie, würde ich logischerweise einen besseren Schaltplan liefern. Man sieht denke ich an der länge meiner Antworten auch, dass ich mich bemühe wo es geht um eure Hilfe zu bekommen und halte mich nicht zu kurz wie es viele andere Online machen.
Da ich leider nicht mehr Daten zum Modul habe außer dem Bild, was genau das Modul abbildet inkl. den Markings auf den Chips, kann ich auch nicht mehr Daten liefern.
Wenn es für den Einsatz am 3.3VµC ungeeignet ist, warum funktioniert es dann bei anderen mehr oder minder.
Welches Bauteil ist denn der Levelshifter?
Also meinst du ich soll den Spannungsregler auf dem Board entfernen? Wenn ja warum?
Ich bin mittlerweile ein wenig verwirrt was nun richtig ist und was nicht :/
Chip wird immer noch nicht erkannt.
Am Dev Modul funktioniert er, also am BME liegts wohl nicht.
Ich habe langsam echt das Gefühl das der LDO von Aliexpress Schuld ist.
Was auch sonst?
Wie kann ich den Prüfen?? 3.3v spuckt er aus mehr kann ich nicht beurteilen :/
Der 6-Beiner, ich hoffe, dass hhinz den Typ klären kann. Ich vermute, dass das ein Doppel-MOSFET sein könnte.
Hast Du einen Arduino-UNO da? Ich denke, mit 5V versorgt und an einem µC, der ebenfalls mit 5V läuft, wird Dein Modul funktionieren.
Also meinst du ich soll den Spannungsregler auf dem Board entfernen?
Ich würde 3,3V direkt einspeisen. Laut Deinem Schaltplan, der nun für mich verständlich ist, hast Du mit VCC eine höhere Spannung, die das BME-Modul versorgen könnte.
Ich habe den Verdacht, dass der I2C-Levelshifter den Datenverkehr blockiert, weil an beiden Seiten die gleiche Signalspannung liegt.
Die Versorgungsspannun des ESP muss stabil sein, darf beim Senden nicht mehr als 100mV einbrechen.
Die I2C Signale müssen saubere Pegel haben. High sollte 3-3,3V sein und Low sollte unter 0,5V sein. Außerdem muss das Signal auf beiden Leitungen einigermaßen Rechteckig aussehen. Ein Sägezahn würde auf zu hochohmige Pull-Up Widerstände hinweisen.
Du findest Beispiel-Bilder von I2C Signalen im Internet und in der I2C Spezifikation von NXP (früher Philips)
Hast Du einen Arduino-UNO da? Ich denke, mit 5V versorgt und an einem
µC, der ebenfalls mit 5V läuft, wird Dein Modul funktionieren.
Ich habe es ja mit einem ESP32 Dev Board probiert.
Dort habe ich den Sensor auch am 3.3v Pin vom ESP32 betrieben und dort funktioniert der Sensor dann ja auch.
Der 6-Beiner, ich hoffe, dass hhinz den Typ klären kann. Ich vermute,
dass das ein Doppel-MOSFET sein könnte.
Kann man den nicht auslöten und brücken?
Wenn ja, wie, also welches Pad mit welchem Pad verbinden.
Was aber wahrscheinlich ohne Type und Datenblatt Rätselraten ist.
Hast Du einen Arduino-UNO da? Ich denke, mit 5V versorgt und an einem
µC, der ebenfalls mit 5V läuft, wird Dein Modul funktionieren.
Ich habe es ja mit einem ESP32 Dev Board probiert.
Dort habe ich den Sensor auch am 3.3v Pin vom ESP32 betrieben und dort
funktioniert der Sensor dann ja auch.
Wenn das so ist, bin ich mit der Hardware auf dem falschen Weg. Dann liegt wohl ein Problem am ESP01 vor.
Habe mit dem Oszilloskop die I2C angeschaut und konnte außer einem HIGH Zustand keinerlei Aktivität feststellen, auch nicht am ESP selber an den GPIO`s.
Dann bin ich das Programm nochmals durchgegangen.
Da ich davor immer ESP32 verwendet habe, und dort die Standart Pins genommen habe.
Habe ich vergessen beim ESP01 die Pins zu übergeben.
Ich habe es zwar irgendwann Gestern schnell schnell schonmal probiert, dort ging es aber nicht.
Danke an der Stelle für den Hinweis an Dieter S. (hotsystems).
Allen anderen Danke ich auch für die echt super Hilfe!
Konnte viel dabei lernen über das kleine Ding und auch mich selber :)