当前位置: 首页 > news >正文

网站建设 业务培训打开网站

网站建设 业务培训,打开网站,网站网格设计,企业网站开发汇报haas506 2.0开发教程-example-蓝牙多设备扫描案例说明蓝牙信息克隆1.手机蓝牙改名信息克隆代码测试案例说明 开发板扫描蓝牙设备#xff0c;获取并打印蓝牙设备mac地址。mac地址每个设备不同#xff0c;且不能更改。本案例仅适用于M320开发板和HD1-RTU。案例使用手机与iBeac… haas506 2.0开发教程-example-蓝牙多设备扫描案例说明蓝牙信息克隆1.手机蓝牙改名信息克隆代码测试案例说明 开发板扫描蓝牙设备获取并打印蓝牙设备mac地址。mac地址每个设备不同且不能更改。本案例仅适用于M320开发板和HD1-RTU。案例使用手机与iBeacon作为从机。开发板根据设备名称进行连接要同时扫描到2个设备手机的蓝牙名称需要改成与iBeacon相同的名称。 蓝牙信息克隆 使用手机克隆iBeacon的名字信息。 1.手机蓝牙改名 手机下载nRF connect蓝牙调试工具。 iBeacon设备名称将手机蓝牙改成一样的名字 选择ADVERTISER后点击图标改名 信息克隆 点开iBeacon设备后点击CLONE 这样就得到了2个同名的设备。 代码 注意更改代码中的设备名称 main.py # This example finds and connects to a BLE temperature sensor (e.g. the one in ble_temperature.py).# from ast import While # from logging.config import valid_ident # from multiprocessing.sharedctypes import Value # from sys import platlibdir # from this import d # from traceback import print_list import bluetooth from bluetooth import BLE from bluetooth import UUID # import random import ustruct#import time import micropythonimport utime as time#from ble_advertising import decode_services, decode_namefrom micropython import const_IRQ_CENTRAL_CONNECT const(1) _IRQ_CENTRAL_DISCONNECT const(2) _IRQ_GATTS_WRITE const(3) _IRQ_GATTS_READ_REQUEST const(4) _IRQ_SCAN_RESULT const(5) _IRQ_SCAN_DONE const(6) _IRQ_PERIPHERAL_CONNECT const(7) _IRQ_PERIPHERAL_DISCONNECT const(8) _IRQ_GATTC_SERVICE_RESULT const(9) _IRQ_GATTC_SERVICE_DONE const(10) _IRQ_GATTC_CHARACTERISTIC_RESULT const(11) _IRQ_GATTC_CHARACTERISTIC_DONE const(12) _IRQ_GATTC_DESCRIPTOR_RESULT const(13) _IRQ_GATTC_DESCRIPTOR_DONE const(14) _IRQ_GATTC_READ_RESULT const(15) _IRQ_GATTC_READ_DONE const(16) _IRQ_GATTC_WRITE_DONE const(17) _IRQ_GATTC_NOTIFY const(18) _IRQ_GATTC_INDICATE const(19)_ADV_IND const(0x00) _ADV_DIRECT_IND const(0x01) _ADV_SCAN_IND const(0x02) _ADV_NONCONN_IND const(0x03)# org.bluetooth.service.environmental_sensing # _ENV_SENSE_UUID bluetooth.UUID(0x30AF) _ENV_SENSE_UUID bluetooth.UUID(FDA50693-A4E2-4FB1-AFCF-C6EB07647825) # org.bluetooth.characteristic.temperature _TEMP_UUID bluetooth.UUID(0x2A6E) _TEMP_CHAR (_TEMP_UUID,bluetooth.FLAG_READ | bluetooth.FLAG_NOTIFY, ) _ENV_SENSE_SERVICE (_ENV_SENSE_UUID,(_TEMP_CHAR,), )_UART_SERVICE_UUID bluetooth.UUID(6E400001-B5A3-F393-E0A9-E50E24DCCA77) _UART_RX_CHAR_UUID bluetooth.UUID(6E400002-B5A3-F393-E0A9-E50E24DCCA77) _UART_TX_CHAR_UUID bluetooth.UUID(6E400003-B5A3-F393-E0A9-E50E24DCCA77)_MY_SERVICE_UUID bluetooth.UUID(0x181A)# org.bluetooth.characteristic.gap.appearance.xml _ADV_APPEARANCE_GENERIC_THERMOMETER const(768)_ADV_TYPE_FLAGS const(0x01) _ADV_TYPE_NAME const(0x09) _ADV_TYPE_UUID16_COMPLETE const(0x3) _ADV_TYPE_UUID32_COMPLETE const(0x5) _ADV_TYPE_UUID128_COMPLETE const(0x7) _ADV_TYPE_UUID16_MORE const(0x2) _ADV_TYPE_UUID32_MORE const(0x4) _ADV_TYPE_UUID128_MORE const(0x6) _ADV_TYPE_APPEARANCE const(0x19)def decode_field(payload, adv_type):i 0result []while i 1 len(payload):if payload[i 1] adv_type:result.append(payload[i 2 : i payload[i] 1])i 1 payload[i]return resultdef decode_name(payload):n decode_field(payload, _ADV_TYPE_NAME)# print(n:,n)return str(n[0], utf-8) if n else def decode_mac(addr):if isinstance(addr, memoryview):addr bytes(addr)assert isinstance(addr,bytes) and len(addr) 6,ValueError(mac address value error)return :.join([%02X % byte for byte in addr])def print_hex(bytes):l [hex(int(i)) for i in bytes]return .join(l)def decode_services(payload):services []for u in decode_field(payload, _ADV_TYPE_UUID16_COMPLETE):services.append(bluetooth.UUID(ustruct.unpack(h, u)[0]))for u in decode_field(payload, _ADV_TYPE_UUID32_COMPLETE):services.append(bluetooth.UUID(ustruct.unpack(d, u)[0]))for u in decode_field(payload, _ADV_TYPE_UUID128_COMPLETE):services.append(bluetooth.UUID(u))return servicesclass BLETemperatureCentral:def __init__(self, ble):self._ble bleself._ble.gap_scan_name(X622080084)self._ble.gattc_set_uuids(0xFFF2, 0xFFF1)self._ble.active(True)time.sleep_ms(3000)self._ble.irq(self._irq)self._reset()def _reset(self):# Cached name and address from a successful scan.self._name Noneself._addr_type Noneself._addr Noneself._mac Noneself._adv_data None# Cached value (if we have one)self._value None# Callbacks for completion of various operations.# These reset back to None after being invoked.self._scan_callback Noneself._conn_callback Noneself._read_callback None# Persistent callback for when new data is notified from the device.self._notify_callback None# Connected device.self._conn_handle Noneself._start_handle Noneself._end_handle Noneself._value_handle Nonedef _irq(self, event, data):if event _IRQ_SCAN_RESULT:# time.sleep_ms(1)addr_type, addr, adv_type, rssi, adv_data data# print(ble data:{}.format(adv_data))# if adv_type in (_ADV_IND, _ADV_DIRECT_IND) and _ENV_SENSE_UUID in decode_services(adv_data):if adv_type in (_ADV_IND, _ADV_DIRECT_IND):# if adv_type in (_ADV_DIRECT_IND): #ibeacon的类型# Found a potential device, remember it and stop scanning.self._addr_type addr_typeself._addr bytes(addr) # Note: addr buffer is owned by caller so need to copy it.self._name decode_name(adv_data)self._mac decode_mac(addr)# self._adv_data bytes(# adv_data# ) # Note: addr buffer is owned by caller so need to copy it.# self._name decode_name(adv_data) or ?# print(ble addr:,self._mac )# print(ble data:,data )elif event _IRQ_SCAN_DONE:#time.sleep_ms(1000)self._ble.gap_scan(None)#print(##### scan done #####)val 1if self._scan_callback:if self._addr:# Found a device during the scan (and the scan was explicitly stopped).self._scan_callback(self._addr_type, self._addr, self._name)self._scan_callback Noneelse:# Scan timed out.self._scan_callback(None, None, None)elif event _IRQ_PERIPHERAL_CONNECT:print(connect)elif event _IRQ_PERIPHERAL_DISCONNECT:print(disconnect)elif event _IRQ_GATTC_SERVICE_RESULT:# Connected device returned a service.conn_handle, start_handle, end_handle, uuid dataif conn_handle self._conn_handle and uuid _ENV_SENSE_UUID:self._start_handle, self._end_handle start_handle, end_handleelif event _IRQ_GATTC_SERVICE_DONE:# Service query complete.if self._start_handle and self._end_handle:self._ble.gattc_discover_characteristics(self._conn_handle, self._start_handle, self._end_handle)else:print(Failed to find environmental sensing service.)elif event _IRQ_GATTC_CHARACTERISTIC_RESULT:# Connected device returned a characteristic.conn_handle, def_handle, value_handle, properties, uuid dataif conn_handle self._conn_handle and uuid _TEMP_UUID:self._value_handle value_handleelif event _IRQ_GATTC_CHARACTERISTIC_DONE:# Characteristic query complete.if self._value_handle:# Weve finished connecting and discovering device, fire the connect callback.if self._conn_callback:self._conn_callback()else:print(Failed to find temperature characteristic.)elif event _IRQ_GATTC_READ_RESULT:buffer self._ble.gattc_read(0,0)print(recv data:,buffer)elif event _IRQ_GATTC_READ_DONE:# Read completed (no-op).conn_handle, value_handle, status dataelif event _IRQ_GATTC_NOTIFY:# The ble_temperature.py demo periodically notifies its value.conn_handle, value_handle, notify_data dataif conn_handle self._conn_handle and value_handle self._value_handle:self._update_value(notify_data)if self._notify_callback:self._notify_callback(self._value)elif event _IRQ_GATTC_WRITE_DONE:conn_handle, value_handle, status dataprint(TX complete)# Returns true if weve successfully connected and discovered characteristics.def is_connected(self):return self._conn_handle is not None and self._value_handle is not None# Find a device advertising the environmental sensor service.def scan(self, callbackNone):self._addr_type Noneself._addr Noneself._scan_callback callbackself._ble.gap_scan(4000, 6000, 6000)# Connect to the specified device (otherwise use cached address from a scan).def connect(self, addr_typeNone, addrNone, callbackNone):self._addr_type addr_type or self._addr_typeself._addr addr or self._addrself._conn_callback callbackif self._addr_type is None or self._addr is None:return Falseself._ble.gap_connect(self._addr_type, self._addr)return True# Disconnect from current device.def disconnect(self):if not self._conn_handle:returnself._ble.gap_disconnect(self._conn_handle)self._reset()# Issues an (asynchronous) read, will invoke callback with data.def read(self, callback):if not self.is_connected():returnself._read_callback callbackself._ble.gattc_read(self._conn_handle, self._value_handle)# Sets a callback to be invoked when the device notifies us.def on_notify(self, callback):self._notify_callback callbackdef _update_value(self, data):# Data is sint16 in degrees Celsius with a resolution of 0.01 degrees Celsius.self._value ustruct.unpack(h, data)[0] / 100return self._valuedef value(self):return self._valuedef write(self, v, responseFalse):# if not self.is_connected():# returnself._ble.gattc_write(0, 0, v, 1 if response else 0)print(data_send:, v)global v def demo():time.sleep_ms(2000)ble bluetooth.BLE()central BLETemperatureCentral(ble)time.sleep_ms(2000)not_found Falsedef on_scan(addr_type, addr, name):if addr_type is not None:print(Found sensor addr_type:, addr_type)print(Found sensor addr:, print_hex(addr))print(Found sensor name:, name)global vv 1else:nonlocal not_foundnot_found Trueprint(No sensor found.)while True :central.scan(callbackon_scan)time.sleep_ms(2000)# if v 1:# central.connect()# while True:# ble.gattc_notify(1, 1)# # central.write(123, False)# time.sleep_ms(1000)if __name__ __main__:demo() 测试 Haas506可以搜索到2个不同mac地址的设备并将mac地址打印。
http://www.hkea.cn/news/14326417/

