Beispiel #1
0
    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)
Beispiel #2
0
    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)
Beispiel #5
0
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)
Beispiel #7
0
    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)
Beispiel #8
0
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()