国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

006.合宙ESP32-C3+藍(lán)牙調(diào)試器通過BLE發(fā)送接收數(shù)據(jù)教程

這篇具有很好參考價(jià)值的文章主要介紹了006.合宙ESP32-C3+藍(lán)牙調(diào)試器通過BLE發(fā)送接收數(shù)據(jù)教程。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

合宙ESP32-C3+藍(lán)牙調(diào)試器通過BLE發(fā)送接收數(shù)據(jù)教程

一、問題提出

在平衡小車制作過程中,需要對(duì)KP/KD/KSP/KSI等PID系數(shù)進(jìn)行調(diào)試,而平衡小車無法通過USB等進(jìn)行有線調(diào)試,而ESP32-C3自帶藍(lán)牙+WIFI,使用WIFI比較吃算力,故選擇通過藍(lán)牙進(jìn)行調(diào)參,同時(shí)能夠?qū)ngle/Encoder/PWM等數(shù)據(jù)回傳至手機(jī)端進(jìn)行查看。
006.合宙ESP32-C3+藍(lán)牙調(diào)試器通過BLE發(fā)送接收數(shù)據(jù)教程

二、合宙ESP32-C3自帶藍(lán)牙分析

前期通過查找資料,發(fā)現(xiàn)合宙ESP32-C3自帶藍(lán)牙不是經(jīng)典藍(lán)牙,無法使用BluetoothSerial.h進(jìn)行編程,只能通過低功耗BLE使用藍(lán)牙。
下面為需要用到的庫,PIO環(huán)境自帶,無需下載。

#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>

具體原理,沒有理解明白,不在贅述。

三、藍(lán)牙調(diào)試器分析

藍(lán)牙調(diào)試器有3種模式,分別為對(duì)話模式、專業(yè)調(diào)試、按鈕控制
需要特別注意的是其通信設(shè)置,也就是通信協(xié)議。
006.合宙ESP32-C3+藍(lán)牙調(diào)試器通過BLE發(fā)送接收數(shù)據(jù)教程

006.合宙ESP32-C3+藍(lán)牙調(diào)試器通過BLE發(fā)送接收數(shù)據(jù)教程

數(shù)據(jù)包結(jié)構(gòu)為

包頭 數(shù)據(jù) 校驗(yàn)和 包尾
1字節(jié) bool為1字節(jié) 1字節(jié) 1字節(jié)
0xA5 0x5A

四、代碼框架

/*********************頭文件*********************/
#include <Arduino.h>
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>
/************************************************/

/********************基本設(shè)置********************/
/**/    hw_timer_t *timer=NULL;
/**/    void BClock_Init(int duty_ms);
/**/    static void IRAM_ATTR Timer0_CallBack(void);  //以上為定時(shí)器
/**/    void Short2Byte(short i,uint8_t *byte);
/**/    void Int2Byte(int i,uint8_t *byte);
/**/    void Float2Byte(float f,uint8_t *byte);       //以上為數(shù)據(jù)類型轉(zhuǎn)BYTE
/************************************************/

#define Step1_BlueTooth 1

