Example #1
0
 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()))
Example #2
0
 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()))
Example #3
0
 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()))
Example #4
0
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
Example #5
0
 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})