微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > 射频无线通信设计 > 04 BLE双向数据传输

04 BLE双向数据传输

时间:10-02 整理:3721RD 点击:
mbed上有不少关于ble的例子,用BLE搜索到的项目有43页,其中很多都是针对nRF51822的,可以直接拿来用。



那我们就先选用那个simplechat好了,看说明应该是配合某个app来实现双向数据传输的,BLE的显示终端是串口,而手机的显示终端就是某个app。



不过这个app上的uart和LinkNode的定义是不一样的,因此我们需要来做一下改造。在OOP下,这个也很容易,只要把main里面的//Serial pc(USBTX, USBRX);改为Serial pc(P0_23,P0_25);就可以了。初始打印串口上有些问题,主要体现在计数值的输出上,会出现乱码,其实主要是在调用串口的putc方法的问题,本来应该显示对应数值的ascii码,结果实际将byte值直接输出了。



所以只要将putc直接用printf的%d代替就可以了,修改前代码

  1. pc.printf("Length: ");
  2. pc.putc(bytesRead);
  3. pc.printf("\r\n");

复制代码


修改后代码

  1. pc.printf("Length: %d\r\n",bytesRead);

复制代码


这样就可以完美实现LinkNode和手机通过BLE的双向数据传输了。没有安装例子上说的app,直接用了一个通用的调试工具,lightblue。具体效果看视频。需要注意的是,LinkNode串口收到数据后,会把\r\n都算成字符数目,所以看到的是6,而实际可见字符只有4个。
flash地址:
另外有一个隐藏的问题,就是长UUID和短UUID的问题,前面用长uuid有问题,

  1. static const uint8_t uart_tx_uuid[] = {0x71, 0x3D, 0, 3, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E};

复制代码

换了短的UUID就行。

  1. #define BLE_UUID_TX_CHARACTERISTIC 0x0002

复制代码

但是这个问题没法复现,对应一个char的问题,研究一下另开贴讨论

汇总帖在此:

【linknode评测】—— by johnrey
http://bbs.eeworld.com.cn/forum. ... &fromuid=536508

感谢分享,辛苦,官方APP这个里面有http://bbs.eeworld.com.cn/thread-488640-1-1.html,可以下载下来试试

哈哈,论C程序猿向Cpp程序猿转型的路上

这个这个,关于\r\n这事,真的是正常的,只是一般情况下,到底算1个字符还是两个字符我就忘了。

\r=0x0D, \n= 0x0A,就是两个字符

C++用来嵌入式编程的,应该只用到其很小一部分内容吧。而且我也只是外围看看,转型还真没那么容易。

C++和C的争论一直都挺多的。
昨晚我也看了一下。
然而我一直觉得这种争论没啥意义,关键是试试。
毕竟C++我接触过,确实有很多很有意思的特性,比起C真的简化了很多东西。

只不过C++太复杂,所以很多人很抵触,比如linus

而我的想法和大多数搞嵌入式但愿意用C++的人一样,就是,只使用其中最实用的部分。
至于具体的开销,空间和时间,我觉得不能单纯从某个语法点去比较,而是从 完成某个比较单一的功能(是功能,不是语法)。
比如说,C++里的字符串string,比起C,不能单纯拿它和一个char数组相比,而要看 做同样的事情,比如字符串拼接啊搜索啊等等,整体开销作比较。
又比如 C++的 迭代器 itera,它基本上已经就是一个链表了,这种情况下也不能简单拿它和一个数组相比,而要和一个链表比。
在这种对比下才能更公正的判断 两者的开销差异,毕竟,单片机属于资源紧缺型应用。

至于时间,我也觉得是,没有单个io翻转的时间对比,或者查对最终生成的汇编代码体积,我觉得都是空想不足以作为判断。

事实上,有几个针对embeded优化的c++库,比如iar里就有一个。
这些都是可以做的。

我以前限于不想花时间去多学一门语言一直没用,现在觉得可以玩玩。

对了,兄弟,你是不是做智能可穿戴的呀,lightblue你也挺熟悉的样子

254x学了点皮毛,还没做到产品,只是随便玩玩。话说我的2451 sensortag还是参加eeworld的活动得的,就是没做出来

254x我真的决定放弃了,无奈现在是我维护的一个平台。
一半以上的工作都在这里
ram flash又小,连个OTA都不支持。
简直差评。
还有之前那伙人干的好事,带串口时还不能用蓝牙,还特么搞到bootloader和 application分开,搞到我都不能debug,直接回到51时代。
眼泪都已经掉了几大马桶

维护别人的代码真是一件痛苦又伤神的事,写的烂的代码,不改呢看着吐血,改改吐更多血。

哈哈,手头乱七八糟的事情忙完了,现在我决定来玩玩 LINK NODE的最后一波了,就是在mbed下开发蓝牙相关的固件程序。

话说这么多玩LINK NODE的人里,最喜欢你小子了,赶脚你是最会利用mbed现成资源的,所以每次我都直接步你后尘,省了不少事

那啥哥们,我试了一下你玩的这个例程,啥都没改,就改了个串口,发现问题:
1.俺的小米4C用 nrf UART 一连上就断,一连上就断;
2.回到公司我用lightblue试了一下,可以连不会断,可以监听,但是我发啥,串口收到的都是00 00 00.....
恩恩,没错,就是这样子。不过还是很震惊,以前在mdk下搞这个,又是单独烧协议栈,又是bootloader乱七八糟的,这里一下搞定有木有

我真的只改了串口和那个串口打印的代码。至于UUID,最开始用长的,搜索不到设备。然后改短的行了,再后来改回到长的也可以了。测试app,现在除了bluelight,还有bletester。后者偶尔会监听不到,但是可以用字符模式显示,这点比bluelight好

查了一下,步某人后尘最开始是褒义的,表示说话人自谦,于是欣然接受

。。。。。。。。不用这样,我只是随便一说。这

可能就是UUID的问题吧

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top