日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android 蓝牙 发送字符串,Android向TLSR8266蓝牙mesh发送指令

發布時間:2023/12/9 Android 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 蓝牙 发送字符串,Android向TLSR8266蓝牙mesh发送指令 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

硬件環境:Mac,ArduinoUNO板,JDY-10M模塊(核心為TLSR8266)*2。

軟件環境:arduino-1.8.12-macosx,AndroidStudio。

需求:將兩個TLSR8266組成藍牙mesh網絡,通過安卓app向其發送指令,間接實現遠程控制led燈的開關。

TLSR8266初始化

根據商家提供的資料看,當兩個模塊的NAME和NETID相同且MAC不同時,它們就在同一個mesh網絡內。所以先設置這3個參數。

首先根據JDY-10M的相關引腳和ArduinoUNO板連接,通過串口發送AT指令設置藍牙芯片。如下圖連接,圖示也是本例測試的連接方式,每個芯片控制一個led燈。

分別連接兩個芯片,使用ArduinoIDE的串口

1).發送“AT+NAMEmeshok”將兩個芯片的NAME 都 設置為“meshok”,

2).發送“AT+NETID202001170257”將兩個芯片的NETID 都 設置為“202001170257”,NETID長度為12位,字母數字均可。

3).連接芯片1,發送“AT+MACAA”將其MAC地址的最后一字節設為“AA”,兩個芯片的其它字節如果不相同則可以忽略。

.連接芯片2,發送“AT+MACBB”將其MAC地址的最后一字節設為“BB”,

4).設置完三個參數,須要發送“AT+REST”重啟芯片。

這一步操作可以參考 http://www.gaohaiyan.com/2525.html 。

安卓控制mesh

兩個模塊都通電,此時即在同一mesh網絡內了。連接某個藍牙,既可以發送mesh指令。

注意本例,JDY-10M模塊的6個針腳不足以能驗證mesh功能。須要手動將核心板的OUT口引出接一個LED。參考前面2張圖片。通過其它口測試也是可以的,具體可以參考相關文檔,TLSR8266文檔對專業人士來講很容易閱讀,但新手可能就需要此文這種范例做個引導。文檔在文末提供下載鏈接,也可以到某寶搜關鍵字查看商品詳情頁,很多商家都提供網盤下載。

安卓上藍牙的操作參考 http://www.gaohaiyan.com/2554.html 。這里只貼出部分不同的代碼。

首先,指令為字符串,格式為16進制表示的,須要轉為字節數組發送:

Java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

/**

* tlsr8266接收16進制的字符串指令

* args cmd 16進制的字符串指令,如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

/**

* 向藍牙模塊發消息

*

* @param listener

* @param msg

*/

publicvoidsendMsgToBlueTooth(OnCharacteristicWritedListenerlistener,Stringmsg){

onCharacteristicWritedListener=listener;

bluetoothHandlerCharacteristic.setValue(hexStringToByteArray(msg));

currentBluetoothGatt.writeCharacteristic(bluetoothHandlerCharacteristic);// 回調BluetoothGattCallback的onCharacteristicWrite方法

}

幾個簡單指令說明:

“FBFFE7F000”表示操作mesh中全部的芯片,關閉全部的IO口,此時全部的led燈關閉;

“FBFFE7FFFF”表示操作mesh中全部的芯片,打開全部的IO口,此時全部的led燈點亮。

“FBAAE7F000”表示操作mesh中,MAC最后一字節為AA的芯片,關閉其全部的IO口;

“FBAAE7FFFF”表示操作mesh中,MAC最后一字節為AA的芯片,打開其全部的IO口。

“FBAAE7F101”表示操作mesh中,MAC最后一字節為AA的芯片,打開其OUT1口,這樣操作只有OUT1到OUT4,具體看文檔。

“FBAAE7F100”表示操作mesh中,MAC最后一字節為AA的芯片,關閉其OUT1口,這樣操作只有OUT1到OUT4,具體看文檔。

無論app藍牙連接是芯片1(AA)還是芯片2(BB),已連接芯片會將指令無差別廣播到mesh網絡,每個芯片收到后根據自身屬性匹配;FBFFE7F000和FBFFE7FFFF指令則都響應。

芯片文檔: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進制數字轉16進制表示的字符

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;// 余數

result=_16[i]+result;// 將余數對應的十六進制數字加入結果

n/=radix;// 除以16獲得商,最為下一輪的被除數

}

if(result.length()<2){

result='0'+result;//不足兩位補零

}

returnresult;

}

// (參數pin1-Arduino的RXD,參數pin2-Arduino的TXD)

SoftwareSerialBT(7,6);// 創建藍牙模塊控制對象。第一個pin接模塊的TX腳,第二個接藍牙的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寫AT無反應,注釋此行

string+=data;

}

BT.println(string);// 如果向esr8266寫AT無反應,打開此行

Serial.println("Arduino:"+string);

}

string="";

if(BT.available()){

while(BT.available()){

chardata=BT.read();// 查看Android發來的指令信息,數據類型使用int

delay(5);

//string += tenToHex(data);??// 查看Android發來的指令信息打開此行

string+=data;// 查看Android發來的指令信息注釋此行

}

Serial.println("Bluetooth:"+string);

}

}

-end

承接App定制、企業web站點、辦公系統軟件 設計開發,外包項目,畢設

總結

以上是生活随笔為你收集整理的android 蓝牙 发送字符串,Android向TLSR8266蓝牙mesh发送指令的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。