def use_dummy_serial_port(printer:SerialDevice): # FIXME # not great, should be async!!! def delayed_string(result:Union[str,bytes]): # print ("delayed string {}".format(time.time())) time.sleep(random.uniform(0.05,0.5)) # print ("delayed string {}".format(time.time())) return result printer._serial_port = "/dev/null" printer._serial = dummyserial.Serial(port=printer._serial_port, baudrate=printer._baud_rate, ds_responses={ 'N?[0-9]*(M105).*': lambda : b'ok T:%.2f /190.0 B:%.2f /24.0 @:0 B@:0\nok\n' % (random.uniform(170,195),random.uniform(20,35)), 'N?[0-9]*M115.*': b'FIRMWARE_NAME:DUMMY\nok\n', 'N?[0-9]*M114.*': lambda : b'X:%.2fY:%.2fZ:%.2fE:%.2f Count X: 2.00Y:3.00Z:4.00\nok\n' % (random.uniform(0,200), random.uniform(0,200), random.uniform(0,200), random.uniform(0,200)), # position request 'N?[0-9]*G.*': lambda : delayed_string(b'ok\n'), 'N?[0-9]*M400.*': lambda : delayed_string(b'ok\nok\n'), 'N?[0-9]*M207.*': lambda : delayed_string(b'ok\nok\n'), 'N?[0-9]*M208.*': lambda : delayed_string(b'ok\nok\n'), 'N?[0-9]*M10[0-46-9].*': lambda : delayed_string(b'ok\nok\n'), "N?[0-9]*(M[0-9]+).*" : lambda : delayed_string(b'ok\nok\n'), # catch all M codes '^XXX': b'!!\n', }) if not printer._serial.is_open: printer._serial.open() printer.connection_state = ConnectionState.connected
def __init__(self, port): port = SerialDevice.normalizePortName(port) if port in SutterMPC200.DEVICES: raise Exception("The port %s is already accessed by another instance of this class. Use getDevice(port) instead.") SutterMPC200.DEVICES[port] = self self.lock = RLock() self.port = port SerialDevice.__init__(self, port=self.port, baudrate=128000) self.scale = [0.0625e-6]*3 # default is 16 usteps per micron self._moving = False
def __init__(self, port): """ port: serial COM port (eg. COM3 or /dev/ttyACM0) """ self.lock = RLock() self.port = port self.pos = [(None,None)]*4 # used to remember position of each drive self.currentDrive = None SerialDevice.__init__(self, port=self.port, baudrate=128000) self.scale = [0.0625e-6]*3 # default is 16 usteps per micron
def __init__(self, p, baud=115200): #self.fws = {} #self.paramTable = OrderedDict() SerialDevice.__init__(self, port=p, baudrate=baud) # first function call after power off of the filterwheel returns error, subsequent calls succeed try: pC = self.getPosCount() except: pass else: pass
def __init__(self, port, baudrate=9600, module_addr=1): """ port: serial COM port (eg. COM3 or /dev/ttyACM0) baudrate: 9600 by default module_addr: 1 by default """ self.lock = RLock(debug=True) self.port = port assert isinstance(module_addr, int) assert module_addr > 0 self.module_addr = module_addr self.module_str = chr(module_addr + 64) self._waiting_for_reply = False SerialDevice.__init__(self, port=self.port, baudrate=baudrate)
def getDevice(cls, port): """ Return a SutterMPC200 instance for the specified serial port. Only one instance will be created for each port. """ port = SerialDevice.normalizePortName(port) if port not in cls.DEVICES: cls.DEVICES[port] = SutterMPC200(port=port) return cls.DEVICES[port]
async def json_handle_set_serial_port(printer:SerialDevice, *args): response = "" received = "" logger.debug("json_handle_set_serial_port args:") for i in args: logger.debug("{}".format(i)) port = args[0].lower() baud_rate = int(args[1]) if baud_rate < 1: baud_rate = options.baud_rate logger.debug("setting serial port: {}".format(port)) printer._baud_rate = baud_rate if (printer.connection_state is ConnectionState.connected): await printer.disconnect() if port.startswith("dummy"): logger.debug("[SERVER] setting dummy serial port: {}".format(port)) use_dummy_serial_port(printer) else: # TODO: check if printer serial ports are different!! printer._serial_port = port printer._baud_rate = baud_rate try: received = await printer.async_connect() except SerialException as se: logger.error(str(se)) response = ["ERROR: could not connect to serial port {}".format(port)] logger.error(response[0]) return response # raise Exception(response) # else: response = [{ 'time': time.time() * 1000, 'port': [port, baud_rate], 'messages': received }] return response
def main(): tornado.options.parse_command_line() loop = tornado.ioloop.IOLoop.current() printer = SerialDevice() serial_port_func = functools.partial(json_handle_set_serial_port, printer) # dispatcher.add_dict({"set-serial-port": serial_port_func }) #---------------------------------------- # THIS DEFINES THE JSON-RPC API: #---------------------------------------- async def r_creator(request): params = request.params if request.method == "set-serial-port": result = await serial_port_func(*params) return result elif request.method == "get-serial-ports": result = await json_handle_portslist() return result elif request.method == "send-gcode": result = await json_handle_gcode(printer, *params) return result elif request.method == "get-printer-state": result = await json_handle_printer_state(printer) return result elif request.method == "close-serial-port": result = await json_handle_close_serial(printer) return result else: raise MethodNotFound("{}".format(request.method)) settings = dict( cookie_secret="__TODO:_GENERATE_YOUR_OWN_RANDOM_VALUE_HERE__", template_path=os.path.join(os.path.dirname(__file__), "templates"), static_path=os.path.join(os.path.dirname(__file__), "static"), xsrf_cookies=False, ) handlers = [ (r"/", MainHandler), (r"/test", TestHandler, dict(printer=printer)), (r"/jsontest", JsonTestHandler), (r"/jsonqtest", JsonQueueTestHandler), # (r"/jsonrpc", JSONHandler), (r"/jsonrpc", JSONRPCHandler, dict(response_creator=r_creator)), ] application = tornado.web.Application(handlers=handlers, debug=True, **settings) http_server = tornado.httpserver.HTTPServer(application) http_server.listen(options.port) tornado.ioloop.IOLoop.current().start()
def getDevice(cls, port): """ Return a SutterMPC200 instance for the specified serial port. Only one instance will be created for each port. *port* must be a serial COM port (eg. COM3 or /dev/ttyACM0) """ port = SerialDevice.normalizePortName(port) if port in cls.DEVICES: return cls.DEVICES[port] else: return SutterMPC200(port=port)
def use_dummy_serial_port(printer: SerialDevice): if printer._serial_port is not "/dev/null" and printer._serial is None: def delayed_string(result: Union[str, bytes]): # print ("delayed string {}".format(time.time())) time.sleep(random.uniform(0.05, 0.5)) # print ("delayed string {}".format(time.time())) return result printer._serial_port = "/dev/null" printer._serial = dummyserial.Serial( port=printer._serial_port, baudrate=printer._baud_rate, ds_responses={ '.*M105.*': lambda: b'ok T:%.2f /190.0 B:%.2f /24.0 @:0 B@:0\n' % (random.uniform(170, 195), random.uniform(20, 35)), '.*M115.*': b'FIRMWARE_NAME:DUMMY\n', '.*M114.*': lambda: b'X:%.2fY:%.2fZ:%.2fE:%.2f Count X: 2.00Y:3.00Z:4.00\n' % (random.uniform(0, 200), random.uniform(0, 200), random.uniform(0, 200), random.uniform(0, 200) ), # position request '.*G.*': lambda: delayed_string(b'ok\n'), '.*M400.*': lambda: delayed_string(b'ok\n'), '.*M207.*': lambda: delayed_string(b'ok\n'), '.*M208.*': lambda: delayed_string(b'ok\n'), '.*M10[0-46-9].*': lambda: delayed_string(b'ok\n'), '^XXX': b'!!\n', }) printer.connection_state = ConnectionState.connected
import time from SerialDevice import SerialDevice imu = SerialDevice("COM3", 19200, buffer_read_len=10, buffer_write_len=10, debug=True) imu.start() time.sleep(1) print(imu.get()) time.sleep(1) print(imu.get()) time.sleep(1) print(imu.get()) time.sleep(1) imu.pause() time.sleep(1) print(imu.get()) time.sleep(1) imu.resume() time.sleep(1) imu.pause() time.sleep(1) imu.stop()
serialdevice = None zstart = 100 zend = 120 zstep = 1 xstart = 500 xend = 2500 xstep = 50 # Very hacky to have always the same Serial device.. serialdevice = serial.Serial(serialadress, 115200, timeout=.1) time.sleep(2) try: ledarr = SerialDevice(serialdevice) # normally 0x07 except Exception as e: print(e) ledarr = False logger.debug("LEDARray is not connected!") # connect to Motors try: motors = SerialDevice(serialdevice) # normally 0x08 except: motors = False logger.debug("Motors are not connected!") # connect to Fluo try: fluo = SerialDevice(serialdevice)
"powershell.exe", "Function Set-Speaker($Volume){$wshShell = new-object -com wscript.shell;1..50 | % {$wshShell.SendKeys([char]174)};1..$Volume | % {$wshShell.SendKeys([char]175)}} ; Set-Speaker(" + winVolume + ")" ], shell=True) elif os == "darwin": subprocess.call("osascript -e 'set volume output volume " + str(percent) + "'", shell=True) elif os == "linux": val = float(int(percent)) proc = subprocess.Popen('/usr/bin/amixer sset Master ' + str(val) + '%', shell=True, stdout=subprocess.PIPE) proc.wait() def cb(event): try: print(event) if (event.startswith("set_volume_")): percent = event.split("_")[-1] setVolume(percent) except: traceback.print_exc() pidVid = (32799, 9114) mediaDevice = SerialDevice(cb, pidVid)
is_serial = True serialadress = '/dev/ttyUSB0' serialdevice = None zstart = 100 zend = 120 zstep = 1 xstart = 1200 xend = 1900 xstep = 50 # Very hacky to have always the same Serial device.. serialdevice = serial.Serial(serialadress, 115200, timeout=.1) time.sleep(2) try: ledarr = SerialDevice(serialdevice) # normally 0x07 except Exception as e: print(e) ledarr = False logger.debug("LEDARray is not connected!") for iz in range(zstart, zend, zstep): fluo.send("LENS1Z", int(iz)) time.sleep(0.1) for ix in range(xstart, xend, xstep): fluo.send("LENS1X", int(ix)) time.sleep(0.1)
def __init__(self, serialNumber, baudrate, device): threading.Thread.__init__(self) SerialDevice.__init__(self, serialNumber, baudrate, device) OscDevice.__init__(self) self.__active = False
serialdevice = None global lensX1 lensX1 = 0 global lensZ1 lensZ1 = 0 # Very hacky to have always the same Serial device.. try: serialdevice = serial.Serial(serialadress, 115200, timeout=.1) time.sleep(2) except: serialdevice = 1 try: esp_lens = SerialDevice(serialdevice) # normally 0x07 except Exception as e: print(e) esp_lens = False logger.debug("esp_lens is not connected!") ''' for iz in range(zstart,zend,zstep): fluo.send("LENS1Z", int(iz)) time.sleep(0.1) for ix in range(xstart,xend,xstep): fluo.send("LENS1X", int(ix)) time.sleep(0.1) ''' # This callback will be bound to the LED toggle and Beep button: