# 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<len(self.connections):
n = y*10+x
if n>=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()