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

ESP32藍(lán)牙+EC11旋轉(zhuǎn)編碼器實(shí)現(xiàn)對(duì)電腦音量控制

這篇具有很好參考價(jià)值的文章主要介紹了ESP32藍(lán)牙+EC11旋轉(zhuǎn)編碼器實(shí)現(xiàn)對(duì)電腦音量控制。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

ESP32藍(lán)牙 + EC11旋轉(zhuǎn)編碼器實(shí)現(xiàn)對(duì)電腦音量控制


  • ?本項(xiàng)目基于Arduino開(kāi)發(fā)框架下功能實(shí)現(xiàn)。

??藍(lán)牙設(shè)備添加和連接

?需要有帶藍(lán)牙硬件支持的電腦才能實(shí)現(xiàn)連接并控制,當(dāng)然手機(jī)也可以連接但是不能實(shí)現(xiàn)對(duì)手機(jī)音量控制,

esp32 ec11,Arduino ESP32 入門(mén)實(shí)例教程,ESP32藍(lán)牙功能,EC11旋轉(zhuǎn)編碼器

  • ??以Win10系統(tǒng)電腦為例。在設(shè)置里面找到,添加藍(lán)牙和其他設(shè)備
  • ??會(huì)搜索到ESP32-keyboard設(shè)備。

esp32 ec11,Arduino ESP32 入門(mén)實(shí)例教程,ESP32藍(lán)牙功能,EC11旋轉(zhuǎn)編碼器

  • ??已連接設(shè)備
    esp32 ec11,Arduino ESP32 入門(mén)實(shí)例教程,ESP32藍(lán)牙功能,EC11旋轉(zhuǎn)編碼器

?功能介紹

  1. 模式0:短按EC11編碼器,靜音/取消靜音,雙擊藍(lán)牙輸入測(cè)試,順時(shí)針音量加,逆時(shí)針音量鍵、按鈕按下順時(shí)針逆時(shí)針無(wú)功能。
  2. 模式1:短按EC11編碼器,,雙擊藍(lán)牙輸入測(cè)試,順時(shí)針右方向鍵,逆時(shí)針左方向鍵,按鈕按下順時(shí)針下方向鍵,按鈕按下逆時(shí)針上方向鍵。
    esp32 ec11,Arduino ESP32 入門(mén)實(shí)例教程,ESP32藍(lán)牙功能,EC11旋轉(zhuǎn)編碼器

??EC11旋轉(zhuǎn)編碼器

esp32 ec11,Arduino ESP32 入門(mén)實(shí)例教程,ESP32藍(lán)牙功能,EC11旋轉(zhuǎn)編碼器
esp32 ec11,Arduino ESP32 入門(mén)實(shí)例教程,ESP32藍(lán)牙功能,EC11旋轉(zhuǎn)編碼器

  • ??EC11旋轉(zhuǎn)編碼器模塊

esp32 ec11,Arduino ESP32 入門(mén)實(shí)例教程,ESP32藍(lán)牙功能,EC11旋轉(zhuǎn)編碼器

  • ??EC11濾波電路
    esp32 ec11,Arduino ESP32 入門(mén)實(shí)例教程,ESP32藍(lán)牙功能,EC11旋轉(zhuǎn)編碼器

  • ??接線圖原理圖
    esp32 ec11,Arduino ESP32 入門(mén)實(shí)例教程,ESP32藍(lán)牙功能,EC11旋轉(zhuǎn)編碼器

  • ??接線說(shuō)明

??參照上面的原理圖進(jìn)行接線,如果想實(shí)現(xiàn)平滑控制,最好加上濾波電容。

EC11 A ---->ESP32 GPIO 22
EC11 B ---->ESP32 GPIO 23
EC11 E ---->ESP32 GPIO 19
EC11 D 和 C---->ESP32 GND

??所需庫(kù)

  • ??BleKeyboard庫(kù):https://github.com/T-vK/ESP32-BLE-Keyboard//需要自行前往下載并導(dǎo)入Arduino IDE庫(kù)當(dāng)中。
  • ??OneButton庫(kù):

