From efc34ed11e37f84e491770ca47b466116365d90c Mon Sep 17 00:00:00 2001 From: spirkelmann Date: Mon, 6 May 2019 22:09:52 +0200 Subject: [PATCH] enabled reconnect of socket --- micropython_firmware/main.py | 93 +++++++++++++++++++++--------------- 1 file changed, 54 insertions(+), 39 deletions(-) diff --git a/micropython_firmware/main.py b/micropython_firmware/main.py index 1af68f3..b37e6fd 100644 --- a/micropython_firmware/main.py +++ b/micropython_firmware/main.py @@ -5,6 +5,7 @@ import d1motor import time import usocket +import esp class Robot: def __init__(self): @@ -20,49 +21,63 @@ class Robot: print("motor setup complete") # setup socket for remote control - print("setting up socket communication") - self.socket = usocket.socket() self.addr = usocket.getaddrinfo('192.168.4.1', 1234)[0][-1] - self.socket.bind(self.addr) - print("socket setup complete") def remote_control(self): - print("waiting for connections on {}".format(self.addr)) - self.socket.listen(1) - res = self.socket.accept() # this blocks until someone connects to the socket - comm_socket = res[0] - print("connected!") - listening = True - while listening: - # expected data: '(u1, u2)'\n" - # where ui = control for motor i - # ui \in [-1.0, 1.0] - data = comm_socket.readline() - data_str = data.decode() - print("Data received: {}".format(data_str)) - try: - print("processing data = {}".format(data_str)) - l = data_str.strip('()\n').split(',') - print("l = {}".format(l)) - u1 = int(float(l[0])*10000) - print("u1 = {}".format(u1)) - u2 = int(float(l[1])*10000) - print("u2 = {}".format(u2)) - except ValueError: - print("ValueError: Data has wrong format.") + while True: + # dirty hack: free memory such that reuse of socket is possible + print(esp.freemem()) + if esp.freemem() < 9 * 1024: + s = time.ticks_ms() + while esp.freemem() < 9 * 1024: + pass + print("waited {} ms".format((time.ticks_ms() - s))) + print("setting up socket communication") + socket = usocket.socket() + socket.bind(self.addr) + print("socket setup complete") + + print("waiting for connections on {}".format(self.addr)) + socket.listen(1) + res = socket.accept() # this blocks until someone connects to the socket + comm_socket = res[0] + print("connected!") + listening = True + while listening: + # expected data: '(u1, u2)'\n" + # where ui = control for motor i + # ui \in [-1.0, 1.0] + data = comm_socket.readline() + data_str = data.decode() print("Data received: {}".format(data_str)) - print("Shutting down") - u1 = u2 = 0 - listening = False - except IndexError: - print("IndexError: Data has wrong format.") - print("Data received: {}".format(data_str)) - print("Shutting down") - u1 = u2 = 0 - listening = False - finally: - self.m1.speed(u1) - self.m2.speed(u2) + try: + print("processing data = {}".format(data_str)) + l = data_str.strip('()\n').split(',') + print("l = {}".format(l)) + u1 = int(float(l[0])*10000) + print("u1 = {}".format(u1)) + u2 = int(float(l[1])*10000) + print("u2 = {}".format(u2)) + except ValueError: + print("ValueError: Data has wrong format.") + print("Data received: {}".format(data_str)) + print("Shutting down") + u1 = u2 = 0 + listening = False + except IndexError: + print("IndexError: Data has wrong format.") + print("Data received: {}".format(data_str)) + print("Shutting down") + u1 = u2 = 0 + listening = False + finally: + self.m1.speed(u1) + self.m2.speed(u2) + comm_socket.close() + socket.close() + del comm_socket + del socket + print("disconnected") wall_e = Robot() wall_e.remote_control()