欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,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
返回資訊列表
www.夜夜.com| 久久久天堂国产精品女人| 久久精品婷婷| 婷婷五月综合丁香久久| 五月激情综合网| 天天婷婷色六月| 激情深爱婷婷网| 91超级碰人人操| 亚洲五月天激情| 网站免费一站二站| 五月激情六月宗合| 99热九九在线| 婷婷六月网| 中文字幕丰满人妻无码专区| 综合99在线| 99精品在线播放| 91色干| 色色色无码| 九九99久久| 日日色五月天| 天堂婷婷五月在线| 久久久这里都是精品| 亚洲不卡123| 天天插天天爽| 亚洲AV免费在线| 情久久综合五月天| 五月婷婷伊人在线| 激情综合色五月丁香六月亚洲| 99色天堂| 色婷婷XXXXX| www,超碰| 在线资源av-超碰中文在线-成人AV| 激情婷婷狠狠干综合| 婷婷五月天色| 五月天偷拍| 色99日韩| 伊人干综合| 五月激情小说网| 激情五月天网页| 欧美色图45678| 五月久久婷婷丁香| 久久久久久久久久8888| 97 A I色色| 这里有精品| 午夜激情五月天| 开心五月深爱五月婷| 欧洲亚洲免费视频区| 美日韩成人| 91人妻人人做人碰人人爽九色| 天天综合91入口| 97自拍视频网| 日本97在线视频| 91碰九色| WWW99热| 色欲久久久久久综合网综合网| 激情五月婷色| 丁香五月婷婷偷拍| 激情综合网五月在线播放| 婷婷色九月| 欧美大香蕉视频| 综合色网站| 天天综合久久| 亚洲五月天,激情视频| 色婷婷免费观看| 91九色丨国产丨爆乳| 五月婷婷人人人操| 开心丁五月| 国产乱人偷精品人妻A片| 五月天精品| 国产精品大香蕉| 国产成人精品亚洲线观看| 中国女人内射6XXXXX| www超碰| 熟女人妻一区二区三区免费看 | 成人AV综合在线| 婷婷激情五月天激情小说| 欧美日韩一区二区三区四区| 色哟哟性爱av| 另类图片五月天婷婷| 综合狠狠五月婷婷| 丁香五月欧美| 九九伊人网| 精品欧美一区二区三区久久久| 任你干aa| 婷婷伊人网| 玖玖伦理电影| 色综合久久88色综合天天99| 久久久com| 免费观看全黄做爰的视频| 天天激情站| 综合激情sV| 婷婷五月天堂| 久草 tingting| 国产超碰人人| 五月婷婷六月激情在线| 六月色婷婷| 久久丁香五月天| 少妇被下春药玩弄A片| www.金莲av| 激情五月婷婷啪啪| 日日想日日夜日日操| 涩涩涩.com| 五月婷婷六月丁香玖玖玫瑰91| 91丨九色丨大屁股| WWW、日本色丁香、co m| 国产成人AV在线播放| 天天做天天爱高潮片| 3p日韩网站视频| 五月婷婷丁香五月天| 色色色图| 六月激情丁香一道本7777| 久久色五月| 综合久久人妻| 亚洲经典三级| 久久综合九九| 色婷婷亚洲婷婷| 激情综合五月| 综合色情网| 色约约视频一区二区三区四区五区| 91色九| 亚洲综合网激情五月天| 五月天婷婷久久| 99九九这里有免费视频| 99热成人精品| 人妻中文在线| 日本三级日本三级99| 欧美激情-区二区三区| 国产97色在线| 色播五月天婷婷老师| 亚洲婷婷丁香五月亚洲| 99爱视频免费| 色婷婷69| 五月天婷婷成人网| 久久婷婷五月综合色天| 亚洲色模骚货| 岛国AAAV| 婷婷天天综合| 国外亚洲成AV人片在线观看| 色婷婷丁香五月天在线视频| 亚洲激情另类| 丁香婷婷性爱| 91精品久久久久久77777| 97碰碰叉| 丁香六月天之亚州热女 | 天天干天天爽| 激情丁香婷婷| 99国产小视频免费观看| 天天爽夜夜操| 99热免费网站| 五月婷丁香| 丁香色色色| 女人天堂AV| 色婷婷很很丝袜| 91操色| 久热91| 亚洲Av成人在线观看| 九九色热视频| 九九色情网五月天| 91精品久久久久、久五月天| 人人干人人操外国| 五月丁香久久| 久久久香| 99色热| 午夜丁香婷婷| 色噜噜综合网| 亚洲小说欧美激情| 7777久久亚洲中文字幕| 99热激情| 婷婷射丁香| www热久久yy9| 激情五月丁香五月| 开心激情婷婷| 婷婷精品性性性性性性性| 操大屄五月天视频| 激情六月天婷婷| 激情五月狠狠喔| 2025年最新亚洲在线欧美| 国模九区| 久婷婷色| 五月综合亚洲色| 天堂爱爱| www,setingting| 亚洲最大五月天成人网| 99婷婷五月天激情| 五月天综合久久| 九九99免费视频| 亚洲色综合| 婷婷综合网站| 丁香综合| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 天天激情综合| 狠狠精品干练久久久无码中文字幕| 激情婷婷丁香五月天小说| 九月婷婷| 色吧五月婷婷| 丁香六月婷婷综合激情欧美| 欧美大片免费播放器| 森林影视大全,最好看的2019年视频 | 手机在线视频观看9| 色噜噜狠狠狠综合曰曰曰| 潘金莲AAAAAAAAAA| 婷婷五月综合色拍| 五月激情丁香六月狠狠干| 中文字幕成人| 神马欧美精| 九九这里是免费的视频5| 五月久久婷婷丁香| 欧美久久一级内射wwwwww.| 五月涩涩网| 六月激情丁香一道本7777| 五月丁香久| 亚洲国产精品五月天| 五月开心播播网| 婷婷丁香在线播放| 99视频内射三四| 在线18av | 狠狠xx| 色婷婷www| 久99| 九九热10| 色丁香五月婷婷在线| 久久视频婷婷| 疯狂做受XXXX高潮A片动画| 日日操天天| 91色涩| 天海翼中文字幕高| 色999五月色| 五月天激情图| 五月天色色激情综合| 5月丁香综合图区| 激情丁香五月| 久久机热这里只有精品| 无码四色色色| 26uuu丁香婷婷五月| 乱岳熟女50岁| 亚洲精品成人| 亚洲五月天另类小说图片| bbwcuckold精品熟妇| 去色色五月天| 亭亭色色五月天| 色婷五月天网站| 在线99色| 丁香婷婷五月激情四射网| 日本99久久| 日日操,天天操| 大香蕉啪啪啪| 久久久久久久久99精品| 热婷婷久| 九九热狼人| 九九热精品视频| 天天婷婷色六月| 人人澡天天色天天做| 大香蕉狠狠爱主页| 99色在线观看视频者| 精品无码色| 开心五月婷婷激情| 99 色色吧| 天天干,夜夜爽| 天天综合激情| ..真实国产乱子伦对白在线_欧| 欧美va亚洲va| 风流少妇A片一区二区蜜桃 | 婷婷情色激情| 9久9久| 天天操夜夜操| 另类图片天天影视在线观看| 亚洲中文字幕网| 激情综合五月激情| 国产午夜精品一区二区三区四区| 六月丁香婷婷五月| 夜夜爱影院| 99九九99九九九视频精彩| 另类激情五| 欧美综合五月丁香六月婷| 色婷婷超碰| 五月婷婷六月天| 日本综合久久| 江苏少妇性BBB搡BBB爽爽爽| 婷婷播5月| 亚洲另类av| 99九九在线精品热动漫| 熟女乱论网| 风流少妇A片一区二区蜜桃| 五月天四色房丁香| 亚洲无码激情| 国产毛片精品一区二区色欲黄A片| 少妇丁香婷婷 | 色欧洲| 九九热九九热精品| 婷色综合| 五月激情视频| 婷婷狠狠五月综合| 午夜丁香综合婷婷| 五月婷婷丁香五月| 天天操天爱综合| 国产资源在线视频| 丁香五月激情综合| http://www.sd-xiangsu.com/| 婷婷色色丁香| 亚洲高清在线| 人人摸人人摸| 色情五月丁香婷婷网| www.lchjjc.com| 停婷丁五月在线| 综激情网| 人人操9| 99综合网| 丁香色啪综合| 婷婷射图| 男人大jjc女人免费视频| 亚洲va国产va天堂va综合va| 激情综合网五月天天| 国内9l视频自拍老熟女九色| 思思re99视频在线观看| 久久婷婷激情视频| 色婷婷六月性| 香蕉97碰碰碰超视精品| 亚洲乱码日产精品BD在线观看| 99热在线这里| 亚洲精99| 久久久精品AV| 国产精品黑丝| 丰满女老板BD高清A片| 玖玖资源站中文| 91欧美| 婷婷五月天亚洲综合网| 婷婷五月天色播| 啪啪六月婷婷| 五月婷人妻| 97久久五月丁香婷婷| 嫩草AV久久伊人妇女超级A| 婷婷五月天无码| 思思热在线视频观看精品| 伊人婷婷91| 99热免费| 色综合色色| 视色综合| 天天综合干| 99re热99| 亚州色综合| 丁香五月婷婷基地| 色综合综合色| 无码区婷婷五月花开| 色婷婷视频| 色婷婷久久综合久色综| 婷婷久久婷婷色五月| www.超碰| 日日夜夜狠狠| www.婷婷六月天| 天天爽天天摸| 婷婷五月丁香成人| 秋霞三级影视资源| 99er这里只有精品视频| 91丨九色丨熟女丰满| 天堂美国久久| 丰满少妇猛烈A片免费看观看| 色五月天激情| 狠狠色噜噜狠狠| 婷婷五月天激情五月天| 天天插夜夜爽| 都市激情五月婷婷综合| 中文网AV| 97久久久久| 久久精品天| 蜜乳av一级av| 国产美女无遮挡裸体毛片A片| 九九久久五月天| 五月天四色房丁香亭亭| 啪到高潮激情丁香五月| 激情综合丁| 激情五月激情综合网一级丸片| 欧美人久久| 婷婷色情五月| 亚洲婷婷丁香五月| 久久婷婷色综合老司机| www,99色| 超级碰91| 六月婷婷九月丁香| 五月激情射| 操逼综合网| 五月色情精品| 色综啪啪| 九九综合五月欧美| www.激情com| 九九久久久综合| 超碰在线免费观看日韩| 五月天婷婷色播综合在线| 韩国真做片在线观看| 丁香婷婷六月| 九九色热| WWW嗯嗯啊啊啊啊| 无码AV久久久久久久久| 琪琪色综合网站| 午夜不卡久久精品无码免费| 日本操B视频在线观看| 精品人妻伦九区久久AAA片| www.99视频| 激情丁香五月婷婷| 精品人妻午夜一区二区三区四区 | 嫩草AV久久伊人妇女超级a| 六月丁香深深爱| 2023天天日夜夜爽| 一本综合丁香日日狠狠色| 丁香六月毛片| 色丁香六月| 婷婷色欧美激情| 丁香五月婷婷色播艳门照| 成人精品99| 99热日韩| 激情图片婷婷丁香五月| 五月婷婷色色色| 99re热视频这里只精品| 国产毛片欧美毛片久久久 | site:picc-up.com| 五月激情综合深爱| 五月婷婷日| 爱操人妻| 久久久国产精品黄毛片| 99久久国产综合精品五月天喷水\| 午夜成人av在线| 另类婷婷五月天啪帕帕| 3p久久| 亚洲99综合| 精品色情一区二区三区四区| 五月婷婷婷自由综合| 五月天婷婷狠狠| 久热中文字幕| 伊人青草成人| 久久这里只| AV成人在线播放| 久久丁香| 欧美色激情四射| 大胆伊人久久| 丁香五月婷婷亚洲人| 日本色婷婷五月天成人电影| 丁香五月六月婷婷怡红院| 五月丁香在线| 丁香激情五月天| 91av成人| 九九RE视频在线精品| 色色色综合视频| 日本va欧美va欧美| 日韩无码专区| 精品九九九久| 97人人操人人爽| 色婷五月丁香久亚洲| 激情五月小说婷婷| 99热成人| 九九色天堂| www.天天色综合| 色色五月丁香婷婷综合| 亚洲色9| 国产精品蜜臀99| 99热99美国在线观看| 欧美激情综合色综合啪啪五月| 成人无码髙潮喷水A片| 五月丁香久久婷| 91丨九色丨熟女高潮| 中文字幕 久久9999| 播五月丁香三月婷婷| 天天做天天爱天天高潮| 亚洲AV另类| 欧美成性色| 99在线精品免费视频| 日韩AV大全| 欧美日本国产| 婷婷欧美偷拍综合| 九九热最新| 黑人糟蹋人妻HD中文字幕| 日韩精品电影| 色青五月天| 九色婷婷| 97在线日本| 26uuu国产色| 五月亭亭开心网| 亚洲精品久久久久久久久久吃药| 色色色综合色| 99热6这里只有精品| 99在线小视频| 色一情一乱一乱91Av| 久久五月丁香综合17C| 99在线视频播放| 九九婷婷热| 五月婷婷综合热| 人人摸人人干| 日韩日比视频在线| 色播五月丁香综合| 久久精彩视频| 97视频91| 婷婷综合视频| 91热久| 深爱五月天天| 色婷婷五月综合| 婷婷五月天堂| 99热这里都是精品| 91日综合欧美| 五月激情网综合| 丁香婷婷综合激情五月色| 激情五月综合网最新| 五月激情偷拍| 成人久碰| 99性感视频| 少妇高潮呻吟A片免费看软件| 五月婷婷啪啪网| 玖玖婷婷五月天| 一级内射毛片| 五月丁香色狠狠干大屄| 疯狂做受XXXX高潮A片| 亚洲精品视频在线播放| 激情四射婷婷| 九九热99熟女| 超碰国产AV| 加勒比久热| 丁香五月婷婷欧美成人色图| 色婷婷在线电影| 婷婷六月丁香1| 成人AV在线电影| 六月丁香婷| 亚洲精品国产setv| 一本久道综合色婷婷五月| 欧美日韩成人在线网| 久久无意婷婷| 欧美人人草| 99热亚洲只有色| 婷婷丁香成人网址| 成人AV在线中文版| 99热99这里有免费的精品| 国产熟妇的荡欲午夜视频| 婷婷综合另类小说| 最近韩国日本免费高清观看| 人人色性网| 天天干,夜夜爽| 欧美色色色色色色色色色色影视| 99久热| 日韩抽插操逼| 国产精品天天狠天天看| 这里只有精品在线播放| 9热在线| 精品草原久久视频| 婷婷五月无码| 97操碰视频| WWW.婷婷五月天.COM| AV在线大香蕉| 人妻性爱av网站| 久久九九国产精品怡红院| 久热这里只有精品性色AV| 五月激情综合网| 操笔无码| 久久人人添人人爽添人人片αV| 操一操插一插| 五月婷综合| 天天色粽合合合合合合合| 综合一区二区三区| 色五月在线播放| 激情的五月婷婷蜜桃| 无码日本精品XXXXXXXXX | 99热99精品在线观看| 午夜丁香久久久久久| 婷婷五点亚洲| 91大神操美女| 婷婷五月天福利| 麻豆123区| 大香伊人婷婷影院| 日本熟妇精品99| 99久久99视频只有精品| 超碰只有精品在线| 亚洲丁香婷婷丁香五月天激情| 久久婷五月综合| 日本va欧美va国产激情| A A色色| 91碰九色| 色情成人五月天| 美女激情婷婷| 五月丁香婷婷综合视频| 亚洲色五月| 激情综合另类| 99黄色在线视频精品熟女| 丁香六月婷婷综合| 夜夜爽天操| 色哟哟精品| 五月丁香| 久久这里只精品| 国产婷婷色五月| 亚洲六月综合激情久久下卡| 啪啪黄页网| 天天综合激情| 1囯产午夜仑鲁鲁| 夜夜骑夜夜撸| 亚洲激情免费视频观看| 99,色| 精品日本视频444| 五月停停999| 精品国产va久久久久久久| 熟女国产在线一区二区三区四区| 色婷婷亚洲精品天天综| 99热这里只有在线| 亚洲婷婷五月天在线激情综合网| 色天使色综合| 狠狠做深爱婷婷久久综合一区| 亚洲综合婷婷五月| 久久五月网| 影音先锋 萱萱| 丁香五月激情啪| 97色伦另类图片小说视频| 538任你爽视频不一样的| 五月丁香网站| 中文字幕综合| 人人视频色| 色婷婷久久| 月丁香久久久| 中文字幕丰满孑伦无码专区| 日韩狠狠色| 亚洲色综久久五月| 婷色人人狠| 婷婷色片| 久cao香蕉影院| 26uuu欧美日本| 性爱视频99| 激情五月天综合图片小说网站| 久久999久久999久久999久久| 国产精品久久久久久久久久| 91日本在线观看| 亚洲另类噜噜| 深爱激情四射| 精品五月视频婷婷在线观看| 97婷婷狠狠久久综合9色| 97caop| 久久久婷| 中文字幕AV网址| 国产午夜精品久久久观看| 日韩成人网站精品久久大全| 五月婷在线影院| 丁香婷婷综合影院| 国产精品久久久久久喷浆| 超碰碰碰碰| 婷婷五月花| 久久久五月四色| 六月伊人婷婷| 五月丁香色婷婷伊人| 超碰色婷婷| 99热官网精品在线| 九月停停| 性爱网五月婷婷| 中文字幕 码精品视频网站| 久久综合五月天| 99综合| 婷婷五月天六点丁香五月| 337p午夜影院| 婷婷五月免费观看| 激情丁香婷婷五月天| 操久久网| 九九九九综合| 人人操97| 五月丁香激情四射综合| 狼人狠狠操| 婷婷色吧| 丁香五月婷婷偷拍| 九九色之九九色之88| 激情五月天情色| 九九综合九色欧美狠狠| 激情婷婷五月丁香啪啪啪| 无人区码一码二码三码医生系列| 欧美精品999| 激情欧美五月丁香| 婷婷深爱五月| 99亚洲视频| 久久综合丁香激情五月| 久久色情| 九九色精品| 色五月色五天色情网| 91色在线/日韩| 九九AV在线| 超碰成人电影| 色五月综合在线| 九九精品免费| 亚洲久热| 色天堂婷婷| 欧美A级成人婬片免费看理论| 国产伦亲子伦亲子视频观看| 婷婷五月天淫荡| 26uuu成人网| 超碰A V在线| 九九中文字幕九| 金品在线视频99| 啪啪婷婷五月天激情| 97干在线观看视频| 色婷婷五月天中文字幕| A一级操| www天天干| 五月花亭亭| 色五月六月| 中文在线成人| 26uuu最新地址| 玖玖在线视频| 色五月色综合| 亚洲综合成人网站| 91色综合| 综合激情网| 色婷婷综合网站| 狠狠穞A片一區二區三區| 成人av播放| 天天色播| 狠狠色噜噜狠狠狠777奇米| 综合九九日本| 五月停亭六月,六月停亭的英语| 五月婷婷高清| 五月婷婷伊人在线| 性高潮久久久久久-九九九九九九九九九九热-成人AV | www,五月丁,com| 99久久性爱| 色哟哟精品| 婷婷五月天av| 日韩99无码| 另类在线观看视频| .操區COm| 日日爽日日爽| 大香蕉人妻| 乱精品一区字幕二区| 九九色情网五月天| 91日本在线| 内射丰满人妻| 九九大香蕉黄色影院| 性爱视频久久| 九九综合网| av网址在线| 91婷婷五月天综合视频| 婷婷爱五月| 99热啪啪| 综合久久伊人| 第2色五月婷| 亚洲色亚洲精品| 高清视频一区| 大香伊人久色| 色丁香五月天| 特级片神马电影| 99综合久久| 五月天久久婷| 日本片日本片祼观看网站在线看中文版网页在线看 | 五月天成人网婷婷| 美欧成人视频| 无码免费人妻A片AAA毛片西瓜| 午夜av网| 国产一级片色色| 黄网在线免费播放| 久久五月婷婷开心网| 免费黄色AV| 成人亚洲精品久久久久| 丁香五月在线自慰| 伊人午夜综合色啪| 激情五月天社区| 丁香熟女乱| 色婷婷欧美在线| 婷婷大乡焦噜噜| 色五月婷婷777| 欧美在线干| 色停停五月天| 国产欧美日韩综合精品一区二区| 黑人无码一区| 五月婷婷激清网| 五月婷婷成人| 91婷婷伊人牛牛| 日本五月视频| 无码人妻少妇色欲AV一区二区| 黑人无码一区| 狠狠色丁香久久婷婷综合五月| 国产色色视频| 玖玖激情五月天| 色色免费网战视频| 狠狠干综合| 日韩成人中文字幕| 丁香五月六月综合激情| 5月丁香美女影院| Av狠狠色丁香婷| 色婷婷五月在线| 婷婷五月天AV在线| 色综合色色色色色色综合| 九九热视频网站| 91青娱乐青青草| 超级碰碰碰久久网站视频| 国产Va视频| 国产超碰在线| 色婷婷免费视频| 天天干天干| 日本婷婷激情四射中文字幕在线观看| 五月天天天综合| 综合色99| 五月丁香啪啪综合网| 婷婷激情视频欧美视频自拍视频欧美剧 | 成人丁香婷婷| av在线婷婷| 激情婷婷人妻| 激情小说婷婷| 五月丁香婷婷啪啪| 五月天综合久久| 五月天丁香成人社| 丁香五月婷婷大香蕉| 伊人成综合五月婷婷| 五月情涩综合婷婷| 激情五月婷婷老师| 久久99久久99精品免视看婷婷| 99热只有| 密黄站| 开心激情婷婷| 九九综合视频在线观看| 99在线精品视频在线观看| 色婷婷777狠狠| 婷婷五月在线观看| 九伊人网| 99久久精品国产色欲| 在线99精品| 草综合14| 超碰99热精品| 99啪啪网| 五月色婷婷影院| 在线另类视频| 五月天激情图片| 五月天大香蕉| 五月婷婷综合网| 九月婷婷久久| 99精品久久| 九九视频在线观看| 天天做天天爱天天日| 五月天精品| 丁香六月婷婷综合色| 久久99网站| 国产精品噜噜在线视频| 中文字幕丰满孑伦无码专区| 襙逼网| www,setingting| AV五月婷婷露脸| 久久免费试看120秒| 日本狠狠色| 97人妻碰碰碰久久香蕉| 丁香久久久| 色色色五月婷| 大香蕉520| 五月天婷婷三级黄| 99这里有精品| 色婷婷六月精品| 一本到不卡高清DVD| 五月天婷婷在线AN| 玖玖精品婷婷| www.久久99| 综合欧美五月婷婷| 成人午夜天| 人人操人av| 99热很操老逼| 五月婷婷色色色| 快乐激情五月色婷婷| 成人做爰A片免费看网站找不到了| 久久婷婷丁香五月一二三| 人人人操 超碰| 99热这里只有精品最新| 射久久丁香五月| 夜夜撸天天操| 天天插天天很| 九九精品re免费视频| 久婷婷色| 26uuu美女三级视频| 精品久久久久成人码免费动漫| 9久热这里只有精品| 日本97人人| 久久九精品| 开心久久五月天| 亚洲在线免费成人| 伊人在线视频| 九九性视频| αv中文字幕在线观| 色天五月天在线观看视频| 97色热| 丰满少妇乱A片无码| 丁香激激情网| 97色女人在线| 综合色图区| 激情小说视频图片网| 五月丁香A片| 99视频内射三四| 婷婷五月色丁香在线看| 97香蕉人人在线观看| 五月激情婷婷在线| 丁香五月天激情小说| 五月天婷婷色色网| 99色精品| 夜夜干夜夜操| 五月情丁香色| 性爱五月婷| www.久热| 色久五月天| 26uuu青青| 美女爆乳18禁www久久久久久| 五月激情综合网| 久久成人天| 久草狼人| 日韩成人精品中文字幕| 五月丁香色婷婷综合| 激情五月天的婷婷| 久久国产一区二区三区| 久久小视频| 色综合天天网| 久久草中文日韩欧美| 久久人妻超碰一区| 级情九色| 欧美va欧美va差| 99久久精彩视频。| aV欲望人妻中文字幕| 丁香五月综合| 另类小说五月天| 亭亭色天香| 久久99久久99精品免视看婷| www超碰| 日韩在线一级| 婷婷深爱五月丁香网| 91精品久久久久久| 超碰97色| 色综合99| 青青草原伊人网| 99国产性感视频| WWW.天天日| 九九精品热播| 欧美成人AAA片一区国产精品| 97性视频| 99久久玖玖| 综合xx网| 久热9| 888久久久| 婷婷五月丁香第四色超碰在线| 色色色色色色色色网站| 日日干天天爽| 少妇人妻凹凸视频| 五月天婷婷基地丁香| 五月天伊人综合| 91综合网| 亚洲V国产V欧美V久久久久久| 99热综合| 亚洲激情久久| 色综合久久88色综合天天| 国产va在线视频| 丁香五月婷婷超碰在线| 五月天另类图片区99| 人人干av| 91婷婷在线| 99热| 五月丁六月香| 国产精品蜜臀99| 婷婷色播婷婷| 久婷婷婷| 六月丁香六月婷婷欧美| 精品自拍97| 丁香婷婷欧美综合| 亚洲亚洲人成综合网络| 五月婷在线| 亚洲AV免费在线| 97碰碰视频| 狠狠穞A片一區二區三區| 99久久玖玖| 五月色婷婷激情| 综合在线丁香五月| 成人操呦av| 色性综合| www色色com| 曰曰久久| 在线中文字幕av| www.99日本| 久久的爱大香蕉| 91性人人| 五月香蕉婷婷| 香蕉伊人综合| 婷婷五月网图片区| 99色五月| 色蜜婷婷| 久久伊人9| 久久99精品久久久| 操日本三片99| 久久99激情| www一起操| 庭庭久久内射| 色婷婷香蕉| 久久99精品九九久久久婷婷| 超碰在线人妻| 五月婷婷久久综合| 六月婷婷天天操夜夜爽视频| 亚洲婷婷在线播放十月| 五月开心婷婷极品激情| 亚洲色婷婷色| 狠狠干2007| 丁香五月激情综合在线观看| 免费试看小视频 99| 五月丁香好婷婷A片网| 久久婷婷在线| 99色免费观看全部| 天天干夜夜想| 97色啪| 九九激情综合| 99久久6| 国产亚洲精品久久久久久郑州| 五月婷婷啪啪| av高清无码| 丁香婷婷浪潮AV久久综合| 九九热内射| 色综合久久综合| 欧美色久| 99re66热这里只有精品| 五月天婷婷在线观看精品男人| 五月婷婷伦理| 极品 少妇 内射| 丁香五月a| 婷婷伊人中文字幕| 激情五月天噢美| 婷婷性爱无码视频| 天天射综合网夜夜操| 色五月天成人| 五月丁香啪啪| 婷婷色导航| 日比视频91| 亚洲日比视频| 色色色在线| 开心婷婷五月激情网小说| 欧美色骚婷婷五月天| 欧美成人精品一区二区| 色婷久| 久草五月| 天堂伊人干| 99视频在线啪| 91九色精品熟女内射| 国产精品-91JQ就要激情网91JQ6.91JQ27.CASA:16888 | 五月丁香六月色婷婷综合五月天| 亚洲俩性性爱图片久久第六页| 久热这里精品免费| 婷婷综合视频| 97福利视频| 99久久婷婷综合| 伊人久久艹| 色五月婷婷久久大| 无码99| 国产毛片精品一区二区色欲黄A片| 开心婷婷五月综合| 中文字幕精品在线观看| 激情五月综合六月丁香婷婷狠狠干| 久久人妻伦理| 伊人久久婷婷| 久久99大| 婷婷综合五月| 五月丁香九九九综合| 激情综合在线观看| 午夜成人片400| 亚州精品成人片| 五月天五月色婷婷综合| 婷婷五月天伊人网在线观看视频| 欧美色色网| 五月丁香婷婷啪啪| 91 欧美| 色色免费网站| 婷婷伊人久久综合| 色色色色色色网站| CHINESE熟女老女人HD视频| 97碰碰电影| 精品视频99看在线视频| 99精品无码| 日韩av变天就操逼不卡区| 操逼巨乳91| 五月丁香好婷婷A片网| 一起草Av| 九月丁香八月婷婷加勒比| 丁香婷婷性爱| 激情五月丁香六月| 99热这里只有精品青草| 亚洲第二AV| 婷婷欧美色| 激情五月丁香亭亭| www.97视频| 99色视频| 综合久久五月天| 欧美交换配乱吟粗大25P| 啪啪黄页网| 思思热99在线| 狠狠色综合网| 91超碰在线播放| 丁香五月在线观看完整版| 欧洲色色| 丁香五月婷婷亚洲综合精品| 五月婷婷欲色| 欧美在线视频99| 五月丁香啪啪啪综合网| A久网| 激情五月天婷婷| 玖玖激情网| 九月婷婷丁香| www.天天日| 超碰五月婷婷五月天| 九九久久99精品免费观看www| 五月丁香婷婷激激激综合网色播| 天天影院色| 探花搜索结果 - 黄上黄| 99惹精品视频| 色欲一区二区三区精品A片| 激情五月综合网| 色婷婷六月| 欧美日本99| 色婷婷五月天小说网| www.五月天| 91碰视频| 在线观看亚洲视频影院| tingtingseav| www.minyis.com【JT】国内CDN落地页保证转化QQ2101460746 | 五月丁香色婷婷伊人| 9久视频| 丁香五月综合久久| 26UUU欧美| 色五月激情图片| 日本特黄aaaaa| 久久婷婷亚洲| 偷偷与邻居做爰完整视频| 婷婷五月天精品| 婷婷无码五月天| 五月色婷婷夜色| 丁香五月网在线观看| 国外亚洲成AV人片在线观看| 99热这里只有精品26| 五月婷婷中文| www.黄色片-久久成人国产精品在线播放-999AV | 五月激情综合美女久久| 亚洲AV成人一区二区在线观看| 人人人人人人人人人草| 五月天激情视频| 色丁香五月婷婷| 五月天社区| 色5月婷婷色| 一级精品999WWW| 婷婷九月亚洲| 91热网址| A级毛片高清免费不卡播放谢谢谢谢| 深爱激情综合网| 久热视频97AV在线观看| 79色色免费| 色欲久久99精品久久久久久| 婷婷五月色丁香在线看| www.99热国产| 开心五激情网| 在线中文AV| 99在线看片| 国产精品男人AV不卡| 五月色婷婷激情| 韩国中文字幕91| 日本五月视频| 一本婷婷丁香久久 | 成人色色视频| 婷婷五月另类网站| 伊人久久五月天综合| 97涩婷婷婷婷基地| 国产密乳av一区二区三区四区| 日韩无码一区二区三区四区| 亚洲色精彩| 婷婷五月激情网| 色婷婷久久综| 亚洲va欧洲va国产va不卡| 久激情| 啪啪操超碰| 丁香婷色| 九九热AV| 久久久久久久久久久久久久人妻视频| 五月婷婷啪啪| 久久九精品| 思思热99er| 久久亚洲无码| 99久热在线精品| 色九区| 森林影视大全,最好看的2019年视频 | 九九亚洲| 婷婷久久内射| 成人一级片| 久久久www| 色999;丁香五月| 色六月天| AV六月丁香| 另类专区在线| 天天摸.天天mo| 日本精品人妻无码77777| 丁香六月激情网C0W| 91久久久久久久久久| 激情综合网五月婷婷| 久久久久久久综合狠狠综合| 超碰成人公开| 天天影视天天爽天天草| 青青日韩| 亚洲精品视频在线| 无码中文一区二区三区| 神马久久五月天| 99热丁香| 五月天婷婷一起草| 久久婷婷原创视频| 综合激情在线| 激情五月天激情网| 五月天丁香久久综合| 丁香五月天社区| 99啪啪视频| 深爱激情久久| 欧洲区自拍| 中文字幕 中文字幕明步| 九九草热在线观看| 五月丁香婷婷啪啪综合| 天天精品视频免费观看| 日本噜噜色网| www激情网站| 99热这里只有精品8| 欧美爆乳一区二区三区| 狠狠色五月| 91丨九色丨国产打屁股| 五月丁香六月婷婷在线观看| 91色综合网| 免费无码毛片一区二区A片 | 日韩青青| 99ri精品在线| renrencaoav| 五月天综合激情网| 在线只有精品| 五月丁香婷婷激情澎湃四射| 久久婷婷亚洲| 97干资源在线观看| 色情五月综合婷婷| 丁香五月婷婷色播艳门照| 色五月首页| 色丁香五月婷婷综合久久| 久久99视频| 激情六月天婷婷| 亚洲在线激情婷婷五月| 九九十99视频| 色五月丁香五| 99日韩| 五月天婷婷色情| 五月天婷五月天综合网在线观| 99久热在线精品| 丁香色情五月综合激情| 日本婷婷综合精品| 五月丁香六月色| 97热视频| 第四色大香蕉| 婷婷五月天综合久久日美女| 丁香婷停五月激情综合深爱| 99热66| 色欲九区| 91成人看片| 9久热在线精品| 丁香五月天的网址。| 国产精品99久久久久久久女警| 国产韩日亚洲美州欧亚综合在线| 狠狠操狠狠插| 五月婷婷日本| 五月日韩中文字幕| 99热九九热| 九九色播五月丁香| site:ornaments52.com| 99热国品免费| www.日本91| 超碰人人妻| 激情五月天色播| 天天色丁香| 五月婷在线视频免费看| 色播五月丁香综合| 人妻操逼视频。| 超碰97久久| 色五月 婷婷, 大香蕉| 激情五月综合网| 99热精品在线播放| 久久婷婷五月天激情四射| 中文无码精品一区二区三区| 中文字幕在线观看视频www|