esp32 ec11,Arduino ESP32 入門(mén)實(shí)例教程,ESP32藍(lán)牙功能,EC11旋轉(zhuǎn)編碼器文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-800997.html

  • ??ESP32Encoder庫(kù):
    esp32 ec11,Arduino ESP32 入門(mén)實(shí)例教程,ESP32藍(lán)牙功能,EC11旋轉(zhuǎn)編碼器

??代碼實(shí)現(xiàn)

/*
 * 
 * 
 *  ESP32-BLE-Keyboard:  https://github.com/T-vK/ESP32-BLE-Keyboard
 */

#include <Arduino.h>
#include "BleKeyboard.h"//需要到github下載并導(dǎo)入
#include "OneButton.h"//點(diǎn)擊這里會(huì)自動(dòng)打開(kāi)管理庫(kù)頁(yè)面: http://librarymanager/All#OneButton
#include <ESP32Encoder.h>//點(diǎn)擊這里會(huì)自動(dòng)打開(kāi)管理庫(kù)頁(yè)面: http://librarymanager/All#ESP32Encoder

//按鍵配置
#define EC11_A_PIN 22
#define EC11_B_PIN 23
#define EC11_K_PIN 19//按鍵引腳

//鍵盤(pán)名稱(chēng):ESP32-BleKeyboard
BleKeyboard bleKeyboard("ESP32-Keyboard", "Espressif", 100);
ESP32Encoder encoder;
OneButton SW(EC11_K_PIN, true);

int lastEncoderValue = 0;
int now_count = 0;
int mode = 0;   //0,1兩種mode,可自行添加
bool activate = true;

//按鍵單擊回調(diào)函數(shù)
void click() {
    if (mode == 0) {
        Serial.println("Click: MUTE");
        bleKeyboard.write(KEY_MEDIA_MUTE);
    }
    if (mode == 1) {
        Serial.println("Enter");
        bleKeyboard.write(KEY_RETURN);
    }
}

//按鍵長(zhǎng)按回調(diào)函數(shù)
void longclick() {
    if (activate) {   //如果旋鈕轉(zhuǎn)動(dòng),則不切換狀態(tài)
        Serial.println("Longclick: Mode Change");
        Serial.print("current mode: ");
        if (mode == 0) {
            mode = 1;
            Serial.println("Arrow");
            return;
        }
        if (mode == 1) {
            mode = 0;
            Serial.println("Media");
            return;
        }
    }
    activate = true;
}

//按鍵雙擊回調(diào)函數(shù)
void doubleclick() {
    if (mode == 0) {
         Serial.println("Doubleclick: Input test");
        bleKeyboard.print("ESP32-BLEKeyboard Input Test");
    }
    if (mode == 1) {
         Serial.println("Doubleclick: Input test");
      bleKeyboard.print("ESP32-BLEKeyboard Input Test");
    }
}

void setup() {
    Serial.begin(115200);
    ESP32Encoder::useInternalWeakPullResistors = UP;
    encoder.attachSingleEdge(EC11_A_PIN, EC11_B_PIN);

    pinMode(EC11_K_PIN, INPUT_PULLUP);

    //初始化按鍵事件檢測(cè)
    SW.attachClick(click);
    SW.attachDoubleClick(doubleclick);
    SW.attachLongPressStop(longclick);
    SW.setDebounceTicks(20);//濾波(ms)
    SW.setClickTicks(200);
    SW.setPressTicks(500);

    Serial.println("Starting BLE work");
    bleKeyboard.begin();
}

