蓝牙串口助手 源码可以接收源码输出吗

上一篇博客讲了下蓝牙4.0在android中的应用,这里讲讲普通蓝牙之间如何操作。
我记得在大二的时候还做了个比较烂的游戏,当时喜欢打dota就做了个蓝牙之间对战坦克的游戏,可以去看看,确实挺烂,到现在我都没想明白两个设备之间如何保持数据实时同步的(蓝牙传输是有延迟的),我去下载了其他的蓝牙对战的游戏,别人做的很好。所以就更加郁闷了。(希望大神不吝赐教 )
相对蓝牙4.0,我觉得这个普通蓝牙应该要容易许多,因为没有什么协议的,就只用两个socket中交换数据就行了。
二:源码解读
权限申明:
&uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/&
&uses-permission android:name="android.permission.BLUETOOTH"/&
在对蓝牙进行操作之前都需要获取BluetoothAdapter
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
当然如果获取不到,那么就不跟你玩了。直接finish(),哼。
if (mBluetoothAdapter == null) {
获取到了,就在判断蓝牙是否开启。如果没有开启,就请求用户是否开启。
if (!mBluetoothAdapter.isEnabled()) {
Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
然后在onActivityResult()中获取用户的操作(开启还是不想开启蓝牙),当然如果不开启蓝牙,那自然也没什么后话,finish()吧。
if (resultCode == Activity.RESULT_OK) {
//开启了蓝牙
setupChat()
Toast.makeText(getActivity(), R.string.bt_not_enabled_leaving,Toast.LENGTH_SHORT).show()
getActivity().finish()
如果开启了蓝牙,后续就开始一些初始化工作。
这里初始化需要说点东西:
因为蓝牙需要两台设备其中一台做为服务端(server)另一台做为客户端(client),我们比如两台设备分别时A 和 B ,A如果主动去连接B ,那么A就时客户端,B自然就是服务端。可是在连接前都不知道自己该扮演什么角色。所以这个时候双方都需要开启线程进行监听。
if (mSecureAcceptThread == null) {
mSecureAcceptThread = new AcceptThread(true);
mSecureAcceptThread.start();
if (mInsecureAcceptThread == null) {
mInsecureAcceptThread = new AcceptThread(false);
mInsecureAcceptThread.start();
这里的线程是个阻塞线程()。当客户端的socket()主动连接的时候就会返回一个连接好的socket。
socket = mmServerSocket.accept();
但是上面为什么同时开启了两个AcceptThread线程呢?
仔细一看:
if (secure) {
tmp = mAdapter.listenUsingRfcommWithServiceRecord(NAME_SECURE,MY_UUID_SECURE);
tmp = mAdapter.listenUsingInsecureRfcommWithServiceRecord(NAME_INSECURE, MY_UUID_INSECURE);
好像一个叫安全,一个叫不安全。进去一看,其实调用的同一个方法,只是传入的参数不同而已。
public BluetoothSocket createRfcommSocketToServiceRecord(UUID uuid) throws IOException {
if (isBluetoothEnabled() == false) {
throw new IOException();
return new BluetoothSocket(BluetoothSocket.TYPE_RFCOMM, -1, true, true, this, -1,
new ParcelUuid(uuid));
public BluetoothSocket createInsecureRfcommSocketToServiceRecord(UUID uuid) throws IOException {
if (isBluetoothEnabled() == false) {
throw new IOException();
return new BluetoothSocket(BluetoothSocket.TYPE_RFCOMM, -1, false, false, this, -1,
new ParcelUuid(uuid));
就是一个进行了加密验证,另一个没有进行加密验证。在使用上我没觉得有什么区别。
好了这些初始话工作做的差不多了。需要找个设备开始连接了。使用过蓝牙的都知道,已经连接过的设备不需要再重新搜索了。没有配对过的就需要重新搜索。
我们先说已经配对过的蓝牙。使用下列代码就可以获得已经配对过的蓝牙。
// Get a set of currently paired devices
Set&BluetoothDevice& pairedDevices = mBtAdapter.getBondedDevices()
//使用这个方式就可以遍历出来
for (BluetoothDevice device : pairedDevices) {
pairedDevicesArrayAdapter.add(device.getName() + "\n" + device.getAddress())
好了如果其中有你想连接的蓝牙,那么就可以连接了。(连接蓝牙部分)
if (secure) {
socket = device.createRfcommSocketToServiceRecord(MY_UUID_SECURE);
socket = device.createInsecureRfcommSocketToServiceRecord(MY_UUID_INSECURE);
使用上面的就可以进行连接了。客户端和服务端的uuid必须时一样的,因为服务端同时有两个阻塞线程在监听,所以使用其中任何一个去连接都没什么问题。
好了,现在来讲下查找设备。查找设备肯定时一方查找,一方被查找。
先让设备设置为可以被查找。其中的300就是设置可以被查找的时间。但是如果其中时间小于0,或者大于3600将自动设置为120秒
if (mBluetoothAdapter.getScanMode() !=
BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) {
Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE)
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300)
startActivity(discoverableIntent)
但是我在哪里去获得他找到的设备呢(自问自答好傻=_+),在广播里啊。这个代码应该比较清楚。需要注意的是注册和注销广播哦。
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (device.getBondState() != BluetoothDevice.BOND_BONDED) {
mNewDevicesArrayAdapter.add(device.getName() + "\n" + device.getAddress());
} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
if (mNewDevicesArrayAdapter.getCount() == 0) {
String noDevices = getResources().getText(R.string.none_found).toString();
mNewDevicesArrayAdapter.add(noDevices);
找到后就开始连接吧。连接方法同上(就是用device.create…..那里)。
蓝牙连接好了,那么就要开始传数据啦。有连个socket连接之后,传数据就比较容易了。创建输入,输出流。
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
使用输入流读取数据。
// Read from the InputStream
bytes = mmInStream.read(buffer);
使用输出流写数据就ok了。
mmOutStream.write(buffer);
加个好友共同学习(不是公众号):
因为小弟水平有限,如果有写的有问题,希望指出。(欢迎留言)
本文已收录于以下专栏:
相关文章推荐
Android 普通蓝牙学习虽然做开发有一段时间了,但是有关蓝牙方面一直接触的不多,正好目前有一个关于蓝牙开发的需求,虽然是用到的BLE和普通蓝牙有些区别,但是既然学习了就顺便把普通蓝牙也学习一下,也...
在上节中我们仔细分析了蓝牙文件传输过程中涉及到的UI界面,最终定格在蓝牙设备扫描的界面,我们只要选择自己想要传输的蓝牙设备就可以进行蓝牙文件的传输了。那就是这样一个简单的设备选择的点击会引发哪些连锁的...
StateMachine有自己单独的工作线程,protected StateMachine(String name) {
mSmThread = new HandlerThread(name)...
因为原先刚开始看蓝牙时比较匆忙,而且整个流程都不太懂,感觉遗漏了好多东西,打算从头分析,分析跟蓝牙相关的所有问题,所以如果对蓝牙有任何问题的,可以留言,一起探讨。
1,BluetoothService...
本文将重点描述Android蓝牙GATT连接的大致流程,不会过多地纠缠代码细节,只为了从架构上梳理清楚,为接下来深入研究底层机制奠定一个宏观认识。
首先建立GATT连接前,我们通常要扫描蓝牙设备...
上一篇说了下A2DP的一些基本操作,这篇分析下系统应用、系统源码是如何操作A2DP的。尤其是其连接过程,基于Android4.3源码。Andorid手机一般都是做为A2DP Audio Source端...
蓝牙文件的传输是蓝牙中的一个很重要的应用,本文就来分析一下这个流程中涉及的一些UI操作。
1、  蓝牙图标的出现
我们在发送文件的时候第一步就是点击分享按钮后跳出一个如图1所示的对话框。这里就可以选择...
最近一段时间在公司项目开发中,遇到了使用蓝牙进行数据传输,但是还必须要求其中的一个搭载android系统的蓝牙设备默认接受所有来进行蓝牙连接的设备。我们知道在如今的android系统中,使用蓝牙进行配...
在前面两篇文章中,晓东和大家一起分析了android是如何向蓝牙发送扫描命令的,这篇文章我们将继续来看,蓝牙在收到扫描命令之后是如何向android上层反馈搜索到的设备以及上层对这些搜索到的设备是如何...
如需转载请标明出处:http://blog.csdn.net/itas109
STC89C52单片机通过HC-06蓝牙模块与Android手机通信实例-
基于Android和蓝牙的单片机温度采集系统
他的最新文章
讲师:王哲涵
讲师:王渊命
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。一、android设备蓝牙通信介绍
两个蓝牙设备在建立通信连接之前需要先彼此感知到对方的存在,这一过程就是配对。使用android蓝牙api进行配对分为以下几步:
1、设备A与B均开始蓝牙模块;
2、设备A声明自己可以被发现,默认保持该状态为120秒,也可以自定义一个值;
3、设备B扫描周围是否有可被发现的蓝牙设备;
4、当搜索到设备A后,向设备A发起配对请求;
5、设备A响应设备B的配对请求,响应信息包含设备名,类,唯一的MAC地址。
通常设备在进行过一次配对以后,会记住配对信息,以备以后连接通信时使用。使用已知的远程设备的MAC地址,连接可以在任何时候初始化而不必先完成搜索(当然这是假设远程设备是在可连接的空间范围内)。配对意思是两个设备相互意识到对方的存在,共享一个用来鉴别身份的链路键(link-key),能够与对方建立一个加密的连接。
在配对成功以后,两个设备就可以通过已经获取的配对信息来建立连接,连接建立以后,两个设备就可以共享一个RFCOMM信道,相互传输数据。目前android蓝牙api要求设备在建立RFCOMM信道前必须配对(配对是在使用Bluetooth API初始化一个加密连接时自动完成的)。
如果要连接两个设备,其中一个必须充当服务器,通过持有一个打开的BluetoothServerSocket对象。服务器socket的作用是侦听进来的连接,如果一个连接被接受,提供一个连接好的BluetoothSocket对象。从BluetoothServerSocket获取到BluetoothSocket对象之后,BluetoothServerSocket就可以(也应该)丢弃了,除非你还要用它来接收更多的连接。另一设备为了实现与远程设备的连接,必须首先获得一个代表远程设备BluetoothDevice对象。然后使用BluetoothDevice对象来获取一个BluetoothSocket来实现来接。
如果已经连接了两个设备,他们都已经拥有各自的连接好的BluetoothSocket对象。那就是一个有趣的开始,因为你可以在设备间共享数据了。使用BluetoothSocket,传输任何数据通常来说都很容易了:
1.通过socket获取输入输出流来处理传输(分别使用getInputStream()和getOutputStream())。
2.用read(byte[])和write(byte[])来实现读写。
1.3以上两步的流程图
二、蓝牙通信传输文件的实现
要使用android提供的蓝牙api,至少需要获取以下2个权限:
BLUETOOTH:用来授权任何Bluetooth通信,如请求连接,接受连接,传输数据等。
BLUETOOTH_ADMIN:用来授权初始化设备搜索或操作Bluetooth设置。
注意:需要BLUETOOTH_ADMIN权限的场合,BLUETOOTH权限也是必需的。
要使用android提供的文件读写api,需要获取以下权限:
WRITE_EXTERNAL_STORAGE:读写设备外置存储(通常是sd卡)。
需要在manifest文件中声明上述权限,示例如下:
&manifest ... &
&uses-permission android:name=&android.permission.BLUETOOTH_ADMIN& /&
&&uses-permission android:name=&android.permission.BLUETOOTH& /&
&&uses-permission android:name=&android.permission.WRITE_EXTERNAL_STORAGE& /&
&/manifest&
2.2 关键代码
&private final Handler mHandler = new Handler() {
&&@Override
&&public void handleMessage(Message msg) {
&&&switch (msg.what) {
&&&case MESSAGE_STATE_CHANGE:
&&&&if (D)
&&&&&Log.i(TAG, &MESSAGE_STATE_CHANGE: & + msg.arg1);
&&&&switch (msg.arg1) {
&&&&caseFileTransferService.STATE_CONNECTED:
&&&&&mTitle.setText(R.string.title_connected_to);
&&&&&mTitle.append(mConnectedDeviceName);
&&&&caseFileTransferService.STATE_CONNECTING:
&&&&&mTitle.setText(R.string.title_connecting);
&&&&caseFileTransferService.STATE_LISTEN:
&&&&caseFileTransferService.STATE_NONE:
&&&&&mTitle.setText(R.string.title_not_connected);
&&&case MESSAGE_FILE_TRANSFER_BEGIN:
&&&&fileSize = msg.arg1;
&&&&sendBeginAt = (Long) msg.
&&&&mProgressDialog
&&&&&&.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
&&&&mProgressDialog.setMax(fileSize);
&&&&mProgressDialog.show();
&&&&sendTotalBytes = 0;
&&&case MESSAGE_FILE_TRANSFER_ING:
&&&&intsendBytes = msg.arg1;
&&&&sendTotalBytes += sendB
&&&&mProgressDialog.setProgress(sendTotalBytes);
&&&case MESSAGE_FILE_TRANSFER_END:
&&&&mProgressDialog.dismiss();
&&&&sendEndAt = (Long) msg.
&&&&long duration = sendEndAt - sendBeginAt;
&&&&Log.e(TAG, &=======& + duration);
&&&&longdataSize = fileSize / 1024;
&&&&float speed = ((float) fileSize / 1024)
&&&&&&/ ((float) duration / 1000);
&&&&Toast.makeText(
&&&&&&getApplicationContext(),
&&&&&&&(& + String.valueOf(dataSize) + &Kb/&
&&&&&&&&+ String.valueOf(duration / 1000) + &s):&
&&&&&&&&+ String.valueOf(speed) + &Kb/s&,
&&&&&&Toast.LENGTH_SHORT).show();
&&&case MESSAGE_FILE_PROFILE_SEND:
&&&&Toast.makeText(
&&&&&&getApplicationContext(),
&&&&&&&Send file & + selectFilePath + &\nto &
&&&&&&&&+ selectBluetoothDevice, Toast.LENGTH_SHORT)
&&&&&&.show();
&&&case MESSAGE_FILE_PROFILE_RECEIVED:
&&&&fileSize = msg.arg1;
&&&&fileName = (String) msg.
&&&&Toast.makeText(
&&&&&&getApplicationContext(),
&&&&&&&Receive file name:& + fileName
&&&&&&&&+ &\n&&&&&&& file size:& + fileSize,
&&&&&&Toast.LENGTH_SHORT).show();
&&&case MESSAGE_FILE_RECEIVE_ING:
&&&&receiveTotalBytes = msg.arg1;
&&&&if (receiveTotalBytes == 0) {
&&&&&mProgressDialog
&&&&&&&.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
&&&&&mProgressDialog.setMax(fileSize);
&&&&&mProgressDialog.show();
&&&&mProgressDialog.setProgress(receiveTotalBytes);
&&&&if (fileSize == receiveTotalBytes) {
&&&&&mProgressDialog.dismiss();
&&&&&FileTransferService.mReceiving =
&&&case MESSAGE_DEVICE_NAME:
&&&&// save the connected device's name
&&&&mConnectedDeviceName = msg.getData().getString(DEVICE_NAME);
&&&&Toast.makeText(getApplicationContext(),
&&&&&&&Connected to & + mConnectedDeviceName,
&&&&&&Toast.LENGTH_SHORT).show();
&&&case MESSAGE_TOAST:
&&&&Toast.makeText(getApplicationContext(),
&&&&&&msg.getData().getString(TOAST), Toast.LENGTH_SHORT)
&&&&&&.show();
本文已收录于以下专栏:
相关文章推荐
在前面android
-- 蓝牙 bluetooth (一) 入门文章结尾中提到了会按四个方面来写这系列的文章,前面已写了蓝牙打开和蓝牙搜索,这次一起来看下蓝牙文件分享的流程,也就是蓝牙应用opp...
蓝牙技术在智能硬件方面有很多用武之地,今天我就为大家分享一下蓝牙技术在Android系统下的使用方法技巧。蓝牙是一种短距离的无线通信技术标准,蓝牙协议分为4层,即核心协议层、电缆替代协议层、电话控制协...
随着可穿戴设备的流行,研究蓝牙是必不可少的一门技术了。
总结了下蓝牙开发使用的一些东西分享一下。
首先需要AndroidManifest.xml文件中添加操作蓝牙的权限。
允许程序连接到已配对...
4.2的蓝牙打开流程这一部分还是有些变化的,从界面上看蓝牙开关就是设置settings里那个switch开关,widget开关当然也可以,起点不同而已,后续的流程是一样的。先来看systemServe...
前段时间在 网上看了一些关于android蓝牙的文章,发现大部分是基于老版本(4.1以前含4.1)的源码,虽然无碍了解蓝牙的基本原理和工作流程,但对着4.2.2的代码看起来总是有些遗憾。所以针对4.2...
蓝牙文件的传输是蓝牙中的一个很重要的应用,本文就来分析一下这个流程中涉及的一些UI操作。
1、  蓝牙图标的出现
我们在发送文件的时候第一步就是点击分享按钮后跳出一个如图1所示的对话框。这里就可以选择...
他的最新文章
讲师:王哲涵
讲师:王渊命
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)8834人阅读
大话Arduino智能硬件(8)
第4节 蓝牙传输
智能硬件基本上都需要和手机相连,然后让手机控制这些硬件的工作。相连的方式不外乎以下三种,
数据线有线连接,通过一根数据线把智能硬件和手机连接起来。采用这种方式,需要一个特殊的带USB HOST功能的扩展板;
WIFI连接,智能硬件和手机都连接到同一个WIFI路由器上,让彼此通过WIFI网络传输数据。采用这种方式需要一个WIFI模块;
蓝牙连接,智能硬件和手机通过蓝牙相连。采用这种方式需要一个蓝牙模块。通常情况下智能硬件等待其他设备的介入,而手机端会主动寻找可以连接的蓝牙设备,主动发起连接请求;
Arduino可以通过以上三种方式的任何一种实现与手机的连接。这里我们将选择蓝牙连接。
选择使用蓝牙连接的主要原因是,Arduino蓝牙模块的价格相对便宜,实现的成本低,而且编程很简单。
4.1 通信接口
Arduino开发板会提供一个至多个用于通信用的串口接口。开发板与任何通信模块的数据交换都是通过这些串口来完成的。
UNO的串口硬件位置
USB接口和0、1引脚都是对应着串口-Serial
MEGA的串口硬件位置
MEGA有多个串口,
USB接口和0、1引脚对应着串口-Serial
18、19引脚对应着串口1-Serial1
16、17引脚对应着串口2-Serial2
14、15引脚对应着串口3-Serial3
每一个串口都由一个输入引脚(RX)和输出引脚(TX)组成。硬件接收和发送数据的功能,就是通过对应的引脚实现的。
4.1.1 引脚的连接
在外接的通信模块中,至少也要有4个引脚接入开发板:输出TX、输入RX、电源VC、接地GND。有的通信模块可能还有额外的引脚作为额外的控制通道,但以上4个引脚是一定会有的。
当开发板与外接通信模块进行连接的时候,要按照如下的方式进行,
开发板引脚
外接通信模块引脚
*注意开发板和外接通信模块相连的时候后,是TX连着RX,一个发送,另一个当然就是接收了;并且VC/GND不和TX/RX不能接反了,不然会烧毁蓝牙模块。
电源的两根线不能接到数据发送的两个的引脚上,否则会烧毁蓝牙模块
电源的两根线不能接到数据发送的两个的引脚上,否则会烧毁蓝牙模块
电源的两根线不能接到数据发送的两个的引脚上,否则会烧毁蓝牙模块
如此一来,开发板和外接的通信模块就可以通过串口来进行通信了。
在实际的操作当中,我们还是会使用到扩展板来进行引脚的连接。
4.1.2 数据的读写
在进行读写之前,要判断一下串口是否可用,
if(Serial.available())
当我们想在代码中使用这些串口读取数据的时候,可以,
读一个字节,
int data = Serial.read();
int data = Serial2.read();
读到数组缓冲区-buffer中,
int length = 128;
char * buffer = new char[length];
int nRead = Serial.readBytes(buffer, length)
int length = 128;
char * buffer = new char(length);
int nRead = Serial2.readBytes(buffer, length)
当我们想在代码中使用这些串口发送数据的时候,可以,
发送一个byte,
Serial.write('A');
Serial2.write('A');
发送一个缓冲区的内容,
uint8_t data[] = "hello arduino";
int len = sizeof(data);
int result = Serial.write(data, len);
uint8_t data[] = "hello arduino";
int len = sizeof(data);
int result = Serial2.write(data, len);
4.2 蓝牙模块
蓝牙模块与Arduino开发板之间就是通过串口进行数据传输的。
我们经常见到的蓝牙模块有HC-05 HC-06。HC-06拥有4个引脚,输出TX、输入RX、电源VC、接地GND。还有一种形式的蓝牙模块,它就远不止4个引脚了。
我们提供的蓝牙模块,就是功能最为简单的HC-06蓝牙模块,它只能够被动的接收其它蓝牙模块发起的连接请求,连接时的配对密码默认是1234。
4.2.1 蓝牙模块的硬件连接
这些蓝牙模块的连接非常简单。这里我们选择的器件有,
1个MEGA开发板;
1个HC蓝牙模块;
4根连接线;
根据之前串口连接的原则,我们将蓝牙模块与Arduino开发板用插线连接起来。我们选择将蓝牙模块的RX TX连接到MEGA开发板的0和1引脚--使用Serial这个串口。
或者使用扩展板来连接蓝牙模块,这里我们使用HC-06举例,将HC-06连接到MEGA扩展板的Serial接口上,
扩展板引脚
蓝牙模块引脚
0组V(电源VC)
0组G(接地GND)
当开发板通电(USB数据线连接上电脑)以后,蓝牙模块的指示灯就亮了。此时它就进入了工作状态:其他蓝牙设备就可以查找并连接这个外接的蓝牙模块了。
*注意:假如你使用的是UNO开发板,也可以按照上面的引脚进行连接,不过当D0 D1引脚被蓝牙设备占用的时候,是不能向UNO开发板部署代码的。因此每当你要部署代码的时候,需要将D0 D1引脚断开,部署完成后再重新连上。如果使用MEGA开发板,你就可以将蓝牙接到其它的串口上(MEGA有多个串口,而UNO只有一个),避免每次刷机都要重新连接硬件。所以我们建议你最好还是采用MEGA开发板。
4.2.2 蓝牙通信的实现
接下来,我们做个简单的程序:让蓝牙模块接受其他蓝牙设备发送过来的数据,每次收到该数据后,又把数据原封不动的回传给发送设备,
在setup()中,初始化好蓝牙设备的波特率,为9600,因为我们硬件连接的是Serial,所以就要初始化Serial。
void setup()
Serial.begin(9600);
在loop()中,不停的尝试读取串口(蓝牙设备)收到的消息,一旦收到,就通过串口(蓝牙设备)把收到的内容原封不动的发送出去,
void loop()
if (Serial.available())
int length = 128;
char * buffer = new char[length];
int nReadSize = Serial.readBytes(buffer, length);
if(nReadSize & 0)
Serial.write(buffer, nReadSize);
4.2.3 结果验证
最后我们需要一个蓝牙设备上的应用程序,来连接这个正在工作的蓝牙模块,并向它发送数据。该应用收到蓝牙模块回传的消息后,能够向开发者展现出来。
这里可以使用我们另一篇文档开发的AnddleChat来连接设备、发送数据、显示接收的内容。
下载该部分对应的,编译后获取可执行的程序;
也可以使用编译好的,直接安装测试。
安装完成后,启动应用,根据提示打开蓝牙功能,搜索要连接的Arduino蓝牙模块,选择连接。这里选择搜索到的HC-06设备,
在文字输入框输入内容,获取对方接收到后到回应,
可以看到,我们返回的数据分成了两条:1 。说明Arduino开发板在读取蓝牙串口的数据时,Serial.readBytes()并没有一次把所有数据读完,而是分两次接收到的。
int nReadSize = Serial.readBytes(buffer, length);
所以,假如Arduino开发板希望将对方发送来的数据接收完全之后,在整个发送回去,需要将每次读到的数据保存下来,直到没有新的数据接收,然后再统一一次性的全部发送返回。
至此,Arduino通过外接蓝牙模块接收和发送数据的功能就完整的实现了。
/*******************************************************************/
本系列课程使用到的Arduino开发板、扩展板以及其他相关的传感器,各位可以根据我们文章中介绍的硬件在选购。
您也可以在我们的网店中购买,这些相关硬件都由我们为您把关购买,为大家节省选择的精力与时间。同时也感谢大家对我们这些码农的支持。
最后再次感谢各位读者对安豆的支持,谢谢:)
/*******************************************************************/
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:592802次
积分:6995
积分:6995
排名:第3435名
原创:114篇
评论:179条
程序猿+工程狮,用理性的思维理解世界,用优雅的代码影响世界,用10的语言探索世界。我们是一群喜欢Coding十余年的工匠,也是一群潜心钻研十余载的码农。
欢迎加入我们的QQ群:
阅读我的最新系列文章:
无论物质还是精神,我们的杂货铺将给您提供各种学习上的便利。
文章:19篇
阅读:30049
文章:10篇
阅读:64370
文章:34篇
阅读:232867
文章:29篇
阅读:192290
把Arduino硬件组装成智能硬件,LED灯、智能风扇、遥控车、室内环境检测仪......这些好玩的高科技玩具正等着我们。
智能硬件非常有趣,遥控车、魔方机器人、无人飞行器十分有爱。可是只会软件开发的你对硬件一窍不通,怎么办?和我们一起学习Arduino智能硬件开发吧。Arduino-为程序猿设计的硬件。
做安卓应用开发太难?跟我做开发,手把手带你飞。边做边学,你不懂的、想问的,都能在实践的过程中找到答案。
手把手教你做安豆计算器(完整版)
通俗而系统的聊聊安卓应用开发的干货,重新认识那些你既熟悉又陌生的开发基础,它们的背后原来还有这样的故事。
安卓四大组件}

我要回帖

更多关于 蓝牙串口app 源码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信