/*********************藍(lán)牙BLE********************/    
/**/#if Step1_BlueTooth
/**/    BLEServer *pServer = NULL;
/**/    BLECharacteristic * pTxCharacteristic;
/**/    bool deviceConnected = false;
/**/    bool oldDeviceConnected = false;
/**/    uint8_t txValue = 0;
/**/    #define SERVICE_UUID           "6E400001-B5A3-F393-E0A9-E50E24DCCA9E" // UART service UUID
/**/    #define CHARACTERISTIC_UUID_RX "6E400002-B5A3-F393-E0A9-E50E24DCCA9E"
/**/    #define CHARACTERISTIC_UUID_TX "6E400003-B5A3-F393-E0A9-E50E24DCCA9E"
/**/    class MyServerCallbacks: public BLEServerCallbacks 
/**/    {
/**/        void onConnect(BLEServer* pServer) 
/**/        {
/**/            deviceConnected = true;
/**/        };
/**/    
/**/        void onDisconnect(BLEServer* pServer) 
/**/        {
/**/            deviceConnected = false;
/**/        }
/**/    };
/**/    void getBlueData(uint8_t *Value);
/**/    uint8_t modes[8];
/**/    class MyCallbacks: public BLECharacteristicCallbacks 
/**/    {
/**/        void onWrite(BLECharacteristic *pCharacteristic) 
/**/        {
/**/            std::string rxValue = pCharacteristic->getValue();
/**/            if (rxValue.length() > 0) 
/**/            {
/**/                for (int i = 0; i < rxValue.length(); i++)
/**/                {
/**/                    modes[i]=rxValue[i];
/**/                }
/**/                getBlueData(modes);
/**/            }
/**/        }
/**/    };
/**/    void BLEinit()
/**/    {
/**/        BLEDevice::init("BalanceCar");
/**/        pServer = BLEDevice::createServer();
/**/        pServer->setCallbacks(new MyServerCallbacks());
/**/        BLEService *pService = pServer->createService(SERVICE_UUID);
/**/        pTxCharacteristic = pService->createCharacteristic(CHARACTERISTIC_UUID_TX,BLECharacteristic::PROPERTY_NOTIFY);                      
/**/        pTxCharacteristic->addDescriptor(new BLE2902());
/**/        BLECharacteristic * pRxCharacteristic = pService->createCharacteristic(CHARACTERISTIC_UUID_RX,BLECharacteristic::PROPERTY_WRITE);
/**/        pRxCharacteristic->setCallbacks(new MyCallbacks());
/**/        pService->start();
/**/        pServer->getAdvertising()->start();
/**/        Serial.println("BLE is OK.");
/**/    }
/**/#endif 
/************************************************/

void setup() 
{
    Serial.begin(115200);
    #if Step1_BlueTooth
        BLEinit();
    #endif
    BClock_Init(1000);  //定時(shí)器單位為ms,發(fā)送數(shù)據(jù)至手機(jī)的頻率
}

//
以上不需要做任何修改
//
//+++++_____+++++_____+++++_____+++++_____+++++_____以上不需要做任何修改_____+++++_____+++++_____+++++_____+++++_____+++++//
//
以上不需要做任何修改
//





//
以下不需要做任何修改
//
//+++++_____+++++_____+++++_____+++++_____+++++_____以下不需要做任何修改_____+++++_____+++++_____+++++_____+++++_____+++++//
//
以下不需要做任何修改
//


static void IRAM_ATTR Timer0_CallBack(void)
{
    BLEsendflag=true;
}

void BClock_Init(int duty_ms)
{
    timer=timerBegin(0,80,true);
    timerAttachInterrupt(timer,Timer0_CallBack,true);
    timerAlarmWrite(timer,1000*duty_ms,true); // 單位us,定時(shí)模式,10ms
    timerAlarmEnable(timer); // 啟動(dòng)定時(shí)器
}

void Short2Byte(short i,uint8_t *byte)
{
    unsigned long longdata=0;
    longdata=*(unsigned long *)&i;
    byte[1]=(longdata&0xFF00)>>8;
    byte[0]=(longdata&0x00FF);
}

void Int2Byte(int i,uint8_t *byte)
{
    unsigned long longdata=0;
    longdata=*(unsigned long *)&i;
    byte[3]=(longdata&0xFF000000)>>24;
    byte[2]=(longdata&0x00FF0000)>>16;
    byte[1]=(longdata&0x0000FF00)>>8;
    byte[0]=(longdata&0x000000FF);
}

void Float2Byte(float f,uint8_t *byte)
{
    unsigned long longdata=0;
    longdata=*(unsigned long *)&f;
    byte[3]=(longdata&0xFF000000)>>24;
    byte[2]=(longdata&0x00FF0000)>>16;
    byte[1]=(longdata&0x0000FF00)>>8;
    byte[0]=(longdata&0x000000FF);
}

