步骤1:创建新的android项目
打开eclipse,打开file-》 new-》 android application project ,然后在“应用程序名称”编辑框中填写应用程序名称,例如bleexample或其他。最低必需的sdk选择api18:android 4.3,并且目标sdk也选择api18:android 4.3,因为buletooth 4.0必须具有android 4.3版本或更高版本。其他默认保持不变,请继续单击“下一步”按钮,直到出现“完成”按钮,然后单击“完成”按钮。
步骤2:添加权限和服务
在清单文件中添加以下代码:
步骤3:创建listview项目布局文件
旨在显示listview的每个内容,此处我们使用自定义(自己定义),以便每个listview可以显示更多内容,item_list.xml如下所示:
将bleexample/com.elecfreaks.ble的源代码复制到您的项目src目录中,然后在出现错误提示的情况下按shift + ctrl + o键打开文件。
步骤4:修改activity_main.xml,增加scanbutton和bledevicelistview
增加的内容如下所示:
android:id=“@+id/scanbutton”
android:layout_width=“fill_parent”
android:layout_height=“wrap_content”
android:onclick=“scanonclick”
android:text=“scan” /》
android:id=“@+id/bledevicelistview”
android:layout_width=“fill_parent”
android:layout_height=“wrap_content”
android:layout_alignleft=“@+id/scanbutton”
android:layout_below=“@+id/scanbutton”
android:layout_above=“@+id/sendbutton”
》
步骤5:在mainactivity.java中,添加响应事件的scanbutton方法
(onclick=“scanonclick”)
public void scanonclick(final view v){
}
步骤6:为mainactivity添加成员
private button scanbutton;
private listview bledevicelistview;
private bledevicelistadapter listviewadapter;
private bluetoothhandler bluetoothhandler;
private boolean isconnected;
步骤7:在mainactivity.oncreate中设置成员值
scanbutton = (button) findviewbyid(r.id.scanbutton);
bledevicelistview = (listview)
findviewbyid(r.id.bledevicelistview);
listviewadapter = new bledevicelistadapter(this);
bluetoothhandler = new bluetoothhandler(this);
bluetoothhandler.setonconnectedlistener(new
onconnectedlistener() {
@override
public void onconnected(boolean isconnected) {
// todo auto-generated method stub
setconnectstatus(isconnected);
}
});
bluetoothhandler.setonrecieveddatalistener(new onrecieveddatalistener() {
@override
public void onrecieveddata(byte[] bytes) {
// todo auto-generated method stub
system.out.printf(“rec:”);
for(byte b:bytes)
system.out.printf(“%02x ”, b);
system.out.printf(“ ”);
}
});
步骤8:添加setconnectstatus mothod
public void setconnectstatus(boolean isconnected){
this.isconnected = isconnected;
if(isconnected){
showmessage(“connection successful”);
scanbutton.settext(“break”);
}else{
bluetoothhandler.onpause();
bluetoothhandler.ondestroy();
scanbutton.settext(“scan”);
}
}
private void showmessage(string str){
toast.maketext(mainactivity.this, str,
toast.length_short).show();
}
步骤9:在scanonclick中添加内容
if(!isconnected){
bledevicelistview.setadapter(bluetoothhandler.getdevicelistadapter));
bledevicelistview.setonitemclicklistener(new onitemclicklistener()
{
@override
public void onitemclick(adapterview parent, view view,
int position, long id) {
string buttontext = (string) ((button)v).gettext();
if(buttontext.equals(“scanning”)){
showmessage(“scanning.。.”){
return ;
}
bluetoothdevice device = bluetoothhandler.getdevicelistadapter().getitem(position).device;
// connect
bluetoothhandler.connect(device.getaddress());
}
});
bluetoothhandler.setonscanlistener(new onscanlistener() {
@override
public void onscanfinished() {
// todo auto-generated method stub
((button)v).settext(“scan”);
((button)v).setenabled(true);
}
@override
public void onscan(bluetoothdevice device, int rssi, byte[] scanrecord) {}
});
((button)v).settext(“scanning”);
((button)v).setenabled(false);
bluetoothhandler.scanledevice(true);
}else{
setconnectstatus(false);
}
步骤10:发送数据
byte[] data = new byte[1];
data[0] = 0x02;
bluetoothhandler.senddata(data);
步骤11:接收数据
在接收到数据之后,
从bluetoothhandler.setonrecieveddatalistener()onrecieveddatalistener.onrecieveddata(byte [] bytes)设置的onrecieveddatalistener.onrecieveddata(byte [] bytes),字节表示接收到的数据
步骤12 :通过协议将数据发送到mcu。(在elecfreaks中使用bluno)
在src目录中,创建transmitter.java,ad用以下两个参数确定构造函数:
public transmitter(context context,
bluetoothhandler bluetoothhandler){
this.context = context;
this.mbluetoothhandler = bluetoothhandler;
}
如何添加senddata()?
private void senddata(byte[] bytes){
mbluetoothhandler.senddata(bytes);
}
步骤13:接收mcu协议数据
mcu数据接收和发送协议使用json数据包,格式为{“ t”:您的值,“ v”:您的值,…}。当然,您可以定义其他值。在src目录中创建myarray.java,以连接两个阵列。代码如下所示:
public class myarray {
static public byte[] arraycat(byte[] buf1,byte[] buf2){
byte[] bufret=null;
int len1 = 0;
int len2 = 0;
if(buf1 != null)
len1 = buf1.length;
if(buf2 != null)
len2 = buf2.length;
if(len1+len2 》 0)
bufret = new byte[len1+len2];
if(len1 》 0)
system.arraycopy(buf1, 0, bufret, 0, len1);
if(len2 》 0)
system.arraycopy(buf2, 0, bufret, len1, len2);
return bufret;
}
}
将示例代码中的protocol.java复制到src目录中,添加成员
private protocol protocol
从oncreate(),删除:
bluetoothhandler.setonrecieveddatalistener();
添加:
protocol = new protocol(this, new transmitter(this, bluetoothhandler));
protocol.setonreceiveddatalistener(reclistener);
在mainactivity中添加成员:
private static final boolean input = false;
private static final boolean output = true;
private static final boolean low = false;
private static final boolean high = true;
private boolean digitalval[];
private int analogval[];
在oncreate中初始化:
digitalval = new boolean[14];
analogval = new int[14];
private onreceivedrightdatalistener reclistener = new
onreceivedrightdatalistener() {
@override
public int onreceiveddata(string str) {
// todo auto-generated method stub
try {
jsonobject readjsonobject = new jsonobject(str);
int type = readjsonobject.getint(“t”);
int value = readjsonobject.getint(“v”);
switch(type){
case protocol.analog:{
int pin = readjsonobject.getint(“p”);
analogval[pin] = value;
}break;
case protocol.digital:{
int pin = readjsonobject.getint(“p”);
digitalval[pin] = (value》0)?high:low;
}break;
case protocol.temperature:{
float temperature = ((float)value)/100;
}break;
case protocol.humidity:{
float humidity = ((float)value)/100;
}break;
default:break;
}
} catch (jsonexception e) {
// todo auto-generated catch block
e.printstacktrace();
}
return 0;
}
};
步骤14:使用协议发送数据
protocol.writeanalogdata(9, 20);
protocol.writedigitaldata(3, 1);
步骤15:使用协议接收数据
protocol.readanalogdatacommand(9);
protocol.readdigitaldatacommand(3);
注意:返回的数据由reclistener接收
步骤16:mcu端口协议(arduino)
请参阅提供的androidiocontrol的示例代码。
在4–20mA电流环中如何使用高压、大电流驱动运算放大器
5G商用的主战场在哪里
恒流二极管与恒流三极管的原理及其应用
通过采用技术模块实现车载公共汽车综合装置系统的设计
本田CR-V插电混动版将与2021年初上市 油耗1.1L/100km
如何更效率的创建Android BLE应用程序
利用多功能 PXI I/O 套件,实现紧凑、灵活、自动化的测试系统
无线定位技术的实现及在CDMA系统中应用研究
AI加医疗的可能性到底有多大
“魅力电子展,辉煌八十届”大型图片展有奖征集启事
电动拖把好用吗?一键消灭地板上的细菌
上汽集团上个月销量同比下滑86.95%,产量同比下滑90.17%
李彦宏对话实录:百度的功与罪都归我(二)
比特币扩容满足了社区隔离验证和区块的各方利益
苹果能否借软件重回巅峰?苹果供应商在印度建厂欲抢印市场
环境空气自动监测设备有哪些用途
光伏组件逆变器将迎来混战,谁能成王败寇
电子 | 欧菲光事件的背后:暗流涌动的消费类电子市场
关于MATLAB 的自动驾驶之路分析和介绍
如何妙用AI 防范资安未知威胁变本加厉