相关文章:

  • 企业定制网站开发维护合同做手机网站公司
  • 浏阳做网站推荐江门网站上排名
  • 海兴县网站建设公司绥化市建设局网站
  • 做电影网站要不要收费惠州模板网站建设
  • 网站服务器诊断访问域名进入WordPress指定的页面
  • 好的做问卷调查的网站内网网站建设
  • pathon做网站信阳网站设计
  • 国外做滑板网站运营网站是什么意思
  • 深圳企业网站制作上传电影网站源码
  • 贵阳网站建设技术支持沈阳微网站
  • 网站开发维护公司百度搜索引擎优化的方法
  • 泉州做 php 网站做网站一屏的尺寸是
  • 自助建站源码下载外贸商城网站资质
  • 设置自己的网站表白网页制作免费网站制作
  • 黄冈网站排名最高海南高端网站建设定制
  • 如何快速推广自己的网站营销型网站建设申请域名时公司类型的域名后缀一般是?
  • 西安年网站建设杭州百度优化
  • 有那些网站做平面设计订单企业公司网站管理系统
  • 建网站软件最新中远建设集团有限公司网站
  • 广州建设厅官方网站wordpress 投稿插件
  • 网站服务器租用年度价格信息设计网站
  • 谈谈网站建设的主要内容自己做一款app需要多少钱
  • html5 图片展示网站检测网站建设
  • seo首页网站网站建设 运维 管理包括哪些
  • 中型电商网站维护费用东莞优化seo
  • 如何做一名网站编辑信息网站建设方案
  • wordpress网站设计在线网页转app
  • 北京网站开发多少钱贵阳网站推广优化公司
  • 南昌网站设计哪家专业好wordpress文章模块化
  • 网站换空间wordpresswordpress 显示文章标签