# See https://docs.micropython.org/en/latest/esp8266/library/network.html import network import socket import math import time # Hack to get ticks_ms() method in Tigerjython working if not hasattr(time, 'ticks_ms'): from types import MethodType def ticks_ms(self): return int(round(self.time() * 1000)) time.ticks_ms = MethodType(ticks_ms, time) def sleep_ms(self,a): time.sleep(a/1000.0) time.sleep_ms = MethodType(sleep_ms, time) # END of Hack class WifiServer: def __init__(self, helper): self.helper = helper def setup(self): self.ap = network.WLAN(network.AP_IF) self.ap.active(True) self.ap.config(essid='esp32', authmode=0) self.ap.ifconfig(('10.42.42.1', '255.255.255.0', '10.42.42.1', '10.42.42.1')) print("AP up an running") self.connections=[] # self.cfiles=[] self.graphBuffers=[] self.buttons=bytearray([]) addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1] self.sk = socket.socket() self.sk.bind(addr) self.sk.listen(1) print("Server up an running") def clearBuffers(self): if self.helper: for i in range(150): self.helper.np[i]=(0,0,0) for b in self.graphBuffers: for i in range(450): b[i]=0 def waitForConnection(self): print("Wait for connection...") cl, addr = self.sk.accept() self.connections.append(cl) print('client connected from', addr) #cl_file = cl.makefile('rwb', 0) #self.cfiles.append(cl_file) self.graphBuffers.append(bytearray([0 for i in range(450)])) self.buttons.append(255) def setPixel(self,x,y,color): if (x<10): if self.helper: self.helper.setPixel(x,y,color) else: table = x//10-1 if table=0 and n<149: self.graphBuffers[table][3*n]=color[0] self.graphBuffers[table][3*n+1]=color[1] self.graphBuffers[table][3*n+2]=color[2] def getButtons(self): # Get list with available bytes available = select.select(self.connections, (), (),0) for i in range(len(self.connections)): if self.connections[i] in available: b = self.connections[i].recv(1) if b=='': self.buttons[i]=255 else: self.buttons[i]=b[0] def write(self): if self.helper: self.helper.np.write() for i in range(len(self.connections)): totalsent = 0 while totalsent<450: sent = self.connections[i].send(bytes(self.graphBuffers[i][totalsent:])) if sent == 0: print("socket connection broken") break totalsent+=sent time.sleep_ms(40) # 25 fps #print("sent") def demo(self,i): xmax = (len(self.connections)+1)*10; self.clearBuffers() for x in range(xmax): y = int(math.sin(0.1*(x+i))*7+8) self.setPixel(x, y, (255,0,0)) self.setPixel(x, y+1, (50,0,0)) self.setPixel(x, y-1, (50,0,0)) y = int(math.sin(0.06189*(x+i+5))*7+8) self.setPixel(x, y, (0,255,0)) self.setPixel(x, y+1, (0,50,0)) self.setPixel(x, y-1, (0,50,0)) y = int(math.sin(0.04189*(x+i+10))*7+8) self.setPixel(x, y, (0,0,255)) self.setPixel(x, y+1, (0,0,50)) self.setPixel(x, y-1, (0,0,50)) self.write() def play(self): self.setup() if self.helper: while True: while self.helper.getButtons()!=255: pass while self.helper.getButtons()==255: pass if (self.helper.getButtons()^0xff) &0xf>0: self.waitForConnection() else: break else: self.waitForConnection() i=0 while True: self.demo(i) i+=1 # Start with execfile("wifiserver.py") if __name__=="__main__": print("Start Main") # from helper import Helper # Import der Klasse # helper = Helper() # Erzeugen der Instanz helper = None print(helper) s = WifiServer(helper) s.play()