# ********************* Server - Schleife *********************** """ Hier wird zunaechst ein listening-Socket fuer den Serverprozess erzeugt. Dieser wird an die IP aus der Bootsequenz, sowie eine Portnummer gebunden, welche der Programmierer vorgibt. Die Serverschleife wartet jetzt auf eingehende Verbindungsanfragen. Mittels der accept-Methode nimmt der Server Anfragen an und erzeugt in Folge einen Clientsocket, auf dem der weitere Daten- verkehr abgewickelt wird. Sobald der Server den Job an den Clientsocket abgegeben hat, kehrt er in die listening-Schleife des Serversockets zurueck, um weitere Anfragen anderer Clients entgegen zu nehmen. --------- First a listening socket is set up for the server process. This is bound to the IP from the boot sequence, as well as a Port number, which the programmer specifies. The server loop is now waiting for incoming connection requests. The server accepts requests using the accept method and subsequently creates a client socket on which the further data traffic is handled. As soon as the server has given the job to the Client socket, it returns to the listening loop of the server socket to receive further requests from other clients. """ try: import usocket as socket except: import socket import os from time import sleep from math import log import micropython from ks import KS k = KS(b,d,34) # damit sind alle k.Attribute bekannt # T,b und d werden von wifi_connect übernomen und an KS weitergereicht mitRefresh=0 # Refresh-Meta ausgeben = 1 aenderung="" # Enthaelt Info zur letzten Aktion ergebnis=0 # Flag fuer Ergebnisanzeige refURL="" # Refresh-URL refDelay=5 # Refresh-Intervall mEnde=0 # Ende der Messzeit gc.collect() request = bytearray(1024) # ************************HTML-Seiten********************** prefix='HTTP/1.1 200 OK\nContent-Type: text/html\nConnection: close\n\n' head1=""" ESP32-Strahlungserfassung """ progBar1="""\n
\n\t

""" # Beschriftung ist Rahmenhoehe = k.spektrum[i] progBar2="""

\n\t
\n
\n
\n""" body1="""

ESP32-Gamma-Spektrometer


Wert eingeben und Aktion wählen
Ruhepegel mit einer Dauer von sec. rot
Störsignalspitze mit einer Dauer von sec. grün
Nutzsignalspitze mit einer Dauer von sec. blau
Messung mit einer Dauer von sec. rot/blau

""" #Hier kommt der Meldetext body6="

Gamma-Messung

" foot7="" fehlerString=' UNGUELTIGE ANFRAGE! ' def web_page(act): refreshing = 0 global aenderung global ergebnis #global refURL #global messEnde #global cs if act and act!="favicon.ico": if act.find("groundtime")>=0 or act.find("noisetime")>=0 or act.find("peaktime")>=0 or act.find("mtime")>=0 or act.find("cleardisp") or akt.find("start"): act=act[1:] andPos=act.find("&") if andPos >1: act=act[:andPos] mach, wert = act.split("=") mach = mach.upper() else: mach=act[:len(act)] mach=mach.upper() print("Aktion:",mach) if mach == "GROUNDTIME": wert = int(wert) k.setRuheDauer(wert) k.getRuhePegel() k.calcVoltage() aenderung="Ruhepegel eingelesen:
" ergebnis=0 elif mach == "NOISETIME": wert = int(wert) k.setNoiseDauer(wert) k.getMaxPegel(rauschen=True) k.calcVoltage() aenderung="Noise Peak ingelesen:
" ergebnis=0 elif mach == "PEAKTIME": wert = int(wert) k.setPeakDauer(wert) k.getMaxPegel(rauschen=False) k.calcVoltage() aenderung="Signal Peak Eingelesen:
" ergebnis=0 elif mach == "MTIME": wert = int(wert) k.setMessDauer(wert) k.messen() mEnde=time()+wert restzeit=mEnde-time() anzeige=("logarithmisch" if k.spektrumMax > 100 else "proportional") aenderung="Messung beendet, Ergebnis: {} cpm; Darstellung {}".format(k.activity,anzeige) ergebnis=1 refreshing=0 elif mach == "CLEARDISP": k.d.clearAll() ergebnis=wert aenderung="OLED geloescht" elif mach == "SIGAMP": wert = int(wert) k.setBereich(wert) ergebnis=0 aenderung="Die maximale Signalamplitude wurde auf {} Volt eingestellt.".format(KS.MESSBEREICH[k.bereich]) elif mach=="START": ergebnis=0 k.calcVoltage() aenderung="Spektrometer gestartet!" else: ergebnis=0 aenderung=fehlerString+act else: ergebnis=0 aenderung=fehlerString+act print(aenderung) sleep(1) return True return None d.writeAt(connectStatus[nic.status()] ,0,0) portNum=9192 #print("Fordere Server-Socket an") server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(('', portNum)) # an lokale IP und Portnummer 9192 binden server.listen(5) # Akzeptiere bis zu 5 eingehende Anfragen #print("Empfange Anfragen auf ",STAconf[0],":",portNum, sep='') d.writeAt(STAconf[0]+":"+str(portNum),0,1) d.writeAt("waiting for conn",0,2) #cs1,cs2=k.getConfString() while 1: # server Endlosschleife mitRefresh = 0 c, addr = server.accept() # Anfrage entgegennehmen print('Got a connection from %s' % str(addr)) d.clearAll() d.writeAt(addr[0],0,0) d.writeAt(str(addr[1]),0,1) # c ist ein bytes-Objekt und muss als string decodiert werden # damit string-Methoden darauf angewandt werden koennen. gc.collect() print(micropython.mem_info()) request = c.recv(1024).decode("utf-8") rlen=len(request) print("request{}: {}".format(rlen,request)) slashPos= request.find("GET /")+5 # GET? und ersten "/" finden blankPos= request.find(" ",slashPos) # " " nach "/" finden # die naechsten auf den "/" folgenden Zeichen bis zum Leerzeichen holen action = request[slashPos:blankPos] print('Aktion({}) ==> {}\n'.format(len(action),action)) if web_page(action): c.send(prefix) c.send(head1) c.send(body1) c.send(str(k.ruheDauer)) c.send(body2) c.send(str(k.noiseDauer)) c.send(body3) c.send(str(k.peakDauer)) c.send(body4) c.send(str(k.messDauer)) c.send(body5) body6=aenderung+'
'+k.noiseString+"
"+k.messString+"
" sleep_ms(100) c.send(body6) #print(body6) #sleep(2) if ergebnis: body7='
' #'+k.htmlReport()+"
" c.send(body7) if k.spektrumMax > 100: try: pfaktor=100/log(k.spektrumMax) except: pfaktor=1 print("Fehler: Der maximale Spektrumswert war", k.spektrumMax) elif k.spektrumMax != 0: pfaktor=100/k.spektrumMax else: pfaktor=1 print("Fehler: Der maximale Spektrumswert war", k.spektrumMax) for i in range(k.stufen): c.send(progBar1) c.send(str(k.spektrum[i])) c.send(progBar2) if k.spektrumMax > 100: balken=(0 if k.spektrum[i]==0 else log(k.spektrum[i])*pfaktor) else: balken=k.spektrum[i] * pfaktor c.send(str(balken)) c.send(progBar3) ergebnis = 0 c.send(foot7) k.d.writeAt("served",0,1) else: c.send(prefix) pass c.close()