一、说明
《Arduino--Windows蓝牙通信(一)》实现了蓝牙模块数据透传,这一篇主要讲如何自己写代码实现Arduino--Windows数据透传,也就是通过串口通信实现蓝牙无线通信。
备选方案:
1、Python:
开发环境:Python 2.7+PyCharm+Windows
代码:
![1314054-a7f29c6f9f75f774.png](https://i-blog.csdnimg.cn/blog_migrate/f2dcf4ec3c10425cd81ca7446f05afb4.png)
短接TXD--RXD就可以验证Python数据通信
![1314054-3cec25174b88b32f.png](https://i-blog.csdnimg.cn/blog_migrate/282657ba3ec65d3f25868dd76e0a07c8.png)
更加详细Python串口通信可以参考:http://blog.csdn.net/yangbingzhou/article/details/40355183
2、C++
开发环境:VS2015
因为还有其他项目,必须使用C++处理主程序,所以要在C++中进行串口通信,当时的方案有两种:C++调用Python,在Python中调用串口;或者C++直接调用串口。发现C++调用Python确实不简单,就使用了C++直接调用串口。
二、C++串口通信
这里首先会进行C++串口通信的验证,之后再连接蓝牙,进行Arduino--Windows数据无线传输。
1、硬件连接
硬件:USB转TTL 2个
连接:将第一个USB-TTL 的TXD接第二个的RXD,之后RXD--TXD
2、方案
我在网上找的C++串口通信主要有三种:使用Windows API,createfile进行串口通信,C++都试用;使用comboCom,使用与C++ MFC程序;自己写一个Serial的文件,进行通信。由于自己水平渣,并且不使用MFC编程,所以选择了第一种方案。
关于createfile进行串口通信的基础知识可以参考:http://blog.csdn.net/u014729825/article/details/50354549
3、代码
![1314054-778a8215bf13a324.png](https://i-blog.csdnimg.cn/blog_migrate/643fc9926a5d6e0cbcd6f6d2e36bc9a8.png)
![1314054-520324f5d8c918e6.png](https://i-blog.csdnimg.cn/blog_migrate/08f5ee9a7fa87af217bb4e94f3b7511c.png)
![1314054-05dfda2b6fc0a825.png](https://i-blog.csdnimg.cn/blog_migrate/ddf988155bbd2f5534abde1caa203a04.png)
![1314054-be7daec1a37af7ac.png](https://i-blog.csdnimg.cn/blog_migrate/a7aa6616a2ed9068f63dccc49d1ce1f1.png)
源代码在末尾
4、验证代码运行成功
运行VS中的C++程序,同时在打开串口助手接收第二个USB--TTL的接收数据。
5、连接蓝牙进行通信
拔出第二个USB--TTL,第一个USB-TTL连接蓝牙,(不要连接EN端口,插入的时候也不用按黑色按钮),可以进行通信,可以使用Arduino自己的串口监视器或者串口助手查看Arduino接收数据。
![1314054-71ff78cfec5ca1c6.png](https://i-blog.csdnimg.cn/blog_migrate/b28dfc10c6549039a826e1f2cc7ee1f1.png)
![1314054-e161367ba29526eb.png](https://i-blog.csdnimg.cn/blog_migrate/07d96bcb253f6d4f44120c317b7a1bbb.png)
三、串口通信遇到的坑
1、createfile报错
![1314054-e4b53c9c1a34ca6b.png](https://i-blog.csdnimg.cn/blog_migrate/290b69a65798a001f2604f2bde730872.png)
2、com口打不开
首先确定是正确的端口,可以在设备管理器中查看或者在串口助手中查看;
其次,如果打不开串口,使用
![1314054-5e2b664e316eb941.png](https://i-blog.csdnimg.cn/blog_migrate/8aba190c2f7c60768bae96bae73dc827.png)
3、串口打开之后,但数据无法发送
首先要配置通信超时,可以按照上面的代码配置;
其次,要发送的数据使用memcpy,而不要直接复制
![1314054-bdf48f5ac10c8192.png](https://i-blog.csdnimg.cn/blog_migrate/7e703f01a745d3ae701886429bb8fd22.png)
四、C++源代码下载
源代码:链接:http://pan.baidu.com/s/1gf88LoR 密码:hu3b
end