自己需要做的只是在中間加上 void loop()

五、手機(jī)——>單片機(jī)解碼

手機(jī)發(fā)送5個(gè)數(shù)據(jù) bool(MotorStatus)、int16_t(kp)、int16_t(kd)、int16_t(ksp)、int16_t(ksi)
006.合宙ESP32-C3+藍(lán)牙調(diào)試器通過BLE發(fā)送接收數(shù)據(jù)教程

/*****************藍(lán)牙發(fā)送接收數(shù)據(jù)*****************/
/**/#if Step1_BlueTooth
/**/    bool MotorStatus;//控制電機(jī)開關(guān)
/**/    int16_t kp,kd,ksp,ksi;
/**/    //以上為手機(jī)發(fā)送來的數(shù)據(jù)
/**/    bool BLEsendflag=false;//定時(shí)發(fā)送標(biāo)志
/**/#endif  
/************************************************/

void loop() 
{

}

#if Step1_BlueTooth
/**/    void getBlueData(uint8_t *Value)
/**/    {
/**/        MotorStatus=Value[1];
/**/        kp=(Value[3]<<8)+Value[2];  
/**/        kp=(Value[3]<<8)+Value[2];
/**/        kd=(Value[5]<<8)+Value[4];
/**/        ksp=(Value[7]<<8)+Value[6];
/**/        ksi=(Value[9]<<8)+Value[8];
/**/        Serial.printf("MotorStatus=%d,kp=%d,kd=%d,ksp=%d,ksi=%d\n",MotorStatus,kp,kd,ksp,ksi);
/**/    }
#endif 

六、單片機(jī)——>手機(jī)編碼

單片機(jī)發(fā)送3個(gè)數(shù)據(jù) short(PwmOut)、int(Encode_L)、float(Angle)
006.合宙ESP32-C3+藍(lán)牙調(diào)試器通過BLE發(fā)送接收數(shù)據(jù)教程文章來源地址http://www.zghlxwxcb.cn/news/detail-435455.html

/*****************藍(lán)牙發(fā)送接收數(shù)據(jù)*****************/
/**/#if Step1_BlueTooth
/**/    bool BLEsendflag=false;//定時(shí)發(fā)送標(biāo)志/**/    
/**/    uint8_t BLEBUF[13];// 數(shù)據(jù)包的順序?yàn)锽OOL(1)/BYTE(1)/SHORT(2)/INT(4)/FLOAT4)
/**/    short PwmOut=-12;
/**/    int Encode_L=-34;
/**/    float Angle=5.6;
/**/#endif  
/************************************************/



void loop() 
{
    if(deviceConnected&BLEsendflag)
    {
        BLEsendflag=false;
        BLEBUF[0]=0xA5;//包頭
        Short2Byte(PwmOut,&BLEBUF[1]);
        Int2Byte(PwmOut,&BLEBUF[3]);
        Float2Byte(Angle,&BLEBUF[7]);
        BLEBUF[11]=(uint8_t)((BLEBUF[1]+BLEBUF[2]+BLEBUF[3]+BLEBUF[4]+BLEBUF[5]+BLEBUF[6]+BLEBUF[7]+BLEBUF[8]+BLEBUF[9]+BLEBUF[10])&0xFF);
        BLEBUF[12]=0x5A;//包尾
        pTxCharacteristic->setValue(BLEBUF,13);
        pTxCharacteristic->notify();
    }
}

