Androidble4.0蓝牙开发兼容2.0蓝牙应用(针对arduino蓝牙控制小车开发应用HC-08,06蓝牙模块的连接)

1.嗯有段时间没更新博客啦,给广大CSDN友上点干活

2.android蓝牙即智能穿戴设备火起来之后蓝牙的普及也是有点猛,今天我们博客的主题就是围绕arduino开发蓝牙控制小车写的测试demo,连接的蓝牙模块是HC-08,06型号,所以出厂的硬件UUID是厂商提供的,增对该demo用的范围也是有限的,当前蓝牙的开发功能和库的使用基本都是一样的,不一样的只是硬件蓝牙模块的UUID,假如想做智能手环什么的换成手环的蓝牙UUID就可以用,嗯,就是这么简单

3.下面先上个gif图爽爽看看效果先,本人基本都是先看效果再决定是否下载该demo


由于我的网络不是很好用的远程投屏至电脑才录制的gif所以看起来搜索蓝牙有点卡,实际效果是不卡的,中间出现的警告框是楼主的手机后台内存只有600+M所以有一个实时监测手机内存的,防止内存不足demo崩了,嗯,个人感觉还是不错的

4.下面上主要代码截图:MainActivity

package com.example.androidbluetooch;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import com.baoyz.swipemenulistview.SwipeMenu;
import com.baoyz.swipemenulistview.SwipeMenuCreator;
import com.baoyz.swipemenulistview.SwipeMenuItem;
import com.baoyz.swipemenulistview.SwipeMenuListView;
import com.baoyz.swipemenulistview.SwipeMenuListView.OnMenuItemClickListener;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.Dialog;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothGattCharacteristic;
import android.bluetooth.BluetoothGattDescriptor;
import android.bluetooth.BluetoothGattService;
import android.bluetooth.BluetoothManager;
import android.bluetooth.BluetoothSocket;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.util.Log;
import android.util.TypedValue;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class MainActivity extends Activity implements OnClickListener, OnItemClickListener {

	protected static final String TAG = "MainActivity";
	// 扫描、断开、发送蓝牙button
	private Button btn_scan_device, btn_disconnect, btn_send;
	// 未配对蓝牙的listview
	private ListView lv_disconnect, listview_msgxianshi;
	// 已配对蓝牙的listview,自定义的listview带滑动删除
	private SwipeMenuListView lv_connect;
	// 输入数据的edittext
	private EditText ed_inout;

	private int REQUEST_ENABLE_BT = 1;
	private List<String> list = new ArrayList<String>();
	private ConnectThread mConnectThread;
	public ConnectedThread mConnectedThread;

	private Dialog progressDialog;
	private TextView msg;
	// 蓝牙适配器
	private BluetoothAdapter mBluetoothAdapter;
	// 已经配对的蓝牙ArrayList
	private ArrayList<BluetoothDevice> data_connect = new ArrayList<BluetoothDevice>();
	// 未配对的蓝牙ArrayList
	private ArrayList<BluetoothDevice> data_disconnect = new ArrayList<BluetoothDevice>();
	// 自定义的adapater,已经配对的蓝牙,未配对的蓝牙
	private LeDeviceListAdapter connectListAdapter, disconnectListAdapter;
	// HC-08蓝牙连接状态
	private boolean mConnected = false;
	// HC-06蓝牙连接状态
	private boolean mhc06Connected = false;
	// 连接成功的蓝牙名字
	private String connect_string;
	// 未配对的HC-06,08点击的标记位
	private int data_onitemclick, datahc06_onitemclick;
	// HC-06:判断是已经配对的蓝牙还是未配对的蓝牙,断开连接的视图更新
	private boolean disconnect_flag = false;
	// HC-08蓝牙地址
	private String mDeviceAddress;
	// 蓝牙设备
	private BluetoothDevice dataconnectBean;
	// 蓝牙service,负责后台的蓝牙服务
	private static BluetoothLeService mBluetoothLeService;
	// 蓝牙的连接状态
	private String status = "disconnected";
	// 蓝牙特征值
	private static BluetoothGattCharacteristic target_chara = null;
	private ArrayList<ArrayList<BluetoothGattCharacteristic>> mGattCharacteristics = new ArrayList<ArrayList<BluetoothGattCharacteristic>>();
	// 蓝牙4.0的UUID,其中0000ffe1-0000-1000-8000-00805f9b34fb是广州汇承信息科技有限公司08蓝牙模块的UUID
	public static String HEART_RATE_MEASUREMENT = "0000ffe1-0000-1000-8000-00805f9b34fb";
	// HC-06蓝牙UUID
	private static final String SPP_UUID = "00001101-0000-1000-8000-00805F9B34FB";
	private List<Integer> mBuffer = new ArrayList<Integer>();

	private List<ChatMsgEntity> mDataArrays = new ArrayList<ChatMsgEntity>();
	private ChatMsgViewAdapter mAdapter;
	private SelfDialog selfDialog;
	private Handler mhandler = new Handler();
	private Handler myHandler = new Handler() {
		// 2.重写消息处理函数
		public void handleMessage(Message msg) {
			switch (msg.what) {
			// 判断发送的消息
			case 1: {
				// 更新View
				if (mConnected == true) {
					String state = msg.getData().getString("connect_state");
					setTitle(connect_string + ":" + state);
				} else {
					String state = msg.getData().getString("connect_state");
					setTitle(state);
				}

				break;
			}
			case 2: {
				// 更新View
				if (mhc06Connected == true) {
					String state = msg.getData().getString("connect_state");
					setTitle(connect_string + ":" + state);

					data_connect.add(data_disconnect.get(datahc06_onitemclick));

					data_disconnect.remove(datahc06_onitemclick);
					disconnectListAdapter = new LeDeviceListAdapter(MainActivity.this, data_disconnect);
					// 为listview指定适配器
					lv_disconnect.setAdapter(disconnectListAdapter);
					disconnectListAdapter.notifyDataSetChanged();

					connectListAdapter = new LeDeviceListAdapter(MainActivity.this, data_connect);
					// 为listview指定适配器
					lv_connect.setAdapter(connectListAdapter);
					connectListAdapter.notifyDataSetChanged();
				} else {
					String state = msg.getData().getString("connect_state");
					setTitle(state);
				}

				break;
			}
			case 3: {
				// 更新View
				if (mhc06Connected == true) {
					String state = msg.getData().getString("connect_state");
					setTitle(connect_string + ":" + state);
				} else {
					String state = msg.getData().getString("connect_state");
					setTitle(state);
				}

				break;
			}
			case 4: {
				String state = msg.getData().getString("updata_msg");
				listview_msg_stringReceiver(new String(state));
				break;
			}
			}
			super.handleMessage(msg);
		}

	};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		btn_scan_device = (Button) findViewById(R.id.btn_scandevice);
		btn_disconnect = (Button) findViewById(R.id.btn_disconnectdevice);
		ed_inout = (EditText) findViewById(R.id.ed_inout);
		btn_send = (Button) findViewById(R.id.btn_send);
		lv_connect = (SwipeMenuListView) findViewById(R.id.lv_connect);
		lv_disconnect = (ListView) findViewById(R.id.lv_disconnect);
		listview_msgxianshi = (ListView) find
  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
A:要控制led灯,你可以将led灯连接arduino板上,并使用蓝牙模块hc-05来发送控制指令。以下是步骤: 1. 将蓝牙模块hc-05与arduino连接。将hc-05的VCC接到arduino的5V口,GND接到arduino的GND口,TXD接到arduino的RX口,RXD接到arduino的TX口。 2. 将led灯连接arduino的数字引脚上。例如,将led灯的正极连接arduino的D7引脚,负极连接arduino的GND口。 3. 安装蓝牙模块hc-05的串口库,可以在arduino官网或github上找到。将蓝牙模块hc-05与arduino连接后,打开Arduino IDE软件,选择Tools->Port,选择当前使用的串口,然后打开Serial Monitor。设置Baud Rate为9600。 4. 在arduino IDE中编写代码。以下是一个示例: #include <SoftwareSerial.h> SoftwareSerial bluetooth(2, 3); //接收/发送蓝牙数据 int led = 7; //连接到led的数字引脚 void setup(){ pinMode(led, OUTPUT); //设置led的引脚为输出模式 bluetooth.begin(9600); //初始化蓝牙串口 } void loop(){ if(bluetooth.available() >= 1){ //如果接收到来自蓝牙的数据 int value = bluetooth.read(); //读取数据 if(value == '1'){ //如果接收到字符1 digitalWrite(led, HIGH); //点亮led灯 } else if(value == '0'){ //如果接收到字符0 digitalWrite(led, LOW); //关闭led灯 } } } 5. 将代码上传到arduino板上。点击Arduino IDE的“上传”按钮。 现在你可以使用安装了蓝牙模块hc-05的手机或电脑的蓝牙连接arduino板,并发送字符1或0来控制led灯。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值