BLE(低功耗藍(lán)牙)技術(shù)是最近最熱門的詞匯之一,BLE可以讓電子設(shè)備很方便地和智能設(shè)備(手機(jī))互聯(lián)。為進(jìn)一步簡化低功耗藍(lán)牙(BLE)應(yīng)用技術(shù)在各個行業(yè)產(chǎn)品中的移植和使用,中國TI無線領(lǐng)域戰(zhàn)略合作伙伴信馳達(dá)科技特別推出了低功耗藍(lán)牙模塊,其中RF-BM-S01模塊通過了藍(lán)牙技術(shù)聯(lián)盟BQB認(rèn)證。特別地,在為蘋果智能設(shè)備開發(fā)外設(shè)時,可以繞過MFI認(rèn)證,就這個特點(diǎn)很值得看好此類模塊的應(yīng)用前景。對于安卓系統(tǒng)的智能設(shè)備,只要底層支持BLE,同樣可以使用模塊進(jìn)行設(shè)計你的個性化外設(shè)。而且BLE技術(shù)相對WIFI,Bluetooth 2.0等無線技術(shù),有著能耗低,連接迅速,通訊距離更遠(yuǎn)等優(yōu)勢。
RF-BM-S01藍(lán)牙模塊可以同時工作在橋接(透傳)模式和直驅(qū)兩種模式下。橋接模式下(串口),用戶的可以通過串口將自己的電子設(shè)備和智能設(shè)備(需支持藍(lán)牙4.0)之間建立雙向通訊。而直驅(qū)模式下,用戶可以直接使用模塊擴(kuò)展簡單外圍,就能快速設(shè)計出方案甚至產(chǎn)品,以最低成本最高效地推出特有的個性化移動設(shè)備新外設(shè)。借此模塊,甚至可以進(jìn)一步通過智能設(shè)備的上網(wǎng)功能,直接建立設(shè)備和服務(wù)器,云應(yīng)用等更高級的的通訊網(wǎng)絡(luò),對其設(shè)備實(shí)現(xiàn)智能化控制和管理。
從上圖可以看出,在橋接模式下(透傳模式),模塊通過串口和客戶的MCU相連,其中包括TX,RX,EN,BRTS,BCTS五條信號線,其中EN是總使能開關(guān),當(dāng)抬高后,模塊將會進(jìn)入徹底睡眠狀態(tài)(《0.4uA),當(dāng)EN置低后,模塊會進(jìn)入廣播態(tài),此時可以開啟APP對模塊進(jìn)行搜索和連接,連接成功之后,MCU和手機(jī)便可以進(jìn)行全雙工通訊。另外兩條BRTS和BCTS是用來喚醒對方的信號線,在要求低功耗的應(yīng)用中,雙方可以通過這兩根線來喚醒對方,開始接收數(shù)據(jù)。
在直驅(qū)模式下,用戶可以直接通過智能設(shè)備對模塊進(jìn)行指令控制。模塊提供了豐富的接口,包括藍(lán)牙廣播指示,連接指示,6路雙向可編程IO,四路可編程PWM,兩路14bit ADC采集接口,用戶可以通過服務(wù)中的通道對這些資源進(jìn)行編程控制,十分方便。只設(shè)計簡單的外圍擴(kuò)展電路,就能構(gòu)成最小BLE控制系統(tǒng),而直接省下MCU的成本開銷。
除此之外,用戶甚至可以同時使用兩種工作模式,當(dāng)用戶的MCU不夠強(qiáng)大時,可以通過模塊的外擴(kuò)接口來彌補(bǔ)MCU的不足,分擔(dān)部分驅(qū)動工作。
此模塊的強(qiáng)大不僅僅在于兩種模式的應(yīng)用,更是提供了諸多附加功能,其中包括豐富的AT指令,以及自定義或標(biāo)準(zhǔn)藍(lán)牙服務(wù),為應(yīng)用提供了更可靠,更先進(jìn)的智能控制。
如模塊的AT指令包括:
連接間隔調(diào)整
模塊重命名
波特率調(diào)整
獲取物理地址MAC 16
模塊復(fù)位
模塊的服務(wù)(部分自定義)包括:
藍(lán)牙數(shù)據(jù)通道【服務(wù)UUID:0xFFE5】
串口數(shù)據(jù)通道【服務(wù)UUID:0xFFE0】
PWM輸出(4路) 【服務(wù)UUID:0xFFB0】
ADC輸入(2路) 【服務(wù)UUID:0xFFD0】
可編程IO (8路) 【服務(wù)UUID:0xFFF0】
定時翻轉(zhuǎn)輸出 (2路) 【服務(wù)UUID:0xFFF0】
防劫持密鑰【服務(wù)UUID:0xFFC0】
電池電量報告【服務(wù)UUID:0x180F】
RSSI報告【服務(wù)UUID:0xFFA0】
模塊參數(shù)設(shè)置【服務(wù)UUID:0xFF90】
設(shè)備信息【服務(wù)UUID:0x180A】
此外,模塊還提供了快速測試模式,可以在無硬件連接的情況下,單獨(dú)測試藍(lán)牙以及串口通訊。
常見的藍(lán)牙4.0模塊
1、TI公司的cc2540/cc2640;
2、nordic的藍(lán)牙4.0(BLE)芯片nRF51822;
3、匯承公司的HC-05藍(lán)牙轉(zhuǎn)串口模塊:主芯片CSR BlueCore5 MM。
一般程序的編寫
可參考的例程如下:
建議學(xué)習(xí)例程步驟(純單片機(jī)控制):
1. IO控制學(xué)習(xí)-à2.系統(tǒng)時鐘-à3.按鍵中斷-à4.定時器-à5.串口-à6.ppi模塊-à7.iic(twi)
主要參考例程:(官方的)
blinky_example
ppi_example
timer_example
uart_example
twi_sw_master_example
temperature_example(以后看,關(guān)于溫度傳感器)
主要學(xué)習(xí)思路:
看例程
看芯片手冊(nRF51_Series_Reference_Manual_v2.1.pdf)兩個方面:方框圖(吐槽一句方框圖沒ti的好),寄存器說明
舉個栗子:
溫度傳感器temperature_example
首先可以打開例程和芯片手冊,可以看到有以下寄存器
在nrf51822體系里,寄存器分三種,tasks,events,registers。task是執(zhí)行任務(wù)的,events是報告各種狀態(tài),類似觸發(fā)中斷。
Temp寄存器是儲存收集到數(shù)值
nrf_temp_init();
while(1)
{
NRF_TEMP-》TASKS_START= 1;
while (NRF_TEMP-》EVENTS_DATARDY== 0) { }
NRF_TEMP-》EVENTS_DATARDY= 0;
temp =(nrf_temp_read()/4);
temp=temp*0.6904-0.74;
NRF_TEMP-》TASKS_STOP = 1; /** Stop the temperature measurement.
nrf_delay_ms(500);
}
}
}
temp=temp*0.6904-0.74;這個是由于按照官方的直接得到的誤差太大了,根據(jù)實(shí)際測得溫度值(萬用表)和temp = (nrf_temp_read()/4);直接得出的temp用 excel求趨勢線得出的。
下面簡單說下一些其他模塊的細(xì)節(jié):
1. Uart:nrf51822默認(rèn)配置的uart引腳是有四個,RXD;TXD;CTS;RTS.在simple_uart.c里提供調(diào)用方法。另外這些引腳都是可以自己設(shè)置的,有沒有類似FPGA,是不是很方便??!
2. GPIOTE:這個功能是通過IO的event來觸發(fā)tasks的。
Tasks有三種狀態(tài):set,clear,toggle。
Event也有三種Risingedge;Falling edge;Any change
主要寄存器有:tasks:OUT[0] ,OUT[1],OUT[2] ,OUT[3]
Event:IN[0],IN[1],IN[2],IN[3]
主要結(jié)合ppi功能
定時器:
主要寄存器
通過exanple: timer_example
里面需要注意的問題: 頻率 (rtc不同)
一般設(shè)置步驟:設(shè)置時鐘—》設(shè)置mode(timer還是counter)-》然后設(shè)置分頻—》設(shè)置bitmode(需要注意的是總共有三個定時器,timer0是32bit,timer1,2是16bit)—》清定時器。
當(dāng)設(shè)置的定時次數(shù)溢出了,將從溢出后重新開始計數(shù)。就比如例程中bit16位,最多定時2097,當(dāng)
#define TIMER_DELAY_MS3 (3000UL) /**《 Timer Delay in milli-second*/時只會定時903.
C#進(jìn)行藍(lán)牙編程
用源碼的形式給大家介紹如何用C#調(diào)用藍(lán)牙。下面的源碼是基于destop的C#調(diào)用藍(lán)牙的程序,也就是使用普通版本的.NET Framework來調(diào)用編程,一般是有藍(lán)牙的筆記本電腦,或者使用外接藍(lán)牙設(shè)備的電腦,如何使用外接藍(lán)牙設(shè)備,請參考代碼:
using System;
sing System.Collections.Generic;
sing System.Windows.Forms;
sing InTheHand.Net;
sing InTheHand.Net.Bluetooth;
sing InTheHand.Net.Sockets;
amespace BlueTooth
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
BluetoothClient Blueclient = new BluetoothClient();
Dictionary《string, BluetoothAddress》 deviceAddresses = new Dictionary《string, BluetoothAddress》();
private void btnFind_Click(object sender, EventArgs e)
{
this.lblMessage.Text = “”;
this.lblMessage.Visible = true;
BluetoothRadio BuleRadio = BluetoothRadio.PrimaryRadio;
BuleRadio.Mode = RadioMode.Connectable;
BluetoothDeviceInfo[] Devices = Blueclient.DiscoverDevices();
lsbDevices.Items.Clear();
deviceAddresses.Clear();
foreach (BluetoothDeviceInfo device in Devices)
{
lsbDevices.Items.Add(device.DeviceName);
deviceAddresses[device.DeviceName] = device.DeviceAddress;
}
this.lblMessage.Text = “搜索設(shè)備完成,搜索到” + lsbDevices.Items.Count + “個藍(lán)牙設(shè)備?!?
}
private void btnConnect_Click(object sender, EventArgs e)
{
try
{
BluetoothAddress DeviceAddress = deviceAddresses[lsbDevices.SelectedItem.ToString()];
Blueclient.SetPin(DeviceAddress, txtPwd.Text.Trim());
Blueclient.Connect(DeviceAddress, BluetoothService.Handsfree);
MessageBox.Show(“配對成功。”);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
上圖是點(diǎn)擊finddevices按鈕后的結(jié)果。我們選擇其中的一個設(shè)備,然后在Password的textbox中輸入配對密碼,點(diǎn)擊Connect,如果成功會彈出對話框提示“配對成功”,如果失敗會出現(xiàn)如下提示:
Note:你只要想在Visual Studio中建立一個winform的默認(rèn)程序,并把代碼復(fù)制過去,然后引用InTheHand.Net.Personal.dll你的程序就可以直接運(yùn)行了。不過我不建議你直接復(fù)制,最好是敲一邊代碼比較好。
上面的示例代碼中還需要特殊注意的就是下面這三個命名空間:
using InTheHand.Net;
using InTheHand.Net.Bluetooth;
using InTheHand.Net.Sockets;
他們是哪來的呢?在上面的程序中我引用了一個外部的DLL:InTheHand.Net.Personal.dll,上面那三個命名空間就是InTheHand.Net.Personal.dll中的。我使用的是桌面版的.NET Framework3.5,如果你想在移動設(shè)備,如手機(jī)或者手持機(jī)等移動設(shè)備而上使用,那么你只需要創(chuàng)建一個.NET Compact Framework 3.5的程序,把上面的源碼直接復(fù)制過去,并且引用InTheHand.Net.Personal.dll的移動版本就ok了。
評論