android 蓝牙 发送字符串,Android向TLSR8266蓝牙mesh发送指令
硬件環(huán)境:Mac,ArduinoUNO板,JDY-10M模塊(核心為T(mén)LSR8266)*2。
軟件環(huán)境:arduino-1.8.12-macosx,AndroidStudio。
需求:將兩個(gè)TLSR8266組成藍(lán)牙m(xù)esh網(wǎng)絡(luò),通過(guò)安卓app向其發(fā)送指令,間接實(shí)現(xiàn)遠(yuǎn)程控制led燈的開(kāi)關(guān)。
TLSR8266初始化
根據(jù)商家提供的資料看,當(dāng)兩個(gè)模塊的NAME和NETID相同且MAC不同時(shí),它們就在同一個(gè)mesh網(wǎng)絡(luò)內(nèi)。所以先設(shè)置這3個(gè)參數(shù)。
首先根據(jù)JDY-10M的相關(guān)引腳和ArduinoUNO板連接,通過(guò)串口發(fā)送AT指令設(shè)置藍(lán)牙芯片。如下圖連接,圖示也是本例測(cè)試的連接方式,每個(gè)芯片控制一個(gè)led燈。
分別連接兩個(gè)芯片,使用ArduinoIDE的串口
1).發(fā)送“AT+NAMEmeshok”將兩個(gè)芯片的NAME 都 設(shè)置為“meshok”,
2).發(fā)送“AT+NETID202001170257”將兩個(gè)芯片的NETID 都 設(shè)置為“202001170257”,NETID長(zhǎng)度為12位,字母數(shù)字均可。
3).連接芯片1,發(fā)送“AT+MACAA”將其MAC地址的最后一字節(jié)設(shè)為“AA”,兩個(gè)芯片的其它字節(jié)如果不相同則可以忽略。
.連接芯片2,發(fā)送“AT+MACBB”將其MAC地址的最后一字節(jié)設(shè)為“BB”,
4).設(shè)置完三個(gè)參數(shù),須要發(fā)送“AT+REST”重啟芯片。
這一步操作可以參考 http://www.gaohaiyan.com/2525.html 。
安卓控制mesh
兩個(gè)模塊都通電,此時(shí)即在同一mesh網(wǎng)絡(luò)內(nèi)了。連接某個(gè)藍(lán)牙,既可以發(fā)送mesh指令。
注意本例,JDY-10M模塊的6個(gè)針腳不足以能驗(yàn)證mesh功能。須要手動(dòng)將核心板的OUT口引出接一個(gè)LED。參考前面2張圖片。通過(guò)其它口測(cè)試也是可以的,具體可以參考相關(guān)文檔,TLSR8266文檔對(duì)專(zhuān)業(yè)人士來(lái)講很容易閱讀,但新手可能就需要此文這種范例做個(gè)引導(dǎo)。文檔在文末提供下載鏈接,也可以到某寶搜關(guān)鍵字查看商品詳情頁(yè),很多商家都提供網(wǎng)盤(pán)下載。
安卓上藍(lán)牙的操作參考 http://www.gaohaiyan.com/2554.html 。這里只貼出部分不同的代碼。
首先,指令為字符串,格式為16進(jìn)制表示的,須要轉(zhuǎn)為字節(jié)數(shù)組發(fā)送:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* tlsr8266接收16進(jìn)制的字符串指令
* args cmd 16進(jìn)制的字符串指令,如FBFFE7F000
*/
publicstaticbyte[]hexStringToByteArray(Stringcmd){
if(cmd==null||cmd.equals("")){
returnnull;
}
cmd=cmd.toUpperCase();
intlen=cmd.length();
byte[]bytes=newbyte[len/2];
for(inti=0;i
bytes[i/2]=(byte)((Character.digit(cmd.charAt(i),16)<<4)+Character.digit(cmd.charAt(i+1),16));
}
returnbytes;
}
然后,就是各種指令:
Java
1
2
3
4
5
6
7
8
9
10
11
/**
* 向藍(lán)牙模塊發(fā)消息
*
* @param listener
* @param msg
*/
publicvoidsendMsgToBlueTooth(OnCharacteristicWritedListenerlistener,Stringmsg){
onCharacteristicWritedListener=listener;
bluetoothHandlerCharacteristic.setValue(hexStringToByteArray(msg));
currentBluetoothGatt.writeCharacteristic(bluetoothHandlerCharacteristic);// 回調(diào)BluetoothGattCallback的onCharacteristicWrite方法
}
幾個(gè)簡(jiǎn)單指令說(shuō)明:
“FBFFE7F000”表示操作mesh中全部的芯片,關(guān)閉全部的IO口,此時(shí)全部的led燈關(guān)閉;
“FBFFE7FFFF”表示操作mesh中全部的芯片,打開(kāi)全部的IO口,此時(shí)全部的led燈點(diǎn)亮。
“FBAAE7F000”表示操作mesh中,MAC最后一字節(jié)為AA的芯片,關(guān)閉其全部的IO口;
“FBAAE7FFFF”表示操作mesh中,MAC最后一字節(jié)為AA的芯片,打開(kāi)其全部的IO口。
“FBAAE7F101”表示操作mesh中,MAC最后一字節(jié)為AA的芯片,打開(kāi)其OUT1口,這樣操作只有OUT1到OUT4,具體看文檔。
“FBAAE7F100”表示操作mesh中,MAC最后一字節(jié)為AA的芯片,關(guān)閉其OUT1口,這樣操作只有OUT1到OUT4,具體看文檔。
無(wú)論app藍(lán)牙連接是芯片1(AA)還是芯片2(BB),已連接芯片會(huì)將指令無(wú)差別廣播到mesh網(wǎng)絡(luò),每個(gè)芯片收到后根據(jù)自身屬性匹配;FBFFE7F000和FBFFE7FFFF指令則都響應(yīng)。
芯片文檔:https://download.csdn.net/download/Vigiles/12332754
app代碼:https://gitee.com/vigiles/BluetoothMesh
Arduino端參考代碼
Arduino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include
// 10進(jìn)制數(shù)字轉(zhuǎn)16進(jìn)制表示的字符
StringtenToHex(intn){
if(n==0){
return"00";//n為0
}
Stringresult="";
char_16[]={
'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
};
constintradix=16;
while(n){
inti=n%radix;// 余數(shù)
result=_16[i]+result;// 將余數(shù)對(duì)應(yīng)的十六進(jìn)制數(shù)字加入結(jié)果
n/=radix;// 除以16獲得商,最為下一輪的被除數(shù)
}
if(result.length()<2){
result='0'+result;//不足兩位補(bǔ)零
}
returnresult;
}
// (參數(shù)pin1-Arduino的RXD,參數(shù)pin2-Arduino的TXD)
SoftwareSerialBT(7,6);// 創(chuàng)建藍(lán)牙模塊控制對(duì)象。第一個(gè)pin接模塊的TX腳,第二個(gè)接藍(lán)牙的RX腳
Stringstring="";
voidsetup(){
Serial.begin(115200);
Serial.println("Arduino好了");
BT.begin(115200);
Serial.println("Bluetooth好了");
}
voidloop(){
string="";
if(Serial.available()){
while(Serial.available()){
chardata=Serial.read();
delay(5);
//BT.write(data); // 如果向esr8266寫(xiě)AT無(wú)反應(yīng),注釋此行
string+=data;
}
BT.println(string);// 如果向esr8266寫(xiě)AT無(wú)反應(yīng),打開(kāi)此行
Serial.println("Arduino:"+string);
}
string="";
if(BT.available()){
while(BT.available()){
chardata=BT.read();// 查看Android發(fā)來(lái)的指令信息,數(shù)據(jù)類(lèi)型使用int
delay(5);
//string += tenToHex(data);??// 查看Android發(fā)來(lái)的指令信息打開(kāi)此行
string+=data;// 查看Android發(fā)來(lái)的指令信息注釋此行
}
Serial.println("Bluetooth:"+string);
}
}
-end
承接App定制、企業(yè)web站點(diǎn)、辦公系統(tǒng)軟件 設(shè)計(jì)開(kāi)發(fā),外包項(xiàng)目,畢設(shè)
總結(jié)
以上是生活随笔為你收集整理的android 蓝牙 发送字符串,Android向TLSR8266蓝牙mesh发送指令的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 给cad文件加密的软件,CAD文件加密软
- 下一篇: Android 电量优化