Seite 1 von 1

Webserver und gleichzeitig im Hintergrund MQTT???

Verfasst: Freitag 9. April 2021, 16:01
von foto2004
Hallo Gemeinde,

ich habe eine Frage wie stell ich es an dass ich bei einem esp8266 den Webserver laufen lasse aber auch im Hintergrund immer wieder in gewissen Zeitabständen z.B. ein MQTT post abgesetzt wird? Ich habe es nur geschafft dass die ganze While True Schleife durchlauft wenn auch eine Webanfrage kommt.

hier ein Beispiel mit dem ich gerade herumprobiere. Vielleicht hat ja da einer eine Idee.

Code: Alles auswählen


import netzwerk
from machine import Pin
import time

try:
    import usocket as socket
except:
    import socket

import esp
esp.osdebug(None)

print(netzwerk.wlan.ifconfig())
int_led = Pin(2, Pin.OUT)


def web_page():
  if int_led.value() == 1:
   relay_state = ''
  else:
    relay_state = 'checked'
  html = """
    <html>
    <head><meta name="viewport" content="width=device-width, initial-scale=1">
    <style> 
      body{font-family:Arial; text-align: center; margin: 0px auto; padding-top:30px;}
      .switch{position:relative;display:inline-block;width:120px;height:68px}.switch input{display:none}
      .slider{position:absolute;top:0;left:0;right:0;bottom:0;background-color:#ccc;border-radius:34px}
      .slider:before{position:absolute;content:"";height:52px;width:52px;left:8px;bottom:8px;background-color:#fff;-webkit-transition:.4s;transition:.4s;border-radius:68px}
      input:checked+.slider{background-color:#2196F3}
      input:checked+.slider:before{-webkit-transform:translateX(52px);-ms-transform:translateX(52px);transform:translateX(52px)}
    </style>
    <script>function toggleCheckbox(element) { var xhr = new XMLHttpRequest(); if(element.checked){ xhr.open("GET", "/?relay=on", true); }
      else { xhr.open("GET", "/?relay=off", true); } xhr.send(); }
    </script>
    </head>
    <body>
      <h1>ESP8266 LED Web Server</h1>
      <label class="switch"><input type="checkbox" onchange="toggleCheckbox(this)" %s>
      <span class="slider"></span>
      </label>
    </body>
    </html>""" % (relay_state)
  return html

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 80))
s.listen(5)

while True:
  for i in range(3):
    int_led.on()
    time.sleep(1)
    int_led.off()
    time.sleep(1)
    print("Range durch " + str(i+1) + " mal.")
    
  i = 0
  print("Range ist wieder " + str(i)) # Ist ja logisch dass er hier stehenbleibt weil er unten auf eine Aktion wartet.
  
  try:
    if gc.mem_free() < 102000:
      gc.collect()
    conn, addr = s.accept()
    conn.settimeout(3.0)
    print('Got a connection from %s' % str(addr))
    request = conn.recv(1024)
    conn.settimeout(None)
    request = str(request)
    print('Content = %s' % request)
    relay_on = request.find('/?relay=on')
    relay_off = request.find('/?relay=off')
    if relay_on == 6:
      print('RELAY ON')
      int_led.value(0)
    if relay_off == 6:
      print('RELAY OFF')
      int_led.value(1)
    response = web_page()
    conn.send('HTTP/1.1 200 OK\n')
    conn.send('Content-Type: text/html\n')
    conn.send('Connection: close\n\n')
    conn.sendall(response)
    conn.close()
  except OSError as e:
    conn.close()
    print('Connection closed')



Re: Webserver und gleichzeitig im Hintergrund MQTT???

Verfasst: Samstag 10. April 2021, 19:40
von __deets__