Benutzer-Werkzeuge

Webseiten-Werkzeuge


elektronik:nodemcu_esp8266_erste_schritte

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Nächste ÜberarbeitungBeide Seiten der Revision
elektronik:nodemcu_esp8266_erste_schritte [2019/01/25 00:34] – [Genereller Ablauf] gpipperrelektronik:nodemcu_esp8266_erste_schritte [2019/01/25 20:16] – [Erste Schritte mit dem ESP8266 / NodeMCU Board mit Lua] gpipperr
Zeile 1: Zeile 1:
-=====Erste Schritte mit dem ESP8266 / NodeMCU Board mit Lua =====+=====Erste Schritte mit dem ESP8266 / NodeMCU Board mit Lua - Temperatur und Luftfeuchtigkeit messen=====
  
 <fc #008080>**Ziel:**</fc>  <fc #008080>**Ziel:**</fc> 
Zeile 459: Zeile 459:
 -- Konfig Tabelle für den Zugriff -- Konfig Tabelle für den Zugriff
 station_cfg={} station_cfg={}
-station_cfg.ssid="GPI_HOME+--station_cfg.ssid="Akademie Gast Secure
-station_cfg.pwd="xxxxTopSecretxxxx"+--station_cfg.pwd="sparkasse" 
 + 
 +station_cfg.ssid="my_wlan" 
 +station_cfg.pwd="xxxx" 
  
 -- Konfig nicht im Flash speichern -- Konfig nicht im Flash speichern
Zeile 474: Zeile 478:
 --  -- 
 -- Single shot sync time with a server on the local network. -- Single shot sync time with a server on the local network.
-sntp.sync("224.0.1.1", +
-  function(sec, usec, server, info) +
-    print('sync', sec, usec, server) +
-  end, +
-  function() +
-   print('failed!'+
-  end +
-)+
 -- im ersten Schritt einfach setzen .-) -- im ersten Schritt einfach setzen .-)
-rtctime.set(1547585804, 0)+--rtctime.set(1548237072, 0)
  
  
 -- je 1000 ms warten und prüfen  -- je 1000 ms warten und prüfen 
