def find_nearby_devices(self): logger.info("===============【{}】正在检测附近的蓝牙设备===============".format(DateUtil.get_now_datetime())) # print("Detecting nearby Bluetooth devices...") # 可传参数 duration--持续时间 lookup-name=true 显示设备名 # 大概查询10s左右 # 循环查找次数 loop_num = 3 i = 0 try: # print("===============【{}】附近没有蓝牙设备!再次尝试{}===============".format(DateUtil.get_now_datetime(), str(i))) self.nearby_devices = bluetooth.discover_devices(lookup_names=True, duration=10) # print("===============【{}】附近没有蓝牙设备!再次尝试{}===============".format(DateUtil.get_now_datetime(), str(i))) # print(self.nearby_devices) while self.nearby_devices.__len__() == 0 and i < loop_num: self.nearby_devices = bluetooth.discover_devices(lookup_names=True, duration=10) if self.nearby_devices.__len__() > 0: break i = i + 1 time.sleep(2) logger.info("===============【{}】附近没有蓝牙设备!再次尝试{}===============".format(DateUtil.get_now_datetime(), str(i))) if not self.nearby_devices: logger.info( "===============【{}】这附近没有蓝牙设备。程序停止!===============".format(DateUtil.get_now_datetime())) else: logger.info( "===============【{}】 附近发现【{}】个蓝牙设备:{}===============".format(DateUtil.get_now_datetime(), self.nearby_devices.__len__(), self.nearby_devices)) except Exception as e: # 不知是不是Windows的原因,当附近没有蓝牙设备时,bluetooth.discover_devices会报错。 traceback.print_exc() logger.info( "===============【{}】这附近没有蓝牙设备。程序停止(2)!===============".format(DateUtil.get_now_datetime()))
def find_target_device(self, target_name, target_address): self.find_nearby_devices() if self.nearby_devices: for addr, name in self.nearby_devices: if target_name == name and target_address == addr: logger.info( "===============【{}】找到目标蓝牙设备:设备名【{}】,地址【{}】===============".format(DateUtil.get_now_datetime(), target_name, target_address)) # print("Found target bluetooth device with address:{} name:{}".format(target_address, target_name)) self.find = True break if not self.find: logger.info( "===============【{}】这附近没有目标蓝牙设备。请打开目标设备的蓝牙。!===============".format(DateUtil.get_now_datetime()))
def connect_target_device(self, target_name, target_address): # self.find_target_device(target_name=target_name, target_address=target_address) self.find = True if self.find: logger.info( "===============【{}】准备连接目标设备:设备名【{}】,地址【{}】。===============".format(DateUtil.get_now_datetime(), target_name, target_address)) self.sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM) try: self.sock.connect((target_address, 1)) logger.info( "===============【{}】连接目标设备成功。准备接受数据!===============".format(DateUtil.get_now_datetime())) self.connect = True data_dtr = "" # 以下代码根据需求更改 # while True: # data = self.sock.recv(1024) # data_dtr += data.decode() # if '\n' in data.decode(): # # data_dtr[:-2] 截断"\t\n",只输出数据 # print(datetime.datetime.now().strftime("%H:%M:%S")+"->"+data_dtr[:-2]) # data_dtr = "" except Exception as e: traceback.print_exc() logger.info( "===============【{}】连接目标失败,请重新连接。===============".format(DateUtil.get_now_datetime())) # print("connection fail\n", e) self.connect = False self.sock.close() else: logger.info( "===============【{}】请先查找设备!===============".format(DateUtil.get_now_datetime()))
def get_arguments(request): """ 获取请求参数 :param request: :return: """ if request.method == 'GET': logger.info("收到GET请求") arguments = dict(request.GET) for arg in arguments: if type(arguments[arg]) == type([]): arguments[arg] = arguments[arg][0] else: logger.info("收到POST请求") logger.info("post-body") logger.info(request.body.decode()) if "form" in request.content_type: arguments = request.POST else: arguments = json.loads(request.body.decode()) return arguments
def close_target_device(self): # print("Ready to close") logger.info( "===============【{}】准备与目标设备断开连接。===============".format(DateUtil.get_now_datetime())) if self.connect: self.sock.close()
def receive(self, text_data): try: # 这里是接受数据后的操作,下面的方法按需修改 text_data_json = json.loads(text_data) code_ = text_data_json.get("code", None) # print("=================================================================",self.sock) # sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM) try: print("==========={}:code={}=========".format( DateUtil.get_now_datetime(), code_)) if code_ == "10": if self.sock: self.sock.close() # self.close() # self.sock = None self.sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM) bt_name = text_data_json.get("bt_name", None) bt_addr = text_data_json.get("bt_addr", None) if not bt_addr: return JsonResponse( { "status": 201, "msg": "请选择需要连接的蓝牙设备", "data": None }, json_dumps_params={'ensure_ascii': False}) logger.info( "===============【{}】准备连接目标设备:设备名【{}】,地址【{}】。===============" .format(DateUtil.get_now_datetime(), bt_name, bt_addr)) self.sock.connect((bt_addr, 1)) data = {"status": 200, "msg": "连接成功"} self.send(text_data=json.dumps(data)) logger.info( "===============【{}】连接目标设备成功。准备接受数据!===============". format(DateUtil.get_now_datetime())) # 以下代码根据需求更改 if self.sock and (code_ == "0" or code_ == "1" or code_ == "2"): logger.info( "===============【{}】准备发送数据:{}===============".format( DateUtil.get_now_datetime(), code_)) self.sock.send(code_) data_dtr = "" while True: data = self.sock.recv(1024) # print(data) data_dtr += data.decode() if '\n' in data.decode(): # data_dtr[:-2] 截断"\t\n",只输出数据 # print(datetime.datetime.now().strftime("%H:%M:%S") + "->" + data_dtr[:-2]) self.send(text_data=json.dumps(data_dtr[:-2])) break if self.sock and code_ == 20: logger.info( "===============【{}】 准备断开连接!===============".format( DateUtil.get_now_datetime())) self.sock.close() self.close() except Exception as e: traceback.print_exc() logger.info( "===============【{}】连接目标失败,请重新连接。===============".format( DateUtil.get_now_datetime())) self.sock.close() self.close() return JsonResponse( { "status": 202, "msg": "连接目标失败,请重新连接", "data": None }, json_dumps_params={'ensure_ascii': False}) except Exception: traceback.print_exc() return JsonResponse( { "status": 500, "msg": "异常!", "errMsg": traceback.format_exc() }, json_dumps_params={'ensure_ascii': False})