99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

ESP32接入百度智能云語音識(shí)別:從硬件到API完整指南

ESP32接入百度智能云語音識(shí)別:從硬件到API完整指南 說實(shí)話第一次把 ESP32 和百度智能云的語音識(shí)別接到一起時(shí)我最大的感受是硬件端并不難真正花時(shí)間的全是“音頻格式對(duì)不對(duì)”“請(qǐng)求頭帶沒帶對(duì)”“token 有沒有過期”這類細(xì)節(jié)。這篇東西我會(huì)把整條鏈路完整講一遍從選開發(fā)板、焊麥克風(fēng)到配 Arduino 環(huán)境、燒錄再到云端建應(yīng)用、寫代碼調(diào) API盡量按照我實(shí)際踩坑的順序來你照著走基本能少走兩三天彎路。這項(xiàng)目解決的是個(gè)很典型的物聯(lián)網(wǎng)需求設(shè)備端算力不夠跑不動(dòng)本地語音識(shí)別模型那就把音頻傳到云端由云端識(shí)別成文字再返回。ESP32 做音頻采集和聯(lián)網(wǎng)控制百度智能云負(fù)責(zé)“聽懂人話”兩邊一配合一個(gè)能聽懂指令的智能硬件就有了雛形。適不適合你參考只要你有 ESP32 開發(fā)基礎(chǔ)或者至少燒錄過 Arduino 程序后面跟著做都不算難。要是純新手建議先把 GPIO、串口、WiFi 連接這幾個(gè)基礎(chǔ)點(diǎn)過一遍。1. 項(xiàng)目整體的設(shè)計(jì)與方案選型1.1 為什么是 ESP32 而不是手機(jī)、電腦或樹莓派先聊選型。語音識(shí)別這事兒手機(jī)和電腦當(dāng)然能做得更好但作為物聯(lián)網(wǎng)項(xiàng)目它們的體積、功耗、成本都不合適。ESP32 的優(yōu)勢(shì)在哪一顆芯片集成 WiFi 和藍(lán)牙價(jià)錢便宜官方支持 Arduino、ESP-IDF、MicroPython 三套開發(fā)方式GPIO、I2S、ADC、SPI 這些外設(shè)也全基本屬于“一塊板子什么都能試”的典型代表。如果你對(duì)比過 STM32會(huì)覺得兩者路線差別挺大。STM32 的實(shí)時(shí)性和穩(wěn)定性更強(qiáng)適合做電機(jī)控制、精密儀表這類硬實(shí)時(shí)場(chǎng)景但網(wǎng)絡(luò)接入你得外掛 ESP8266 或 W5500 模塊。ESP32 則是“我自帶聯(lián)網(wǎng)能力”做語音識(shí)別這種必然要上云的場(chǎng)景天然省掉一層通信模塊的折騰。樹莓派我也試過性能確實(shí)強(qiáng)本地裝 Vosk 都能跑但成本和功耗不是一個(gè)量級(jí)。一個(gè)樹莓派零頭能買兩三塊 ESP32 開發(fā)板而且樹莓派跑 Linux 系統(tǒng)開機(jī)時(shí)間長(zhǎng)做小批量硬件不劃算。綜合來看ESP32 是這種“采集音頻-聯(lián)網(wǎng)-調(diào)云端 API”場(chǎng)景里性價(jià)比最高的選擇。1.2 為什么把語音識(shí)別放云端而不是端側(cè)跑模型有朋友會(huì)問語音識(shí)別能不能全部在 ESP32 上做我的答案是簡(jiǎn)單關(guān)鍵詞勉強(qiáng)可以復(fù)雜識(shí)別基本不現(xiàn)實(shí)。ESP32 是雙核 240MHz 的 MCU內(nèi)存通常是 320KB SRAM 加幾 MB PSRAM跑個(gè)幾十 MB 的語音模型非常吃力識(shí)別準(zhǔn)確率和響應(yīng)速度都跟不上。云端的邏輯不同。百度的語音識(shí)別模型部署在服務(wù)器集群上模型規(guī)模和算力都是端側(cè)沒法比的普通話、方言、中英文混合識(shí)別效果都很穩(wěn)定。你只需要把音頻按指定格式傳上去等一兩秒就能拿回文字結(jié)果。這種“端側(cè)采集、云端計(jì)算”的模式正好是物聯(lián)網(wǎng)行業(yè)做 AI 功能的主流做法。當(dāng)然代價(jià)也有設(shè)備必須聯(lián)網(wǎng)識(shí)別過程有網(wǎng)絡(luò)延遲而且調(diào)用次數(shù)受免費(fèi)額度限制。所以這項(xiàng)目適合做“智能音箱、語音控制面板、老人呼叫器”這類對(duì)實(shí)時(shí)性要求不極端、網(wǎng)絡(luò)環(huán)境穩(wěn)定的場(chǎng)景。如果你的需求是離線關(guān)鍵詞喚醒那應(yīng)該去研究 ESP32-S3 加 MicroWakeWord 的方案或者直接用帶離線識(shí)別能力的語音模塊。1.3 數(shù)據(jù)鏈路拆解從聲波到文本結(jié)果整條鏈路其實(shí)不復(fù)雜我用大白話拆一下麥克風(fēng)模塊比如 INMP441把聲音轉(zhuǎn)成數(shù)字信號(hào)通過 I2S 總線送給 ESP32。ESP32 把音頻數(shù)據(jù)整理成 16kHz、16bit、單聲道的 PCM 裸流暫存在內(nèi)存里。錄音結(jié)束ESP32 把這段 PCM 數(shù)據(jù)作為 HTTP POST 的 body發(fā)送給百度智能云的語音識(shí)別接口。云端解析音頻跑語音識(shí)別模型返回一個(gè) JSON里面包含識(shí)別出的文字。ESP32 拿到文字后用 ArduinoJson 解析出來再根據(jù)內(nèi)容執(zhí)行動(dòng)作比如開燈、播報(bào)、發(fā)通知。這里最關(guān)鍵的是第 2 步和第 3 步。很多項(xiàng)目失敗就是因?yàn)橐纛l格式不對(duì)或者請(qǐng)求格式不符合接口要求。百度智能云支持的音頻格式有 PCM、WAV、AMR 等但 ESP32 直接錄音生成的就是原始 PCM這是最高效也最省內(nèi)存的方式。采樣率必須統(tǒng)一為 16000位深 16bit聲道數(shù)是單聲道這三個(gè)參數(shù)任何一個(gè)不對(duì)服務(wù)端都會(huì)報(bào)參數(shù)錯(cuò)誤。1.4 為什么音頻格式選 16kHz / 16bit / 單聲道你要是不理解這幾個(gè)參數(shù)的含義后面調(diào)試會(huì)非常痛苦。采樣率 16kHz 表示每秒采樣 16000 個(gè)點(diǎn)也就是能還原 8kHz 以內(nèi)的聲音頻率而人說話的語音能量集中在 300Hz 到 3400Hz所以 16kHz 對(duì)語音識(shí)別來說完全夠用。8kHz 雖然也能傳但識(shí)別準(zhǔn)確率會(huì)下降。位深 16bit 表示每個(gè)采樣點(diǎn)用 16 位二進(jìn)制存動(dòng)態(tài)范圍更大能記錄更細(xì)膩的音量變化。單聲道就不用解釋了一個(gè)麥克風(fēng)錄出來的本來就是單聲道。這三個(gè)參數(shù)定下來一分鐘的音頻體積是 16000×2×60 ≈ 1.92MBAPI 對(duì)單次請(qǐng)求有限制60 秒內(nèi)所以錄音時(shí)長(zhǎng)最好控制在 10 秒以內(nèi)既滿足大多數(shù)語音指令也能讓內(nèi)存和上傳壓力小很多。還記得網(wǎng)絡(luò)熱詞里有人問“ESP32 藍(lán)牙和 WiFi 可以一起用嗎”這項(xiàng)目主要走 WiFi如果你想讓手機(jī)藍(lán)牙配置 WiFi 信息是可以共存的兩者共享同一根天線分時(shí)復(fù)用。我會(huì)在后面提到這個(gè)用法但核心數(shù)據(jù)傳輸還是走 WiFi。2. 硬件準(zhǔn)備與基礎(chǔ)開發(fā)環(huán)境配置2.1 開發(fā)板選型經(jīng)典版還是 S3ESP32 家族現(xiàn)在型號(hào)很多做這個(gè)項(xiàng)目我建議兩種選擇。第一種是經(jīng)典的 ESP32-WROOM-32 開發(fā)板也就是最常見的 30 腳或 38 腳板子價(jià)格便宜、資料最多、網(wǎng)上案例基本都能直接抄。第二種是 ESP32-S3 開發(fā)板S3 的 AI 加速指令對(duì)神經(jīng)網(wǎng)絡(luò)推理更友好但如果只是調(diào)用云端 API 其實(shí)用不上S3 的 I2S 引腳編號(hào)和經(jīng)典版不一樣代碼得改。我自己的主力板是 ESP32-DevKitC V4用的 ESP32-WROOM-32E 模組4MB Flash。買的時(shí)候注意別買到 Flash 只有 1MB 的板子Arduino 編譯出來的固件加上分區(qū)表經(jīng)常超過 1MB燒錄會(huì)失敗。另外選板子盡量挑帶 USB 轉(zhuǎn)串口芯片的型號(hào)常見的是 CP2102 或 CH340兩者驅(qū)動(dòng)不同但都成熟穩(wěn)定。如果你手頭有 ESP32-C3、ESP32-S2 這類單核板也能做但要注意 C3 沒有 I2S 外設(shè)新版用其他方式模擬硬件庫支持會(huì)麻煩一些新手不建議用 C3 做這個(gè)項(xiàng)目。ESP32 系列里、帶“雙核 I2S 硬件外設(shè)”的板子優(yōu)先級(jí)最高。2.2 麥克風(fēng)模塊選擇INMP441 對(duì)比 MAX4466麥克風(fēng)是整個(gè)項(xiàng)目里最容易忽略卻又最關(guān)鍵的一環(huán)。我強(qiáng)烈推薦用 INMP441這是一顆 I2S 數(shù)字輸出的 MEMS 麥克風(fēng)模塊直接輸出數(shù)字信號(hào)抗干擾能力強(qiáng)不需要額外的 ADC 電路。接線就四根線VDD、GND、SCK、WS、SD這里算五根L/R 接地非常干凈。MAX4466 是另一種常見選擇它輸出的是模擬電壓信號(hào)需要接 ESP32 的 ADC 引腳。ADC 方式的問題是 ESP32 的 ADC 線性度一般、噪聲偏大采集到的語音質(zhì)量很難保證識(shí)別準(zhǔn)確率會(huì)受影響。我一開始偷懶用 MAX4466 試過識(shí)別率感人換 INMP441 之后立刻正常了。INMP441 的 L/R 引腳要接 GND這樣它會(huì)在 WS 信號(hào)為低電平時(shí)輸出數(shù)據(jù)對(duì)應(yīng) I2S 的左聲道。如果你的代碼設(shè)置的是 RIGHT 聲道那就得把 L/R 接 VDD。這塊接反了不會(huì)有物理損壞但讀到的數(shù)據(jù)全是 0排查時(shí)容易懵。另外 INMP441 的工作電壓是 3.3V一定不要接到 5V會(huì)燒模塊。2.3 接線與電源注意事項(xiàng)INMP441 與經(jīng)典 ESP32 開發(fā)板的接線我直接給出來你照著插就行INMP441 引腳ESP32 引腳VDD3.3VGNDGNDSCKGPIO14WSGPIO15SDGPIO32L/RGND這幾個(gè)引腳在 Arduino-ESP32 core 里是默認(rèn)可用的 I2S 引腳不需要特別映射。SCK 是位時(shí)鐘WS 是聲道選擇SD 是數(shù)據(jù)輸出。如果用的是 ESP32-S3建議改成 GPIO4、GPIO5、GPIO6 這類常用引腳并在代碼里用I2S_PIN_NO_CHANGE或顯式指定。供電方面INMP441 和 ESP32 用同一個(gè) 3.3V 電源沒問題但最好別直接從電腦 USB 口拖太多外設(shè)。如果你后續(xù)還要接功放、喇叭、繼電器建議用 5V/2A 以上的電源適配器通過開發(fā)板的 5V 引腳接入然后由板載穩(wěn)壓芯片轉(zhuǎn) 3.3V 給各個(gè)模塊。注意如果外接設(shè)備電流較大不要從開發(fā)板 3.3V 引腳取電會(huì)觸發(fā)過熱保護(hù)。面包板 杜邦線做原型測(cè)試是可以的接線盡量短一些音頻信號(hào)線太長(zhǎng)容易引入噪聲。焊接的話INMP441 底部有兩個(gè)焊盤容易連錫用助焊劑和烙鐵溫度控制在 350 攝氏度左右快速操作基本沒風(fēng)險(xiǎn)。2.4 搭建 Arduino 開發(fā)環(huán)境并燒錄首個(gè)測(cè)試程序開發(fā)環(huán)境我推薦先用 Arduino IDE原因無它生態(tài)成熟示例多調(diào)試門檻低。到 Arduino IDE 的“開發(fā)板管理器”里添加 ESP32 支持步驟是打開 Arduino IDE進(jìn)入“文件”-“首選項(xiàng)”在“附加開發(fā)板管理器網(wǎng)址”里填入https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json。打開“工具”-“開發(fā)板”-“開發(fā)板管理器”搜索 esp32安裝 Espressif ESP32 官方支持包。選擇開發(fā)板型號(hào)為 ESP32 Dev Module端口選成你板子對(duì)應(yīng)的 COM 口。寫一個(gè)最簡(jiǎn)單的 Blink 程序驗(yàn)證工具鏈沒問題。燒錄時(shí)有個(gè)常見坑很多開發(fā)板需要手動(dòng)進(jìn)入下載模式。操作方法是按住板上的 BOOT 按鈕然后點(diǎn)擊“上傳”等串口開始輸出“Connecting...”再松開 BOOT 按鈕。如果板子帶自動(dòng)下載電路比如很多 ESP32 DevKit 都有就不需要手動(dòng)按鍵插上 USB 直接上傳即可。要是上傳一直卡在Connecting..._____.....八成就是 BOOT 時(shí)序沒對(duì)上多試兩次或者換根數(shù)據(jù)線有些 MicroUSB 線只能充電不能傳數(shù)據(jù)。開發(fā)環(huán)境這步順利的話下面就可以進(jìn)入云端配置了。我在這個(gè)項(xiàng)目里用的是 Arduino-ESP32 core 2.0.x 版本I2S 代碼兼容性最好。如果你下載的是 core 3.xI2S 的 API 改過部分舊示例會(huì)報(bào)錯(cuò)到時(shí)候要留意適配。3. 百度智能云語音識(shí)別服務(wù)開通與密鑰管理3.1 創(chuàng)建應(yīng)用并開通語音識(shí)別能力百度智能云的控制臺(tái)改版過幾次但大致流程穩(wěn)定。你先注冊(cè)并登錄百度智能云賬號(hào)完成實(shí)名認(rèn)證然后在控制臺(tái)搜索“語音技術(shù)”進(jìn)入語音技術(shù)總覽頁面點(diǎn)擊“創(chuàng)建應(yīng)用”。應(yīng)用創(chuàng)建時(shí)要填應(yīng)用名稱、類型、描述用途默認(rèn)選“語音識(shí)別”即可。創(chuàng)建完成之后控制臺(tái)會(huì)給你一組 API Key 和 Secret Key這組密鑰是你調(diào)用所有百度 AI 接口的通行證。拿到密鑰后還要在“語音識(shí)別”服務(wù)頁面開通對(duì)應(yīng)能力。百度語音識(shí)別有短語音識(shí)別、實(shí)時(shí)語音識(shí)別、錄音文件識(shí)別等多個(gè)產(chǎn)品本項(xiàng)目用的是“短語音識(shí)別”接口地址是https://vop.baidu.com/server_api。開通后頁面會(huì)顯示免費(fèi)額度短語音識(shí)別按次計(jì)費(fèi)新用戶會(huì)有一定免費(fèi)調(diào)用次數(shù)具體以你控制臺(tái)顯示的額度為準(zhǔn)超額后按官網(wǎng)價(jià)格計(jì)費(fèi)。這里有個(gè)小提醒API Key 和 Secret Key 不要隨便貼到 GitHub 公開倉庫也不要在群里發(fā)截圖。密鑰泄露后別人可以拿你的額度去調(diào)用接口造成費(fèi)用損失。建議在代碼里用一個(gè)單獨(dú)的頭文件存儲(chǔ)密鑰并且本地編譯時(shí)不要提交到版本管理。3.2 理解 API Key、Secret Key 與 Access Token 的關(guān)系很多新手第一次看百度云文檔會(huì)被三個(gè)“Key”搞暈。我打個(gè)比方API Key 是你的用戶名Secret Key 是你的密碼Access Token 是臨時(shí)通行證。你不能直接拿用戶名密碼去調(diào)用每個(gè)接口而是先登錄請(qǐng)求 token 接口換一張帶有效期的通行證然后每次調(diào)用語音識(shí)別都出示這張通行證。獲取 Access Token 的接口是GET https://aip.baidubce.com/oauth/2.0/token?grant_typeclient_credentialsclient_id你的APIKeyclient_secret你的SecretKey返回的 JSON 里包含access_token、expires_in等字段。expires_in默認(rèn)是 2592000 秒也就是 30 天。這個(gè) token 在有效期內(nèi)可以反復(fù)使用所以沒必要每次開機(jī)都去申請(qǐng)。實(shí)操中我建議把 token 緩存到 ESP32 的 NVS非易失存儲(chǔ)里存兩樣?xùn)|西token 字符串和獲取時(shí)的時(shí)間戳。啟動(dòng)時(shí)先讀 NVS如果 token 存在且沒有過期直接用它調(diào)語音識(shí)別如果不存在或過期了再重新獲取并更新 NVS。這樣做的好處是設(shè)備重啟后可以立刻使用不用每次等 DNS 解析和 HTTP 握手體驗(yàn)會(huì)好很多。3.3 免費(fèi)額度與日常使用注意事項(xiàng)百度智能云的新用戶免費(fèi)額度每個(gè)階段都可能調(diào)整我在文章里不寫死具體數(shù)字以免誤導(dǎo)。你登錄控制臺(tái)后在“語音技術(shù)”概覽頁能直接看到剩余量。我個(gè)人的使用習(xí)慣是開發(fā)調(diào)試階段把錄音時(shí)長(zhǎng)控制在 3 到 5 秒這樣每天測(cè)試幾十次也不會(huì)輕松把免費(fèi)額度耗盡。另外一個(gè)容易忽略的問題百度智能云的短語音識(shí)別接口是 HTTPS。ESP32 發(fā)起 HTTPS 請(qǐng)求需要配置 TLS 證書或跳過證書校驗(yàn)。開發(fā)調(diào)試階段我直接用WiFiClientSecure的setInsecure()跳過證書校驗(yàn)省心省力。如果做產(chǎn)品化建議把服務(wù)端證書固定到固件里避免中間人攻擊。別嫌產(chǎn)品化麻煩語音指令涉及隱私安全這關(guān)必須過具體做法后面代碼部分會(huì)說。最后如果你對(duì)“API 密鑰權(quán)限”這個(gè)概念不熟我再補(bǔ)充一句Secret Key 不能直接出現(xiàn)在前端或客戶端代碼里因?yàn)樗喈?dāng)于管理員密碼。哪怕是嵌入式設(shè)備密鑰也要做混淆或加密存儲(chǔ)最理想的方式是通過你自己的后端服務(wù)代理轉(zhuǎn)發(fā)請(qǐng)求設(shè)備只和你自己的服務(wù)器通信。個(gè)人項(xiàng)目圖省事可以本地存但心里要有這個(gè)安全意識(shí)。4. 音頻采集與格式處理最容易翻車的一環(huán)4.1 I2S 采集的基本原理I2S 是一種數(shù)字音頻總線協(xié)議常見于音頻 ADC/DAC 芯片與主控之間的數(shù)據(jù)交換。它有三根關(guān)鍵信號(hào)線SCK位時(shí)鐘也叫 BCLK、WS聲道選擇也叫 LRCK和 SD串行數(shù)據(jù)。SCK 每個(gè)時(shí)鐘周期傳輸一個(gè) bitWS 用來區(qū)分左右聲道SD 上按位傳輸采樣值。INMP441 作為從設(shè)備接收 ESP32 主機(jī)產(chǎn)生的 SCK 和 WS 信號(hào)再把麥克風(fēng)采集到的聲音數(shù)據(jù)通過 SD 引腳發(fā)送出去。ESP32 側(cè)配置好 I2S 外設(shè)后底層 DMA 會(huì)自動(dòng)把數(shù)據(jù)搬運(yùn)到內(nèi)存緩沖區(qū)你不用死等每個(gè)字節(jié)這對(duì)長(zhǎng)時(shí)間錄音特別重要。用生活類比I2S 就像一條流水線SCK 是傳送帶的節(jié)拍WS 是區(qū)分產(chǎn)品批次左聲道/右聲道的標(biāo)簽SD 是傳送帶上流動(dòng)的貨物。你只需要在流水線末端定時(shí)取貨不需要干預(yù)傳送帶本身。4.2 INMP441 采樣代碼與參數(shù)設(shè)置在 Arduino-ESP32 core 2.x 里I2S 采集代碼可以寫成這樣#include driver/i2s.h #define I2S_WS 15 #define I2S_SCK 14 #define I2S_SD 32 void i2s_init() { i2s_config_t i2s_config { .mode (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX), .sample_rate 16000, .bits_per_sample I2S_BITS_PER_SAMPLE_16BIT, .channel_format I2S_CHANNEL_FMT_ONLY_LEFT, .communication_format I2S_COMM_FORMAT_STAND_I2S, .intr_alloc_flags ESP_INTR_FLAG_LEVEL1, .dma_buf_count 8, .dma_buf_len 1024, .use_apll false, .tx_desc_auto_clear false, .fixed_mclk 0 }; i2s_pin_config_t pin_config { .bck_io_num I2S_SCK, .ws_io_num I2S_WS, .data_out_num I2S_PIN_NO_CHANGE, .data_in_num I2S_SD }; i2s_driver_install(I2S_NUM_0, i2s_config, 0, NULL); i2s_set_pin(I2S_NUM_0, pin_config); }幾個(gè)參數(shù)的重點(diǎn)sample_rate必須等于 16000bits_per_sample必須是 16channel_format設(shè)置成ONLY_LEFT是因?yàn)?INMP441 的 L/R 引腳接了 GND數(shù)據(jù)只在左聲道輸出。dma_buf_count和dma_buf_len共同決定 DMA 緩沖大小8×1024 字節(jié)大概 8KB足夠應(yīng)付 16kHz 音頻流的臨時(shí)存儲(chǔ)。如果你用的是 core 3.xi2s_config_t結(jié)構(gòu)體和安裝接口有變化比如新增了clk_src、mclk_multiple等字段編譯報(bào)錯(cuò)時(shí)去查對(duì)應(yīng)版本的遷移文檔。4.3 音頻數(shù)據(jù)的緩沖、拼接與內(nèi)存管理錄音過程需要把 I2S 讀到的數(shù)據(jù)不斷追加到一個(gè)大緩沖區(qū)里。ESP32 的 SRAM 有限經(jīng)典版可用的堆內(nèi)存也就 200KB 左右所以錄音時(shí)間不能無限長(zhǎng)。我的做法是定義一個(gè)全局?jǐn)?shù)組比如uint8_t audio_buffer[16000 * 2 * 5];也就是 5 秒、16kHz、16bit 單聲道的 PCM 數(shù)據(jù)共 160KB。這個(gè)大小在 ESP32 上可以安全分配。錄制時(shí)用一個(gè)標(biāo)志位控制開始和停止。我習(xí)慣用 GPIO0板載 BOOT 按鍵作為錄音觸發(fā)按下開始錄音松開結(jié)束錄音并自動(dòng)上傳識(shí)別。GPIO0 在運(yùn)行時(shí)需要加上拉電阻Arduino 里可以這樣初始化pinMode(0, INPUT_PULLUP);循環(huán)里讀取按鍵狀態(tài)檢測(cè)到低電平就進(jìn)入錄音狀態(tài)持續(xù)從 I2S 讀數(shù)據(jù)填充 buffer同時(shí)計(jì)算已錄字節(jié)數(shù)。為了避免按鍵抖動(dòng)建議加一個(gè) 50ms 的消抖邏輯。我初期沒做消抖結(jié)果是按一下觸發(fā)兩次錄音浪費(fèi)了不少 API 調(diào)用次數(shù)。內(nèi)存方面還有一個(gè)細(xì)節(jié)如果你用 ArduinoJson 去解析大 JSON 返回它需要額外的堆內(nèi)存。所以錄音 buffer 不要一次性貪大5 秒足夠大多數(shù)指令識(shí)別。識(shí)別完記得立刻釋放動(dòng)態(tài)內(nèi)存否則跑幾次之后堆碎片化嚴(yán)重設(shè)備會(huì)莫名重啟。4.4 信號(hào)質(zhì)量問題與排查錄音質(zhì)量直接影響識(shí)別準(zhǔn)確率這是所有語音識(shí)別項(xiàng)目繞不開的坎。我踩過的坑主要有三類一是電源噪聲。用電腦 USB 供電時(shí)開關(guān)電源的高頻紋波會(huì)竄進(jìn)麥克風(fēng)采集到的音頻底噪很大。解決辦法是改用充電寶或獨(dú)立電源供電或者給 INMP441 的 VDD 加一個(gè) 10uF 和 0.1uF 電容并聯(lián)去耦。二是環(huán)境噪聲。如果你在電腦風(fēng)扇旁邊測(cè)試識(shí)別率會(huì)明顯下降。代碼層面可以加一個(gè)簡(jiǎn)單的能量檢測(cè)只有聲音幅度超過閾值才開始正式錄音這樣可以避免把靜音段傳給云端浪費(fèi)流量。百度開放平臺(tái)還提供“極速版”和“標(biāo)準(zhǔn)版”模型標(biāo)準(zhǔn)版對(duì)噪聲魯棒性更好。三是接線松動(dòng)。杜邦線接觸不良會(huì)導(dǎo)致 I2S 數(shù)據(jù)丟幀音頻聽起來“卡頓”識(shí)別結(jié)果自然是亂的。我排查時(shí)用邏輯分析儀看 SCK/WS/SD 波形或者直接在代碼里打印讀到的數(shù)據(jù)量如果音量明顯異常就檢查 SD 引腳是不是虛接。5. 調(diào)用百度智能云語音識(shí)別 API 的完整實(shí)現(xiàn)5.1 獲取 Access Token 的流程與代碼先把獲取 token 的函數(shù)寫出來我會(huì)用 WiFiClientSecure 做 HTTPS 請(qǐng)求#include WiFi.h #include WiFiClientSecure.h #include ArduinoJson.h const char* apiKey 你的APIKey; const char* secretKey 你的SecretKey; String getAccessToken() { WiFiClientSecure client; client.setInsecure(); String url https://aip.baidubce.com/oauth/2.0/token?grant_typeclient_credentialsclient_id String(apiKey) client_secret String(secretKey); if (!client.connect(aip.baidubce.com, 443)) { Serial.println(token 連接失敗); return ; } client.print(String(GET ) url HTTP/1.1\r\n Host: aip.baidubce.com\r\n Connection: close\r\n\r\n); String response ; while (client.connected() || client.available()) { if (client.available()) { response client.readString(); } } int jsonStart response.indexOf({); if (jsonStart -1) return ; String jsonBody response.substring(jsonStart); DynamicJsonDocument doc(1024); deserializeJson(doc, jsonBody); String token doc[access_token] | ; return token; }這個(gè)函數(shù)會(huì)丟掉 HTTP 響應(yīng)頭只保留 JSON 部分。setInsecure()是跳過證書校驗(yàn)的意思開發(fā)期沒問題。如果你有強(qiáng)迫癥可以把百度服務(wù)器的根證書燒進(jìn)去這樣握手會(huì)校驗(yàn)證書鏈安全性更高但代碼量會(huì)多不少而且證書過期后要重新更新固件。5.2 語音識(shí)別請(qǐng)求的拼裝細(xì)節(jié)獲取 token 后調(diào)用語音識(shí)別接口這一步是全文的重點(diǎn)。接口地址是https://vop.baidu.com/server_api?dev_pid1537dev_pid是模型參數(shù)1537 表示普通話搜索模型適合短句和指令識(shí)別。如果你需要識(shí)別英文可以改成 1737需要方言比如四川話、粵語也有對(duì)應(yīng)的 pid具體看官方文檔。請(qǐng)求方式為 POST請(qǐng)求體直接放原始 PCM 數(shù)據(jù)不要包 JSON不要做 base64。請(qǐng)求頭需要設(shè)置Content-Type: audio/pcm; rate16000注意這里的rate16000必須和實(shí)際采樣率一致。請(qǐng)求頭里還要帶兩個(gè)參數(shù)Host: vop.baidu.com以及請(qǐng)求 URL 上的access_token參數(shù)。我一開始漏掉了Content-Type頭服務(wù)端統(tǒng)一報(bào)3300參數(shù)錯(cuò)誤排查了好一陣才發(fā)現(xiàn)是請(qǐng)求頭的問題。請(qǐng)求體長(zhǎng)度就是 PCM 數(shù)據(jù)的字節(jié)數(shù)HTTP 層用Content-Length聲明。如果你用的是client.print()直接輸出二進(jìn)制數(shù)據(jù)要小心字符串和二進(jìn)制混用導(dǎo)致的數(shù)據(jù)損壞我建議用client.write()發(fā)送 PCM 數(shù)據(jù)。5.3 完整的 Arduino 示例代碼下面給一個(gè)可直接標(biāo)編譯的完整示例按 BOOT 鍵錄音松手識(shí)別結(jié)果通過串口打印#include WiFi.h #include WiFiClientSecure.h #include ArduinoJson.h #include driver/i2s.h const char* ssid 你的WiFi名; const char* password 你的WiFi密碼; const char* apiKey 你的APIKey; const char* secretKey 你的SecretKey; #define I2S_WS 15 #define I2S_SCK 14 #define I2S_SD 32 #define RECORD_BUTTON 0 #define SAMPLE_RATE 16000 #define RECORD_SECONDS 5 #define BUFFER_SIZE (SAMPLE_RATE * 2 * RECORD_SECONDS) uint8_t audio_buffer[BUFFER_SIZE]; volatile bool recording false; size_t recorded_bytes 0; void i2s_init() { i2s_config_t i2s_config { .mode (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX), .sample_rate SAMPLE_RATE, .bits_per_sample I2S_BITS_PER_SAMPLE_16BIT, .channel_format I2S_CHANNEL_FMT_ONLY_LEFT, .communication_format I2S_COMM_FORMAT_STAND_I2S, .intr_alloc_flags ESP_INTR_FLAG_LEVEL1, .dma_buf_count 8, .dma_buf_len 1024, .use_apll false, .tx_desc_auto_clear false, .fixed_mclk 0 }; i2s_pin_config_t pin_config { .bck_io_num I2S_SCK, .ws_io_num I2S_WS, .data_out_num I2S_PIN_NO_CHANGE, .data_in_num I2S_SD }; i2s_driver_install(I2S_NUM_0, i2s_config, 0, NULL); i2s_set_pin(I2S_NUM_0, pin_config); } String getAccessToken() { WiFiClientSecure client; client.setInsecure(); String url https://aip.baidubce.com/oauth/2.0/token?grant_typeclient_credentialsclient_id String(apiKey) client_secret String(secretKey); if (!client.connect(aip.baidubce.com, 443)) { Serial.println(token 連接失敗); return ; } client.print(String(GET ) url HTTP/1.1\r\n Host: aip.baidubce.com\r\n Connection: close\r\n\r\n); String response ; while (client.connected() || client.available()) { if (client.available()) { response client.readString(); } } int jsonStart response.indexOf({); if (jsonStart -1) return ; String jsonBody response.substring(jsonStart); DynamicJsonDocument doc(1024); deserializeJson(doc, jsonBody); return doc[access_token] | ; } String recognizeAudio(uint8_t* data, size_t len, String token) { WiFiClientSecure client; client.setInsecure(); if (!client.connect(vop.baidu.com, 443)) { return 連接識(shí)別接口失敗; } String url https://vop.baidu.com/server_api?dev_pid1537access_token token; client.print(String(POST ) url HTTP/1.1\r\n Host: vop.baidu.com\r\n Content-Type: audio/pcm; rate16000\r\n Content-Length: len \r\n Connection: close\r\n\r\n); client.write(data, len); String response ; while (client.connected() || client.available()) { if (client.available()) { response client.readString(); } } int jsonStart response.indexOf({); if (jsonStart -1) return 響應(yīng)中沒有JSON; String jsonBody response.substring(jsonStart); DynamicJsonDocument doc(2048); if (deserializeJson(doc, jsonBody)) return JSON解析失敗; int err_no doc[err_no] | -1; if (err_no ! 0) { String err_msg doc[err_msg] | 未知錯(cuò)誤; return 錯(cuò)誤 String(err_no) : err_msg; } const char* text doc[result][0] | ; return String(text); } void setup() { Serial.begin(115200); pinMode(RECORD_BUTTON, INPUT_PULLUP); WiFi.begin(ssid, password); while (WiFi.status() ! WL_CONNECTED) { delay(500); Serial.print(.); } Serial.println(\nWiFi 連接成功); i2s_init(); Serial.println(按住 BOOT 鍵說話松手識(shí)別); } void loop() { static bool lastState HIGH; bool btnState digitalRead(RECORD_BUTTON); if (lastState HIGH btnState LOW) { delay(50); if (digitalRead(RECORD_BUTTON) LOW) { recorded_bytes 0; recording true; Serial.println(開始錄音...); } } if (recording) { size_t bytes_read 0; i2s_read(I2S_NUM_0, audio_buffer recorded_bytes, BUFFER_SIZE - recorded_bytes, bytes_read, portMAX_DELAY); recorded_bytes bytes_read; if (recorded_bytes BUFFER_SIZE) { recording false; Serial.println(緩沖區(qū)已滿停止錄音); } } if (lastState LOW btnState HIGH recorded_bytes 0) { delay(50); if (digitalRead(RECORD_BUTTON) HIGH) { recording false; Serial.printf(錄音結(jié)束共 %d 字節(jié)開始識(shí)別...\n, recorded_bytes); String token getAccessToken(); if (token.length() 0) { Serial.println(獲取token失敗); } else { String result recognizeAudio(audio_buffer, recorded_bytes, token); Serial.println(識(shí)別結(jié)果: result); } recorded_bytes 0; } } lastState btnState; delay(10); }代碼邏輯很直白主循環(huán)里檢測(cè) BOOT 按鍵的下降沿開始錄音上升沿結(jié)束并調(diào)用識(shí)別。i2s_read是阻塞讀取但音頻數(shù)據(jù)持續(xù)到達(dá)實(shí)際不會(huì)卡死。要注意BUFFER_SIZE - recorded_bytes這段剩余空間可能不是 DMA 對(duì)齊長(zhǎng)度建議在剩余空間不足一幀比如 1024 字節(jié)時(shí)就停止避免讀到未對(duì)齊地址。5.4 返回結(jié)果解析與錯(cuò)誤碼判斷識(shí)別成功后百度返回的 JSON 結(jié)構(gòu)大致如下{ err_no: 0, err_msg: success, corpus_no: xxx, sn: xxx, result: [打開客廳燈] }result數(shù)組里第一項(xiàng)就是識(shí)別文本。如果err_no不是 0你要學(xué)會(huì)看錯(cuò)誤碼。我整理幾個(gè)實(shí)戰(zhàn)中常見的錯(cuò)誤碼含義解決辦法3300輸入?yún)?shù)不正確檢查請(qǐng)求頭 Content-Type、dev_pid、access_token3301音頻質(zhì)量過差檢查麥克風(fēng)接線、供電、噪聲換安靜環(huán)境3302音頻過長(zhǎng)單次請(qǐng)求限制 60 秒把錄音縮短3303音頻過大原始 PCM 超過 4MB控制時(shí)長(zhǎng)3304采樣率不符合要求代碼里 sample_rate 必須 160003305音頻格式不符合要求確認(rèn)發(fā)送的是裸 PCM不是 WAV 或 base643307服務(wù)繁忙稍后重試或者檢查免費(fèi)額度是否耗盡4001token 無效或過期重新獲取 access_token排查順序我一般是先看錯(cuò)誤碼再查 token再看 Content-Type最后懷疑麥克風(fēng)硬件。如果你同時(shí)改了錄音代碼和請(qǐng)求代碼報(bào) 3300 就先別碰硬件多半是請(qǐng)求格式有誤。6. 常見問題與實(shí)戰(zhàn)排坑記錄6.1 認(rèn)證失敗 401 與 token 過期有段時(shí)間我的設(shè)備跑一兩天就會(huì)報(bào) 401后來定位是 token 過期。我是怎么發(fā)現(xiàn)的打印返回的 JSON 看到error字段再去控制臺(tái)對(duì)比expires_in確認(rèn) token 有效期。解決辦法就是前面說的緩存 token 到 NVS在調(diào)用前判斷“獲取時(shí)間 expires_in”是否早于當(dāng)前時(shí)間過期就重新獲取。如果你用的是WiFiClientSecure還要注意系統(tǒng)時(shí)鐘。TLS 握手會(huì)校驗(yàn)證書有效期設(shè)備時(shí)間不對(duì)可能導(dǎo)致證書校驗(yàn)失敗。ESP32 默認(rèn)沒有 RTC 電池每次開機(jī)時(shí)間從 1970 年開始需要聯(lián)網(wǎng)校時(shí)。我用的方法是請(qǐng)求 token 時(shí)順便通過 HTTP 響應(yīng)頭里的Date字段粗校時(shí)間或者直接調(diào)用configTime走 NTP。開發(fā)階段setInsecure()可以繞過這個(gè)坑但產(chǎn)品化一定得校時(shí)。另外一個(gè)很容易忽略的點(diǎn)百度的 token 接口是aip.baidubce.com語音識(shí)別接口是vop.baidu.com兩者域名不同證書主體也不同。如果你把 token 接口的證書固定到語音識(shí)別請(qǐng)求里會(huì)出現(xiàn)服務(wù)端證書不匹配的問題。6.2 音頻格式報(bào)錯(cuò) 3300 系列這個(gè)系列是重災(zāi)區(qū)。我接到過不少私信說代碼沒問題但一直報(bào) 3300。每次我都先問一句你發(fā)送的是原始 PCM 還是 WAV是不是把a(bǔ)udio/pcm寫成了audio/wav是不是采樣率填了 441003300 通常不是硬件問題而是請(qǐng)求格式問題。我總結(jié)幾個(gè)最隱蔽的坑一是Content-Type少了rate16000參數(shù)服務(wù)端不知道采樣率直接攔截。二是dev_pid寫錯(cuò)比如寫成 1937極速版普通話卻用標(biāo)準(zhǔn)版前置邏輯返回的參數(shù)校驗(yàn)邏輯也不同。三是 URL 里的access_token帶上了引號(hào)或換行符導(dǎo)致鑒權(quán)失敗。如果你用的是電腦端 Python 腳本先調(diào)試再移植到 ESP32我建議調(diào)試時(shí)用 curl 發(fā)一次裸 PCM 請(qǐng)求確認(rèn)接口沒問題再回嵌入式環(huán)境找差異。curl 命令大致是curl -X POST -H Content-Type: audio/pcm; rate16000 --data-binary test.pcm https://vop.baidu.com/server_api?dev_pid1537access_token你的token這樣能快速區(qū)分是接口配置問題還是 ESP32 代碼問題。我在好幾個(gè)項(xiàng)目里都是靠這招定位錯(cuò)誤的。6.3 識(shí)別結(jié)果不準(zhǔn)或?yàn)榭兆R(shí)別返回成功但是文字亂碼或者干脆是空字符串這時(shí)候問題基本在音頻質(zhì)量。先做一件事把錄音數(shù)據(jù)導(dǎo)出來在電腦上聽一下。怎么導(dǎo)ESP32 通過串口把 buffer 數(shù)據(jù)發(fā)到電腦存成.pcm文件再用 Audacity 導(dǎo)入設(shè)置采樣率 16000、單聲道、16bit播放聽聽。我遇到過一種“說話聲太小”的情況原因是 INMP441 的靈敏度有限人離麥克風(fēng)超過 30 厘米識(shí)別率就直線下降。解決方法是把麥克風(fēng)固定朝向說話人保持 10 到 20 厘米距離。如果環(huán)境噪聲大可以考慮加一個(gè)簡(jiǎn)單的靜音檢測(cè)只有聲音超過閾值才錄音避免靜音段浪費(fèi)上下文。還有一個(gè)細(xì)節(jié)錄音開頭和結(jié)尾容易有咔噠聲或爆音可以在發(fā)送前裁掉前 100ms 和后 100ms 的數(shù)據(jù)。方法很簡(jiǎn)單從audio_buffer的偏移量開始發(fā)送長(zhǎng)度減去 3200 字節(jié)100ms × 3200 字節(jié)/100ms。這個(gè)小技巧能提升一點(diǎn)點(diǎn)識(shí)別率尤其適合指令式短句。6.4 運(yùn)行內(nèi)存不夠、卡死、丟數(shù)據(jù)ESP32 的堆內(nèi)存是寶貴資源動(dòng)態(tài)分配不當(dāng)會(huì)讓人焦頭爛額。ArduinoJson 的DynamicJsonDocument在解析響應(yīng)時(shí)會(huì)占用棧和堆如果你同時(shí)開了一個(gè) 160KB 的錄音 buffer再解析 2KB 的 JSON內(nèi)存就有點(diǎn)緊張。解決思路是把 buffer 定義成全局靜態(tài)數(shù)組不要用malloc動(dòng)態(tài)分配解析完后立刻讓doc變量離開作用域釋放內(nèi)存。另外一個(gè)卡死的典型原因是i2s_read的阻塞超時(shí)參數(shù)設(shè)置不當(dāng)。portMAX_DELAY會(huì)讓線程無限期等待數(shù)據(jù)如果 I2S 驅(qū)動(dòng)異常程序會(huì)卡死。我建議超時(shí)設(shè)置成1000 / portTICK_PERIOD_MS并且在主循環(huán)里加一個(gè)看門狗喂狗邏輯萬一哪里卡住至少能自動(dòng)重啟。數(shù)據(jù)丟失的問題多半出在 DMA 緩沖區(qū)大小不夠或者讀取不及時(shí)。dma_buf_count和dma_buf_len我習(xí)慣用 8 和 1024也就是 8 個(gè) 1024 字節(jié)的 DMA 緩沖。如果你發(fā)現(xiàn)錄音數(shù)據(jù)有周期性斷點(diǎn)可以增大dma_buf_count到 16代價(jià)是多占 16KB 內(nèi)存兩者權(quán)衡。6.5 結(jié)合熱搜話題補(bǔ)充的幾類擴(kuò)展方向不少讀者在社區(qū)里問過 ESP32 相關(guān)的延展問題我自己也做過一些嘗試這里統(tǒng)一說說。關(guān)于“ESP32 接入米家 mesh”或“ESP32 IDF 接入語音識(shí)別”這兩個(gè)方向都是本項(xiàng)目的自然延伸。米家 mesh 主要走 BLE MeshESP32 的藍(lán)牙協(xié)議棧支持 BLE可以承擔(dān)網(wǎng)關(guān)或子設(shè)備角色但和本項(xiàng)目用的是同一套硬件不同的只是通信協(xié)議。ESP-IDF 版語音識(shí)別就是把 Arduino 代碼翻譯成 IDF 組件核心還是 I2S 采集和 HTTPS 請(qǐng)求邏輯完全一致只是 API 風(fēng)格更底層。關(guān)于“esp32 燒錄器”和“esp32 燒錄方式”我建議新手上手直接用 USB 串口燒錄開發(fā)板自帶 USB 轉(zhuǎn)串口。如果需要批量燒錄可以買一個(gè) ESP32 燒錄器其實(shí)就是 USB 轉(zhuǎn) TTL 模塊接 GND、TX、RX、3V3、EN、GPIO0 六根線配合 esptool 命令行操作。注意 GPIO0 在下載時(shí)要拉低ESP32 才會(huì)進(jìn)入下載模式?!癊SP32 對(duì)比 STM32”這句話也是搜索高頻詞。我的結(jié)論是如果項(xiàng)目有復(fù)雜聯(lián)網(wǎng)需求ESP32 優(yōu)先如果項(xiàng)目強(qiáng)依賴實(shí)時(shí)控制、需要車規(guī)級(jí)穩(wěn)定性STM32 優(yōu)先。兩者也可以組合使用STM32 負(fù)責(zé)控制ESP32 負(fù)責(zé)聯(lián)網(wǎng)和語音識(shí)別通過串口通信。這個(gè)組合實(shí)測(cè)下來很穩(wěn)我后面會(huì)單獨(dú)寫一篇。個(gè)人實(shí)操心得最后說點(diǎn)掏心窩的話。這個(gè)項(xiàng)目我前后調(diào)了兩周才跑通最耽誤時(shí)間的不是代碼本身而是對(duì)音頻的“敬畏感不足”。一開始我也覺得錄音、上傳、拿結(jié)果不就三步嗎結(jié)果被 I2S 的聲道配置、PCM 的格式、HTTPS 的證書這三座大山反復(fù)教育。后來我把每一步都拆開驗(yàn)證先用電腦生成一段 PCM 文件直接調(diào)接口確認(rèn)云端能識(shí)別再讓 ESP32 錄音后通過串口發(fā)到電腦檢查音頻質(zhì)量最后才把采集和上傳串成閉環(huán)。這條“先驗(yàn)證云端再驗(yàn)證采集最后端到端聯(lián)調(diào)”的路徑我建議所有做同類項(xiàng)目的朋友都采用能省下一大半的調(diào)試時(shí)間。ESP32 加百度智能云這套組合做語音控制、語音打卡、語音助手都足夠順手希望這篇指南能幫你少踩幾個(gè)我踩過的坑。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
免费观看2018www黄色操逼网站| 激情都市另类| 激情欧美婷五月| 亚洲狠狠丁香婷婷香蕉| 丁香五月婷婷基地| 久久9视频欧美| ss99热| 大香蕉九九热| 蜜桃婷婷狠狠久久综合| 国模狼狼| 日本一级黄色片。| 激情六月婷婷| 99无码精品| 婷婷五月天综合在线| 久久久人妻不卡| 欧美日韩国产一二区| 玖玖在线视| 婷婷丁香五月天在线| 婷婷六月啪啪| 99色天堂| 五月天综合久久| 97操碰日本女人| 噜噜五月天综合| 婷婷五月视屏| 久久久噜噜噜久久人妻| 婷婷狠狠97| 六月五月婷婷| 久久这里只有精品16| 婷婷激情五月| 99re99在线看| 久这里只有精品| 色欲影香| 亚洲网视屏| 久久六月综合| 激情五月丁香六月综合AVXXXX| 熟女色色一区二区| 99在线看片| 韩国中文字幕91| 99热| 欧美槡BBBB槡BBB少妇| 亭亭五月色男人| 激情综合网五月丁香| 色情五月综合婷婷| 99视频只有精品| 99re这里只有精品在线观看| 五月丁香六月婷婷综合网缴情| 婷婷丁香五月精品| 极品五月天| 色吧五月婷婷| 天天噜天天爱| 丁香五月天之婷婷影院| 激情综合五月丁香六月婷婷| 色婷另类| 粉嫩av懂色av蜜臀av熟妇| 99久在线精品99re8热| 天天日天天干天天插天天射| 天天综合社区| 天天日天天插| 久综合网| 九月婷婷综合色干| 五月丁香啪啪婷婷| www.狠狠狠狠| 26uuu在线观看| 思思国产99| 欧美激情综合色丁香婷婷五月天| 久碰婷婷视频| 九九成人视频| 久久五月丁香综合| 超碰日日操| 日韩人妻在线观看| 婷婷亚洲在线| 99玖玖免费视频| 97天堂| 天天狠狠夜夜狠狠2023| 婷婷中文综合网| 婷婷婷久久| 色站9/| 91久久| 精品久久99| 婷婷在线播放av| 激情综合五月激情| 久久美女五月天| 99热在线精品播放| 精品日本视频444| 久久丁香婷婷色情综合| 五月综合色| 欧爱综合视频| 五月婷在线观看| 天天插天天干| 成人版视频在线观看| 五月丁色AV| 日日鲁鲁夜夜爽爽| 婷婷精品免费久久| 久久99日本精品视频免费观看| 丁香婷婷五月六月久久| 深爱五月日韩| 北京熟妇搡BBBB搡BBBB| 亚洲另类婷婷综合| 五月激激激情综合网| 久久性爱视频| 激情视频综合| 九九色视频| 97色在线| 丁香五月网址| 天天插综合| 日日干天天爽| 激情伊人| 国产avapp 网| 久久新地此| 热的无码综合视频| 99ER热精品视频| 99九九在线视频| 色青青视频| 色色五月天婷婷丁香| 这里只有精品久久| 人人草公开操| 五月激情综合网| 99视频在线啪| 婷婷丁香五月综合激情视频| 播丁香五月婷婷欧美| 五月丁香激情四射| w婷婷五月婷婷w| Av中文在线| 国产亚洲色婷婷99精品| 开心激情五月天网| aaaaa不卡| 天天干夜夜谢| www.99热在线| 五月天停婷基地| 超碰人妻公开在线| 天天干天天色天天干| 久热伊人| 99热免费网站| 成人av免费观看| 五月丁香啪啪综合| 狠狠干综合| 九色 在线| 亚洲免费99| 婷婷五月天伊人| 色五月aV| 黄网在线播放| 婷婷成人在线| 五月天综合在线| 99玖玖在线视频| 欧美激情综合色综合色| 色啦啦视频| 婷婷六月综合在线| 91.www综合| 激情综合网婷婷久久| 色综合五月天| 婷婷五月永远18免费久久久| 久久免费高| 天色综合网站| 天堂无码人妻精品AV一区| 五月天婷婷成人网| 另类丁香五月天区图| 色婷婷久久| 91狠狠综合久久| www.henhenl| 久久伊人9| 免费97碰碰| 欧美在线看| 日本va欧美va精品发布视频| 狠狠综合区| 婷婷五月综合基地| 五月丁香色婷婷| 亚洲AV成人无码电影| 五月天六月婷婷| 91av无码| 婷婷六月丁香五月| 狠狠操婷婷| 亚洲综合色激情色五月| 99九九综合久久九九| 国产操B视频| 久久九九爽| 伊人五月天综合网| 五月天另类小说久久小说网| 超碰在线成人| 狠狠色婷婷六月激情网| 99精品人人| 激情AV| 五月综合视频在线| 1024你懂的欧美曰韩| 五月丁香婷婷深深爱| 九色无码| 伊久大香蕉| 噜噜国产| 五月色丁香国产在线视频| 五月丁香婷婷激情爱爱| 99热欧美| 成人电影AV在线观看| 五六月婷婷| 99久久喉9| 丁香五月激情婷婷婷婷在线观看| 另类五月婷婷| 91色操| 六月丁香网| 五月婷激情| 激情小说五月天| 亚洲av综合在线| 久99久在线| 四色 爱 婷婷 精品 亚洲 五月天| 激情九月丁香婷婷| 狠狠狠狠狠狠| 日韩成人网址| 激情五月五月婷婷| 人人看人人草人人摸| 亚洲av日韩无码| 五月天色五月| 久热这里| 在线中文字幕av| 人妻在线中文字幕久久| 在线观看五月婷婷网| 人妻有码乱操| 婷婷综合婷婷| 成人无码精品1区2区3区免费看| 婷婷五月天免费视频| 91操人| www超碰com| 99热只有这里有精品| 日日艹思思热| 国产成人va在线| 亚洲综合视频在线| 五月婷婷色综图片| 日韩黄色电影| 日韩精品超碰在线观看| 操婷婷久久| 五月激情影院| 激情五月天婷婷| 97在线/亚洲| 婷婷五月激情视频| 人妻VideOssS人妻高清| 噜噜噜精品欧美成人在线观看| 超碰人人在线| 色婷婷婷av| 婷婷激情六月综合| 婷婷99狠狠躁天天躁中文| 中文字幕无码人妻少妇免费视频 | 996热| 九九干视频| 夜夜骑福利资源| 干亚洲天堂| 国产激情视频在线观看| ww亚洲ww在线观看| 激情综合网,五月| 丁香五月自拍| 婷婷五月天深爱| 天天日天天插天天操| 人人九色| 97人人干人人操| 五月天久久综合| 婷婷刺激综合| 成人在线精品| 天天爽天天日人人爱| 噜噜狠狠| 都市激情五月婷婷综合| 丁香婷婷五色月| 婷婷五日b| 六月色日韩| 五月开心婷婷极品激情| site:esunnet.com| 婷婷色欧美激情| 婷婷五月天综合色| 日本女人久久| 中文字幕无码人妻少妇免费视频| 婷婷最新地址| 国产精品色婷婷久久久精品| 五月婷婷在线短视频| 久热精品视频在线观| 99综合| 丁香六月色香蕉视频| 色综合色综合婷婷热| 天干干夜夜操| 久久婷婷视频| 99色在线| 激情五月丁香六月综合AVXXXX| 日本久久人| 亚洲另类婷婷综合| 五月丁香久久激情网| 美国天天日天天操| 亚洲AV人人操| AA片在线观看视频在线播放| www久久久久久| 亚洲AV网站在线观看| av九九| 五月丁香亚洲五月| 夜夜躁婷婷AV| 久色精品| 狠狠综合网| 免费精品66| 国精产品一区二区三区| 五月天婷婷av| tingtingseav| 五月丁香手机在线| 丁香五月亚洲| 午夜大香蕉| 国产操逼视频网站| 99色色热| 久久WW| 国产精自产拍久久久久久蜜| 婷婷色操| 久久视频九九视频| 91精品综合久久久久久五月丁香| 99草在线免费观看视频| 九九蜜臀精品| 亚洲AV人人操| 香蕉伊人综合| 九九机热| .精品久久久麻豆国产精品| 国产中文字幕在线视频免费观看| 插插插色综合网| 少妇人妻人伦A片| 中文字幕在线免费看线人| 天堂网色婷婷| 丁香五月婷婷欧美成人色图| 99久久久久| 九九偷拍网| 五月丁香六月欧美综合| 丁香五月五月婷婷| 六月丁香大香蕉| 五月丁香无码视频| 久久五月婷6 9| 五月丁香大香蕉| 国产三级秋霞| 中文字幕不卡网站| 色五月婷婷激情五月| 亚洲AV成人精品日韩在线播放| 丁香五月婷婷总啪啪| 亚洲婷婷五月天在线激情综合网| 五月天综合久久| 免费看欧美成人A片无码| 高清不卡一区| 99乱视频| 久草视频一,二三四| 天天操综合网站| 少妇AB又爽又紧无码网站 | 99热这里是精品| 啪啪东京热| 色婷婷五月综合在线| 五月婷婷色播| 色五月综合婷婷久久综合婷婷久久综合婷婷久久综合婷婷久久 | www.激情五月| 激情色色| 99碰碰| 综合网色| 五月丁香影院| 激情六月下句是什么| 中文字幕永久在线| 蜜臀A∨在线水帘洞| 色吧五月婷婷| 激情综合网,婷婷| 色一情一乱一乱一区91Av| 亚洲一级AV在线免费播放| 99色在线观看视频| 亚洲视频在线网| 我要射综合| 日韩在线观看网址| 综合婷婷五月丁香在线观看| 久久机热探花| 91Chinese在线| 丁香密臀AV激情网| 色综合com| 亚洲AV日韩无码| 激情爱爱网站| 久久只有精| 五月天社区| www。狠狠干。com| 两性婷婷丁香五月| 99色色网| 婷婷激情中文综合| 精品一二三区久久AAA片| 九热在线这里有精品6| 91碰碰| 日批在线看| 久久人妻超碰一区| 99在线免费观看| 五月丁香色婷婷久久| 99操久久| 国熟女视频| 狠狠婷婷日韩| 久久 婷婷 五月天| 另类婷婷丁香| 色婷婷五月成人网| www.色婷婷| 伊人婷婷五月| 久久 婷婷 五月天| 色婷婷激情Av久久久| 亚洲最大视频| 丁香无五月网| 玖玖爱导航| 色婷婷综合网站| 五月丁香av在线| 依人大香蕉在钱1| 婷婷五月六月丁香| 色综合天天网| 久婷首页| 欧美 日韩 人妻 高清 中文| 99免费在线视频| 另类五月婷婷| 亚洲色人妻| 99热91| 久久久久婷婷五月热综合| 欧美狠狠草| 无码 av电影| 激情五月影院| 人妻系列久久久久久久久久久| 97碰精品| 婷婷五月天成人| www,99热| 五月天婷婷色播在线网| 九色视频91| 欧美性爱丁香五月| 色婷婷亚洲婷婷| 丁香五月天在线| 日韩亚洲视频| 999久久久国产精品| 亚洲中文字幕在线观看| 九九黄色网| av免费人人| 99久在线视频| 亚洲在线视频321| 99精品国产在热久久| 无码橾| 精品三区影院| 久久久月丁香| 五月天天天综合| 狼友超碰| 亚洲婷婷丁香五月| 国内9l视频自拍老熟女九色| 欧美激情综合五月色丁香| 97人人做| 丁香五月婷婷av| 这里只有精彩亚洲视频推荐| 婷婷久久六月天| www久久久| 激情久久久久久久久久| 久久大香蕉伊人| 丁香五月花影院| 激情AV| 色九九综合| 精品人妻一区二区| 免费在线观看欧美激情xx小视频| 伊人深爱综合| 26uuu欧美激情另类| 六月丁香深深爱| 丁香五月婷婷六月婷婷| 任你艹| 精品久久9| 久久丁香婷婷五月| 99热综合色图| 变态另类9| 欧美色图天堂网色| 狠狠爱激情网| 色情五月天丁香社区| 色婷亚洲五月丁香| 91九色中文字幕女在线观看| 久久狼人天堂| 久久这里只有精彩| WWW、日本色丁香、co m| 2025中文在线视频字幕免费观看| 五月综合婷婷网| 五月婷高清视频| 久久亚洲精品成人无码网站导航| www.99热视频在线观看| 丁香五月天五码婷婷| 婷婷五月天亚洲激情戏精品| 天天天天爽爽天干| 久热这里| 亚洲精品亚洲人成人网| 人妻人人操| 91精品91久久久中77777| XX久久| 日韩精品AV一区二区三区| 天天艹夜夜艹| 99热个人在线| 97碰碰久久| 激情婷婷五月丁香啪啪啪| 五月天婷婷色播综合在线| 1024亚洲无码| 久久精品天| 色欲久久久久久综合网综合网| 五月丁香婷婷激情四射迷人| 91九色 婷婷| 六月婷婷激情| 久久精品小视频| 丁香五月天天高清在线| 99综合一区| 开心激情五月天网| 丁香五月婷婷国产av| 日韩无码亚欧无码| 色噜噜综合网| 99爱免费在线视频| 天天天天干| 97碰啪啪| 五月丁香婷婷狠狠操| 日韩国产在线免费观看| 久久亚洲婷婷综合色五月| 色色aⅤ網| 亚洲中文乱字字幕在线永久| 婷婷丁香18| 亚洲成人AV高清字幕| 99干在线视频| 噜综合| 情婷婷五月天| 99热这里只有精品99| 婷婷色色欧美综合网| 超级碰碰碰碰视频| 日日干日日s| 丁香六月激情| 欧美色男人网站| 婷婷五月天情色| 激情开心五月婷婷| 久久久精品AV| 日本nghangse中文字幕| 色婷婷五月六月丁香综合视频| 色五月成人网| 日本天天操| 激情丁香图片| 这里只有精品视频99| 天天操天爱综合| 操逼123网| 伊人丁香五月| 色情五月丁香| 婷婷精品在线| 婷婷的99视频网站| 天天做综合网色综合| 色婷婷中文| 婷婷五月激情图片| 色色色色色色网站| 日韩ww| 九月婷婷久久久| 黄色激情五月天| 亚洲综合五月天婷婷丁香| 激情丁香五月AV| 五月婷婷亚洲综合网| 秋霞AV淫| 九月大香蕉| 天天日天天操天天干| 五月天综合视频| 亭亭五月基地在线| 婷婷五月天久久| 国产一二区爆乳_1国产日韩一区二区三-成人AV | 欧美天堂久久| 婷婷欧美激情| 天天干夜晚夜操| 百度一下国产精品A| 日日干夜夜撸夜夜骑| 能看的AV| 久鲁鲁色网| 婷婷激情五月| 久久婷婷热| 久青操| 影音先锋91男人资源在线播放| 甈吧vv| 丁香五月激情五月| 五月亭亭六月激情| 欧美日韩中文国产一区发布| 男人天堂亚洲综合| xx久久| www婷婷| 久久曰曰| 色婷婷激情| 看婷婷五月天网| 在线另类| 777久久精品| 色婷婷av在线观看| 成人欧美一区二区三区在线观看| 99色在线| 久久草婷婷丁香网站| 国产精品久久欧美久久一区| 襙比视频| 操碰99在线视频观看| 婷婷丁香在线播放| 97操碰在线视频| 五月婷婷深深爱| 五月婷婷激情性爱| 天天日天天插| 开心五月丁香啪| 伊人免费视频9| 五月丁香六月激情欧美综合| 夜夜大香蕉婷婷丁香| 91精品久久久久久| 久热这里这里有精品| 最近免费中文字幕大全高清大全1| 激情亚洲五月| 天堂网亚洲色图| 五月婷婷激情综合av| 精品女人九九九| 伊人五月天在线| 色五月婷婷丁香国产在线| 香蕉久久av一区二区三区| 99er视频在线| 成人五月天丁香婷| 午夜不卡久久精品无码免费| 伊人五月天在线| 情色五月天网站| 综合激情五月丁香| 婷婷六月激情在线视频| 97操操操| 国产亚洲AV人片在线| 欧美日本不卡黄色片| 婷婷狠狠干| 丁香五月色色| 淫视馆av三区| 久激情网| 这里只有精品网| 啊v视频在线观看| 亚洲亚洲人成综合网络| 伊人网碰碰| 五月婷婷视频啪啪美女| www.com.色色| 中文字幕丰满孑伦无码专区| 亚洲无码99| 九九视频免费| 国产小网站| 天天综合网站| 久操激情| 久久ab| 激情久久四色| 91打屁股视频网站| 熟惀91九色在线| 久久这里都是精品免费| 这里只有精品网站| 亚洲午夜AV| 五月丁香激情四射综合| 五月婷婷香蕉| 中文av网| 五月婷婷五月天在线| 久久久er热| 久久9久久| 123日本不卡在线| 色爱五月天| 天天干天天干天天干天天干天天干| 婷婷五月成人有| 97人操人免费视频| 久久综合香蕉国产国产蜜臀AV| 色五月播五月| 丁香色五月 97干| 99re鈥哸鈥唙| 五月丁香欧美在线| 婷婷五月丁香激情色情| 大香蕉啪啪啪| 久久久大香蕉| 99热精品网| 五月婷婷av在线| 亚洲五月天激情| 亚洲激情AV| 在线中文亚洲| 天天色天天操天天射| 色色婷婷综合网| 26uuu国产色| 亚洲综合字幕色色| 激情九月婷婷| 超碰免费成人| 天堂久久精品| 五月丁香六月婷| 九月婷婷激情| AV无码免费| 色久99| 婷婷五月综合免费在线| 丁香婷婷综合色五月激情国产基地| 国产精品天天狠天天看| 色欲一区二区三区精品A片| 久久久噜噜噜久久人妻| www.色综合| 五月婷婷六月激情| 五月天成人综合| 91久热| 亚洲亚洲人成综合网络| 国产AV一区二区三区日韩| 激情婷婷| 超碰国产在线播放| 日韩三十六页| 日日噜噜久久婷婷五月天| 超碰永久在线| 丁香 亚洲 久久| 97碰碰碰| 婷婷性爱影院| 美臀自射自家人妻| 久色网五月| 色区域网站视频| 亚洲六月色| 丁香久月| 日日夜夜婷婷| 午夜精品久久久久久久爽| 影音先锋日本三级资源| 久久久五月天婷婷| 日本97久久久精品| 亚洲人妻av| 久久99热免费| www.色色色色| 亚洲区视频| 五月天婷婷综合| 热99色| 一二区成人电影| 亚洲五月婷婷| 婷婷四色五月| 色九月婷婷丁香| 99热这里只有精品4| 亚洲无AV在线中文字幕| 波多野结衣成人作品在线| 91日韩美女被插视频| 久久久激情视频| 99久久这里只有精品免费官网| 色婷婷亚洲在线| 亚洲午夜一区二区| 99无码| 久久免费精彩视频| 日本va欧美va欧美va| 丁香五月乱中文字幕| 激情图片婷婷丁香五月| www.婷婷五月天| 久久久27操| 97人碰人操| 只有精品视频在线观看| 99热精品在线在线| 在线观看亚洲AV| 高清国产AV| 很操日本7| 99视频精品8| 婷婷丁香五月天激情| 亚洲免费观看高清完整版AV线| 天天久久狠狠色综合| 99国产精品久久久久久久久久久| 婷婷天天色| 噜噜噜久久| www,天天干| 久热免费视频| 色九九七七| 五月婷婷综合激情| 人妻激情综合| 五月丁香亚州综合网| 无码四色色色| 日本久久精品18| 婷婷最新地址| 99免费成人网| 激情久久久久久久久| 五月天丁香婷婷视频网址| 伊人网欧美在线男人天堂五月丁香 | 伊人网色婷婷五月天| AV在线中文| 91碰操| 婷婷五月天,影院| 亚洲综合九九| 综合色网站| www色五月天| 精品一区二区三区免费毛片爱| 手机在线日韩视频中文字幕| 美女五月天| 99热热热99精品丁香| 91综合在线| 久久婷婷五月综合伊人| 九九人人看| 欧美丁香五月| 国产av第一专区| 深爱开心激情网| 99色热| 激情网站五月| 综合激情视频| 99er6免费视频热播| 涩综合网| 美女激情综合| 色久女| 婷婷大乡焦噜噜| 激情五月婷婷五月| 涩 五月 婷婷 狠狠| 79色色| 五月丁香另类网| 婷婷香五月综合激情| 色欧美一级| www,五月丁,com| http://www.com久久久精品一区| 国产裸舞福利资源在线视频| 丁香五月影院| 五月丁香六月婷婷综合免| 北京熟妇搡BBBB搡BBBB| 婷婷丁香五另类网站| 国产午夜成人AV在线播放| 久久与婷婷| 搡BBBB搡BBB搡18| 天天日夜夜操五月| 亚洲av另类在线观看| 99热99热不卡| 色婷亚洲| 大香蕉久| 久久这里在精品视频| 日日做A爰片久久毛片A片英语| 婷婷九月激情网| 婷婷五月天国产传媒| 天天操夜夜爽歪歪| 色色九九五月天| 亚洲精品视频在线播放| 婷婷五月天激情网址| 丁香五月成人| 亚洲成人噜噜| 97婷婷丁香| 色激情五月天| 五月婷婷之激情五月| 大香伊人婷婷影院| 久久永久视频| 99色啊| 中文字幕不卡网站| 综合久久久| 操操操www.com| 4399无码视频| 天堂综合久| 欧美五月丁香啪啪响视频| 校花娇喘呻吟校长陈若雪视频| 丁香九月婷婷色| 97极品在线| 激情视频网址| 激情五月天激情综合网| 色综合久久综合中文综合网| 亚洲人妻av伦理| 亚洲欧美一区二区三区四区爱爱动图| 人妻aV在线| 少妇做爰免费视看片| 五月天色婷婷网| 99精品久久久| 九月丁香很很色| 综合激情在线| 操逼在线视频| 久久久五月五丁香| 亚洲激情四谢| 九九色热| 久久一热| 丁香六月色婷婷欧美| 婷婷五月娱乐在线| 久色激情| 26uuu日韩| 国内婷婷丁香社区在线播放| 激情婷婷网| 激情综合五月婷婷| 99色在线观看视频| 婷婷丁香五月天小说| 成人网站免费在线播放| 色五月,com| 婷婷五月天亚洲| 色五月综合在线| 婷婷丁香五月天在线视频| 99.N在线视频| 影音先锋五月婷婷| 中文字幕成人| 婷婷丁香激情综合色情| 久久成人天| 99亚色色色| 67194中文字幕| 久婷婷视平| 99这里有精品| 婷婷丁香花五月天| www.色五月.com| www.狠狠操.com| 激情五月综合网| 色五月婷婷五月天激情综合| 97超级碰人人| 免费视频WWW在线观看网站| 婷婷久久大香蕉| 婷婷成人五月天成人文学| 婷婷五月丁香成人| 国产色丁香| 婷婷五月激情图片| 91日韩美女被插视频| 狠狠色综合久久久久| AA片在线观看视频在线播放| 日韩另类| 思思热视频在线| 99热青青草| 国产精品视频免费看| 五月丁香六月婷婷网| 五月天社区狠狠| 五月天激情日色在线| 狠狠另类视频| 秋霞午夜理论| 99噜噜噜在线播放| 天天狠狠婷婷在线| 久久久人妻人伦| 狠狠操狠狠爱| 丁香五月1页| 国产韩日亚洲美州欧亚综合在线| 色婷婷成人网| 婷婷五月电影院| 人人操插| 色综合色色| 婷婷五月色| 丁香五月婷婷啪啪| 日本色道视频网站| 色婷婷丁香网| 婷婷丁香五月激情综合站_久久五月丁香激情综合_开心五月综合激情综合五月_婷 | 爱操天堂| 97资源碰碰| 色婷婷亚洲精品天天综| 五月 婷 久| 五月丁香六月婷| 五月丁香六月激情综合在线| 99色色最新视频| 色婷綜合网| 色婷婷丁香AV综合| 国产日日操夜夜操的肉棒视频| 极品 少妇 内射| 天天爽天天爽夜夜爽| 婷婷爱五月天人人爱| 六月婷婷国产| 久久久久久99日本| 欧美三级韩国三级日本三斤| 91人人妻人人操人人爽| 丁香五月激情欧美| 日本久久婷婷| 久久婷婷网| 美国少妇性做爰| av不卡网站| 五月天另类图片区99| 欧美在线看| 久久五月天精品视频| 五月丁六月香av| 99热这里只有精品最新| 婷婷九月在线| 亚洲中文字幕av| 色色色色丁香| 伦99热| 色综合久| 99精品无码网站| 亚洲va成人va成人va在线观看| 激情综合九月| 另类少妇人与禽zOZZ0性伦| 色播jjjj| 激情性爱五月| 色小说婷婷五月天天天| 天天综合网网欲色| 亚洲无码播放| 丁香性爱在线视频| 国产精品色婷婷久久久精品| 天天草人人摸| 婷婷五月综合激情免费视频| 日本综合色色| 色啦啦视频| 五月丁香婷婷综合久久| 五月社区婷婷激情| 91久久色| 欧美三级巜人妻互换| 熟女91九色| 日日操夜夜爽天天天| 色情五月综合婷婷| 国产精品一区在线观看你懂的| 99久久婷婷综合| 99热99在线| 丁香5月婷婷| 久久国产色| 婷婷综合干| peg 2区三区四区的| 色播五月婷婷| 国产欧美日韩综合精品一区二区| 婷婷五月,偷窥偷拍网| 亚洲丁香婷婷五月天综合色| 亚洲热视频在线| 久久五月天婷婷| 综合伊人久久| 午夜婷婷五月天在线| 99re思思热久久| 中文字幕第四色.999| 成人婷婷五月天| 玖玖爱综合网| 婷婷免费视频| 欧美性爱特黄一级aaaassss| 色五月天堂| 丁香五月停停av| 欧美日韩大黄| 中文字幕成人| 9视频1在线| 婷婷十月丁香| 开心激情站| 丁香九月激情| 91日视频| 五月丁香日逼| 六月亭亭久久综合激情| 色色色综合| 五月色色色| 成人网址在线观看| Caoub青青超碰| 5月婷婷性视频| 久久久中文| 婷婷久久综合久| 99精品久久久久| 丁香青青五月天| 丁香五月激情性色郤| 天天爽天天爽| 久久99网站| 婷婷五月丁香久久| 黄色精品五月婷婷| 99热国产免费| 第1影院之五月婷婷| 69色色视频| 91嫩草国产线观看亚洲一区二区| 色婷婷视频| 九九精品热| 免费视频舔| 亚洲五月婷婷| 综合五月天亚洲婷婷| 成人丁香| 另类色网| 五月婷婷综合在线| 亚洲精品五十一区| 婷婷大香蕉| 热无码A∨| 中文字幕日产A片在线看| 色婷婷五月天亚洲| 综合网色| 天天草婷婷五月| 成人片黄网站色大片免费毛片| 99热99网| 99这里只有精品| 激情图片婷婷| 七月丁香五月婷婷在线| 丁香五月六月激情| 五月婷九月| 婷婷免费视频| 久大香蕉| 可以直接看的av| 五月丁香六月婷婷啪啪综合| 欧美激情综合色综合啪啪五月| 亚洲激情 久久| 51精品国自产在线| 天天综合亚洲综合| 婷婷亚州综合| 成人永久免费视频在线观看| 国产五月天婷婷| 色婷婷小说| 99久久99热| 丁香婷婷天堂| 五月丁香六月婷婷色日| 丁香五月激情棕合| 色色热| 99热这里有精品2| 国产婷婷五月| 日本人妻A片成人免费看片| 人人色婷婷五月天| av在线婷婷| 激情久久丁香| 成人精品一区二区三区四区五区| 精品亚洲国产成人A片在线鸭王| 五月色天五月色| www.99热这里精品| 人人干av| 青青草视频福利| 色五月婷婷自拍| 日本狠狠干| 天天操综合网站| 97视频.干com| 欧美日韩欧美| 激情五月婷婷网| 激情综合5| 日本www免费九九| 99色中文| 五月天婷婷伊人| 婷婷的色色五月天| www.超碰在线| 九九这里都是精品| 色婷婷狠狠| 丁香五月激情综合久久| 91热在线| 婷婷丁香五月,狠狠综合| 精品亚洲国产成AV人片传媒| 国产一级片| 夜夜干天天操| 狠狠五月丁香色婷| 99精品国产在热久久婷婷| 婷婷久久综合久| 婷婷 色 丁香 夜| 99无码免费视频| 久久九精品| 97色婷婷| 99热资源在线| 天天干天天操天天上| 色播婷婷大香蕉| 日本三级日本黄色| 欧洲色色| 久热超碰91| 色五月天激情| 久久er视频6| 69色婷婷| 五月婷视频| 婷婷五月影院| 五月激情在线| 五月精品免费XXX| 天天狠狠婷婷在线| 五月色亚洲| 久久婷婷免费| 99ri视频| 久久新地址| 丁香五月激情婷婷婷婷在线观看| 欧美色骚婷婷五月天| 国产激情av| 婷婷日本色| 91av传媒高清在线视频网| 91啪啪| 久久五月婷婷丁香| 骚货艹网站视频| 婷婷另类开心| 99无码视频| 超碰国产av| 久久资源综合| 91免费啪视频| 免费观看全黄做爰的视频| 亚洲综合激情五月久久| 久久久久久久久99精品| 久久机热/这里只有精品| 色色网站免费观看| 丁香五月婷婷六月婷| site:xiongshengzz.com| 99re久热只有精品6在线直播.com| 97色综合视频| 亚洲一二三网| 久久婷婷五月天丁香| BBWCUCKOLD精品熟妇| 婷婷五月天小说| 97热这里只有精品| 综合激情五月丁香| 99在线播放视频| pom538精品视频| 色色亚洲视频| 五月天婷婷乱论小说| 色婷婷狠狠18| jiqingliuyuetian| www.丁香五月| 狠狠色综合久久| 九九精品在线观看视频6| 99热只有这里才是精品| 亚洲久久婷婷| 五月丁香六月婷婷手机无线| 夜夜夜叫天天天做| 欧美日本一区二区三区| 伊人狠狠干| 99er精品视频| 伊人婷婷五月天| 婷婷激情视频| 91婷婷丁香| 天天操综合网| 精品无码久久久久久久久| 欧美色综合天天久久综合精品| 日产精品久久久久久久蜜臀 | 大香久久综合网| 青青操成人福利| 精品九九网| 久久综合影院| 亚洲免费看片| 久久色频| 婷婷五月丁香伊人网| 成人超碰Av| 色欲婷婷五月天丁香| 天天操加勒比| 婷婷五月影院| 人妻第九页| 五月色婷丁香| 色五月五月婷婷| 久久永久网址| 99色色最新视频| 五月丁查人人| 丁香五月六月综合激情| 久久婷婷视频| 精品久久婷婷| 风流少妇A片一区二区蜜桃| 天天操天天谢| www.婷婷激情网.com| 密视AV综合在线| www.婷婷五月天| 狠狠夜夜五月丁香| 婷婷五月天激情亚洲小说| 国产操B视频| 九九免费视频| 日韩精品AV一区二区三区| 99久久超级| 丁香久月婷| 五月婷丁香花| 激情五月婷婷综合色播小说| 婷婷色五月婷| 超碰成人免费| 久久香视频| 亚洲激情四射| 五月天伊人手机在线播放AV| 色色99| 六月激情网| 激情婷婷99| 久久久久久久五月婷婷六月丁香综合,开心激情综合网 | 精品人妻伦九区久久AAA片| av在线免费播放观看| 国产1区2区3区| 99热精品一区| 欧美三日本三级少妇三99| 精品夜夜澡人妻无码AV| 97超级碰碰碰| 五月激情综合五月| 99噜噜| 婷婷欠久少妇| 婷婷五月天色色| 开心五月色婷婷综合开心网| 99在线观看| 91热在线观看视频| 婷婷激情丁香五月天综合| 女高怪谈在线观看| 久操婷婷| 99人人干人人| 五月四色婷婷| 99精品在线| 97人妻人人| 五月丁香综合伦理片| 九热...av| 99热97美女| 精品一区二区三区四区五区六区介绍 | 91日本在线| www.日日夜夜.com| 中字幕视频在线永久在线观看免费| 日韩精品成人在线| 亚洲va欧美va国产综合久久久| 26uuu最新地址| 久一网站| 日韩在线aaa| 少妇性按摩无码中文A片| 中美日韩成人在线| 激情色色色| 色五月丁香A欧美com| 久久婷婷丁香五月一二三| 人人操97| 久久婷婷夜| 丁香五月婷婷激情中文| 嫩BBB搡BBBB榛BBBB| 中文激情网| www.色综合.com| 婷婷五月天丁香久久| 我爱va亚洲va52| 丁香五月影院| 久久色情| 婷婷色啪| 91色在线 | 日韩| 一起草性爱不卡视频| 久久九九激情五月天| 色婷婷婷婷成人网| 色五月综合| 丁香五月婷婷激情小说| 九热...av| 九月激情综合| 五月丁香综合网| 国产亚洲成人综合| www.av骚货| 牛牛澡牛牛爽| 丁香五月综合图片在线观看| 国产激情综合| 色色综合成人网| 99免费| 九九热a| 五月花免费视频| 激情婷婷五月天。| 色偷偷五月天| 五月丁香六月婷婷啪啪综合 | 91人人操.COM| AV在线免费播放| w婷婷五月婷婷w| 国产激情在线| 亚洲 视频 导航 一区| 97碰碰在线观看视频| 1024成人在线观看| 九九色播五月丁香| 丁香色成人| 激情五月天视频| 成久综合视频| 丰满少妇猛烈A片免费看观看| 五月天激日本色情在线| 人妻熟人中文字幕一区二区|