藍牙組網

隨着物聯網的普及,智能家居的大衆化,嵌入式設備之間的通訊是不可避免的話題。數組

低功耗,微體積,穩定性是通訊設備的基本要求。同窗推薦的JDY-10M BLE 組網藍牙模塊是很好的選擇,就是下面這個東東。函數

最大組網數255個,最低功耗低達5ua,最遠可達50m(這個我沒試過)spa

總而言之,這個東西很牛B就是了。.net

官方給出的使用手冊已經清楚的不能再清楚了,下面分享一下我在使用這個模塊的時候遇到一些關鍵性的問題。code

 

設備:STM32C8T6 + JDY_BLE blog

功能說明:經過JDY BLE實現主從藍牙之間的控制。字符串

 

一、發送數據的問題

官方說明手冊上說的很明白,數據要以16位形式發送。io

可是與從機通訊時須要發送以下格式的數據:AAFB0003112233table

(1)字符串方式發送

在串口的printf打印和USART_SendData(USART1,Data); 方式發送都是字符串方式發送。ast

他在發送的時候先把數據轉換成對應的ASCII碼,而後在按照二進制的方式一位一位的發送出去。

例如發送字符串:ABCD

首先將字符串轉化爲二進制數據

0000 1010 (A)  、0000 1011  (B)  、0000 1100  (C)  、0000 1101 (D)

而後按照串口設置的8位發送出去,串口接收到的數據以下

 

編號 數據
0 A
1 B
2 C
3 D

(2)16進制發送

16進制發送的時候,一般先把兩個8位的數據合成一個16位的數據,而後再發送

一樣發送上面的ABCD字符串,須要先將數據轉化爲:

1010 1011 (AB)   1100 1101  (CD)    成兩個16位的數據:0XAB  0XCD

而後在經過串口發送,串口接收到的數據格式以下:

編號 數據
0 AB
1 CD

因此,在使用JDY BLE模塊的時候,數據發送要以16進制發送,須要先將數據轉換爲16位的,而後在發送。

可是我須要發送的數據比較固定,我就直接寫了:

const char master_to_bluetooth3[7] = {0XAA,0XFB,0X00,0X03,0XEE};

而後調用發送函數:Send_Bluetooth(master_to_bluetooth1);

//主機藍牙發送信息給從機藍牙,16進制發送
void Send_Bluetooth(const char send[])
{
    unsigned char i = 0;
    
    //計算數組元素數,須要加上1,
    unsigned char n = sizeof((const char *)send)/sizeof(send[0]) + 1;

    for(i = 0; i<n; i++)
    {
        USART1_Put_Char(*(send + i));
    }     
}

這樣發送,接收端才能接收到數據,否則收不到數據。

 

二、組網問題

利用這個模塊組網其實很簡單,須要設置一樣的廣播名和組網ID號,而後不一樣的子模塊分別設置不一樣的地址編號。

在主機通訊的時候,直接在發送的數據裏面加上定向發送的模塊的地址,便可發送到指定的模塊上面。

const char master_to_bluetooth3[7] = {0XAA,0XFB,0X00,0X03,0XEE};
const char master_to_bluetooth1[7] = {0XAA,0XFB,0X00,0X01,0XEE};
const char master_to_bluetooth4[7] = {0XAA,0XFB,0X00,0X04,0XEE};

 

參考資料:https://blog.csdn.net/yibu_refresh/article/details/22695063

相關文章
相關標籤/搜索