2019-3-24 09:49:58 [显示全部楼层]
7698浏览
查看: 7698|回复: 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是网站使用安全的随机数生成。
截图201903240715581609.png

下面这张图以我昨天生成的,这个UUID7ec85c15-4744-4c60-8b17-98c67b58ffea就是接下来要用的。
截图201903240721589883.png


2. 编写LinkIt 7697程序。

运行BlocklyDuino V3,完成下列代码:(BlocklyDuino V3的使用请参见前贴
截图201903240723116370.png

代码说明:
在setup中,首先生成蓝牙周边Create BLE Peripheral,设备的名称我设置为Juliet's 7697,这样比较好辨别;Service UUID就填我早前生成的UUID。然后在Create BLE Peripheral代码新增加一个代码块,添加一个特性UUID,同样填写早前生成的UUID,属性为读和写,类型为int整型。设置完成后串口输出提示信息。
在loop中,代码块Characteristic ... is written是判断是否有数据写入LinkIt 7697,如果是,则获取写入的值并在串口上输出。接下来往设备再写入一个数字,我这里写的是20190323。

连接好设备,确保端口正常。点击BlocklyDuino右上方的箭头,将代码上传到板子上。
截图201903240735534878.png

3. 收发数据

手机上运行nRF Connect,点击右上角的Scan开始扫描设备,确保LinkIt 7697是上电状态。扫描后会找到我们前面命名好的设备Juliet's 7697,点击CONNECT,连接设备

截图201903240842152926.png

设备连接成功后,可以看到LinkIt 7697的各种信息,包括蓝牙地址和UUID,如下图:
截图201903240848424122.png

点击上图中的Unknow Service,会显示详细信息和更多的操作按钮,如下图。点击向下的箭头,从板子上读取数据,会显示Value的值为(0x)73-14-34-01,我们知道这是一个16进制数。这个是我们在程序中写的数“20190323”吗?
截图201903240851564295.png

打开电脑上的计算器,选择模式为“程序员”,数据类型有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完全不一样!
截图201903240855301782.png

我们点击向上的箭头,向LinkIt 7697写入一个数字20190315,注意写入的数字类型要选Unit 32,因为我们需要32bit的长度。
截图201903240914501622.png

点击send后,Value是(0x) 6B-14-34-01
截图201903240916184584.png

我们再次打开科学计算器,输入20190315来换算,发现值是134,146B,仍然不一样!
截图201903240918113677.png

而我们打开串口监视器,输出的结果和我们的设想是完全一致的!
截图201903240921535779.png

那么为什么我们在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测试哦!!


参考资料

gada888  版主

发表于 2019-4-2 15:05:58

不错,学习了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2022 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail