硬件最大的乐趣莫过于它可以作用于现实生活了吧
参考的最多的是lovelyelfpop/macless-haystack中文版相比于原版macless-haystack对于硬件设置的介绍增加了nRF5x刷机,对于我而言帮助非常大
官方原版的airtag价格高达100+,不过他的功能非常强大,配合苹果手机可以实现指向性定位和很精准的测距,市售的一些非常便宜的定位模块和本文章介绍的“自制airtag”原理是相似的,和原版airtag一样,他其实是一个蓝牙信标,一直发送蓝牙广播,当周围有苹果手机时,会将这个物品的位置上报至苹果的服务器,然后我们用公钥从苹果的服务器获得物品的位置,根据私钥解密即可获得物品的定位,更加详细的解释戳这里
硬件制作
我选择的是五月景风大佬在嘉立创开源的蓝牙广播-Tag信标项目,根据我在淘宝的购买记录来计算单个的纯成本的话为6.5178,哈哈当然这种硬件产品这么算下来的单价显然是不太合理的,而且还有费时费力的贴片焊接(我使用的是加热台),甚至可能焊接完由于虚焊或者某些原因会导致烧录失败
这位大佬也开源了一版板载pcb天线的,个人不是很推荐,因为那个的蓝牙传输距离非常弱,基本只能在2-3m左右,而陶瓷天线的版本则可以10m+
下面放几张丑陋的焊接图hhh,技艺有待提升,评价为能用就行。PCB板当然是经典的嘉立创免费打板,真的是太爽啦,第一版选的白色,后面发现白色不方面看清是否有连锡之类的情况,所以第二版使用的是黑色,嘉立创的商城还没有用过,所有的元件都是在tb买的,都在一家买的话可以包邮
刚刚转了一圈issue,发现似乎右上角的四个焊点使用杜邦线公头直接焊接会比较方便?其实甚至我觉得做四个孔都行?因为烧录只需要一小会,缠绕上能接触一会儿就行了

程序烧录
这一步坑比较多,而且最关键的是这一步也要用来验证板子是否能正常工作
你可以先看看一般刷机流程,但是我实际上手建议使用这位大佬制作的一键airtag烧录nrf5x工具,用命令行第一点是因为本来的流程比较繁琐且生成新密钥会覆盖旧密钥,用起来不是很简单,第二点是固件的问题,推荐使用heystack-nrf5x的固件,在大佬的一键工具里面已经有编译好的版本,非常赞!我的单片机是NRF52810QCAA,故使用的是airtag一键工具\51822-52822bin编译文件\nrf52810_xxaa_s112.bin文件,cfg使用airtag一键工具\51822-52822bin编译文件\52810.cfg文件\openocd.cfg,值得注意的是,使用此工具修补完密钥后,他不是覆盖本来的bin固件文件,而是创建一个新的bin固件文件,比如C2VQA5_keyfile_firmware.bin这样的,刷写固件的时候不要选错了!
还有一个非常诡异的坑是,我买的st-link编程器有两排针脚,我实测只能使用下面那一排针脚才能成功刷入,不知道为什么,有点神奇
一般成功出现Programming Finished就是烧录成功了
我第一个板子可以烧录,但是非常的烫,我估计应该是哪里短路了还是怎样,因为这个东西的电流是非常小的,理论上不可能发这么大的热,并且把3.3V拉低到2.8V了
如何验证板子在正常运作
这个点还是很关键的,安装教程里面说的是使用AirGuard app,但是我用那个是死活搜索不出来我的蓝牙,直至到现在我现在成功后都无法搜索到,不是很懂什么情况
在不知道我的板子是否正常运作的那段时间,日思夜想多天后,我说,死马当活马医,把后面的教程全部走完再说吧,把服务器docker什么的都跑起来之后,我发现他有一个安卓程序,我一把信息导进去,竟然奇迹般的发现定位已经在十几分钟前更新了一次,原来是早就已经正常运行了哈哈
在这个app里面有一个扫描,他会扫描这个信标对应的mac地址,只要有的话就会出现,也就是说,只要扫描出来了就可以知道板子已经正常工作了,你也可以通过断电上电观察蓝牙更新的时间来判断,总之就是非常好用

服务器设置
这一段难度倒是不大,安装教程运行docker即可,最麻烦的我觉得是Apple账号的登录,有很多奇怪的限制并没有在readme里面出现
- 需要把设备登录的Apple账号退出,所以这也是为什么建议注册一个新的账号
- 手机号前面是86而非+86
顺带补充一下如果想给christld/macless-haystack容器添加账号密码,先docker volume inspect mh_data找到这个容器存放数据的位置,比如我的是在/var/lib/docker/volumes/mh_data/_data里面,config.ini里面有endpoint_user=和endpoint_pass字段
这个账号密码会在使用apk或者网页的时候需要填写,也就是一个鉴权机制
APK使用
我看很多人都把各个物品的名称改为中文名了,我是用正常生成文件之后,在json里面再把name改成想要的中文名,然后再导入app里面就行了
总结
感觉大概一天能定位小几次,感觉适合放在电动车或者自行车上,不是很经常需要找位置的物品上,偶尔拿出来看看,或者使用蓝牙扫描,通过信号强度或许也可以拿来判断距离,用来寻找具体的位置应该也是没问题的,整体定位的精度还是很可以的,在手机地图上误差应该在十米以内,算是个很有意思的项目
说些什么吧!