大連海洋大學信息工程學院 梅子帆 馬占軍
本文是以智能家居為出發點,旨在研究一款基于藍牙通信的可調節智能燈具,在滿足用戶照明需求的同時,采用Bluetooth SPP和HID協議,并且通過不同節點的相應配置,設置配置端、服務端和客戶端,開發相應的操作APP,實現手機等移動終端的遠程遙控,燈的亮度和顏色的調節和挑選,具有非常廣泛的前景和推廣價值。
隨著科技的進步和人們對智能生活的渴望,智能家居便在此種呼喚中應用而生,特別是對智能燈的設計研究,也進行的如火如荼,但是大多數智能燈具的設計重點在多數情況下側重于智能控制,對于綠色節能方面考慮較少,因此開發出一種節能減排,又可以智能化控制的燈具是當前市場號召所需。
本設計是手機等移動終端為出發點,設計一款APP,實現對臺燈的智能控制。在要實現對燈的控制時,秩序打開APP,與此同時打開藍牙,實現與燈的配對連接,而后通過進行操作手機APP的相關功能設計,將指令傳輸給單片機,單片機在通過接受到的指令對做出相應的動作,從而實現對等的遠程遙控。
本設計主要包含四部分硬件:CC2541藍牙模塊,STC89C52RC單片機模塊,LED智能驅動照明模塊和電源管理模塊??傮w框圖如圖1所示。

圖1 系統硬件結構圖
Android端
MainAty:
獲取藍牙適配器,藍牙適配器通過搜索獲取適配藍牙信息
private BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
如果手機沒打開藍牙,則界面跳轉至打開藍牙界面。
@Override
protected void onStart() {
super.onStart();
if (mBluetoothAdapter != null && !mBluetoothAdapter.isEnabled()) {
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivity(intent);
}
在藍牙匹配階段,一般是藍牙獲取適配前期曾匹配過得藍牙設備。
if (devices != null && devices.size() > 0) {
data.clear();
for (BluetoothDevice device : devices) {
HashMap
map.put(“lv_left_icon”, R.drawable.lv_left_icon);
map.put(“lv_address”, device.getAddress());
map.put(“lv_right_icon”, R.drawable.lv_right_white);
data.add(map);
}
} else {
HashMap
map.put(“lv_left_icon”, R.drawable.lv_left_icon);
map.put(“lv_address”, “沒有已經匹配的設備”);
map.put(“lv_right_icon”, R.drawable.lv_right_white);
data.add(map);
mTextView.append(“沒有已經匹配的設備” + “ ”);
}
simpleAdapter.notifyDataSetChanged();
連接指定的藍牙:通過調用BluetoothTool連接藍牙,我們傳入了設備的地址"(String) data.get(0).get(“lv_address”)"以及連接類型BluetoothTool.ServiceOrClient.CLIENT。
builder.setPositiveButton(“連接”, new DialogInterface.OnClick-Listener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
mBluetoothTool = new BluetoothTool((String) data.get(0).get(“lv_address”),
BluetoothTool.ServiceOrClient.CLIENT);
mBluetoothTool.SetOnIUpdateUI(new IUpdateUI() {
@Override
public void updateListViewDevices() {
for (int i = 0; i < data.size(); i++) {
if (i == index) {
data.get(i).put(“lv_right_icon”, R.drawable.checked);
continue;
}
data.get(i).put(“lv_right_icon”, R.drawable.lv_right_white);
}
客戶端線程:
private class ClientThread extends Thread {
@Override
public void run() {
super.run();
try {
mClientSocket = mDevice.createRfcommSocketToServiceRecord(
UUID.fromString(“00001101-0000-1000-8000-00805F9B34FB”));
Message msg = Message.obtain(null, MSG_UPDATE_LOG);
msg.obj = “正在連接。。。”;
mHandler.sendMessage(msg);
mClientSocket.connect();
msg = Message.obtain(null, MSG_UPDATE_LOG);
msg.obj = “連接成功”;
mHandler.sendMessage(msg);
msg = Message.obtain(null, MSG_UPDATE_LISTVIEW);
mHandler.sendMessage(msg);
/** 接收數據*/
mReadThread = new ReadThread();
mReadThread.start();
} catch (IOException e) {
e.printStackTrace();
Message msg = Message.obtain(null, MSG_UPDATE_LOG);
msg.obj = “連接失敗”;
mHandler.sendMessage(msg);
可以看到線程一直在查看有沒有數據,如果有的話就接受,并根據接收到的數據進行相應的顯示。
(1)本設計能夠實現手機對LED燈的遠程控制,通過將燈置于藍牙接收范圍內,通過手機等移動設備對燈發出指令,調節燈亮度以及開關狀態。
(2)本設計能夠實現多種光色和光照強度的調節,用戶可以根據工作所需和自然光照情況。
(1)由于藍牙連接的距離限制,不能實現更遠距離的控制。
(2)本設計并沒有考慮LED燈啟動的問題。