由于我的工作与网络分不开,我们单位的网络交换机有时候需要到现场去进行配置,带笔记本电脑加串口连接线太麻烦了,正好我手头上有台黑莓8900,全键盘的手机,蛮好用的。于是我想如何利用平时我用的黑莓8900来连接交换机进行配置。一开始,我设想的方法是利用黑莓的miniUSB接口与交换机进行连接,但看了看黑莓的SDK,里面并没有关于USB接口的相关操作API,不过蓝牙操作的API倒是有的。于是上淘宝看看,找到了COM转蓝牙的设备,可以与黑莓的蓝牙进行配对使用。
一、设备:
(1)黑莓8900一台
(2)BT5701型RS-232串口蓝牙适配器
BT5701插在RS-232串口上使用,因为从RS-232串口上取电不能满足蓝牙通讯的功率需求,所以必需使用额外供电。
BT5701提供内部锂电池和外部MiniUSB接口两种供电方式。
通过外部MiniUSB接口供电,可以采用随机配送的MiniUSB电缆,一端插入电脑的USB口,另一端插入BT5701的迷你USB接口。通过内置的410mA的锂电池供电,用户可通过MiniUSB接口和产品内部的充电电路为锂电池充电,充满电后,可维持近8小时的工作时间。
二、BT5701通讯方式
1、主机和从机成对使用:
主机和从机分别连接串口或UART,主机会记忆与它完成配对的从机蓝牙地址,主机上电后就会找它所记忆地址的从机,此时主机的蓝牙状态指示灯闪烁地较慢,大概每秒钟闪一次。(因为产品出厂前经过测试,所以用户拿到的主机均为记忆了某个从机地址的状态)
要让主机和新的从机配对,则按一下RESET复位按钮,复位后主机的蓝牙状态指示灯开始快速闪烁,主机放弃原来配对的从机地址,重新寻找新的从机。
从机上电之后,在完成配对之前,蓝牙状态指示灯会一直快速地闪烁。在主机找到新的从机并与之完成配对并成功连接后,主机和从机的蓝牙状态指示灯不再闪烁,变为常亮状态。
主机和从机连接,即使两者的波特率不同,也可以互传数据。主从成对使用无需设置,两个模块都上电后就可以进行串口通讯。
如果主机和从机距离太远导致连接中断,主机和从机的蓝牙状态指示灯会恢复到未连接之前的闪烁状态,当它们再次靠近后,会自动恢复到连接状态。
2、从机可与任何支持蓝牙SPP串口服务(Series Port Profile)的设备连接使用。如蓝牙笔记本电脑、蓝牙适配器、蓝牙手机、蓝牙PDA等等。从机只能等待蓝牙主设备来寻找,当主设备找到BT570从机后,从主设备发出配对请求,配对密码固定为"0000"或"1234"(2010年4月份以后出品的BT570产品,已经可以支持修改蓝牙配对密码)。
3、主机配合蓝牙设备使用,目前市面上常见的蓝牙设备的配对码是"0000",靠近在一起即可连接上。
三、黑莓8900上的蓝牙通讯程序开发
蓝牙API(net.rim.device.api.bluetooth)允许应用程序访问蓝牙序列端口配置(Profile)以及
允许启动一个服务器或者客户端蓝牙序列端口连接到一台计算机或其他蓝牙无线技术支持
的设备。
注:当你的应用程序首先访问蓝牙API 时,会检查NoClassDefFoundError。如果系统管理员使用应用程序管理限制访问序列端口和USB 接口,这个错误就会抛出。
打开一个蓝牙序列端口连接
为了打开一个蓝牙序列端口连接, 调用Connector.open(), 它提供由
BluetoothSerialPort.getSerialPortInfo()返回的序列端口信息作为参数。
由这个方法返回的连接字符串指定了作为协议的btspp:// 以及下面条目之一:
如果你正在打开一个连接作为客户端,由getSerialPortInfo().toString()返回的连接字符串包含了设备号(device ID)以及Server 设备正在监听的端口。
如果你正在打开一个连接作为服务器,由getSerialPortInfo().toString()返回的连接字符串包含了你的BlackBerry 设备正在监听的端口。
BluetoothSerialPortInfo[] info =
BluetoothSerialPort.getSerialPortInfo();
StreamConnection _conn =
(StreamConnection)Connector.open( info.toString(),
Connector.READ_WRITE );
在蓝牙序列端口连接上发送数据
调用openDataOutputStream()或openOutputStream()获得一个输出流。注:直到连接建立,这个调用会阻塞。
DataOutputStream _dout = _conn.openDataOutputStream();
在输出流上使用写方法来写数据
private String data = "This is a test";
_dout.writeChars(test);
在蓝牙序列端口连接上接收数据
调用openDataInputStream()或openInputStream()获得一个输入流。
DataInputStream _din = _conn.openInputStream();
在输入流上使用读方法来读数据
String contents = _din.readUTF();
关闭一个端口连接
if(_bluetoothConnection != null) {
try
{
_bluetoothConnection.close();
}
catch(IOException ioe)
{
}
}
if (_din != null) {
try
{
_din.close();
}
catch(IOException ioe) {
}
}
if(_dout != null) {
try
{
_dout.close();
}
catch(IOException ioe) {
}
}
_bluetoothConnection = null;
_din = null;
_dout = null;
版权说明:如非注明,本站文章均为 扬州驻场服务-网络设备调试-监控维修-南京泽同信息科技有限公司 原创,转载请注明出处和附带本文链接。
请在这里放置你的在线分享代码