-tmr.alarm(1, 500, 1, function()+tmr.alarm(1, 1000, 1, function()
  -- prüfe ob die Verbindung schon geklappt hat  -- prüfe ob die Verbindung schon geklappt hat
   if wifi.sta.getip() == nil then   if wifi.sta.getip() == nil then
     print("Try to establish connection")     print("Try to establish connection")
  else  else
 + 
 +    ip, nm,gateway = wifi.sta.getip()
        
    -- Konfiguration ausgeben    -- Konfiguration ausgeben
    print("ESP8266 mode  :: " .. wifi.getmode()  )    print("ESP8266 mode  :: " .. wifi.getmode()  )
    print("MAC address   :: " .. wifi.ap.getmac())    print("MAC address   :: " .. wifi.ap.getmac())
-   print("IP            :: " .. wifi.sta.getip())+   print("IP            :: " .. ip) 
 +   print("Netmask       :: " .. nm) 
 +   print("Gateway       :: " .. gateway  
  
 +   -- configure Sensor
 +    dofile ("am2320.lua")
    -- Timer stop    -- Timer stop
    tmr.unregister(1)    tmr.unregister(1)
Zeile 503: Zeile 506:
    end    end
 end) end)
 +-------------
  
-tmr.alarm(25000, 1, function()+-- je 1000 ms warten und prüfen  
 +-- Uhrzeit setzen beim start 
 +-- Time dann auf 1h setzen, dann wieder Uhrzeit neu setzen 
 + 
 + 
 +ntptimer =tmr.create(
 +ntptimer:register(1000tmr.ALARM_AUTO, function()
  -- prüfe ob die Verbindung schon geklappt hat  -- prüfe ob die Verbindung schon geklappt hat
   if wifi.sta.getip() == nil then   if wifi.sta.getip() == nil then
-    print("Try to establish connection")+    print("Wait for IP Connection to set time")
  else  else
-    -- rufe die eigentliche Logik auf   +    print("---set time-  Timer 2 --  " ) 
-   dofile ("dht.lua")+    -- in my configuration the gateway has ntp feature on 
 +    ip, nm,gateway = wifi.sta.getip() 
 +    sntp.sync(gateway, 
 +      function(sec, usec, server, info) 
 +        print('sync', sec, usec, server) 
 +        rtctime.set(sec, 0) 
 +      end, 
 +      function() 
 +       print('Time Sync was not sucessfull'
 +      end 
 +    ) 
 +        
 +    -- get the time 
 +    sec, usec, rate = rtctime.get() 
 +    print("Internal Timer :: " .. tmr.time() ) 
 +    print("seconds        :: " .. sec ) 
 +      
 +    -- set the time time to one hour 
 +    ntptimer:interval(60000*60) 
 +     
 +    
 +   end 
 +end) 
 + 
 +ntptimer:start() 
 + 
 + 
 +--------------------------------- 
 +--- Eigentliche Ausleselogik aufrufen 
 + 
 +tmr.alarm(3, 60000*5, 1, function() 
 + -- prüfe ob die Verbindung schon geklappt hat 
 +  if wifi.sta.getip() == nil then 
 +    print("Try to establish connection to start logic"
 + else 
 +    print("---Call Logic Timer 3 --  " ) 
 +    -- get the time 
 +    sec, usec, rate = rtctime.get() 
 +    print("Internal Timer :: " .. tmr.time() ) 
 +    print("seconds        :: " .. sec ) 
 +     
 +    -- rufe die eigentliche Logik auf  
 +     
 +    humi, temp = am2320.read() 
 +    humi=humi/10; 
 +    temp=temp / 10; 
 +    print(string.format("RH: %s%%", humi   ) ) 
 +    print(string.format("Temperature: %s degrees C", temp ) )  
 +     
 +    -- oder alternativ für den DHT22  
 +    --  dofile ("DH22.lua") 
 +    -- 
 + 
 +   
    dofile ("sendData.lua")    dofile ("sendData.lua")
-    --print(temp)+   
    end    end
 +end)
 +
 +--------------------
 end) end)
 </code> </code>
Zeile 659: Zeile 725:
  
 ---- ----
 +
 +==== Impluse auswerten ====
 +
 +Flowmeter angeschloßen
 +
 +  * Schwarz and GND
 +  * Rot and 3,3V
 +  * Gelb an D1
 +
 +
 +D0 wird nicht unterstützt für Interrupts!
 +
 +
 +Impulse pro Minute und Sekunde zählen:
 +<code lua>
 +-- Welcher GPIO Port
 +trigger_pin=1
 +
 +-- Zähler
 +min_time=0
 +pulszaehler=0
 +pulszaehler_min=0
 +
 +
 +-------------------------------------------
 +-- Was soll aufgerufen werden
 +function intPin1(level, internalCountMs)
 + 
 +    pulszaehler=pulszaehler+1
 +    
 +end
 +
 +-------------------------------------------
 +-- Trigger Mode setzen
 +gpio.mode(trigger_pin,gpio.INT)
 +
 +-------------------------------------------
 +-- Interrupt Handler definieren
 +-- für fallende flanke
 +gpio.trig(trigger_pin, "down", intPin1)
 +
 +-------------------------------------------
 +-- je Sekunde den aktuellen Status ausgeben
 +sectimer =tmr.create()
 +sectimer:register(1000, tmr.ALARM_AUTO, function()
 +
 +  if min_time == 59 then
 +    min_time=0
 +    print(string.format('Stand nach einer Minute :: %05i ', pulszaehler_min ))
 +    pulszaehler_min=0
 +    -- hier wird der gezählte Werte nun an die Datenbank übergeben
 +    -- send data aufrufen 
 +    -- möglichst in einen neuen Thread !!
 +  else
 +    min_time=min_time+1    
 +  end
 +
 +  pulszaehler_min=pulszaehler_min+pulszaehler
 +  print(string.format('Stand in dieser %02i Sekunde :: %05i  :: Sum :: %05i',min_time, pulszaehler,pulszaehler_min) )
 +  pulszaehler=0 
 +  
 +  
 +end)
 + 
 +sectimer:start()
 +
 +------------------------
 +
 +
 +</code>
 +
 +So etwas ist evtl. besser mit /Lua-RTOS umsetzbar => https://github.com/whitecatboard/Lua-RTOS-ESP32 , da ja hier eigentlich mehrer Threads notwendig sind um die Daten zu versenden und gleichzeitig richtig zu zählen.
 +
 +
 +----
 +
  
 ==== Hilfsfunktionen==== ==== Hilfsfunktionen====
elektronik/nodemcu_esp8266_erste_schritte.txt · Zuletzt geändert: 2021/12/12 15:34 von gpipperr