Arduino durch mehrfaches Ausschalten steuern

Moin Leute,

ich will bald 2 neue Projekte anfangen.

Eins davon ist eine WLAN steuerbare LED "Glühbirne".

Dafür soll ein ESP2866 Modul genommen werden (aus Platzgründen ohne Arduino- lässt sich allerdings mit anderer "Firmware" mit der Arduino IDE nutzen) und die LEDs steuert.
Abgesehen von der eigentlichen Benutzung, also steuerung der Farben, evlt. auch bestimmte Programme, wie einen Wecker etc., habe ich allerdings noch eine weitere Funktion, bei der ich allerdings nicht weiß, wie man so etwas realisiert.

Die LEDBirne soll anfangs am besten als Access Point/Router (AP) arbeiten, damit man sich mit seinem Smartphone, Laptop, PC (oder was auch immer) damit verbinden kann und mit dem heimischen WLAN zu verbinden.
Dafür brauch es natürlich ein simples WebIF oder man bräuchte eine APP um das WLAN zu scannen oder einfach die SSID und das Passwort einzugeben (ohne scan - je nachdem was ich hinbekomme. Erstmal also die pure Eingabe ohne scan).

Ich weiß noch nicht, ob das Modul sich selbst vom Modus den Access Point in den Station Modus versetzen kann, das müsste ich also noch rausfinden.

EDIT: Das Teil kann wohl von Hause aus AP + Station gleichzeitig. Dann brauche ich mir darüber schonmal keine Gedanken mehr zu machen.
(wenn es dann läuft, werde ich allerdings dennoch schauen, ob es möglich ist nur einen Modus laufen zu lassen, sodass eine mit dem heimischen WLAN verbundene LEDBirne sonst nach außen hin nicht mehr angreifbar ist).

Wenn man jetzt die Birne ausbaut und in einem anderen WLAN-Bereich einbaut oder das WLAN Passwort ändert, käme man an die LEDBirne steuerungstechnisch nicht mehr ran.

Daher nun zur eigentlichen Frage:
Ich würde gerne die LEDBirne durch mehrfaches Ein- und Ausschalten dazu bringen, sich selbst zurückzusetzen.
Also z.B. Schaltet man 3 mal die LED schnell innerhalb eines bestimmten Zeitraums und/oder jedes mal nicht länger als maximal x Sekunden an und wieder aus - und die LED stellt dann alle Variablen wieder zurück.

Wie macht man so etwas?

