一、前言
? 手里最近翻到了一個ESP32S3開發(fā)板,于是想做個鼠標(biāo)鍵盤玩玩,這是我第二次接觸ESP32,上一次18年買的吃灰板子至今沒上過電。新找到的S3看手冊是支持OTG的,按照官方的教程搭建的WSL+VSCODE環(huán)境。然而一切準(zhǔn)備就緒發(fā)現(xiàn)ESP-IDF里面沒有USB-HIDdemo。沒有demo怎么玩。于是乎查找資料找,找到了專為物聯(lián)網(wǎng)開發(fā)SDK esp-iot-solution簡介如下。該框架支持usb OTG 功能。
二、環(huán)境搭建
? 這里面要注意的是官方說明寫的 esp-iot-solution支持的依賴是ESP-IDFv4.3。但是我這里用的是 esp-iot-solution其中的一個分支USB。按照官方的依賴V4.3做USB的話搞到地老天荒都搞不出來。原因是TinaUsb組件要ESP-IDF依賴是4.4。這個問題困擾了我好幾天。
? 好了下面開始下載分支按照教程安裝即可。
? 倉庫下載地址
? https://github.com/espressif/esp-idf
? https://github.com/espressif/esp-iot-solution
克隆 esp-iot-solution usb分支
clone -b usb/add_usb_solutions --recursive https://github.com/espressif/esp-iot-solution
克隆 ESP-IDF4.4 分支
git clone -b release/v4.3 --recursive https://github.com/espressif/esp-idf.git
克隆后如下圖所示
按照官方教程激活環(huán)境
略
? 進入到usb_hid_device目錄下,在CmakeLists.txt中增加一條指令保存,不要按官方手冊都復(fù)制進去。
三、sdkmenu參數(shù)配置
1、設(shè)置開發(fā)環(huán)境
? 這里面有個坑,如果配置內(nèi)核開發(fā)板為ESPS3 目標(biāo)芯片也為ESP32的話,就會報example 只支持ESP32錯誤。? 翻看官方issue發(fā)現(xiàn)類似問題,官方解釋這是ESp32S3 bug 之后會修復(fù),臨時的解決辦法是開發(fā)板設(shè)置SaoLa ESP32S2
然后目標(biāo)芯片設(shè)置成ESP32S3
idf.py set-target esp32s3
2、開始編譯
? 重新編譯,漫長等待結(jié)果還是報錯,不過這回的錯誤變了
error: unknown type name 'button_handle_t'
提示找不到類型名稱,根據(jù)多年經(jīng)驗分析,這個情況多半是頭文件沒有包含進來或者源文件沒有添加。
通過vscode 定位到該類型在iot_button.h
? 既然文件存在那么分析一下為啥找不到??粗鞒绦虻念^文件引用,在主程序里面沒有直接引用iot_button.h,那么最有可能在board.h中間接包含,打開board.h文件。
? 果然如我所料間接包含了,但是編譯的時候還是找不到,通過分析發(fā)現(xiàn),該board.h在目錄esp32s3_usb_otg_ev路徑下,這個目錄是否被包含是根據(jù)是上文menuconfig中 boards options 選項選擇開發(fā)板決定的,上文已經(jīng)說了該SDK只支持esp32s2,為了適配S3開發(fā)板只能選擇saola,所以導(dǎo)致生成的sdkconfig不包含esp32s3_usb_otg_ev路徑,所以主程序不能找到board.h文件,間接的不能找到iot_button.h文件。
? 既然問題已經(jīng)發(fā)現(xiàn)了,那就開始著手解決問題,第一步既然沒有包含iot_button.h那么直接在主程序里包含好了,然后編譯。
? 上述問題解決,但是又出現(xiàn)新問題了,iot_board_button_register_cb按鍵注冊回調(diào)函數(shù)找不到。根據(jù)函數(shù)就知道了它也在board.h中。
? 通過程序分析,該函數(shù)模注冊個按鍵事件模擬鼠標(biāo)或者鍵盤發(fā)送數(shù)據(jù),不影響主體USB相關(guān)功能,而且按鍵發(fā)送程序,不一定要用demo的寫法,所以這是個可有可無的功能,后期可以自己從寫,為了大業(yè)先屏蔽掉,然后編譯。
哈哈 終于編譯通過了
3、程序燒錄
? 串口燒錄要頻繁在現(xiàn)實與虛擬環(huán)境切換串口麻煩,所以這里通過flash燒錄軟件進行燒錄如下圖,主要偏移地址和S2不一樣。
? 燒寫完成后將將開發(fā)板插到電腦上,見證奇跡時刻了。
四、錯誤集合解決辦法
1、這個錯誤的原因就是sdk版本低不支持S3
error: 'ADC_BUTTON_WIDTH' undeclared (first use in this function); did you mean 'ADC_BUTTON_ATTEN'?
沒有S3的定義,增加一個宏定義即可
2、這個錯誤的原因就是ESP-IDF和add_usb_solutions同名組件版本不一致造成的,我的臨時做法是將add_usb_solutions下的audio改個名字。重新編譯問題即可解決。
error: unknown type name 'i2s_dac_mode_t'
i2s_dac_mode_t dac_mode; /*!< DAC mode configurations - see i2s_dac_mode_t*/
結(jié)語
有朋友反饋,找不到我,今打油詩一首
加流一壺真千金
微云澹日映寒流
信意麾毫無點誤
KING_SONGING
唱奇騰怪可刪修
歌詠康衢了此生
的然民仰如父母
國家涵養(yǎng)自建隆
王儉歸來幕府非文章來源:http://www.zghlxwxcb.cn/news/detail-484018.html
有朋自遠(yuǎn)發(fā)來,不亦說乎!文章來源地址http://www.zghlxwxcb.cn/news/detail-484018.html
到了這里,關(guān)于ESP32S3使用esp-iot-solution SDK開發(fā)USBHID鼠標(biāo)鍵盤教程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!