10618| 1
|
[教程] 手机使用nRF Connect对LinkIt 7697读写数据 |
手机使用nRF Connect对LinkIt 7697读写数据 蓝牙开发中,向硬件发送数据和接收硬件传回来的数据是蓝牙通信的核心,而nRF Connect就是一个非常好用的手机获取硬件信息及收发数据的工具。我们在前面的教程也有学习过。我们后面要学习制作手机与LinkIt 7697结合的各种应用,收发数据是这些应用的基础。在构建app的过程中,我们需要了解硬件的各种数据。今天我们使用nRF进一步了解手机与硬件的通信。 1. 生成UUID UUID是通用唯一识别码(Universally Unique Identifier)的缩写,由当前日期和时间,时钟序列,IEEE机器识别号组成。为了不与其他设备冲突,我们使用在线的UUID生成器来生成一个UUID并写到板子上。 进入网页https://www.uuidgenerator.net/,可以看到下面的页面。在“Online UUID Generator”下方有一长串数字。这个就是已经生成好的UUID,点copy可以复制,点refresh可以重新生成一个。这个在线生成器有两种版本,Version 1是使用时间戳和电脑的MAC地址生成,Version 4是网站使用安全的随机数生成。 ![]() 下面这张图以我昨天生成的,这个UUID7ec85c15-4744-4c60-8b17-98c67b58ffea就是接下来要用的。 ![]() 2. 编写LinkIt 7697程序。 运行BlocklyDuino V3,完成下列代码:(BlocklyDuino V3的使用请参见前贴) ![]() 代码说明: 在setup中,首先生成蓝牙周边Create BLE Peripheral,设备的名称我设置为Juliet's 7697,这样比较好辨别;Service UUID就填我早前生成的UUID。然后在Create BLE Peripheral代码新增加一个代码块,添加一个特性UUID,同样填写早前生成的UUID,属性为读和写,类型为int整型。设置完成后串口输出提示信息。 在loop中,代码块Characteristic ... is written是判断是否有数据写入LinkIt 7697,如果是,则获取写入的值并在串口上输出。接下来往设备再写入一个数字,我这里写的是20190323。 连接好设备,确保端口正常。点击BlocklyDuino右上方的箭头,将代码上传到板子上。 ![]() 3. 收发数据 手机上运行nRF Connect,点击右上角的Scan开始扫描设备,确保LinkIt 7697是上电状态。扫描后会找到我们前面命名好的设备Juliet's 7697,点击CONNECT,连接设备 ![]() 设备连接成功后,可以看到LinkIt 7697的各种信息,包括蓝牙地址和UUID,如下图: ![]() 点击上图中的Unknow Service,会显示详细信息和更多的操作按钮,如下图。点击向下的箭头,从板子上读取数据,会显示Value的值为(0x)73-14-34-01,我们知道这是一个16进制数。这个是我们在程序中写的数“20190323”吗? ![]() 打开电脑上的计算器,选择模式为“程序员”,数据类型有BYTE, WORD, DWORD和QWORD,分别是字节(8bit)、字(16bit)、WDOWRD(双字节,16bit)、QWORD(4字节,32bit)。我们知道2的24次方是16777216,2的25次方是33554432,而我们的数字是20190323,因此我们需要4个字节32-bit即DWORD才能满足要求。选择DWORD,输入20190323,可以看到其HEX16进制的值是134,1473。这和我们前面的数字(0x)73-14-34-01完全不一样! ![]() 我们点击向上的箭头,向LinkIt 7697写入一个数字20190315,注意写入的数字类型要选Unit 32,因为我们需要32bit的长度。 ![]() 点击send后,Value是(0x) 6B-14-34-01 ![]() 我们再次打开科学计算器,输入20190315来换算,发现值是134,146B,仍然不一样! ![]() 而我们打开串口监视器,输出的结果和我们的设想是完全一致的! ![]() 那么为什么我们在nRF里读出和写入的数据都和我们实际的不一致呢?我们看到,虽然nRF的显示出来的值和我们发送的不一样,但仔细观察发现,两者都出现了完全相同的数字,只是顺序不同。比较后我们知道,在nRF里16进制数按字节byte显示,低位在前,高位在后。 20190323, 1 34 14 73 (0x)73-14-34-01,第1个字节73,第2个字节14,第3个字节34,第4个字节01 20190315,1 34 14 6B (0x) 6B-14-34-01,第1个字节6B,第2个字节14,第3个字节34,第4个字节01 4. 总结 在收发数据的时候,我们要注意数据的类型(int, string)和数据的长度,如果不正确就有可能造成收发数据的失败。因此我们在使用App Inventor与硬件通信之前,最好使用nRF来读取相关信息及做前期测试,避免在开发app时走弯路。 如果要对收发数据做进一步了解,可以看这个帖子 PS:本来想用同样的方法玩一下掌控板,发现SCAN之后没有找到设备。希望掌控板早点开放BLE测试哦!! 参考资料 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed