ESP32 BLE藍牙 微信小程序通信發送大於20字符數據


由於微信小程序只支持BLE每次發送數據不大於20個字節,ESP32則有經典藍牙、低功耗藍牙兩種模式。

要解決發送數據大於20個字節的問題,最簡單實用的方式就是分包發送。如下圖所示:

 

1、什么起始字符和結束字符 

  起始字符用來通知接收端,當接收端接收到起始字符之后開始通過循環拼接字符,當接收端接收到結束字符之后得就能得到本次接收的所有字符。

2、如何選擇起始字符和結束字符

  參考ASCII碼選擇要發送的字符中沒有的字符。

2、為什么小於18字符

  由於每次最多發送20個字符,那么為了保證安全和效率不要打擦邊球,所有選擇每個包最多18個字符。

 

參考小程序代碼:

 //要發送的字符串(要在起始位置添加起始字符,結束位置添加結束字符)
    let order = that.stringToBytes(recs);
    let byteLen = order.byteLength;//長度
    let pos = 0;       //字符位置
    let tempBuffer;   //一次發送的數據
    var i = 0;          //計數

//為了安全每次發送18個字節 (每次最多20個)
//發送之前
    while (byteLen > 0) {
      i++;
      if (byteLen > 18) {
        tempBuffer = order.slice(pos, pos + 18);
        pos += 18;
        byteLen -= 18;
        console.log("第", i, "次發送:", tempBuffer);
        that.writeBLECharacteristicValue(tempBuffer);
      } else {
        tempBuffer = order.slice(pos, pos + byteLen);
        pos += byteLen;
        byteLen -= byteLen;
        console.log("第", i, "次發送:", tempBuffer);
        that.writeBLECharacteristicValue(tempBuffer);
      }
    }
    console.log("發送結束");

 

ESP32接收端參考代碼:

   void onWrite(BLECharacteristic *pCharacteristic) {
        std::string rxValue = pCharacteristic->getValue();

        if (rxValue.length() > 0) {
            
            for (int i = 0; i < rxValue.length(); i++){  
                
                //防止 意外字符串過長
                if(bleReslen>1024){
                   bleReslen=0; 

                }

                //開始標志
                if((int)rxValue[i]==ASCII_STR){//ASCII  起始符
                    bleReslen=0;       

                //結束標志
                }else if((int)rxValue[i]==ASCII_END){//ASCII  結束符
                    extractData();//提取數據結束  
                    bleReslen=0;

                }else{
                   //拼接字符串
                    encBefor[bleReslen]=(char)rxValue[i];//賦值
                    bleReslen++;

                }
                           
            }

        }
       
    }        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM