Externe reset (wake-up) voor WeMos D1

Hallo,

Ik werk aan een project op een WeMos D1 board. Dit is een arduino compatible board met een ESP8266 chip, vergelijkbaar met een NodeMcu bijvoorbeeld. Het WeMos D1 board heb ik geprogrammeerd om een update te sturen (over Wifi) en daarna 5 minuten in "Deep Sleep".
Om tussentijds wakker te worden door een externe interrupt (magneet/deur schakelaar) is een schakeling nodig. Ik heb hier al iets voor gevonden, maar krijg dit niet goed aan de praat.

Beginsel, de WeMos D1 (ESP8266) vereist een weerstand (470 Ohm) tussen GPIO16 en RST om zelf wakker te worden na 5 minuten. Zonder deze weerstand loopt ie vast.

Nu de uitbreiding, ik gebruik een reed-contact om het openen van de deur te controleren. Zodra de deur opent, gaat het contact open. Op dit moment wil ik dus door een externe interrupt, de WeMos D1 wakker maken. Dit is mogelijk door GPIO16 kort aan massa te verbinden. Dit mag alleen maar gebeuren als het board in deep-sleep is (GPIO16 is dan HIGH)

De schakeling die dit moet realiseren heb ik gevonden en werkt bij anderen in een soortgelijke setup op een ander board. Hierin ontbreekt de extra weerstand (R5) die dus vereist is mijn deze situatie. Ik vermoed dat hierdoor de weerstand (R4) in de schakeling aangepast moet worden?

Ten tweede, ik heb een 1uF/50V condensator gebruikt en vermoed dat dit voor problemen zorgt. (Het schema zou moeten werken met een 1uF/16V, maar die kan ik niet direct vinden). Deze heb ik gebruikt, maar lijkt dus niet te werken.

Getest: Als ik R5 weg haal, C1 kortsluit, dan het (reed-)contact verbreek, wordt een reset getriggert zodra ik het contact weer maak. Omdat R5 weg is, loopt de auto-wake-up vast, zoals gezegd deze MOET er zijn!

Is mijn conclusie juist dat de condensator onvoldoende spanning (door de 50V ipv 16V) krijgt waardoor hij niet (of onvoldoende) oplaat. Daarnaast dat R4 kleiner moet worden ivm de weerstand R5?

Heeft iemand een advies of idee? Ik weet niet hoe ik R4 moet berekenen.

Nu zit er op dat Wemos board nog van alles aan de RST lijn vast, heb je hier iets mee gedaan?

Je bedoeld intern? Ik heb zelf verder niets aan RST hangen en ben met een gelijke setup aan de slag gegaan. Iemand met een NodeMCU board heeft het werkend met een 2K weerstand als R5. Wat het verschil is tussen WeMos D1 en bijvoorbeeld NodeMCU weet ik niet eigenlijk.

Note: zonder de schakeling is een hogere weerstand, bijv. 1K, tussen GPIO16 en RST niet succesvol. Heb ik getest. Het WeMos D1 board start dan niet goed op (loopt vast), een jumperwire werkt ook maar is niet aangeraden.

[Bericht gewijzigd door marmachine op 15 juni 2017 11:52:54 (29%)]

mel

Golden Member

Ik weet niet eens wat een WeMos D1 is.. :+

u=ir betekent niet :U bent ingenieur..

Op 15 juni 2017 12:20:53 schreef mel:
Ik weet niet eens wat een WeMos D1 is.. :+

Fijn, dan is dat ook maar gezegd. Waarom wil je dit met ons delen?

mel

Golden Member

Op 15 juni 2017 12:34:50 schreef marmachine:
[...]
Fijn, dan is dat ook maar gezegd. Waarom wil je dit met ons delen?

Beetje vriendelijker mag ook wel, als je gezegd had wat het was, HAD ik misschien kunnen helpen..
Maar nu mag je het lekker zelf uitzoeken.

u=ir betekent niet :U bent ingenieur..

In de startpost vermelden waarover het precies gaat is wel zo handig. Ik heb er ook een hekel aan om eerst te moeten googlen wat het is...

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com

Een diode toegevoegd biedt ook geen oplossing.
Met dit schema werkt de wake-up elke 5 minuten wel, maar het contact doet niets.

Is het gebruik van een energiezuinige NAND een oplossing ? Tenminste, ik ga er van uit dat je met GPIO16 wil controleren of een signaal wel / of niet aankomt bij de RST-pin.

Het eerste waar ik aan denk is dan een 74LVC1G00GV.

WikiPedia laat je zien hoe een NAND werkt (en meer) : https://en.wikipedia.org/wiki/NAND_logic

Misschien heb je er iets aan.

Van elk bezoek aan CO leer ik weer meer...

Hij start op en loopt daarna constant over een stukje code, dat is het basisprincipe.
Telkens wordt door de code bijvoorbeeld de toestand van GPIO pins gelezen, daarna wordt de status verzonden dmv een GET url via Wifi.

Omdat ik dit niet in elke run wil laten doen, maar om de 5 minuten, heb ik eerder een pauze getest. Uiteindelijk is het beter gebleken om m te laten slapen met het commando deepSleep().

Het commando deepSleep(60) zou er voor moeten zorgen dat het board 60 seconden slaapt en daarna herstart om vervolgens eenmalig door de code te gaan en uiteindelijk weer gaat slapen voor 60 seconden.

Een bekend probleem met vele (zo niet alle) ESP8266 borden is dat ze vastlopen bij de herstart. Een schottky diode of een weerstand tussen GPIO16 en RST lost dit op. Ik heb een 1K weerstand geprobeerd, die bleek te zwaar, een 470Ohm weerstand werkt goed op dit bord.

De theorie is (volgens mij) dat RST low moet om te herstarten, maar niet laag genoeg komt. GPIO16 is altijd high tijdens slaap en gaat daarna low.

Om tijdens slaap een (externe) wijziging direct te melden moet ie dus eerder worden gewekt dmv een herstart. Dit kan door RST kort aan GND te leggen. Dit is wat de schakeling zou moeten doen, maar alleen tijdens slaap (GPIO16 = high) uiteraard.

De schakeling is door anderen succesvol getest, maar op een ander bordje weliswaar. Mijn afwijking is eigenlijk de 50v ipv 16v condensator. Daarnaast de weerstand tussen GPIO16 en RST omdat ik m wil laten loopen. Anderen laten m slapen zonder tijd (infinity)