12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #!/usr/bin/python3
- import serial
- import serial.tools.list_ports
- import time
- import datetime
- import socket
- import socketserver
- def log(msg):
- print("[" + str(datetime.datetime.now()) + "] " + msg)
- class Ardvindo:
- def __init__(self, comPort):
- self.comPort = comPort
- self.comConnection = None
- self.connect()
- def connected(self):
- return self.comConnection != None and self.ping()
- def reconnect(self):
- while True:
- if self.comConnection != None:
- self.comConnection.close()
- self.comConnection = serial.Serial(self.comPort, 9600, timeout = 0.5)
- # establishing an serial connection automatically resets the arduino
- # wait for arduino to restart
- time.sleep(4)
- if self._readline() == "ardvindo started":
- log("Connection established!")
- break
- else:
- log("Failed to connect!")
- def connect(self):
- if not self.connected():
- self.reconnect()
- def ping(self):
- return self.sendCommand("i") == "ardvindo"
- def _readline(self):
- line = self.comConnection.readline().decode().strip()
- log("Received '" + line + "' !")
- return line
- def sendCommand(self, cmd):
- log("Sending command '" + cmd + "' ...")
- self.comConnection.write((cmd + "\n").encode())
- return self._readline()
- ardvindo = Ardvindo(serial.tools.list_ports.comports()[0][0])
- class ServerRequestHandler(socketserver.BaseRequestHandler):
-
- def handle(self):
- data = self.request[0].decode().strip()
- ardvindo.sendCommand(data)
- server = socketserver.UDPServer(('', 61291), ServerRequestHandler)
- log("Server is started!")
- log("Waiting for commands... ")
- server.serve_forever()
|