def run(self): while self._running: env_is_valid = check_env() # 等待用户连接microbit if not env_is_valid: self.logger.info("错误信息: %s", "请插入microbit") ui_error("错误信息", "请插入microbit") time.sleep(5) else: port = find_microbit() self.ser = serial.Serial(port, 115200, timeout=1) break def get_response_from_microbit(): try: data = self.ser.readline() # self.logger.info("in response") if data: data = data.decode() try: data = eval(data) except (ValueError, SyntaxError): pass else: # self.logger.info(data) return data except UnicodeDecodeError: pass return None lock = threading.Lock() def request(): while self._running: lock.acquire() self.scratch3_message = self.read() lock.release() bg_task = threading.Thread(target=request) self.logger.debug("thread start") bg_task.daemon = True bg_task.start() while self._running: # 一读一写 比较稳定 scratch3_message = self.scratch3_message self.logger.debug("scratch3_message {}".format(scratch3_message)) self.scratch3_message = {} if scratch3_message == {}: scratch3_message = {"topic": self.TOPIC, "payload": ""} scratch3_message = json.dumps(scratch3_message) + "\r\n" scratch3_message_bytes = scratch3_message.encode('utf-8') self.logger.debug(scratch3_message_bytes) self.ser.write(scratch3_message_bytes) # response response_from_microbit = get_response_from_microbit() if response_from_microbit: # message = {"topic":self.TOPIC, "payload":} # todo 不要在microbit中构建消息 self.publish(response_from_microbit) time.sleep(0.05)
def run(self): while self._running: env_is_valid = check_env() # 等待用户连接microbit if not env_is_valid: self.logger.info("错误信息: %s", "请插入microbit") self.pub_notification("请插入microbit", type="ERROR") time.sleep(5) else: port = find_microbit() self.ser = serial.Serial(port, 115200, timeout=1) break def get_response_from_microbit(): data = self.ser.readline() data_str = data.decode() return data_str.strip() while self._running: try: response_from_microbit = get_response_from_microbit() # print(response_from_microbit) if response_from_microbit: print(response_from_microbit) message = self.message_template() message["payload"]["content"] = response_from_microbit self.publish(message) except: try: port = find_microbit() self.ser = serial.Serial(port, 115200, timeout=1) except: pass finally: rate = 20 # todo: bucket token time.sleep(1 / rate)
def run(self): while True: env_is_valid = check_env() # 等待用户连接microbit if not env_is_valid: try: # 使其在cli下能用 error("错误信息", "请插入microbit") except RuntimeError: self.logger.info("错误信息: %s", "请插入microbit") time.sleep(5) else: port = find_microbit() self.ser = serial.Serial(port, 115200, timeout=1) break # lock = threading.Lock() # def request(): # while True: # self.logger.info("in process") # lock.acquire() # self.message = self.read() # lock.release() # bg_task = threading.Thread(target=request) # self.logger.info("thread start") # bg_task.daemon = True # bg_task.start() while True: ''' 订阅到的是什么消息 消息体是怎样的 ''' self.message = self.read() message = self.message self.logger.info(f"message {message}") self.message = {} if message != {}: message = json.dumps(message) + "\r\n" message_bytes = message.encode('utf-8') self.logger.debug(message_bytes) self.ser.write(message_bytes) time.sleep(0.2)
def run(self): ''' run 会被作为线程调用 当前插件功能: 往scratch不断发送信息 ''' port = find_microbit() # port = "/dev/tty.usbmodem14312" self.ser = serial.Serial(port, 115200, timeout=1) while True: read_message = self.read() # json self.logger.info("message:", read_message) # zeromq if read_message.get("topic") == "eim": data = read_message.get("payload") if data == "eat": # 串口写eat message_bytes = b'8\n' # 8 -> eat self.ser.write(message_bytes)
def check_env(): return find_microbit()
def run(self): while True: env_is_valid = check_env() # 等待用户连接microbit if not env_is_valid: try: # 使其在cli下能用 error("错误信息", "请插入microbit") except RuntimeError: self.logger.info("错误信息: %s", "请插入microbit") time.sleep(5) else: port = find_microbit() self.ser = serial.Serial(port, 115200, timeout=1) break def get_response(): try: data = self.ser.readline() self.logger.info("in response") # self.logger.info(data) if data: data = data.decode() # self.logger.info(data) try: data = eval(data) except (ValueError, SyntaxError): pass else: self.logger.info(data) return data except UnicodeDecodeError: pass return None lock = threading.Lock() def request(): while True: self.logger.debug("in process") lock.acquire() self.message = self.read() lock.release() bg_task = threading.Thread(target=request) self.logger.debug("thread start") bg_task.daemon = True bg_task.start() while True: ''' 订阅到的是什么消息 消息体是怎样的 ''' message = self.message self.logger.debug("message {}".format(message)) self.message = {} if message == {}: message = {"topic": "sensor", "data": ""} message = json.dumps(message) + "\r\n" message_bytes = message.encode('utf-8') self.logger.debug(message_bytes) self.ser.write(message_bytes) # response res = get_response() if res and res.get('id') == 'microbit': self.publish(res) time.sleep(0.05)
def run(self): while self._running: env_is_valid = check_env() # 等待用户连接microbit # todo: 由前端选择 jupyter stdin channel if not env_is_valid: self.logger.error("No micro:bit found") self.pub_notification("No micro:bit found", type="ERROR") # todo 针对extension_id的提醒 time.sleep(5) else: port = find_microbit() self.ser = serial.Serial(port, 115200, timeout=1) break self.pub_notification("micro:bit Connected!", type="SUCCESS") def get_response_from_microbit(): try: data = self.ser.readline() if data: data = data.decode() try: data = eval(data) except (ValueError, SyntaxError): pass else: return data except UnicodeDecodeError: pass return None while self._running: # 一读一写 比较稳定, todo: CQRS , todo makecode create hex try: if not self.q.empty(): payload = self.q.get() message_id = payload.get("message_id") scratch3_message = { "topic": self.EXTENSION_ID, "payload": "" } scratch3_message["payload"] = payload["content"] else: message_id = "" scratch3_message = { "topic": self.EXTENSION_ID, "payload": "" } scratch3_message = json.dumps(scratch3_message) + "\r\n" scratch3_message_bytes = scratch3_message.encode('utf-8') self.logger.debug(scratch3_message_bytes) self.ser.write(scratch3_message_bytes) # response response_from_microbit = get_response_from_microbit() if response_from_microbit: message = { "payload": { "content": response_from_microbit["payload"] } } if message_id: message["payload"]["message_id"] = message_id self.publish(message) except: # todo: 错误信息不明确 try: port = find_microbit() self.ser = serial.Serial(port, 115200, timeout=1) except: pass finally: rate = 10 time.sleep(1 / rate)
def check_env(): # 环境是否满足要求, todo: 多个怎么办 return find_microbit()
def run(self): while self._running: env_is_valid = check_env() # 等待用户连接microbit if not env_is_valid: self.logger.info("错误信息: %s", "请插入microbit") self.pub_notification("请插入microbit") time.sleep(5) else: port = find_microbit() self.ser = serial.Serial(port, 115200, timeout=1) break def get_response_from_microbit(): try: data = self.ser.readline() if data: data = data.decode() try: data = eval(data) except (ValueError, SyntaxError): pass else: return data except UnicodeDecodeError: pass return None while self._running: # 一读一写 比较稳定 try: if not self.q.empty(): payload = self.q.get() message_id = payload.get("message_id") scratch3_message = { "topic": self.EXTENSION_ID, "payload": "" } scratch3_message["payload"] = payload["content"] else: message_id = "" scratch3_message = { "topic": self.EXTENSION_ID, "payload": "" } scratch3_message = json.dumps(scratch3_message) + "\r\n" scratch3_message_bytes = scratch3_message.encode('utf-8') self.logger.debug(scratch3_message_bytes) self.ser.write(scratch3_message_bytes) # response response_from_microbit = get_response_from_microbit() if response_from_microbit: message = { "payload": { "content": response_from_microbit["payload"] } } if message_id: message["payload"]["message_id"] = message_id self.publish(message) except: try: port = find_microbit() self.ser = serial.Serial(port, 115200, timeout=1) except: pass finally: rate = 10 time.sleep(1 / rate)
def check_env(): # 检查环境是否满足要求。 todo: 处理多个microbit的情况 return find_microbit()