esp32使iOS 获取蓝牙外设的Mac地址
最近在做一个需要上下位机的项目,我负责的任务下位机,使用的主控芯片是esp32。这个项目中有一项是需要手机扫描二维码然后连接作为esp32的蓝牙。二维码中包含了mac地址信息,在手机扫描周围设备的时候通过mac地址筛选出目标设备,然后建立连接。在安卓系统上进展顺利,但是在ios上的时候,这个过程遇到的问题,ios中无法直接获取蓝牙的mac地址。写上位机的负责人发给了我一个链接https://www.jianshu.com/p/1d6a8fc8134f。这个解决方案虽然不是esp32的,但是了解了原理之后还是可以在esp32上实现。
主要原理是在ble广播自己的时候会有一个广播内容中包含很多项,其中有一想就是该产品的制造商(Manufacture)信息,而ios是可以获取这一项内容的。所以,我们可以把mac地址填入这一项,然后ios就可以通过读取制造商信息顺利的识别不同设备了。具体的步骤如下:
1、获取mac地址
2、将mac地址填入"制造商(Manufacture)"项中
一、关于获取mac地址
这里我暂时没有找到获取蓝牙mac地址的方法,但是因为暴露mac地址的目的是为了区分设备,所以只要选择一个不重复的mac地址就好了。这里,选择使用了设备的mac地址。eFuse模块中存在设备的mac地址,具体可以参考https://docs.espressif.com/projects/esp-idf/zh_CN/latest/api-reference/system/efuse.html。相关的例程可以参考esp-idf/examples/system/base_mac_address。
结论:
esp_err_t esp_efuse_mac_get_default(uint8_t* mac);函数可以获取设备的mac地址,其中mac地址是6位。
二 、mac地址填入"制造商(Manufacture)"项
static uint8_t mac_addr[] = {};//定义Mac地址存储空间
esp_efuse_mac_get_default(mac_addr);//获取mac地址
static esp_ble_adv_data_t adv_data;//定义广播用的结构体
adv_data.manufacturer_len = ; //填入Manufacture的长度
adv_data.p_manufacturer_data = mac_addr; //填入Manufacture的指针
esp32使iOS 获取蓝牙外设的Mac地址的更多相关文章
- iOS 获取设备信息,mac地址,IP地址,设备名称
#import "DeviceInfoUtil.h" #import "GlobleData.h" #import "sys/utsname.h&qu ...
- iOS 获取WIFI SSID及MAC地址
NSString *ssid = @"Not Found"; NSString *macIp = @"Not Found"; CFArrayRef myArra ...
- Delphi获取本机的MAC地址
Delphi获取本机的MAC地址: uses NB30; function GetAdaPterInfo(lana: Char): string; var Adapter: TAdapterS ...
- ASP.NET获取客户端IP及MAC地址
朋友最近问如何获取客户端IP及MAC地址,一直想把这段给整理一下,契机来了:下边分为了C#后台获取的方法和前台Javascript(调用ActiveX)获取的方法,大家如果有好的方法一起讨论撒O(∩_ ...
- Java获取主板序列号、MAC地址、CPU序列号工具类
import java.io.File; import java.io.FileWriter; import java.io.BufferedReader; import java.io.IOExce ...
- 如何获取公网IP的mac地址
如何获取远程IP的mac地址 思路分析 由于java本身没有相关的jar包进行获取,所以这里介绍从其他的方面进行入手和实践 使用的工具对比: tcpdump tshark pcap4j 都可以达到抓包 ...
- JAVA获取本机的MAC地址
/** * 获取本机的Mac地址 * @return */ public String getMac() { InetAddress ia; byte[] mac = null; try { // 获 ...
- iOS 作为蓝牙外设广播信息
苹果蓝牙后台的限制,原本广播会有两个段分别是localName和serviceUUID这两块,但现在后台广播时,是不发送在这两段的 手机app可以作为一个蓝牙外设端来模拟外设硬件,但广播包里的数据只能 ...
- iOS学习笔记之蓝牙(有关蓝牙设备mac地址处理) 2
1.创建中心设备,并设置代理 一般情况下,手机是中心设备,蓝牙设备是外围设备. self.centralManager = [[CBCentralManager alloc] initWithDele ...
随机推荐
- POJ River Hopscotch 二分搜索
Every year the cows hold an event featuring a peculiar version of hopscotch that involves carefully ...
- [bzoj3702/2212][Poi2011]二叉树/Tree Rotations_线段树
二叉树 Tree Rotations bzoj-3702 bzoj-2212 Poi-2011 题目大意:现在有一棵二叉树,所有非叶子节点都有两个孩子.在每个叶子节点上有一个权值(有n个叶子节点,满足 ...
- MyBatis 3在XML文件中处理大于号小于号(<>)的方法(转)
说明:以下方式支持XML和注解的方式. 一. 用了转义字符把>和<替换掉. AND start_date <= CURRENT_DATE AND end_date >= CUR ...
- [转]十五天精通WCF——第六天 你必须要了解的3种通信模式
wcf已经说到第六天了,居然还没有说到这玩意有几种通信模式,惭愧惭愧,不过很简单啦,单向,请求-响应,双工模式,其中的第二种“请求-响应“ 模式,这个大家不用动脑子都清楚,这一篇我大概来分析下. 一: ...
- web项目log日志查看分析->流程理解
1.DEBUG [2017-07-10 11:38:41,705][] org.springframework.web.servlet.DispatcherServlet:865 - Dispatch ...
- Unity3D中的Coroutine具体解释
本文太乱,推荐frankjfwang的:全面解析Coroutine技术 Unity中的coroutine是通过yield expression;来实现的.官方脚本中到处会看到这种代码. 疑问: yie ...
- JSP 获取Request 经常使用參数
<input type="hidden" id="a" value="<%=request.getScheme()%>" ...
- android app记录执行日志 捕获奔溃异常 ,存储日志到文件
app在执行过程中.为了后期的维护升级,记录日志是一个很好的方法. 为了读取到app执行时的日志,一般的作法是单独开一个线程,在app执行的启动线程.然后app退出时停掉线程. 然而我们更好的方法是开 ...
- visual studio2013 C++查看对象布局
一在visual studio中进行设置,可以方便的查看对象的内存布局 右键所要显示的*.cpp >> 属性 >> 命令行 >> 其它选项 在其他选项中添加: /d ...
- hdu 6112 今夕何夕(模拟)
今夕何夕 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...