Ich habe ein ESP-12 auf diese Adapterplatine gelötet . Ich verwende NodeMCU Lua-basierte Firmware, um die Logik zu codieren.
Ich habe geplant, node.restart
regelmäßig auszuführen. Einer der GPIO-Pins wird verwendet, um eine externe Komponente mit HIGH- oder LOW-Zustand anzusteuern. Ich kann den GPIO-Status (HIGH/LOW) danach wiederherstellen, node.restart
aber während des Neustarts ist der GPIO-Status undefiniert. Ich möchte diesen Zustand beibehalten, insbesondere wenn der Zustand HOCH war.
Ein Ansatz, an den ich denke, ist ein weiterer Mikrocontroller wie ATTinyX, der über UART mit ESP-12 verbunden ist. ESP-12 kann ATTinyX einen String/ein Zeichen geben, um den Zustand beizubehalten (ESp-12 GPIO-Pin und ATTinyX-Pin sind über ein ODER-Gatter mit der externen Komponente verbunden) und dann einen Neustart durchführen. Sobald der Neustart von ESP-12 abgeschlossen ist, kann es ATTinyX anweisen, den Status nicht beizubehalten, da ESP-12 ihn jetzt nach dem Neustart beibehalten kann.
Dies fügt ein wenig Kosten und Komponenten hinzu. Gibt es einen anderen Weg, um dasselbe zu erreichen? Ich bin eher auf der Softwareseite, habe weniger Elektronikkenntnisse. Jede Hilfe ist willkommen. Vielleicht ähnelt es einem 1-Bit-Speicher, der von ESP-12 gesetzt / zurückgesetzt wird. Kann ich in diesem Fall ein Flip-Flop verwenden?
Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan
Abbildung 1. Zustandshaltekondensator.
Verdrahten Sie ein Ersatz-GPIO wie gezeigt. Lesen Sie beim Zurücksetzen den Zustand des Kondensators und stellen Sie den Ausgang entsprechend ein. Dadurch erhalten Sie ein kurzfristiges 1-Bit-Gedächtnis.
//Pseudo code to go early in boot sequence.
pinPullup(pin) = false; //Turn off the pull-up.
pinMode(pin) = input; //Set the pin to input mode, if required.
pdState = pinRead(pin); //Read the input to get the power-down state.
pinMode(pin) = output; //Configure as output.
pinWrite(pin) = pdState; //Restore the power-down state.
Möglicherweise möchten Sie die Reihenfolge der letzten beiden Zeilen (je nach Mikro) vertauschen, um einen vorübergehenden Blip zu vermeiden.
Beachten Sie, dass der Pin in dieser Konfiguration für nichts anderes verwendet werden kann.
Schauen Sie sich einen I2C-Expander wie MCP23008 an. Im Grunde das gleiche Setup wie bei Ihrem ATtiny, abzüglich einer anderen Firmware. Es behält einfach jeden gewünschten Zustand bei, unabhängig von ESP-Neustarts.
Versuchen Sie, einen Kondensator zu verwenden, der die erforderliche Spannung für die Dauer des Neustarts liefert. Der folgende Link kann Ihnen helfen, den passenden Kondensatorwert zu finden.
http://www.electronics-tutorials.ws/rc/rc_2.html
bearbeiten:
Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan
Genauer gesagt gehe ich davon aus, dass die für den Neustart erforderliche Zeit weniger als zwei Sekunden beträgt, sodass die Zeitkonstante des RC-Netzwerks jetzt fast doppelt so lang sein muss wie die Neustartzeit. Wählen Sie eine Zeitkonstante von 4,7 Sekunden.
Zeitkonstante T = R * C
dh 4,7 s = 4,7 K Ohm * 1000 uf
Der Grund, warum wir die Zeitkonstante doppelt so groß wie die erforderliche Zeit haben sollten, ist, wenn ein Kondensator mit der Entladung beginnt, würde die Kondensatorspannung bei der Hälfte der Zeitkonstante etwa 60 % der Spannung betragen, während er voll geladen ist, was 3 Volt bei 2,35 entspricht zweitens, da die Neustartzeit kürzer ist, wird ein hohes Niveau beibehalten.
Wenn der Zustand des Pins vor dem Ausschalten bekannt ist, können Sie diesen Zustand mit pull up oder pull down beibehalten, während my hochfährt. Große Kondensatoren können auch helfen.
Das Problem ist, dass die Pins normalerweise standardmäßig auf In-Out- oder Nicht-GPIO-Funktionen eingestellt sind, sodass Sie ihre Zustände im Reset anzeigen.
Versuchen Sie es mit einem einfachen Latch, aber Sie benötigen möglicherweise drei GPIO-Pins. Wenn der Ausgang am GPIO, den Sie verwenden, während des Betriebs HIGH ist, geben Sie einen High-Low-Impuls bei SET ab, und wenn LOW dasselbe beim RESET. Überprüfen Sie während des Einschaltens den Zustand von Q, wenn HIGH den erforderlichen GPIO-Pin als HIGH beibehalten, andernfalls LOW machen
Schwanand
riteshtch
jonk
Kapil Singh