Meine Idee ist, dass ich in den EEPROM beim starten in den Block 0 eine "1" schreibe und einen Timer laufen lasse.
Sobald x Sekunden Überschritten sind, setze ich den Wert des EEPROMs wieder auf 0 (um zu signalisieren, dass es keine valide "Ein-/Ausschaltsequenz" war.
Wenn man aber innerhalb von x Sekunden ausschaltet, steht im Block 0 weiterhin eine 1.
Wenn man das Teil jetzt wieder einschaltet läuft wieder ein Timer.
Da der Wert in Block 0 nicht 0 ist, schreibt er diesmal in Block 1.
Wenn die Zeit überschritten wird, wird Block 0 und 1 resettet (also auf 0 gesetzt).
Falls man aber innerhalb von x Sekunden wieder ausgeschaltet hat, steht im Block 1 auch eine 1 ... und so weiter.

Wenn man dann die LEDBirne zum 4. mal einschaltet und Block 0-2 jeweils den Wert 1 hat, dann könnte man das resetten initialisieren (mit optischer Rückmeldung der LEDBirne) und die Werte im Block 0-2 wieder zurück setzen (auf 0) und alle gespeicherten Werte wie SSID und Passwort löschen, sowie als Modus wieder "Access Point" einstellen, um wieder die Eingabe und das koppeln mit dem WLAN zu ermöglichen.

Was haltet ihr von dieser Lösung?

Mich würde dazu interessieren, ob ich mir damit nicht zu schnell meinen EEPROM kaputt mache, weil das ja nur eine gewisse Anzahl an Schreibvorgängen erlaubt bis er kaputt geht und ob es dafür nicht etwas eleganteres gibt.

Ich danke euch und liebe Grüße!

Leon333:
Was haltet ihr von dieser Lösung?

Ich habe ungefähr nach dem ersten Drittel aufgehört, Dein Posting zu lesen. Mal sprichst Du von LED und Birne, dann von WLAN und AccessPoint.

Könntest Du Deine Gedanken ein bisschen sortierter und nicht ganz so länglich nochmal hier ablassen? Wenn ich Deinen Gedanken folgen kann, kann ich vielleicht auch etwas Kompetentes dazu sagen.

Gruß

Gregor

Sortierter kann ich es nicht aufschreiben.
Kürzen geht:
Wie kann ich durch Ein- und Ausschalten das Modul elegant zurücksetzen?

Da keiner so eine Frage pauschal beantworten kann, muss man aber das Gesamtsystem und den Anwendungsfall kennen.

Das Gesamtsystem ist eine WLAN-LEDBirne.
Daher spreche ich eigentlich nicht mal von diesem und mal von jenem, sondern die ganze Zeit von einem System (in dem auch ein WLAN Modul drinne steckt, dass wiederrum unterschiedliche WLAN Modi hat).

Damit ich auch über meinen Lösungsansatz hinweg Ideen bekommen kann, ist der Anwendungsfall in der ersten Hälfte bis "Daher nun zur eigentlichen Frage:" beschrieben.
Danach gehts um den Lösungsansatz den ich habe und ob es nicht auch besser geht.

Hallo,

zumindest beim Arduino war ich mit dem Vorgehen erfolgreich. In die Versorgung kommt ein ausreichend großer Elko. Ist die Versorgungsspannung weg, stützt er für kurze Zeit die Versorgung des Arduinos. Gleichzeitig sinkt die Spannung ab. Das kann man detektieren, in dem man an einem der analogen Eingänge eine Referenzspannung anlegt-bei mir Durchlassspannung einer roten Led. Durch die abfallende Versorgungsspannung erscheint die Referenzspannung immer größer. Der Arduino weiß, gleich gehen die Lichter aus und schreibt seinen Zustand ins Eeprom.

Wählst du einen ausreichend großen Elko, dann kann evtl. das ESP8266-Modul die Versorgungspause wach überstehen. Es merkt 3dreimal Strom weg und wieder da, bevor es die Arbeit einstellte-> also Reset.

Dieses Forum ist nicht der richtige Ort um über Probleme bei der Programmierung des Kontrollers des ESP8266 Moduls zu diskutieren. Da gibt es sicher ein Forum, das dieses Modul als Thema hat.

Das weiteren ohne RTC die auch stromlos die Zeit weiterzählt oder durch eine Stromversorgungs-Backupmaßnahme kann kein Kontroller wissen, wie lange er ausgeschaltet war.

Grüße Uwe

AHA!
Das ist natürlich sehr elegant, da hardwareseitig gelöst und ich den EEPROM nicht unnötig belaste.

Allerdings muss ich mir jetzt überlegen, wie ich aus dem einen Analogen Eingang des ESP8266 mehrere machen kann, weil der eine vorhandene bereits belegt ist.
Theoretisch könnte ich mehrere Analoge Sensoren und diesen ElKo über die Digitalen Pins abwechselnd mit Strom versorgen (und den anderen dann jeweils abschalten) und dann durchschalten...
Das ist aber ein anderes und nicht Arduino-relevantes Problem.

Aber das ist schonmal so ein Ansatz auf den ich hier gehofft hatte.

@Uwe: Das stimmt. Ich hab auch 2mal überlegt, ob ich mich in einem extra Forum dafür anmelden soll, aber einerseits ist hier reichlich Kompetenz vorhanden und anderenfalls muss man das Problem bei einem Arduino auf die gleiche Weise lösen (egal ob mit oder ohne Shield/Modul).
Daher ist die Lösung evtl. auch mal für einen anderen Arduino-Nutzer relevant.
Ich nutze bloß kein Arduino, weil dafür leider nicht genügend Platz vorhanden ist.

Vielen Dank und liebe Grüße!

Leon333:
Allerdings muss ich mir jetzt überlegen, wie ich aus dem einen Analogen Eingang des ESP8266 mehrere machen kann, weil der eine vorhandene bereits belegt ist.
Theoretisch könnte ich mehrere Analoge Sensoren und diesen ElKo über die Digitalen Pins abwechselnd mit Strom versorgen (und den anderen dann jeweils abschalten) und dann durchschalten...
Das ist aber ein anderes und nicht Arduino-relevantes Problem.

Man kann die Sensoren nicht einfach zusammenschalten. Man braucht einen analogen Multiplexer dazu. Ohne ihn ausprobiert zu haben, wäre der 4051 ein Beispiel dafür.

Der Elko kommt in die Anschlussleitung zur Pufferung er Versorgungsspannung. Ich habe eine LED als simple Spannungsreferenz (Spannungsteilerschaltung) genommen. Eine Z-Diode tut es auch.

Ich will auch eine Lampe bauen. Nach aktuellem Stand übernimmt die Steuerung ein Arduino. Bedienung über IR.

ich denke, das hast du in deinem Eröffnungspost schreibst, geht in die richtige Richtung. Das Problem ist nur, dass er kein Eeprom hat. es gibt aber soweit ich weiß, eine Lib, mit der man ins Flash schreiben kann. Somit wäre das Problem ja gelöst.
eventuell einfacher wäre jedoch, dass du einen Taster dranbaust, den man zum Zurücksetzen aud AP Mode beim Einschalten drücken muss.

Edit: Siri schreibt manchmal Mist.

Meine Idee ist, dass ich in den EEPROM… und ich den EEPROM nicht unnötig belaste… ob ich mir damit nicht zu schnell meinen EEPROM kaputt mache, weil das ja nur eine gewisse Anzahl an Schreibvorgängen erlaubt bis er kaputt geht .

Der ESP hat kein EEPROM!
Und das Flash geht noch viel schneller kaputt!
Du suchst ein NVRam.

Allerdings muss ich mir jetzt überlegen, wie ich aus dem einen Analogen Eingang des ESP8266 mehrere machen kann, weil der eine vorhandene bereits belegt ist.

Wie wäre es mit einem externen, über I2C angeschlossenem, ADC?

Ich hatte dabei so etwas im Sinn:
Link

Aber ein I2C ADC würde auch gehen - wird aber vom Platz her knapp...

Ein Blick in meine Teilekiste brachte eine 1N4007 Diode aber keine Leuchtdiode und keine Z-Diode hervor..
Geht die auch? Datenblatt

Ich denke zwar nicht, da die Vorwärtsspannung zu sehr vom Strom abhängt, aber eventuell hast du ja eine Idee.

So eine Referenzschaltung habe ich noch nicht gemacht, hast du eventuell nen Link, der beschreibt, wie man das macht oder baut man das einfach über eine Zener-/Leuchtdiode mit Widerstand in Reihe mit folgendem Widerstandswert auf:
(die Versorgungsspannung - Vorwärtsspannung) / (unkritischer Stromwert von z.B. 30mA) = Vorwiderstand?

Ich schaue später mal nach dem NVRam (noch nie gehört).

Danke für eure Hinweise!
Liebe Grüße!

Hallo,

einfach ausprobieren. Ich hatte einen Vorwiderstand für ca. 0,5mA genommen. Der analoge Eingang wird zwischen Vorwiderstand und Diode angeschlossen.

Leon333:
Was haltet ihr von dieser Lösung?

Wer keine Arbeit hat, der macht sich welche.

Leon333:
Mich würde dazu interessieren, ob ich mir damit nicht zu schnell meinen EEPROM kaputt mache, weil das ja nur eine gewisse Anzahl an Schreibvorgängen erlaubt bis er kaputt geht und ob es dafür nicht etwas eleganteres gibt.

Üblicherweise haben Geräte, die eine Funktion "Reset auf Werkseinstellungen" besitzen, irgendwo am Gehäuse einen kleinen, ggf. verdeckt eingebauten Schaltkontakt. Oftmals vertieft im Gehäuse, so dass er nur mit einem Gegenstand bedient werden kann, z.B. einer Kugelschreibermine, die man in das Gehäuse hineindrückt. Wenn man das Gerät einschaltet, während man mit der Kugelschreibermine den Schaltkontakt betätigt ==> Rücksetzung auf Werkseinstellung.

Internet-Router besitzen oftmals so eine Reset-Funktion.

Und beim Power-On wertet das Gerät dann einfach nur aus:

  • Ist der spezielle Reset-Schaltkontakt nicht betätigt worden ==> normaler Reset, laden der gespeicherten Einstellungen

  • Hat der User aber mit einer Kugelschreibermine den Reset-Schaltkontakt betätigt ==> Rücksetzen auf Werkseinstellung beim Einschalten

Danke Theseus, werde es dann so machen.

@jurs: Du hast wie immer Recht, Allerdings würde ich die LEDBirne lieber geschlossen lassen wollen, da ich den Schalter entweder weit außen anbringen müsste und somit der diffusor der Lampe einen dunklen Fleck hätte (wenn die Lampe leuchtet) oder man Gefahr läuft auf andere Teile zu kommen (Kurzschluss) wenn man kein spezielles Röhrchen oder so dafür baut.
Generell will ich nicht immer ne Leiter holen wollen um mal so einen reset zu machen, nur weil ich ein Passwort ändere.

... oder einfach beim Start für ein paar Minuten in den AP Modus wechseln, wenn keine Verbindung zum Wlan Router zustande kommt...

Das war mir anscheinend viel zu naheliegend :slight_smile:
Ich hab jetzt jedenfalls dank euch ein gutes Repertoire an Lösungsmöglichkeiten.

genau. Da der ESP ja Station und AP gleichzeitig kann, kannst du ja solange er den AP nicht findet, den AP im ESP ohne Passwortschutz aktivieren. Muss ja nicht am Anfang sein, sondern immer, wenn er nicht mit dem Router verbunden ist.

Geniale Idee

Ja das ist tatsächlich eine bequeme Möglichkeit.
Um keine Sicherheitslücke aufzureißen, könnte ich den AP dann mit einem Standart-Passwort (was nur ich kenne) laufen lassen und somit kann auch kein Nachbar meine Lichter übernehmen :smiley:

Dennoch hab mich mal nach Zener Dioden umgeschaut (50 Stück für 84Cent... da werde ich fast schwach, selbst wenn ich sie nicht brauche :D).

Was mich dort allerdings wundert ist der Spannungsverlauf.
Datenblatt

In meinem Anwendungsfall (mit einer Spannung von 3.3V) bräuchte ich doch eine Zehner-Diode mit einer geringeren Vorwärsspannung und die hab ich auch gefunden mit 2,2V.
Somit muss dann über dem Widerstand 1.1V abfallen.
Allerdings verwirrt mich das Datenblatt mehr, da das "typical forward characteristics"-Diagramm nicht so wirklich "fix" bei der Spannung ist.
Klar ist das jetzt kein Modell mehr und ein reales Bauteil und das Diagramm ist logarithmisch, aber dennoch:
Wäre das die richtige Zener Diode?

Nimm die für 93 Cent, die sind bestimmt 10% besser :slight_smile: :slight_smile: :slight_smile:

Nimm besser das hier

Wenn du das ohne Standardpasswort machst, kannst du das Teil sogar deinem Nachbarn schenken, ohne Neuprogrammierung vom Sketch.

2,2V sollten passen. Die Spannung ist tatsächlich leicht vom Strom abhängig. Das ist aber hier irrelevant, da es nur um die Veränderung geht. Z.B. als Messreferenz in einem Batteriegerät sind Z-Dioden eher ungeeignet.