亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

Python控制Arduino與樹(shù)莓派:串口、Firmata與GPIO實(shí)戰(zhàn)指南

Python控制Arduino與樹(shù)莓派:串口、Firmata與GPIO實(shí)戰(zhàn)指南 前陣子有個(gè)做智能家居的朋友問(wèn)我想用Python控制Arduino或樹(shù)莓派感覺(jué)網(wǎng)上資料很散不知道該從哪條路入門(mén)。這個(gè)問(wèn)題我太熟了剛接觸硬件時(shí)我也被這兩種設(shè)備搞暈過(guò)Arduino是微控制器跑的是C樹(shù)莓派是一臺(tái)小電腦跑的是Linux。用Python把它們管起來(lái)最關(guān)鍵的從來(lái)不是Python語(yǔ)法而是搞清通信鏈路和設(shè)備邊界。這篇文章就把我實(shí)測(cè)過(guò)的幾種方案、對(duì)應(yīng)的坑和完整示例一次講清楚覆蓋串口通信、Firmata協(xié)議和GPIO直控給正在做自動(dòng)化項(xiàng)目的朋友一份能直接上手的路線(xiàn)圖。1. 先想清楚你需要的究竟是哪種控制方式1.1 什么是“用Python控制”三條主流路徑Arduino和樹(shù)莓派雖然常被放在一起比較但本質(zhì)完全不同。Arduino是基于AVR或ARM微控制器的開(kāi)發(fā)板沒(méi)有操作系統(tǒng)上電后只能反復(fù)執(zhí)行一段用C/C寫(xiě)好的循環(huán)程序樹(shù)莓派則是一臺(tái)完整的ARM Linux迷你電腦有CPU、內(nèi)存、存儲(chǔ)和圖形界面Python可以直接跑在上面。正因如此“用Python控制它們”這句話(huà)在不同設(shè)備上對(duì)應(yīng)的實(shí)現(xiàn)方式完全不一樣。我實(shí)測(cè)下來(lái)主流玩法有三條路徑路徑一Arduino跑自己的固件電腦上的Python通過(guò)USB串口向Arduino發(fā)送指令。Arduino收到指令后執(zhí)行動(dòng)作比如點(diǎn)亮LED、驅(qū)動(dòng)電機(jī)、采集傳感器數(shù)據(jù)再把結(jié)果發(fā)回電腦。路徑二給Arduino燒錄Firmata固件把Arduino變成一個(gè)“USB外設(shè)”。電腦上的Python用pyFirmata或pymata4直接讀寫(xiě)Arduino的引腳相當(dāng)于Python直接控制硬件。路徑三在樹(shù)莓派上直接安裝Python和GPIO庫(kù)通過(guò)樹(shù)莓派的GPIO引腳控制外設(shè)代碼和Python進(jìn)程跑在同一臺(tái)設(shè)備上。三條路徑不是非此即彼的排他關(guān)系很多時(shí)候可以混用。我做過(guò)一個(gè)自動(dòng)澆灌系統(tǒng)樹(shù)莓派負(fù)責(zé)天氣API和數(shù)據(jù)庫(kù)Arduino負(fù)責(zé)控制水泵和讀取土壤濕度兩者之間用USB串口通信。樹(shù)莓派是大腦Arduino是手腳Python是膠水。1.2 選型判斷從實(shí)時(shí)性、開(kāi)發(fā)效率和成本切入選擇哪條路徑主要看三個(gè)維度實(shí)時(shí)性要求、開(kāi)發(fā)效率、設(shè)備成本。Arduino串口方案實(shí)時(shí)性最好。Arduino固件在中斷和循環(huán)中執(zhí)行響應(yīng)時(shí)間可控特別適合PWM調(diào)速、步進(jìn)電機(jī)脈沖、傳感器連續(xù)采樣這些需要確定性的任務(wù)。Firmata方案開(kāi)發(fā)效率最高燒錄一次固件后之后所有邏輯都在Python里寫(xiě)改代碼不用反復(fù)燒板適合原型驗(yàn)證、實(shí)驗(yàn)室數(shù)據(jù)采集但同一個(gè)引腳被上位機(jī)不斷讀寫(xiě)時(shí)延遲會(huì)比原生固件高幾毫秒到幾十毫秒做小車(chē)避障這種對(duì)響應(yīng)速度敏感的項(xiàng)目就得斟酌。樹(shù)莓派GPIO方案適合任務(wù)多、邏輯復(fù)雜、需要聯(lián)網(wǎng)或圖像識(shí)別的項(xiàng)目但樹(shù)莓派跑的是非實(shí)時(shí)Linux線(xiàn)程調(diào)度不確定如果你需要用微秒級(jí)精度做波形建議還是交給Arduino或者用pigpio的硬件PWM輔助。用生活場(chǎng)景類(lèi)比Arduino是那種任勞任怨的直屬員工你告訴它做什么它就不停執(zhí)行Firmata像是把員工變成遠(yuǎn)程操作員你隨時(shí)發(fā)指令但它一次只能處理一件樹(shù)莓派更像一個(gè)部門(mén)經(jīng)理能同時(shí)協(xié)調(diào)多件事但每件事的響應(yīng)時(shí)間不是絕對(duì)保證。所以我的選型建議很簡(jiǎn)單外設(shè)簡(jiǎn)單、交互頻率低可以用Firmata快速出Demo要做高確定性控制老老實(shí)實(shí)用串口協(xié)議需要跑攝像頭和AI模型直接用樹(shù)莓派的Python環(huán)境。項(xiàng)目的技術(shù)棧永遠(yuǎn)跟著需求走而不是反過(guò)來(lái)。2. Arduino串口通信最通用、最穩(wěn)定的控制方案2.1 環(huán)境準(zhǔn)備從安裝到接線(xiàn)一次到位先把基礎(chǔ)環(huán)境搭好。電腦端需要Arduino IDE現(xiàn)在叫Arduino IDE 2和PythonPython需要pyserial安裝一行命令pip install pyserialArduino IDE主要用于寫(xiě)Arduino固件和確認(rèn)串口狀態(tài)。安裝后用USB線(xiàn)把Arduino接到電腦Windows下Arduino一般會(huì)識(shí)別成COM口比如COM3、COM5Linux/macOS下是/dev/ttyACM0或/dev/cu.usbmodem14101這類(lèi)路徑。第一次接上時(shí)如果系統(tǒng)沒(méi)自動(dòng)裝驅(qū)動(dòng)多半是板子上的USB轉(zhuǎn)串口芯片驅(qū)動(dòng)沒(méi)裝常見(jiàn)芯片有CH340、CP2102、ATmega16U2按芯片型號(hào)裝驅(qū)動(dòng)就好。硬件接線(xiàn)這件事很多教程寫(xiě)得過(guò)于神秘。如果你只是想測(cè)試串口通信不需要任何外部電路直接用USB線(xiàn)連電腦和開(kāi)發(fā)板板載LED就是最好的實(shí)驗(yàn)對(duì)象。Arduino Uno的板載LED通常焊在D13引腳部分板子上叫L直接控制它不需要額外接線(xiàn)。如果要外接LED記住LED長(zhǎng)腳接正極短腳接負(fù)極串一個(gè)220歐姆到330歐姆的電阻到D13另一端接GND。這個(gè)電阻不是可選項(xiàng)沒(méi)有它電流容易超過(guò)LED額定值燒壞LED甚至可能影響引腳。接線(xiàn)時(shí)還有兩個(gè)細(xì)節(jié)容易踩坑。一是外部供電時(shí)一定要和Arduino共地也就是外部電源的地線(xiàn)要和Arduino的GND接在一起否則串口信號(hào)沒(méi)有參考零點(diǎn)數(shù)據(jù)全是亂碼二是不要在板子通電狀態(tài)反復(fù)插拔杜邦線(xiàn)容易造成引腳瞬間短路。我的習(xí)慣是斷電狀態(tài)下接線(xiàn)確認(rèn)無(wú)誤再通電。2.2 最小示例讓Python點(diǎn)亮Arduino板載LED現(xiàn)在做一個(gè)最簡(jiǎn)單的閉環(huán)Python向串口發(fā)一個(gè)字符Arduino收到后點(diǎn)亮或熄滅板載LED。Arduino端固件如下char cmd; void setup() { Serial.begin(9600); pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, LOW); } void loop() { if (Serial.available() 0) { cmd Serial.read(); if (cmd 1) { digitalWrite(LED_BUILTIN, HIGH); } else if (cmd 0) { digitalWrite(LED_BUILTIN, LOW); } } }要點(diǎn)是Serial.begin(9600)的波特率和Python端必須完全一致這是串口通信最容易出問(wèn)題的地方一個(gè)9600一個(gè)115200讀到的全是亂碼。Serial.available()判斷緩沖區(qū)有沒(méi)有字節(jié)Serial.read()每次讀取一個(gè)字符固件循環(huán)里的指令處理是實(shí)時(shí)的收到一個(gè)字符就執(zhí)行一次。這個(gè)固件雖小但已經(jīng)包含了一個(gè)完整的串口指令解析邏輯讀取、判斷、執(zhí)行。真實(shí)項(xiàng)目里這幾十行基礎(chǔ)結(jié)構(gòu)完全夠用你只需要在if后面添加更多指令分支比如a控制舵機(jī)、m控制電機(jī)、r讀取傳感器。Python端代碼import serial import time ser serial.Serial(COM3, 9600, timeout1) time.sleep(2) ser.write(b1) # 點(diǎn)亮LED time.sleep(1) ser.write(b0) # 熄滅LED ser.close()這里有兩個(gè)必修知識(shí)點(diǎn)。第一time.sleep(2)不是亂加的。Arduino在USB連接后會(huì)自動(dòng)復(fù)位一次復(fù)位過(guò)程中會(huì)重新啟動(dòng)此時(shí)上位機(jī)立刻發(fā)數(shù)據(jù)容易丟等2秒是讓板子完成啟動(dòng)。第二ser.write(b1)必須傳字節(jié)串而不是普通字符串Python3里字符串和字節(jié)串是兩種類(lèi)型普通字符串需要先encode()否則會(huì)報(bào)錯(cuò)。串口打開(kāi)時(shí)經(jīng)常會(huì)遇到PermissionErrorWindows下通常是串口被Arduino IDE的串口監(jiān)視器占用關(guān)掉監(jiān)視器再運(yùn)行Linux下則是當(dāng)前用戶(hù)沒(méi)有訪(fǎng)問(wèn)串口設(shè)備的權(quán)限后面常見(jiàn)問(wèn)題部分會(huì)詳細(xì)說(shuō)。2.3 為什么不能直接發(fā)字符串給自己設(shè)計(jì)一個(gè)指令協(xié)議很多初學(xué)者做到上一步就停了然后把代碼堆成幾百行在Arduino和Python兩側(cè)用無(wú)數(shù)if和字符串比較處理數(shù)據(jù)遇到數(shù)據(jù)錯(cuò)亂才回頭補(bǔ)協(xié)議。我的經(jīng)驗(yàn)是串口通信別看它簡(jiǎn)單真正的坑全在“消息邊界”上。串口本質(zhì)上是字節(jié)流數(shù)據(jù)一個(gè)字節(jié)一個(gè)字節(jié)地從TX口送到RX口沒(méi)有像報(bào)文那樣的消息間隔。如果你的Python程序連續(xù)發(fā)1和2Arduino先收到的是1再收到2這沒(méi)問(wèn)題但如果你發(fā)的是12Arduino可能會(huì)完整收到1,2也可能因?yàn)闀r(shí)序問(wèn)題只讀到1下一條指令就成了2。環(huán)境干擾、電源紋波、系統(tǒng)調(diào)度抖動(dòng)都可能讓字節(jié)流“切”出問(wèn)題。所以稍微復(fù)雜一點(diǎn)的通信都要自己約定協(xié)議。最簡(jiǎn)單的做法是給每條指令加固定的幀頭和長(zhǎng)度。比如幀頭0xAA 0x55兩個(gè)字節(jié)長(zhǎng)度1個(gè)字節(jié)表示后面數(shù)據(jù)個(gè)數(shù)數(shù)據(jù)N個(gè)字節(jié)校驗(yàn)1個(gè)字節(jié)對(duì)長(zhǎng)度和數(shù)據(jù)做異或單片機(jī)端收到后先判斷幀頭再讀長(zhǎng)度然后讀夠N個(gè)字節(jié)做異或校驗(yàn)校驗(yàn)通過(guò)才執(zhí)行命令。這樣即使一個(gè)壞幀出現(xiàn)也能通過(guò)幀頭同步恢復(fù)不會(huì)影響后續(xù)指令。Python端組裝一幀的代碼可以這樣寫(xiě)def build_command(data: bytes) - bytes: frame_header b\xaa\x55 length len(data) checksum length for b in data: checksum ^ b return frame_header bytes([length]) data bytes([checksum])這只是很簡(jiǎn)單的示意實(shí)際協(xié)議要根據(jù)項(xiàng)目復(fù)雜度裁剪。如果只需要控制幾個(gè)開(kāi)關(guān)用單字符或帶換行符的字符串也完全夠如果要做傳感器數(shù)據(jù)回傳和命令下發(fā)建議把幀結(jié)構(gòu)固定下來(lái)并且最好帶上應(yīng)答和超時(shí)重發(fā)機(jī)制。這會(huì)在調(diào)試上省下大量時(shí)間。還要注意Arduino Uno的串口緩沖區(qū)默認(rèn)最大64字節(jié)如果你要一次性傳輸大批數(shù)據(jù)可以把數(shù)據(jù)切片發(fā)送或者調(diào)大緩沖區(qū)。我做過(guò)一次八軸機(jī)械臂的指令解析一幀正好60字節(jié)超過(guò)緩沖區(qū)就出現(xiàn)丟幀最后是靠把幀長(zhǎng)減到48字節(jié)才規(guī)避的這種問(wèn)題到后面排查時(shí)會(huì)很痛苦。3. Arduino Firmata把Arduino變成可插拔的USB外設(shè)3.1 Firmata協(xié)議的原理與固件燒錄如果你只需要快速驗(yàn)證一個(gè)想法不想每次改功能都去改Arduino固件、重新燒錄那Firmata是很好的選擇。Firmata是一種通用協(xié)議它定義了上位機(jī)比如電腦上的Python和Arduino之間的通信格式是發(fā)送指令、讀引腳還是寫(xiě)引腳都用一套標(biāo)準(zhǔn)消息來(lái)承載而不是自定義字符。先用Arduino IDE打開(kāi)固件文件 - 示例 - Firmata - StandardFirmata選擇你的板子和串口直接燒錄。這個(gè)固件是官方維護(hù)的燒進(jìn)去之后Arduino就不再執(zhí)行你自己的邏輯而是變成一個(gè)“聽(tīng)話(huà)的USB轉(zhuǎn)IO設(shè)備”P(pán)ython通過(guò)協(xié)議告訴它引腳幾、模式是什么、是輸出高電平還是讀模擬值它就照做。需要注意StandardFirmata默認(rèn)的波特率通常是57600pyFirmata在連接時(shí)也會(huì)默認(rèn)用這個(gè)值如果你手動(dòng)設(shè)置波特率必須兩邊保持一致。另外Firmata不是萬(wàn)能的燒錄后如果串口波特率選錯(cuò)上位機(jī)連不上一次只能有一個(gè)程序占用Arduino串口不能同時(shí)開(kāi)著串口監(jiān)視器和Python。如果你頻繁調(diào)用引腳讀寫(xiě)serial上的延遲會(huì)成為瓶頸。3.2 Python端使用pyFirmata控制引腳安裝依賴(lài)pip install pyfirmata然后連接from pyfirmata import Arduino, util import time port /dev/ttyACM0 # Windows下是COM3 board Arduino(port) # 寫(xiě)數(shù)字引腳13 board.digital[13].write(1) time.sleep(1) board.digital[13].write(0) # 讀模擬引腳A0 analog_input board.analog[0] it util.Iterator(board) it.start() time.sleep(0.1) print(analog_input.read()) board.exit()需要注意讀取模擬值必須開(kāi)啟Iterator否則Arduino不會(huì)主動(dòng)往電腦發(fā)數(shù)據(jù)第一次讀取之前等一小段時(shí)間等引腳采樣穩(wěn)定。還要留意pyFirmata在部分Python新版本下可能會(huì)因?yàn)橐蕾?lài)庫(kù)版本問(wèn)題報(bào)錯(cuò)如果遇到可以換成pymata4API類(lèi)似但更現(xiàn)代pip install pymata4from pymata4 import pymata4 board pymata4.Pymata4(com_port/dev/ttyACM0) board.set_pin_mode_digital_output(13) board.digital_write(13, 1) board.set_pin_mode_analog_input(0) board.analog_read(0) board.shutdown()pymata4的寫(xiě)法更清晰文檔也更完整我現(xiàn)在做原型項(xiàng)目一般直接用pymata4。3.3 什么情況下該用Firmata什么情況別用在硬件原型階段Firmata能把“改代碼”的工作從Arduino搬到Python效率提升非常明顯特別適合做課程設(shè)計(jì)、數(shù)據(jù)采集、傳感器標(biāo)定這類(lèi)場(chǎng)景。但正式項(xiàng)目里我更建議回到自定義串口協(xié)議原因有幾個(gè)第一Firmata的每一條引腳讀寫(xiě)消息都有協(xié)議開(kāi)銷(xiāo)連續(xù)操作大量引腳時(shí)實(shí)時(shí)性不夠穩(wěn)定。第二StandardFirmata固件固定了引腳模式有些高級(jí)功能比如外部中斷、高精度PWM、特殊I2C配置要么不支持要么需要改固件那就失去了不燒固件的意義。第三如果Arduino在現(xiàn)場(chǎng)還要獨(dú)立工作不能依賴(lài)電腦那Firmata方案直接出局因?yàn)樗x了上位機(jī)就是一塊“木頭”。所以我的結(jié)論是Firmata擅長(zhǎng)給原型加分不擅長(zhǎng)給產(chǎn)品兜底。當(dāng)一個(gè)項(xiàng)目從Demo走向落地我會(huì)把通信層從Firmata切換到自定義固件這個(gè)切換越早做越好因?yàn)閰f(xié)議變更會(huì)影響上層Python邏輯。4. 樹(shù)莓派直接跑PythonGPIO控制與更多可能4.1 從Arduino切換到樹(shù)莓派先理解物理引腳和邏輯電平樹(shù)莓派本身就是一臺(tái)電腦所以用Python控制樹(shù)莓派的GPIO思路和Arduino完全不同。不需要USB串口不需要上位機(jī)Python進(jìn)程直接訪(fǎng)問(wèn)Linux系統(tǒng)映射出的GPIO接口。樹(shù)莓派最常用的是40Pin GPIO排針布局基本兼容。開(kāi)發(fā)時(shí)我手邊常備一張引腳圖可以搜索“Raspberry Pi GPIO pinout”并保存。重點(diǎn)區(qū)分兩類(lèi)編號(hào)物理編號(hào)比如從左上角開(kāi)始數(shù)第1腳和BCM編號(hào)Broadcom芯片的端口編號(hào)。比如物理第11腳對(duì)應(yīng)的BCM是17RPi.GPIO和gpiozero默認(rèn)使用BCM編號(hào)所以代碼里寫(xiě)GPIO17基本不會(huì)錯(cuò)但接線(xiàn)時(shí)要對(duì)著物理引腳確認(rèn)。硬件上的電平也需要格外小心樹(shù)莓派的GPIO是3.3V邏輯不是5V。把5V設(shè)備的TX信號(hào)直接接到樹(shù)莓派RX引腳長(zhǎng)時(shí)間可能燒壞CPU需要用電平轉(zhuǎn)換模塊或者分壓電阻。Arduino Uno的引腳邏輯是5V所以和樹(shù)莓派直接連串口時(shí)Arduino TX的5V電平不能直接進(jìn)樹(shù)莓派RX必須加轉(zhuǎn)換。這是我見(jiàn)過(guò)燒板最高發(fā)的原因沒(méi)有之一。4.2 GPIO庫(kù)怎么選RPi.GPIO、gpiozero、pigpio樹(shù)莓派上常見(jiàn)的Python GPIO庫(kù)有三個(gè)它們各有各的脾氣。RPi.GPIO是最老牌、資料最多的庫(kù)很多教程都用它。語(yǔ)法直白GPIO.setmode(GPIO.BCM)、GPIO.setup(17, GPIO.OUT)、GPIO.output(17, GPIO.HIGH)一看就懂。但它的維護(hù)已經(jīng)趨于停滯在新的樹(shù)莓派系統(tǒng)上偶爾會(huì)遇到運(yùn)行時(shí)錯(cuò)誤而且對(duì)異步支持不好。我第一個(gè)GPIO項(xiàng)目就是用它寫(xiě)的但對(duì)新手來(lái)說(shuō)現(xiàn)在有更好的選擇。gpiozero是官方推薦的庫(kù)API設(shè)計(jì)非?!癙ythonic”。它把LED、Button、Motor、Servo這些外設(shè)封裝成了類(lèi)代碼讀起來(lái)像自然語(yǔ)言比如led LED(17)、btn Button(2)而且封裝了設(shè)備異步事件、防抖邏輯甚至?xí)詣?dòng)清理退出狀態(tài)。對(duì)快速做項(xiàng)目、寫(xiě)教學(xué)Demo我強(qiáng)烈推薦它。pigpio走的是守護(hù)進(jìn)程模式樹(shù)莓派上跑一個(gè)pigpiod守護(hù)進(jìn)程你的Python腳本通過(guò)socket連接這個(gè)進(jìn)程好處是PWM波形更精確、支持遠(yuǎn)程GPIO局域網(wǎng)內(nèi)另一臺(tái)機(jī)器控制樹(shù)莓派還能同時(shí)監(jiān)聽(tīng)多個(gè)引腳。它適合對(duì)時(shí)序要求高、需要PWM或者邊緣檢測(cè)的場(chǎng)景。缺點(diǎn)是多了后臺(tái)服務(wù)調(diào)試時(shí)多一個(gè)故障點(diǎn)。我用表格總結(jié)一下庫(kù)維護(hù)狀態(tài)適合場(chǎng)景底層實(shí)現(xiàn)備注RPi.GPIO停止活躍維護(hù)舊項(xiàng)目遷移直接操作寄存器資料最多但API略老gpiozero官方持續(xù)維護(hù)快速開(kāi)發(fā)、教學(xué)封裝底層庫(kù)外設(shè)類(lèi)豐富易上手pigpio持續(xù)維護(hù)高頻PWM、遠(yuǎn)程控制C守護(hù)進(jìn)程socketPWM精確功耗略高選型建議很簡(jiǎn)單99%的新項(xiàng)目直接用gpiozero如果遇到它解決不了的高頻需求再切pigpio別在一個(gè)庫(kù)上死磕。4.3 一個(gè)按鈕控制LED的完整示例用gpiozero寫(xiě)一個(gè)按鈕控制LED的完整示例。接線(xiàn)按鈕一端接GPIO2另一端接GNDLED接GPIO17串聯(lián)一個(gè)電阻到GND。from gpiozero import LED, Button led LED(17) btn Button(2) btn.when_pressed led.toggle input(按鍵控制LED回車(chē)退出...\n)只用三行核心代碼就實(shí)現(xiàn)了事件驅(qū)動(dòng)按鈕按下時(shí)LED切換狀態(tài)不需要while循環(huán)輪詢(xún)。gpiozero在內(nèi)部用了線(xiàn)程和回調(diào)input()保持主進(jìn)程存活。這里注意GPIO2在樹(shù)莓派上默認(rèn)帶1KΩ上拉電阻Button默認(rèn)就是上拉輸入所以按鈕另一端接GND按下時(shí)電平被拉低識(shí)別為按下這是最常見(jiàn)的接法。如果用RPi.GPIO寫(xiě)輪詢(xún)版本大致是這樣import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(2, GPIO.IN, pull_up_downGPIO.PUD_UP) GPIO.setup(17, GPIO.OUT) GPIO.output(17, GPIO.LOW) try: while True: if GPIO.input(2) GPIO.LOW: GPIO.output(17, not GPIO.input(17)) time.sleep(0.3) # 防抖 finally: GPIO.cleanup()對(duì)比能看出gpiozero封裝掉了輪詢(xún)、去抖和狀態(tài)管理的細(xì)節(jié)代碼更少出錯(cuò)的概率也更低。不過(guò)封裝也意味著你想完全控制引腳時(shí)序時(shí)不太方便這是取舍不是bug。4.4 把GPIO能力封裝成網(wǎng)絡(luò)接口給后續(xù)項(xiàng)目鋪路樹(shù)莓派既然跑著完整系統(tǒng)就沒(méi)必要只拿GPIO做開(kāi)關(guān)。我常用的一個(gè)模式是把GPIO控制封裝成HTTP接口這樣手機(jī)、另一臺(tái)電腦甚至網(wǎng)頁(yè)都能控制樹(shù)莓派。用FastAPI寫(xiě)一個(gè)最小接口from fastapi import FastAPI from gpiozero import LED app FastAPI() led LED(17) app.get(/led/on) def led_on(): led.on() return {status: ok} app.get(/led/off) def led_off(): led.off() return {status: ok}這樣就已經(jīng)是一個(gè)局域網(wǎng)內(nèi)的智能開(kāi)關(guān)服務(wù)器了。更進(jìn)一步可以接入MQTT讓設(shè)備通過(guò)主題home/led/17接收指令再配合一套控制面板就能脫離電腦和IDE實(shí)現(xiàn)真正的遠(yuǎn)程控制。別被這么多技術(shù)名詞嚇到核心仍然是我們剛才的GPIO庫(kù)外面包了一層網(wǎng)絡(luò)協(xié)議而已。5. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄5.1 串口識(shí)別不到、權(quán)限被拒Arduino接上電腦后設(shè)備管理器看不到新增COM口或者Python報(bào)could not open port。按順序排查檢查USB線(xiàn)是不是純充電線(xiàn)很多USB線(xiàn)只接電源不接數(shù)據(jù)接上后板子能通電但沒(méi)有任何串口。換一根已知能傳數(shù)據(jù)的線(xiàn)。檢查USB轉(zhuǎn)串口驅(qū)動(dòng)。CH340、CP2102芯片在Windows下容易驅(qū)動(dòng)識(shí)別異常去芯片官網(wǎng)裝驅(qū)動(dòng)或者換用原生USB串口的Arduino板。Windows下打開(kāi)設(shè)備管理器查看端口COM和LPT確認(rèn)端口號(hào)。如果顯示黃色感嘆號(hào)更新驅(qū)動(dòng)。Linux/macOS下用ls /dev/tty*或ls /dev/cu*查看設(shè)備。如果能看到設(shè)備但Python打不開(kāi)幾乎都是權(quán)限問(wèn)題把當(dāng)前用戶(hù)加進(jìn)dialout組后重新登錄sudo usermod -a -G dialout $USER如果Arduino IDE能打開(kāi)串口監(jiān)視器但Python打不開(kāi)檢查是否同時(shí)開(kāi)著兩個(gè)串口監(jiān)控程序同一個(gè)串口同一時(shí)刻只能被一個(gè)程序獨(dú)占。5.2 亂碼、丟包、卡死串口通信三大頑疾串口出現(xiàn)亂碼優(yōu)先檢查波特率是否一致、地線(xiàn)是否可靠共地。波特率不一致最典型如果Arduino端Serial.begin(9600)Python端定為115200那讀到的基本是天書(shū)。另外如果Arduino供電電壓不穩(wěn)比如用劣質(zhì)USB線(xiàn)或者電源電流不足也可能在通信過(guò)程中偶發(fā)亂碼。丟包和卡死多半和寫(xiě)入時(shí)機(jī)有關(guān)。Python端調(diào)用serial.write()后立即close()Arduino可能還沒(méi)讀完緩沖區(qū)數(shù)據(jù)進(jìn)程就退了。正確做法是寫(xiě)入后等待一小段時(shí)間或者讀取Arduino發(fā)回的確認(rèn)字符再繼續(xù)下一步。尤其不要在循環(huán)里不加延時(shí)地往串口扔數(shù)據(jù)Arduino的串口緩沖區(qū)一旦被填滿(mǎn)后續(xù)數(shù)據(jù)全部丟棄程序看起來(lái)就是“卡死”。解決卡死還有一個(gè)很實(shí)用的技巧在串口讀取上設(shè)置超時(shí)。Python端serial.Serial的timeout參數(shù)一定要設(shè)置不要用默認(rèn)的-1timeout1表示讀操作最多阻塞1秒避免Arduino長(zhǎng)時(shí)間不響應(yīng)時(shí)Python進(jìn)程無(wú)限等待。如果你用ser.read()讀取不定長(zhǎng)數(shù)據(jù)可以先用ser.in_waiting獲取當(dāng)前緩沖區(qū)可用字節(jié)數(shù)再讀指定數(shù)量這樣不會(huì)一次讀太多導(dǎo)致超時(shí)。5.3 電流不夠和電平不匹配硬件安全紅線(xiàn)很多新手把LED直接接在GPIO上或者把一個(gè)小電機(jī)直接接在Arduino引腳結(jié)果引腳發(fā)燙、芯片損壞。原因是微控制器GPIO的驅(qū)動(dòng)能力有限Arduino的IO引腳通常只能提供20mA左右的電流樹(shù)莓派GPIO更是只有16mA左右。LED串個(gè)電阻就能解決但電機(jī)啟動(dòng)電流很容易達(dá)到數(shù)百毫安必須用電機(jī)驅(qū)動(dòng)板比如常見(jiàn)的L298N、TB6612或者用MOSFET模塊。計(jì)算LED限流電阻的公式很簡(jiǎn)單R (Vcc - Vf) / I。以Arduino的5V驅(qū)動(dòng)一個(gè)紅色LED為例導(dǎo)通壓降Vf約2V工作電流選10mA那么R (5 - 2) / 0.01 300Ω取標(biāo)準(zhǔn)值330Ω就很安全。樹(shù)莓派3.3V驅(qū)動(dòng)藍(lán)色LEDVf約3VR (3.3 - 3) / 0.01 30Ω但藍(lán)色LED亮度很高實(shí)際可以用100Ω甚至220Ω限制到更小電流。電平匹配方面上面已經(jīng)提過(guò)樹(shù)莓派GPIO不能接受5V邏輯信號(hào)。如果要讓樹(shù)莓派讀取一個(gè)5V傳感器的輸出最簡(jiǎn)單是使用電平轉(zhuǎn)換模塊或者用電阻分壓串一個(gè)1K電阻后再接一個(gè)2K電阻到地中間抽頭接樹(shù)莓派引腳這樣5V經(jīng)過(guò)分壓后約3.3V。分壓只適用于低速信號(hào)高速串口建議還是用專(zhuān)用模塊。5.4 程序退出后引腳狀態(tài)殘留與代碼健壯性寫(xiě)Python控制GPIO最詭異的現(xiàn)象是程序崩潰后LED仍然亮著或者引腳電平異常。原因是GPIO狀態(tài)不會(huì)被自動(dòng)清理Linux內(nèi)核保持最后一次寫(xiě)出的電平直到下一個(gè)進(jìn)程重新控制或者板子重啟。gpiozero在正常退出時(shí)會(huì)清理但如果遇到CtrlC、異常退出清理邏輯不一定會(huì)執(zhí)行。所以代碼要養(yǎng)成這樣的習(xí)慣主邏輯盡量包在有finally的結(jié)構(gòu)里退出前做清理。用gpiozero時(shí)可以顯式調(diào)用led.close()用RPi.GPIO時(shí)調(diào)用GPIO.cleanup()。如果你寫(xiě)任何長(zhǎng)時(shí)間運(yùn)行的服務(wù)還要考慮信號(hào)處理比如在SIGTERM時(shí)把引腳拉低防止斷電前外設(shè)出現(xiàn)不該有的動(dòng)作。同樣Python腳本里如果使用了atexit注冊(cè)清理函數(shù)最好把硬件的停止邏輯也放進(jìn)去例如關(guān)閉所有PWM、拉低電機(jī)使能腳這能防止下次啟動(dòng)時(shí)設(shè)備突然原地動(dòng)作。產(chǎn)品現(xiàn)場(chǎng)偶爾重啟機(jī)器這類(lèi)問(wèn)題最容易被忽略。5.5 調(diào)試習(xí)慣日志、模擬器和版本管理最后想分享一個(gè)很多教程不會(huì)提的調(diào)試習(xí)慣。硬件項(xiàng)目調(diào)試時(shí)不要靠print盲猜尤其不要在主循環(huán)里寫(xiě)一堆print導(dǎo)致時(shí)序偏移。建議用標(biāo)準(zhǔn)的logging模塊輸出到文件串口接收數(shù)據(jù)時(shí)記錄十六進(jìn)制原始內(nèi)容比如import logging logging.basicConfig(levellogging.DEBUG, filenamedebug.log) ... logging.debug(RX: %s, raw.hex())這樣一旦出問(wèn)題直接翻日志看原始字節(jié)流比起在終端前守著要省心得多。如果你身邊沒(méi)有硬件也完全可以用模擬環(huán)境做上層邏輯開(kāi)發(fā)。樹(shù)莓派這邊gpiozero提供了模擬引腳實(shí)現(xiàn)配合pytest可以寫(xiě)單元測(cè)試來(lái)驗(yàn)證業(yè)務(wù)邏輯Arduino那一側(cè)可以用Python的fake serial類(lèi)替換真實(shí)串口讓Python代碼在本地跑通到了現(xiàn)場(chǎng)再切回真實(shí)設(shè)備。我的很多項(xiàng)目都是這樣分層處理的復(fù)雜的算法邏輯在模擬環(huán)境里先驗(yàn)證硬件只是最后一步的“設(shè)備驅(qū)動(dòng)”。版本管理也不可忽略。Arduino固件和Python代碼放在同一個(gè)git倉(cāng)庫(kù)建立firmware/和python_controller/兩個(gè)目錄每次改動(dòng)留下記錄非常重要。硬件問(wèn)題有時(shí)候是代碼回歸有時(shí)候是接線(xiàn)錯(cuò)誤git能幫你快速對(duì)比老版本代碼省掉很多重復(fù)排查。6. 寫(xiě)在最后的實(shí)操體會(huì)這幾套方案我陸陸續(xù)續(xù)用了很長(zhǎng)時(shí)間最大的感受是工具永遠(yuǎn)在變但通信鏈路和硬件常識(shí)不會(huì)變。無(wú)論是Arduino串口、Firmata還是樹(shù)莓派GPIO本質(zhì)都是把Python的邏輯翻譯成硬件能理解的信號(hào)。如果正在起步別貪多先把“串口發(fā)一個(gè)1點(diǎn)亮LED”這個(gè)閉環(huán)跑通再慢慢往協(xié)議、網(wǎng)絡(luò)、多設(shè)備協(xié)作上擴(kuò)展。等這三條路都熟練了再回頭看很多所謂的高端項(xiàng)目無(wú)非是這些基礎(chǔ)模塊的組合。最后提醒一句任何時(shí)候插拔線(xiàn)路都先斷電數(shù)據(jù)丟了可以重跑板子燒了只能掏錢(qián)換。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
丰满岳乱妇一区二区三区| 97色干| 天堂亚洲精品久久老牛| 欧美激情 日韩精品| 国人欧美精品一区二区| 日韩啊V| 97国产天堂岛| 女人的久久久| www.91久久| 日韩精品黄片免费观看| 张柏芝国产一区在线观看| 极品色电影院| 精品美女在线视频| 宗合情欲网| 男人天堂久久精品不卡| 色香色欲天天综合网天天来吧| 日韩电影在线观看网址| 青娱乐999| 久久久久久免费电影| 国产老熟女| 九九碰九九爱97| 操www| 国产91 丝袜在线播放 | 91丝袜美腿片| 色香在线| 亚洲91综合| 亚洲国产剧情少妇激情| 欧洲射精91| oumeisetu综合| AV综合中文字幕干| 国产精选三级在线观看| 国产精品成人蜜臀AV在线| 亚洲av综合色| 激情综合网五月婷婷| 色呦呦呦在线观看视频| 久久久久亚洲Aⅴ无码| 精品欧美不卡在线播放| 狠狠操使劲操| 黄色在线网站| 91精品啪在线观看国产城中村| 国产大学生口爆吞精合集| 久久久久久亚洲中文| 久久久久97| 91丝袜在线播放| 天天欧美| 日韩成人性日韩成人性爱视频在线免费观看| 欧美亚洲丝袜人妻制服中文99| 97伦乱| 都市激情人妻一区二区青青操视频 | 亚洲激情综合| 91美女丝袜诱惑视频| 日韩婷婷| 成人精品一区二区三区| 天天综合站| 久久精品噜噜噜成人看免欧美大片| 亚洲宗合网| 中文子幕一二三| 亚洲素人综合| 日韩欧美亚洲自拍偷拍| 7777奇米影视久久| 免费一级欧美片片线观看| 5月婷婷6月六月丁香| 欧美在线视频99| 亚洲天堂男人在线| 综合91网| 亚洲色图 欧美| 欧美极品美女aaaaaa级黄片| 香港澳门日本三级网站| 嗯嗯嗯好爽| 99久草| V A在线| 国产二区视频在线观看电影| 五月婷婷综合网| 精品国产污一区二区三区| 95自拍视频在线观看| 欧美三级中文字幕hd| 久久婷婷色| 精品福利视频| 天天欧美色| 97在线欧洲| 精品大全99999| 男人久久天堂| 丁香婷婷九月| 欧美成人综合| 久热一区二区| 色婷婷电影网| 久久久91福利姬| 91丝袜在线观看| 亚洲图片日本AⅤ欧美在线| 久久婷婷伊人| 日韩大香蕉精品在线视频| 亚洲综合 欧美| 男人的天堂久久| 黄片免费久久久久久久| 欧美一区二区传媒| 91搡老女人老妇女老熟女歌词翻译| 国产成人99久久亚洲综合| 岛国艾薇凹凸视频天堂| 蜜臀久久99精品| 69精品| 国产午夜无码片在线观看影视| 久久五月份| 干美女人妻| 国产精品高清2021在线| 久久久亚洲精品电影免费看| 91N综合网| 国语精品内射在线观看| 欧美在线视频播放| 国产精品自拍xxxx| 天美传媒Av在线| av中亚| 狠狠综合网| 国产精品色约约| 强奸乱伦免费网站| 熟女一区二区| 国产91av在线播放| 国产精品91ai| 久久性爱精品一区| 99精品高潮| 久操网无码在线| 绑缚麻绳人妻寝取完整版| 久久78| 一色网男人的天堂| 欧美综合国产精品久久丁香| 男人天堂综合| 亚洲最大网站av| 国产AB视频| 色999人与兽| 国产成人精品一区| 91久久婷婷| 在线观看不卡一区二区三区| 国产欧美日韩臀 | 国产理论视频在线播放| 国产精品九九| 无码国产精品午夜不卡(| 亚洲免费精品一区| 色九九久九九| 一级黄色影片| 98人妻精品一区二区色欲| 五月天色图影视| 肥佬影院91| 婷婷99狠狠躁天天躁| 午夜αv| www.伪伪| 婷婷色香| 上海一级黄片| 精品国产Av无码久久久亚洲| 久久视频少妇美女| 91精品综合久久久久久五月丁香| 91亚洲人| 色综合加勒比四四季| 午夜亚洲WWW湿好大| 2019天天操天天爽天天拍| 搡老人老9丨女老熟人| 国产乱青青草久久| 色五月激情网| 91被操| A男人的天堂| 亚洲欧洲综合视频在线| 亚洲精品国产日韩无码AV永久免| 蜜臀精品1区2区| 国产一级高清免费观看| 天天综合网~91综合网| 日本在线不卡一二区| 大JI巴好深好爽又大又粗视频| 欧美大香蕉97| 亚洲激情网| 97干在线| 亚洲视频精选| 婷婷丁香人妻 | 99re99视频在线免费观看| 91干熟女| 黑人无码一区二区| 青青操网| 天天欧美| 目产99999久久999| 久久女人视频| 尤物黄色在线观看网站| 成人无码欧美一级A片狼牙直播| 97超碰色屌| 国产一级αv免费看片| 97香蕉网| 999热这里只有精品| 另类 综合 日韩 欧美 亚洲| 91精品人妻一区二区三区蜜桃臀| 日本人妻A片成人免费看片| 三级日本一区二区三区| 99人妻| 久久原创中文| 九九国产| 丁香婷婷激情五月天无毒不卡 | 日韩AV熟女乱伦| 99久久亚洲精品无码毛片潘甜甜| 久久夜夜| 91丝袜在线观看| 91美女视频直播| 欧美男人亚洲天堂| 亚洲综合夜色| 中文字幕伊人| 色婷婷五月天| 五月婷网站| 麻豆视频国产一区二区| 亚洲AV无码AV吞精久久久久| 999精品国产高清一区二区| 一本色道久久综合精品婷婷| 亚洲欧美碰碰| 女人精品内射国产99| 亚洲a色| 日韩无码服务区| 91老熟女91老女人| 亚洲色图欧美色图在线播放| AV男人天堂网| 天天综合-91入口| 欧美宗合网| 天天欲望网| 少妇淫妇久久久久久久| 手机午夜电影神马久久| 久久精品国产亚洲AV高清演员表| 操逼片国产| 少妇3P性爱自拍| 污污汅18禁网站在线永久免费观看| 100啪啪视频大全| 国产美女自拍AV| 国产美女口爆吞精视频| 亚洲精品一区二区精品| 超碰成人最新最好看| 欧亚乱色熟女一区二区| 精品成人av一区二区三区在线| 神马午夜久久久| 春色校园综合网| 一区二区不卡| 本道在线| 中文字幕乱亚洲美女精品一区| 久久97精品久久久久久久不卡| 青娱乐91| 欧美激情性久久久久久| 欧美做爰无码A片视频| www色色com| 999久久久精品国产| 少妇蜜汁| 后入福利视频| 亚洲国产精品无石码久久| 免费观看日本操逼视频| 99色综合| 欧美精品23| 天天草天天日| 啪啪资源网| 国产女人成人精品视频| 国产性感骚丝袜在线| 北条麻妃性愛视频| 大香蕉碰碰| 欧美精品四区| 天美传媒Av在线| 中国熟妇| 美女视频尤物网在线看| 丝袜夫妻自拍| 超碰是碰在线观看| 欧美性爱91| 啊啊啊好爽快点啊啊啊嗯嗯| 亚洲日韩东京热一区| 91欧美色| 亚洲欧美一区二区三区一猛片| 狠狠色综合网| 久久偷偷色综合蜜桃| 亚州欧美色图| 久久性爱视频| 97在线视频观看免费| 伊人黄色片| 五月婷婷六月天| 日韩精品作爱导航| 狠狠操狠狠操操| 女人高潮大叫一级毛片| 激情婷婷丁香| 影音先锋国产精品| 中文字幕 码 自拍 视频 区| a片亚洲一本通视频| 91天堂网| 亚洲超碰在线| 校园春色美腿丝袜| 国产精品岛国片在线观看| 成人天天看站长推荐| 日本欧美不卡| 91人妻Pr| 亚洲欧洲日韩中文字幕一区| 久精品无码av一区二免费国产在线观看| 蜜桃视频精品一区二区三区| 一区操逼| 国产熟女一区二区| 91精品黄在线观看| 91色人| 综合五月婷婷亚洲一区| 亚熟hd视频在线| 亚洲春色欧美激情自拍| 性欧美体内射精| av三级电影在线播放| 欧美一级色| 97久久超碰国产精品| 亚洲一区二区中文字幕| 久久久久99精品成人片蜜臀| 狠狠狠狠狠| 97久久超碰日韩精品| 巨爆乳肉感一区二区三区竹菊影视| 色网1| 国产在线视视频有精品| 伊人9| 亚洲性爱无码乱伦av| 色777999综合| 九九色色| 岛国1区2区3区在线观看| 嗯嗯嗯不要不要免费视频| 84YTCOM性无码| 99.色网| 18禁看网站一区| 96国产污污污丝袜| 大伊香蕉在线视频免费| 欧美AB在线| 一个人在线看的黄色电影网站| 午夜福利1区2区3区| 啊啊啊好舒服视频在线观看| 91四海无码日韩欧美| 日韩免费中文字幕视频| 一本大道综合伊人精品热热| 九九色图| 男人天堂网手机版婷婷| 亚洲熟女中文字幕在线| 精品午夜福利| 九九热精彩视频| 超碰人人超在线观看| 国产精品久久久久婷婷二区次| 91AV老熟女视频| 国产亚洲精品A在线观看下载| 99精品高潮| A久久| 中文字幕三四区| 国产一区二区三区,在线观看观看| 国产情侣自拍在线播放| A 天堂| 秋霞鲁丝午夜无码一区二区三| 岛园激情| 大香蕉视频一二三区| 大白逼三四级| 婷婷精品国产一区二区三区日韩| 香蕉久久国产AV一区二区| 啪啪性爱免费视频| 欧美色干| 蜜臀无码一区二区| 97久久精品国产| 欧美日韩操逼嗦吊| 中文字幕AV乱伦| 麻豆尤物视频网| 久偷拍欧美日韩三区| 国产999精品久久久久久| 中文字幕,人妻,日韩| 蜜臀久久久99久久久久 | 国产精品美女在线一区| 亚洲国产综合图区中文字幕| 美女网站黄页| 夜夜狠狠躁日日躁色视频| 色色婷| 91午夜无码| 搡老女人老熟女91| 欧美资源| 欧美日韩国产中文超碰| 老司机福利青青草| 国产一区在线看| 91青青在线视频| 九X超碰| 久操高青| a男人的天堂| 韩国久久97| 99色热| 91九色在线| 人妻aa| 久久这里是精品| 青草草免费网站av| 在线免费观看日韩一区| 国产亚洲日韩欧| 国产无码成人无码| 亚洲男人天堂网| 日比av无码| 91痴汉| 亚洲男人天堂2| 国产精品电影推荐| 一本久久精品中文字| 欧美日韩一干二干| 亚洲色香| 97天天插| 亚洲骚逼少妇| 美女黄网| 老熟女乱伦一区| 无码人妻一区二区三区色欲aⅴ| 亚洲欧美999| 粉嫩av在线| 蜜乳AV免费观看| 大香蕉乱级| 国产日逼视频| 亚洲乱码国产乱码精网站| 黄片无码在线制服| 91性高潮久久久久久久久| 综合久久婷婷| 精品人妻一区二区三区-国产精品| 射丝袜高跟鞋99| 久久久111| 美女爽爽爽刺痛洞洞| 日本2020一区二区| 91色综合| 黄色区免费观看中文字幕| WWW黄片COM| 久久久五月天| 东京男人天堂| 91色伦综合| 欧美天天综合站| 亚洲不卡一| 欧美日韩欧美| a片在线播放| 秋霞成人一级在线观看| 久草福利在线资源站| 淫妻综合网| 亚州成人a∨| 欲色啪| 国产视频第二页| av网站国产主播在线| 性久久| 很很干很很操| 蜜桃精品一区二区三区久在线| 超碰99在线| 先锋激情∨在线视频播放| 欧美一级A片在线看视频性色| 亚洲精品视频在线播放| 性色一线| 天天日天天屌天天操| 加勒比东京热五月天天堂网| 亚洲丝袜少妇在线| 精品一区二区成人| 日韩美女久久一区二区三区| 亚洲久草AV色图| 亚洲天堂在线怕怕视频| 玖玖在线视频| 少好三P| 国产精品一区二区a| 国产浮力影院第1页| 少妇被玩视频二三区| 热热色综合网| 男女性感激情网站| 亚洲成人一二三区| 夜夜欢天天干| 95人妻爽爽人人做人人澡| 日韩精品人妻中文字幕久久久| 亚洲激情久久久伊人综合| 亚洲欧美在线观看无码| 欧美日韩亚洲天堂网| 白丝jkav| 人人搞人人插人人操| 九九RE视频在线精品| 亚洲色情在线影视| 国产精品网址| 9 7超碰在线免费观看| 久久69| 欧美99| 精品人妻一区二区三区四区| 亚洲成人性爱在线观看| 后入福利视频| 精品一区二区综合熟妇| 日本精品一级二级三级| 午夜AV人气不卡| 97蜜桃综合| 在线毛片片免费观看| AV一区观看| 久久欧美1卡2卡3| 熟女少妇视频| 狠狠久久亚洲欧美专区| 变态综合色| 九月婷婷综合| 高清无码人妻久久久一区二区三区aⅴ| 婷婷激情五月天小说网| 天天综合麻豆视频| 色999五月色| 国产精品另类一区大香蕉| 亚欧高清在线| AV中文字幕三四五| 激情婷婷五月天| 淫荡网址| 国产午夜福利视频在线| 丁香六月激情| 噜噜噜亚洲精| 无码人妻一区二区一牛影视| 热思思免费视频| 99天天超碰| 色在线亚洲视频www| 欧洲亚洲天堂精品| 久一区久久蜜桃| 国产精品久久久久久 百度| 超碰 国产熟女精品一区| 黑人精品成人一区二区三区| 噜噜噜噜久久久精品免费| 99少妇精品视频| 100啪啪视频大全| 午夜无码熟妇丰满人妻| 九九99精品| 免费试看60秒| 91美女视屏| 亚洲欧美不卡线| 久久亚洲天天做| 郑州宾馆老熟女露脸啪啪| 九九热re99re6在线精品| 天天综合亚在线| 91精品女厕偷拍视频| 日韩本不卡视频在线观看| 大香蕉AV丝袜| 久久99人妖视频国产| 色香AV| 中文字幕女同在线| 丁香六月天| 色综合久久av| 亚洲日韩精品一区二区| 综合97亚洲| 亚洲婷婷五月天| 探花一区二区三| 欧州91高潮| 曰韩少妇无码| 欧美色九九九| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 激情综合av| 久久98| 日韩图区 偷拍| 欧美色性情| 看看日B真人视频| 67194无码不卡| 色综合久久久久| 无码人妻精品一区二区中文 | 蜜臀AV网站| 欧美一区二区一级岛国大片| 亚洲图片91| 日韩淫色网| 亚洲精品 超碰| 精品区9| 在线观看日韩av不卡| 不卡中文字幕aⅴ在线| 风韵犹存大大大大香蕉| 欧美淫乱视频| 欧美超碰人妻97| 青青草国产盗摄一二三区| 亚洲日本韩国极品一区二区| 色综合天天| 无码自拍SM| 亚洲国产精品成人无码久久久| 尹人免费观看视频在线| 一起草三级AV电影在线观看| 青青草久草| 日本二三四区| 99夜夜操| juliaann欧美丝袜办公室| 四虎免费视频| 色97欧美| 欧美色图20P| 大香蕉人妻久久| 精品少妇99| 97视频播放| 欧综合网| 亚洲中文字幕精品一区| 国产精品黑人一区二区三区| 思思热在线视频免费| 视频一区二区免费在线| 国产强奸AV在线| 色综合V| 福利操逼| 亚洲精品日日夜夜52| 日本在线激情一区二区三区 | 亚洲在线a| aa片毛片| 不卡av在线中文字幕| 中文字幕AV乱伦| 浪人综合网| 操逼日韩无码| 欧插网站| 夜夜嗨绯色| 亚洲怡春院| 啊啊啊啊无码| 人人爱人人乐人人操| 一级片视频啪啪| www.99中文字幕| 无码国产精品久久久久| 欧美国产日韩清纯唯美| 草久久久| 玖玖资源视频一区二区三区| 午夜毛片亚洲精品片国产久久久| 日本熟女不卡视频| 日本性爱网址| 天综合网| 亚洲人码13| 青草一区二区| 97在线视频观看网站| 国产精选三级在线观看| 97免费在线视频在线观看| 香蕉久久精品| 粉嫩AV一区二区夜夜| 色呦呦国产精品免费看| 全免费a敌肛交毛片免费| 成人欧美一区二区三区黑人一| 国产大片精久久久久久| 亚洲欧美内射| 亚洲日韩在线a不卡99精品| 操逼操网| 色婷婷在线视频精品导航| 最新9久久久9免费视频| 国产午夜精品在线观看| 日本123区操B视频| 超碰人妻中文在线| 欧美第二页| 久干9操| 日韩97超碰中文字幕| 日本熟妇色熟妇在线视频播放| 唯美清纯 妖精视频| www.伪伪| 99热精品青草在线 | 国产亚州高清国产拍精| 在线综合 亚洲 欧美中文字幕| 久久久久九九九九九| 日韩偷拍一区二区三区| 午夜精品久久久久久久男人的天堂 | 99亚洲国产精品色一区二区三区| 色五月婷婷中文字幕| 欧美亚洲se91| 男女做爰猛烈动高潮A片免费应用 少妇厨房愉情理伦片bd在线观看 不卡中文字幕aⅴ在线 | 高清孕妇孕交 交孕妇| 高清在线不卡一区二区 视频| 中文字幕成人| 9.1小视频| 女人被男人桶爽视频网站| 精品v1区| 很很操在线| 人妻加勒比东京热| 粉嫩AV一区二区夜夜| 亚洲日韩国产欧美综合v| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 日韩黄片视频试看| 不卡人妻少妇精品毛片一区23区视频| 嗯嗯不要视频| 欧美色狠| 5278欧美一区二区三区| 色偷综合| a v网站在线播放| 欧美日韩国产电影| 天天谢天天干| 中国小夫妻勾搭露脸淫荡对白| 激情综合网激情综合| 欧亚综合一卡二卡中文字幕| 91久| 天天狠| 日本影视久久免费| 蜜臀亚洲中文| 99re热有精品视频国产| 91老熟女老女人国产老太| 久久久久久69国产一区二区| 色综和网| 尤物一级在线免费观看| 国产美女高潮视频| 亚洲少妇色| 久久专区| 大香蕉宅男伊人| 激情无码日韩| 18禁久久| 91色艳| 91av熟女人妻| 亚洲精品1区| 最新啪啪视频| 久久久久久综合久久伊人蜜月| 日韩精品区二区三区不卡| 性天堂| 日日橹狠狠爱欧美超碰| 五月天丁香婷婷综合网站| 夜夜嗨免费视频| 日日日日日| 精品人妻一区二区三区四区石在线| 亚洲淫乱骚妇AV| 男人a天堂手机在线版| 欧美草草高清日韩视频| 99热97| 亚洲AV无码翔田千里网站| 欧美91色| 精品久久久久9999| 日韩午夜精品一区二区三区电影| 超碰吊日色| 国产馆极品诱惑| AAAAAAAAA黄片| 乱人乱色一区二区三区免费| 国产精品小视频一区二区三区| 操逼免费视频无码国产| 日韩综合97p| 极品粉嫩少妇视频| 9久久精品| 十八禁视频一区二区| 高清孕妇孕交 交孕妇| 国产av高清版| 欧美久久伊人| 2000亚洲男人天堂| 五月天婷婷久久| 天堂亚洲精品| 1024人妻熟女一区二区三区| 九九九一二三| 97bbn| 七久久久| 久久精视频美日韩在线视频| 国产精品ww久久| 人妻色情天天操| 久偷拍| 69超碰综合| 欧美日韩性爱无码| 边做饭边操逼逼| 激情在线青青操| 无毛精品| 亚洲自拍一区夜夜操| 九九热免费国产视频婷婷伊人| 成人三一级一片aaa| 亚洲精品久久久久毛片A片拉屎| 亚洲91射| 少妇精品久久久| 亚洲天堂第一页| 91亚洲黑人| 日本国产成人亚洲精品无码| 再深点灬舒服灬太大了添视频| 中文久久| 精品对白久久不卡| 中文字幕福利视频一区二区三区在线观看| 福利天堂| 日韩 成人 有码| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 人妻少妇蜜桃视频欧美一区| 免费观看啪视频| 国产精品无套内谢| 人妻啪| 亚洲电影中字一区二区| 国产精品com| 久久男人天堂| 加勒比综合| 97超碰中文在线| 9久久久久| 东京热毛片177b2viP| 97久久超碰日韩精品| 日本久久久久久久久久| 青青青草原| 亚洲九九视频| 秋霞 色色| 国产精品又黄又猛又粗| 91精品国产91久久福利| 91性高朝久久久久久久久| а√天堂资源官网在线资源| www久久国产精品| 韩国免费播放一级毛片| 国产91av在线播放| 性爱免费视频成人| 蜜乳AV网址| 欧美精品日韩一区二区| 99热这里只有精品8| 亚洲成人碰碰| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 啊啊啊啊啊操我视频| 亚洲国产一级中文综合久久天堂在线免费观看 | 91美女在线视频| 97丝袜亚洲在线播放| 久久中文字幕女同性恋一区| 日韩本不卡视频在线观看 | 色婷视频| 国产精品乱人伊人网| 69综合网| 伊人视频| 精品九九九九| 日韩精品碰碰| 丁香五月婷婷基地| 一本正道久久熟女| 夜夜 中文视频rt| 欧美九九九| 欧美亚男人的天堂| 国产不卡精品91| 色大师网站www永久网站视频| 91/欧美| 蜜臀中文无码午夜| 一级性爱网| 中日韩欧美精品无码AⅤ一区二区| 99久久网站| 美女的肌被草喷水视频| 9ⅰ久久久天天| 男人的天堂2019| 亚洲情色中文字幕一区| 嗯嗯啊在线视频| 综合av影片| 亚洲国产97| 亚洲色 国产 欧美 日韩| 大香交伊人网| 丰满人妻一区| 久久国产逼| 激情av| 亚洲天堂美臀在线| 2019天天干| 性做久久久久久免费观看软件| 国产自产91区13区| 亚州欧美在线| 国产精品69人妻无码久久久| 97视频观看| 欧美综合中文| 天天搞在线综合网| 精品人妻1237| 91宗合网| 国产精品久久久久综合| 日韩精品第3页| 日本不卡二区| 激情视频网址| 国产人人干| 八戒无码国产午夜福利| 1956日韩精品| 九久9精品| 性爱av网站| 99re6国产精品99re| 日韩操p| 97日本超碰综合| 九九九九九九九九九国产精品| 亚洲成人久久一区二区| 欧州激情视频在线一区二区| 综合夜夜| 9久超碰| 美女9118禁| 成片免费播放| 青青草在线视频播放器| 夜色AV无码手机在线影院| 超碰夫妻97| 牛牛操视频逼| 91日日| 欧美大波激情xxxx| 熟啊v色欧美热| 91精品无码久久久久久久| 97中文超碰| 天啪| 亚 欧 美 综合| suv精产一二三区| 91碰碰碰| 97天天日| 亚州成人A√| 蜜乳成人AV| 色九九九九| av日韩国产一区二区| 精品国产久久乱码| 久久性爱大全| 男人的天堂Va| 狂操嫩妻视频一区二区三区| 欧美色青| 国产白领连续中出在线观看| 无码动漫av中文字幕| 情色五月天久久久| 久久久久久69国产一区二区| 人妻免费观看| 日韩不卡a级视频专区| 日本幼女18+| 国产精品色| 毛片一区二区| 亚洲欧洲日产国产综合网| 精品视频免费在线一区| 精品人妻一区二区蜜桃视频 | 草莓精品视频在线免费观看| 97超碰免费人人性爱| 亚洲色 国产 欧美 日韩| 福利五区| 神马精品视频| 日韩操p| 四虎免费视频| 亚洲宅男天堂| 国产一区二区在线播放量| 人妻内射一区二区在线视频| 天天色综合天天操| 亚洲国产精品无码AV久久| 色大香蕉97N| 五月婷婷丁香| 国产精品一区二区手机看片| 亚洲综合图片在线| 少妇超碰在线| 国产亚洲精品久久久久小| 久久久少妇诱惑精品视频| 又黑又大又粗| 国产精品久久久无码AV网站| 欧美色图另类图片| 欧美性,色九九| 抽插无码高清一区| 欧美人与动性人交a| 五十路成人在线视频二区三区| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 亚洲丝袜色图| 久久久国产成人一区二区三区在线| 97在线看| 4tube欧美女厕所| 91亚州欧美| 久久综合五月天| 黄色AAAAA欧美| 丁香七月婷婷| 玖色av| 2000亚洲男人天堂| 男人的天堂2010| 日本高清一区二区在线| 最近2018中文字幕在线高清第一页| 色天天野狼综合社区| 自拍视频大全亚洲专媒视频/一区二区三区 | 伦激情人妻另类人妻| 色五月av| 国产av色网| 久9久9精品| 秋霞欧美性爰视频| 高清视频一区| 欧美体内射精| 黄日韩| 久久的网站啊啊啊啊啊| 丁香五月天激情综合| 思思热影视| 手机看片日韩人妻| 精品无码久久久久久久杏吧| 清纯唯美第一页| 国产成人啪一区二区| 9久久美女首页| 97超碰无码网| 九九热精品在线| 国产激情综合五月久久| 亚洲AV无码国产成人| 亚一综合久久久久久久久久| 影音先锋每日最新资源在线观看 | 男人的天堂一区三区| 亚洲中文字幕久久人妻| 国产精品久久久久久久久久梁医生| 超碰免费人妻在线| 丝袜AV一区二区三区| 97超碰精品图片| 新怡红院| 久久亚洲日韩熟女精品| 蜜桃香蕉久草精品在线| 久久久久久免费电影| 后入式五六区| 久久↗↗| 99久在线精品99re8| 久欲AV| 激情婷婷丁香网| 精品少妇一区二区三区| 肉丝中文无码高清| 久9综合在线| 色天天野狼综合社区| 安微少妇操BBB| 精品国产a∨一区天美传媒| 欧美色图99| 色色九区| 亚洲综合第一页| 91人妻人人澡人人爽人人精品| 99婷婷一区二区| 久久亚州精品成人Av无| 国产精品久久久久久照片| 日韩乱伦影音先锋| 亚洲免费人妻在| 婷婷91| 大鸡巴久久久| 国产熟妇一区二区| 热的中文 热的有码 热的国产| 久久网亚洲| JuliaAnn丝袜熟女系列| 蜜臀久久99精品久久久久久无删减 | julia ann久久| 91观看 国产白丝| 国产一区二区三区高清视频| 日韩黄色av中文字幕| 亚洲 国产 精品一区| 色婷五月| 色诱中文字幕| 无卡一区=区| 99无码| 少妇无码av专区线| 欧美性爱五月天| 射丝袜高跟鞋99| 日本精品久久久久久久| 乱人乱色一区二区三区免费| 日本中文熟女视频| 操逼逼福利视频| 98一区二区精品| 四季AV一区二区凹凸精品小说| 九九九九一区| 亚洲**2021在线观看| 亚洲国产麻豆一区二区三区| 美女刺激久久国产欧美| 人人噜夜夜操| 欧美综合网A| 日韩无码黄色片| 人妻啊啊人妻啊| 97爱碰| 麻豆久久精品亚洲精品88| 亚洲系列第一页| 超碰亚洲97| 亚洲。天堂。日本在线观看| 日韩欧美加勒比| 99精品成人免费看| 亚洲棕合电彰| 亚洲 欧美 第一页| 中文字幕乱在线伦视频中文字幕乱码在线| 九九性视频| 一区二区三区机械有限公司| 91在线欧色| 女同性恋久久| 特级特黄一级毛片免费| 综合自拍| 精品999日本| 国产精品人妻无码久久久互動交流| 亚洲成a人片在线观看中文!!!| 日韩人妻资源网| 国产外初女出血视频| 日韩偷拍一区二区三区| caorenqi shipin| 校园春色家庭伦理欧美激情| 日本伦乱九九九综合| 色综合久久久久| 亚洲图片在线| 天天激情综合站| 小草三级久久观看| 大香蕉线| 99自拍视频在线观看| 色爽——AV| 亚洲精品国产无码高清| 成人精品电影| 青青青青操国内视频在线| 国产做?爰片久久毛片?片美国| 亚洲色图国产另类| 精品美女久久久久| 日本天天人人狠狠在线日美女| julia国产在线 | 超碰在线免费一区二区三区| 国产精品一区二区三区,亚洲综合 性开放中文AV高清无码免费看 | 亚洲情色图片区| 国产午夜精品理论片一二三区区| 亚州色交| 超碰97护士| 日本 欧美 亚中文字幕| 91色夜| 激情综合五月丁香| 99re28在线观看| 狠狠穞A片一區二區三區| 97伦综合| 五月天激情国产综合婷婷婷| 熟妇人妻丰满久久久久久久无码| 激情看片网站| 成人精品久久| 日韩精品一二三四| 老妇女91| 色月天AV导航| A一区片| 中国小夫妻勾搭露脸淫荡对白| 欧美一区二区福利在线| 综合视频91| 日本高清有码网址视频| 中文字幕一品色图| 人妻22p| 97爱综合| 欧美亚洲20p| 超碰在线观看av不卡| 精人妻无码一区二区三区伊人直播 | 中文字幕在线观看丝袜| 天天噜| 欧美 青青草| 成年人黄色小视频网站| 日本道日本道中文字幕日本道最新日本道在线观看 | 亚洲高清欧美总合| 日韩女优中文字幕| 日韩操逼性鲍| 成人久久久精品| 色一情一乱一乱一区91Av| 人妻夜夜爽天天爽三区麻豆AV网站| 婷婷五月天久久精品视频一区二区三区 | 国产91 丝袜在线播放00-百度| 欧美少妇大量自拍视频在线观看| 国产精品无码成人精品| 欧美日韩国产人人| 色播五月婷婷| 最新国内自拍av免费| 人妻喷水| 蜜臀精品1区2区| 乱伦日本色图AⅤ| 校园春色五月天| 久久爱超碰网| 26uuu国产| 日韩美女啪啪一区| 久久黄黄黄| 亚洲色图a| 国产99 中文字幕日韩小视频| 美女91网站| 97网址97| 久热色情精品| 无码操逼网| 狠狠干91| 尤物视频网 刘玥| 精品国产网站| 国产亚州日韩欧美看片| 久操91视频| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 国产精品无码av| 久久69| 亚洲精品黑丝| 无码人妻丰满熟妇奶水区毛片| 在线性黄高清免费视频| 国产精品久久久久久亚洲色欲| 熟女熟妇一区二区三区视频| 亚洲欧美九九九| 91free福利| 国产毛片久久久久久久| 日本加勒比无码专区| 欧美人妻另类在线| 亚洲综合影视| 69超碰综合| 日韩国产中文字幕| 岛国视频一二三区| 尤物av网站免费在线播放| 久久宗合97| 丝袜狠狠草尤物 91| 91操熟女视频| 亚洲人妻在线精品| 婷婷探花久久精品一区| 亚洲欧美九九| 六月丁香久久| 成年人性爱日韩| 国产Av超碰| 欧美成人精品欧美一级乱黄一区二…| 久久伊人在线五区| 五月婷婷啪啪| 国产亚洲综合欧美一区| 久久成人国产| 在线色导航| 午夜视频久久久久一区| 97香蕉网| 老妇女91| 97亚洲在线| 蜜臀久久久99久久久久 | 麻豆区99999| 五月天丁香欧洲日韩| 中文字幕 码 自拍 视频 区| 国产亚州日韩欧美看片| 成年人性爱日韩| 333kkkk·亚洲com久久| 精品久久久久av影院| 久久五月天婷婷丁香中文字幕| 日本性交操一区二区不卡系列| 亚洲网站一区二区在线| 91精品人| 久草尤物| 成人97人人超碰人人| 三级精品三级在线观看| 大香蕉乱级| 精品人妻1区| 人人看人人爰人人操| 成人七区| 操比国产| 99精品热| 亚洲天天艹| 大香蕉免| 性爱AV天堂| 国产成人精品一区| 美女上床网站| 深夜视频| 国产高清成人免费视频| 强被迫伦姧在线观看无码网站| Av手机版天堂网| 午夜寂寞欧美| 欧美日韩成人在线|