void loop() {
    SW.tick();

    if (bleKeyboard.isConnected()) {
        if (lastEncoderValue != encoder.getCount()) {
            now_count = encoder.getCount();
            if (now_count != lastEncoderValue) {
                if (!SW.isIdle()) {         //檢測(cè)按鍵是否空閑
                    activate = false;
                    Serial.print("(Long_pressed)Encoder value: ");
                    Serial.println(now_count);
                } else {
                    Serial.print("Encoder value: ");
                    Serial.println(now_count);
                }
            }

            if (now_count > lastEncoderValue) {
                if (!SW.isIdle()) {         //檢測(cè)按鍵是否空閑
                    if (mode == 0) {}     //模式0按鈕按下順時(shí)針功能
                    if (mode == 1) {    //模式1按鈕按下順時(shí)針功能
                        bleKeyboard.write(KEY_DOWN_ARROW);
                        Serial.println("DOWN_ARROW");
                    }
                } else {
                    if (mode == 0) {  //模式0順時(shí)針功能
                        bleKeyboard.write(KEY_MEDIA_VOLUME_UP);
                        Serial.println("MEDIA_VOLUME_UP");
                    }
                    if (mode == 1) {  //模式1順時(shí)針功能
                        bleKeyboard.write(KEY_RIGHT_ARROW);
                        Serial.println("RIGHT_ARROW");
                    }
                }
            }
            if (now_count < lastEncoderValue) {
                if (!SW.isIdle()) {         //檢測(cè)按鍵是否空閑
                    if (mode == 0) {}    //模式0按鈕按下逆時(shí)針功能
                    if (mode == 1) {  //模式1按鈕按下逆時(shí)針功能
                        bleKeyboard.write(KEY_UP_ARROW);
                        Serial.println("UP_ARROW");
                    }
                } else {
                    if (mode == 0) {  //模式0逆時(shí)針功能
                        bleKeyboard.write(KEY_MEDIA_VOLUME_DOWN);
                        Serial.println("MEDIA_VOLUME_DOWN");
                    }
                    if (mode == 1) {  //模式1逆時(shí)針功能
                        bleKeyboard.write(KEY_LEFT_ARROW);
                        Serial.println("LEFT_ARROW");
                    }
                }
            }
            lastEncoderValue = now_count;
        }
    }
}
  • ??代碼相關(guān)參考:https://blog.csdn.net/qq_46443616/article/details/127995706
  • ??編譯信息
使用 0.3.2  版本的庫(kù) ESP32-BLE-Keyboard 在文件夾: C:\Users\Administrator\Documents\Arduino\libraries\ESP32-BLE-Keyboard 
使用 2.0.0  版本的庫(kù) BLE 在文件夾: C:\Users\Administrator\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.5\libraries\BLE 
使用 2.0.4  版本的庫(kù) OneButton 在文件夾: C:\Users\Administrator\Documents\Arduino\libraries\OneButton 
使用 0.10.1  版本的庫(kù) ESP32Encoder 在文件夾: C:\Users\Administrator\Documents\Arduino\libraries\ESP32Encoder 
"C:\\Users\\Administrator\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\xtensa-esp32-elf-gcc\\gcc8_4_0-esp-2021r2-patch3/bin/xtensa-esp32-elf-size" -A "d:\\arduino\\MyHexDir/ESP32_BLE_Keyboard.ino.elf"
項(xiàng)目使用了 1055409 字節(jié),占用了 (80%) 程序存儲(chǔ)空間。最大為 1310720 字節(jié)。
全局變量使用了32988字節(jié),(10%)的動(dòng)態(tài)內(nèi)存,余留294692字節(jié)局部變量。最大為327680字節(jié)。

