04 BLE双向数据传输
那我们就先选用那个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代替就可以了,修改前代码
- pc.printf("Length: ");
- pc.putc(bytesRead);
- pc.printf("\r\n");
修改后代码
- pc.printf("Length: %d\r\n",bytesRead);
这样就可以完美实现LinkNode和手机通过BLE的双向数据传输了。没有安装例子上说的app,直接用了一个通用的调试工具,lightblue。具体效果看视频。需要注意的是,LinkNode串口收到数据后,会把\r\n都算成字符数目,所以看到的是6,而实际可见字符只有4个。
flash地址:
另外有一个隐藏的问题,就是长UUID和短UUID的问题,前面用长uuid有问题,
- static const uint8_t uart_tx_uuid[] = {0x71, 0x3D, 0, 3, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E};
- #define BLE_UUID_TX_CHARACTERISTIC 0x0002
汇总帖在此:
【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的问题吧