ESP8266 LUA Verbindung zum Netzwerk

Gast #4414949
Dieses kleine Skript soll den ESP8266 mit meinem WLAN-Netzwerk 
verbinden:

-- init.lua

print("\nStart...")

 ssid= "     "
 passw= "     "

    print ("vorher:",wifi.sta.status())


    wifi.setmode(wifi.STATION)
    wifi.sta.config(ssid,passw)
    tmr.delay(1000000)


    print ("nachher:",wifi.sta.status())


Es funktioniert auch, allerdings nur nach dem ich das Skript übertragen 
habe,
kommt als Status 5(verbunden).

Wenn ich jetzt ein Reset mache oder das Modul vom Strom nehme und dann 
wieder in Betrieb, kommt als Meldung Status 1 (Verbindungsaufbau).

Was kann ich machen, dass das Modul nach einem Reset, sich wieder mit 
dem Netzwerk verbindet?
#4415545
tmr.delay() ist nur für sehr kleine Verzögerungen sinvoll, weil es 
während der 'Wartezeit' den kompletten Controller blockiert. Das heisst, 
es wird in der Zeit auch keine Verbindung aufgebaut und nach längeren 
Warezeiten wird dann sogar der Watchdog Reset ausgelöst.

Du musst mit tmr.alarm in Abständen den Wifi Status prüfen. zB:

WifiStatus={
[0]="STATION_IDLE",
[1]="STATION_CONNECTING",
[2]="STATION_WRONG_PASSWORD",
[3]="STATION_NO_AP_FOUND",
[4]="STATION_CONNECT_FAIL",
[5]="STATION_GOT_IP",}

wifi.setmode(wifi.STATION)
wifi.sta.config("xxxSSIDxx", "xxPWxx")
wifi.sta.connect()

tmr.alarm(0, 500, 1, function()
   if wifi.sta.getip()==nil then
    print("conn. to AP ".." Status: "..(WifiStatus[wifi.sta.status()]))

   else
      tmr.stop(0)

       print ("Verbunden mit IP "..wifi.sta.getip().." Status: 
"..(WifiStatus[wifi.sta.status()]))
----------- programm
--dofile("xxxx.lua")


-----------
   end
end)


Normalerweise merkt sich aber der ESP8266 die Verbindung und stellt sie 
beim Start automatisch wieder her.
Gast #4415735
Vielen Dank, Herr Müller.

So sah ähnlich sah meine Lösung dann auch aus:

x= 1
warten= 0

print("\nStart...")

function tmr0Routine()
 local cStatus= wifi.sta.status()
 print (warten, " : ",cStatus)
 warten = warten + 1
 if cStatus ~= 1 then
  x= 0
  tmr.stop(0)
 end
end

--function connectWLAN(modus)
 ssid= " "
 passw= " "

    print ("vorher:",wifi.sta.status())

     wifi.setmode(wifi.STATION)
     wifi.sta.config(ssid,passw)
     print ("connect...");


    print ("nachher:",wifi.sta.status())

tmr.alarm(0,1000,1,tmr0Routine)

-- Wie kann man hier an der Stelle warten, bis die
   Verbindung hergestellt ist?

   Wie du sagst tmr.delay() blockiert alles.

   " while (x== 1) do

     end "   führt zu einem ständigen Neustart
#4416848
Holger74 schrieb:
> while (x== 1) do
>
>      end "   führt zu einem ständigen Neustart

Bei deiner Endlosschleife (oder länger als ein paar Sekunden) wird der 
Watchdog aktiv und macht einen Reset, deshalb Neustart.

Auch das Ausführen von Programmcode blockiert den WIFI Aufbau im 
'Hintergrund' :-(

Deswegen funktioniert der WIFI Aufbau nur, wenn das Lua Programm 
'fertig' ist. Der tmr.alarm wird über Interrupt gesteuert, so das er das 
WIFI nicht stört, was sich dann in den Timerpausen verbinden kann.

So muss man etwas seltsam programmieren und das Hauptprogramm innerhalb 
der tmr.alarm Funktion starten - nach dem (positiven) Status Vergleich, 
der ja zyklisch alle paar 100ms aufgerufen wird, während das Lua 
Programm schon fertig ist. Ist sehr gewöhnungsbedürftig - klappt aber.

Um es übersichtlicher zu machen, kann man das Hauptprogramm ja in eine 
eigene Datei schreiben und mit dofile xxx.lua starten.

Bei meinem obigen Beispiel ist die Timerfunktion nicht extra definiert 
(tmr0Routine), sondern mit function() if .. then .. else ..  end() 
direkt hintendran geschrieben. Die wird nur vom Timer aufgerufen, so wie 
deine tmr0Routine.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.