到了這里,關(guān)于ESP32藍(lán)牙+EC11旋轉(zhuǎn)編碼器實(shí)現(xiàn)對(duì)電腦音量控制的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(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)文章

  • 【單片機(jī)】STM32單片機(jī)讀取旋轉(zhuǎn)編碼器,TIM定時(shí)器編碼器模式捕獲,程序

    【單片機(jī)】STM32單片機(jī)讀取旋轉(zhuǎn)編碼器,TIM定時(shí)器編碼器模式捕獲,程序

    旋轉(zhuǎn)編碼器簡(jiǎn)單來(lái)說(shuō),就是會(huì)輸出2個(gè)PWM,依據(jù)相位可以知道旋轉(zhuǎn)方向,依據(jù)脈沖個(gè)數(shù)可以知道旋轉(zhuǎn)的角度。一般旋轉(zhuǎn)一圈有一個(gè)固定數(shù)值的脈沖個(gè)數(shù)。 旋轉(zhuǎn)編碼器廣泛用于電機(jī)、或者角度傳感器,STM32的定時(shí)器可以直接接入這兩個(gè)波形獲取到信息。 前兩個(gè)引腳(接地和Vcc)

    2024年02月13日
    瀏覽(22)
  • STM32-微項(xiàng)目07-旋轉(zhuǎn)編碼器計(jì)數(shù)及測(cè)速

    STM32-微項(xiàng)目07-旋轉(zhuǎn)編碼器計(jì)數(shù)及測(cè)速

    一、微項(xiàng)目實(shí)現(xiàn)目標(biāo): 檢測(cè)旋轉(zhuǎn)編碼器模式下,檢測(cè)旋轉(zhuǎn)編碼器的轉(zhuǎn)動(dòng)計(jì)數(shù)值及轉(zhuǎn)速。并且區(qū)分轉(zhuǎn)向,一側(cè)轉(zhuǎn)動(dòng)增加cout,轉(zhuǎn)速值為正,一側(cè)轉(zhuǎn)動(dòng)減少count,轉(zhuǎn)速值為負(fù); ? 二、微項(xiàng)目硬件配置需求: 1,stm32F103C8T6核心板一塊 2,0.96寸OLED顯示,用于顯示計(jì)數(shù) 3,旋轉(zhuǎn)編碼器,

    2024年02月08日
    瀏覽(24)
  • ESP32(MicroPython) 編碼器電機(jī)閉環(huán)控制

    本人最近查找資料時(shí),發(fā)現(xiàn)ESP32上的使用MicroPython的編碼器電機(jī)相關(guān)程序較少,閉環(huán)控制程序都是Pyboard上的,與ESP32不完全兼容。本人通過(guò)micropython編程 esp32+drv8833+霍爾編碼器_micropython 編碼器_青右的博客-CSDN博客 上的程序讀取編碼器計(jì)數(shù),然后另寫(xiě)了控制程序,有兩個(gè)版本。

    2024年02月16日
    瀏覽(36)
  • 關(guān)于stm32旋轉(zhuǎn)編碼器計(jì)次亂跳問(wèn)題(消抖)

    旋轉(zhuǎn)編碼器A口接GPIOB0,B口接GPIOB1。設(shè)置中斷類(lèi)型為上升下降沿均觸發(fā)。 輸出是用0.96寸oled輸出 A腳設(shè)置為上升下降沿均會(huì)進(jìn)中斷,下降上升一個(gè)變換周期,判斷這個(gè)周期的A腳,B腳的始末狀態(tài),來(lái)判斷正反轉(zhuǎn)一次。 A口輸出的波形用來(lái)中斷,B口輸出的波形用來(lái)判斷正轉(zhuǎn)還是反轉(zhuǎn)

    2024年02月16日
    瀏覽(29)
  • 【STM32】HAL庫(kù)自學(xué)記錄-旋轉(zhuǎn)編碼器的使用

    【STM32】HAL庫(kù)自學(xué)記錄-旋轉(zhuǎn)編碼器的使用

    通過(guò)本文可學(xué)會(huì)兩種實(shí)現(xiàn)判斷旋轉(zhuǎn)編碼器正轉(zhuǎn)反轉(zhuǎn)的方法,可根據(jù)自己的應(yīng)用場(chǎng)景來(lái)選擇使用哪種方法。 1、芯片:STM32F103RCT6 2、STM32CubeMx軟件 3、IDE: MDK-Keil軟件 4、旋轉(zhuǎn)編碼器模塊 5、XCOM V1.4串口軟件 圖中C端為GND。 方向 :A相和B相相差一個(gè)相位,一般來(lái)說(shuō)是90°。A相信號(hào)在

    2024年02月11日
    瀏覽(29)
  • (STM32)PWM輸出控制電機(jī)旋轉(zhuǎn)并且使用編碼器讀取脈沖數(shù)

    (STM32)PWM輸出控制電機(jī)旋轉(zhuǎn)并且使用編碼器讀取脈沖數(shù)

    目錄 ?前言 一、pwm輸出讓電機(jī)轉(zhuǎn)? 1.電機(jī)的接線說(shuō)明 2.驅(qū)動(dòng)的接線說(shuō)明 3.pwm輸出代碼 ?pwm.c pwm.h 4.輸出pwm控制電機(jī)旋轉(zhuǎn) 二、配置定時(shí)器編碼器模式 1.定時(shí)器編碼器模式 編碼器原理 編碼器相關(guān)的概念 2.編碼器模式——代碼部分 3.獲取脈沖數(shù) 三、定時(shí)讀取編碼器讀取的脈沖數(shù)

    2024年02月03日
    瀏覽(29)
  • 【STM32】STM32學(xué)習(xí)筆記-對(duì)射式紅外傳感器計(jì)次 旋轉(zhuǎn)編碼器計(jì)次(12)

    【STM32】STM32學(xué)習(xí)筆記-對(duì)射式紅外傳感器計(jì)次 旋轉(zhuǎn)編碼器計(jì)次(12)

    相關(guān)頭文件: misc.h 1.1 NVIC_PriorityGroupConfig函數(shù) 1.2 NVIC_PriorityGroup類(lèi)型 1.3 NVIC_Init函數(shù) 1.4 NVIC_InitTypeDef類(lèi)型 NVIC_IRQChannel取值 成員NVIC_IRQChannelPreemptionPriority可賦的值:最大取值15,具體有上面設(shè)置的優(yōu)先級(jí)組中規(guī)定的位數(shù)決定 成員NVIC_IRQChannelSubPriority可賦的值:最大取值15,具體有

    2024年01月15日
    瀏覽(17)
  • STM32第五課:對(duì)射式紅外線傳感器計(jì)數(shù)和旋轉(zhuǎn)編碼器計(jì)數(shù)

    STM32第五課:對(duì)射式紅外線傳感器計(jì)數(shù)和旋轉(zhuǎn)編碼器計(jì)數(shù)

    1.1 產(chǎn)品特性 ?????????使用ITR9606高靈敏度槽型光耦器件,它由一個(gè)紅外發(fā)光二極管和一個(gè)NPN光電三極管組成,槽寬度為5mm。傳感器特設(shè)M3固定安裝孔,調(diào)節(jié)方向與固定方便易用,使用寬電壓LM393比較器,信號(hào)干凈,波形好,驅(qū)動(dòng)能力強(qiáng),超過(guò)15mA。廣泛用于電機(jī)轉(zhuǎn)速檢測(cè),

    2024年02月20日
    瀏覽(26)
  • STM32單片機(jī)(五)第二節(jié):EXTI外部中斷練習(xí)2(旋轉(zhuǎn)編碼器計(jì)次)

    STM32單片機(jī)(五)第二節(jié):EXTI外部中斷練習(xí)2(旋轉(zhuǎn)編碼器計(jì)次)

    ?? 專(zhuān)欄簡(jiǎn)介:本專(zhuān)欄記錄了從零學(xué)習(xí)單片機(jī)的過(guò)程,其中包括51單片機(jī)和STM32單片機(jī)兩部分;建議先學(xué)習(xí)51單片機(jī),其是STM32等高級(jí)單片機(jī)的基礎(chǔ);這樣再學(xué)習(xí)STM32時(shí)才能融會(huì)貫通。 ?? 專(zhuān)欄適用人群 :適用于想要從零基礎(chǔ)開(kāi)始學(xué)習(xí)入門(mén)單片機(jī),且有一定C語(yǔ)言基礎(chǔ)的的童鞋

    2024年02月11日
    瀏覽(25)
  • 7、江科大stm32視頻學(xué)習(xí)筆記——中斷的應(yīng)用:對(duì)射式紅外傳感器計(jì)次&旋轉(zhuǎn)編碼器計(jì)次

    7、江科大stm32視頻學(xué)習(xí)筆記——中斷的應(yīng)用:對(duì)射式紅外傳感器計(jì)次&旋轉(zhuǎn)編碼器計(jì)次

    目錄 1、標(biāo)志位函數(shù) 2、 初始化的中斷的步驟 3、對(duì)射式紅外傳感器計(jì)次 (1)接線圖 (2)CountSensor.c (3)main.c 4、旋轉(zhuǎn)編碼器計(jì)次 (1)接線圖(旋轉(zhuǎn)編碼器接在PB1、PB0引腳) (2)Encoder.c (3)main.c 5、建議 //在 主程序 中查看標(biāo)志位和清楚標(biāo)志位,用以下兩個(gè)函數(shù),能不能

    2024年02月11日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包