到了這里,關(guān)于006.合宙ESP32-C3+藍(lán)牙調(diào)試器通過BLE發(fā)送接收數(shù)據(jù)教程的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 合宙ESP32-C3精簡(jiǎn)版完全食用指南

    合宙ESP32-C3精簡(jiǎn)版完全食用指南

    硬件資源 尺寸長(zhǎng)寬 21mm*51mm 1路SPI FLASH,板載4MB,支持最高 16MB (dio 模式) 2路UART接口,UART0~UART1,其中下載口為UART0 (精簡(jiǎn)版為UART和UART1) 5 路 12 比特 ADC,最高采樣率 100KSPS 1路低速SPI接口,支持主模式 1路IIC控制器 4路PWM接口,可使用任意GPIO GPIO外部管腳15路,可復(fù)用 2路貼片LED指示

    2023年04月19日
    瀏覽(24)
  • stlink下載調(diào)試器使用說明(STM32采用stlink下載程序)

    stlink下載調(diào)試器使用說明(STM32采用stlink下載程序)

    stlink能干什么?? 最基本的功能:下載程序。? 一般STM32支持ISP串口下載,也支持stlink、jlink等下載器下載 。 使用stlink、jlink下載要比串口方便很多,在keil里直接點(diǎn)擊下載就行了,不需要去選擇hex文件,速度上要快很多,主要一點(diǎn),jlink、stlink能實(shí)現(xiàn)硬件仿真調(diào)試,程序出問

    2024年02月02日
    瀏覽(21)
  • ESP32-C3 應(yīng)用 篇(實(shí)例二、通過藍(lán)牙將傳感器數(shù)據(jù)發(fā)送給手機(jī),手機(jī)端控制 SK6812 LED)

    ESP32-C3 應(yīng)用 篇(實(shí)例二、通過藍(lán)牙將傳感器數(shù)據(jù)發(fā)送給手機(jī),手機(jī)端控制 SK6812 LED)

    前面文章說過,藍(lán)牙協(xié)議博主了解不是很深入,只進(jìn)行一些基礎(chǔ)的了解,示例的測(cè)試,和初學(xué)者一樣,基本上藍(lán)牙專欄系列博文都是一步一步摸索過來的,功夫不負(fù)有心人,到目前為止,多多少少對(duì)藍(lán)牙 GATT 有了一定的認(rèn)識(shí)。 那么我們今天就要學(xué)以致用,使用 ESP32-C3 的藍(lán)牙

    2024年02月09日
    瀏覽(17)
  • 003.0.96‘OLED+合宙ESP32C3+和風(fēng)天氣預(yù)報(bào)

    003.0.96‘OLED+合宙ESP32C3+和風(fēng)天氣預(yù)報(bào)

    使用VScode platformio開發(fā) 1.oled顯示 2.配置WIFI 3.得到B站粉絲數(shù) 4.使用json解析獲得的粉絲數(shù),顯示到OLED 結(jié)構(gòu)體 定義結(jié)構(gòu)體 實(shí)例化結(jié)構(gòu)體 WeatherData *data可以理解為 int *data,而*data則是指針,指針就是地址 todaymsg取出存放的數(shù)據(jù),todaymsg相當(dāng)于地址(指針),數(shù)據(jù)就存在這個(gè)地址中,

    2023年04月24日
    瀏覽(19)
  • 【Arduino環(huán)境下驅(qū)動(dòng)合宙esp32c3單片機(jī)基本外設(shè)】

    【Arduino環(huán)境下驅(qū)動(dòng)合宙esp32c3單片機(jī)基本外設(shè)】

    本教程是參加FastBond2活動(dòng)主題4 - 測(cè)量?jī)x器中的【Arduino環(huán)境下驅(qū)動(dòng)合宙esp32c3單片機(jī)基本外設(shè)】。 圍繞FastBond2階段1——基于ESP32C3開發(fā)的簡(jiǎn)易IO調(diào)試設(shè)備項(xiàng)目需求開發(fā)。 設(shè)計(jì)目標(biāo): 多種數(shù)字和模擬信號(hào)的輸入輸出:用戶可以選擇不同的輸入輸出模式,并通過設(shè)備的操作界面進(jìn)行

    2024年02月04日
    瀏覽(34)
  • 藍(lán)牙串口調(diào)試助手通過PC藍(lán)牙發(fā)送數(shù)據(jù)給ESP32同時(shí)在串口上顯示

    藍(lán)牙串口調(diào)試助手通過PC藍(lán)牙發(fā)送數(shù)據(jù)給ESP32同時(shí)在串口上顯示

    OK,好久沒有更新Blog啦 今天把之前積累的代碼放上,給需要學(xué)習(xí)的程序猿們使用 我還是不太喜歡寫文字,倒是比較喜歡客套,哈哈 硬件圖: ESP32和USB-micro-B數(shù)據(jù)線一根 藍(lán)牙串口調(diào)試助手通過PC藍(lán)牙發(fā)送數(shù)據(jù)給ESP32同時(shí)在串口上顯示 具體代碼如下:

    2024年02月09日
    瀏覽(23)
  • 新上架的簡(jiǎn)約版合宙ESP32C3使用arduino開發(fā)的教程

    新上架的簡(jiǎn)約版合宙ESP32C3使用arduino開發(fā)的教程

    經(jīng)過兩個(gè)月的缺貨下架后,9塊9包郵的合宙ESP32C3又重新上架了,真香。這一批都是沒有帶串口芯片的簡(jiǎn)約版(9塊9要啥自行車)。在下架前,簡(jiǎn)約版要使用2.0.0版本的ESP32開發(fā)板庫才能下載,而2.0.0版本有一些丟失arduino自帶庫的詭異BUG,所以一直沒法用于下載。現(xiàn)在由于發(fā)布了2

    2024年02月05日
    瀏覽(28)
  • 物聯(lián)網(wǎng)開發(fā)筆記(87)- 使用Micropython開發(fā)ESP32開發(fā)板之燒錄合宙ESP32C3開發(fā)板

    物聯(lián)網(wǎng)開發(fā)筆記(87)- 使用Micropython開發(fā)ESP32開發(fā)板之燒錄合宙ESP32C3開發(fā)板

    一、目的 ??????? 這一節(jié)我們學(xué)習(xí)如何使用我們的ESP32開發(fā)板來學(xué)習(xí)合宙ESP32C3開發(fā)板,該開發(fā)板有兩種:一種是帶串口通訊的,一種是通過使用USB通訊接口的。 ?二、環(huán)境 ??????? ESP32 + 合宙ESP32C3開發(fā)板 + USB轉(zhuǎn)type-C線? + Win10 接線方法: ??????? 開發(fā)板通過USB線插到

    2024年02月14日
    瀏覽(26)
  • 在macOS 上使用 esptool 燒錄合宙ESP32C3 開發(fā)板 micropython 固件遇到的問題與解決辦法

    使用 esptool 燒錄遇到報(bào)錯(cuò) A fatal error occurred: Failed to write to target RAM (result was 01070000) 看github 上的討論,LilyGO 開發(fā)板使用的 FTDI 芯片似乎與 mac OS Big Sur UART 驅(qū)動(dòng)程序不兼容;合宙 ESP32C3 開發(fā)板同理; 我電腦的 mac OS Monterey 版本同理; 在 mac 上安裝這個(gè)CH340 驅(qū)動(dòng)程序; 鏈接: li

    2024年02月09日
    瀏覽(65)
  • Linux - 還不懂 gdb 調(diào)試器?(調(diào)試軟件)

    Linux - 還不懂 gdb 調(diào)試器?(調(diào)試軟件)

    當(dāng)前,我們可以使用 make/makefile 來程序化執(zhí)行代碼文件;可以使用 gcc/g++ 等編譯器來編譯代碼;可以使用 vim 編輯器來編寫代碼;其實(shí)在 Linux 當(dāng)中還有一個(gè)工具,可以實(shí)現(xiàn)調(diào)試工作,這個(gè)工具就是 -- gdb。 在了解調(diào)試器之前,你應(yīng)該對(duì)代碼的發(fā)布版本做一些了解: 我們?cè)?VS

    2024年02月07日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包