嵌入式 Python:在 BBC micro:bit 上構建游戲

      網友投稿 908 2025-03-31

      目錄


      什么是嵌入式開發?

      用于嵌入式開發的 Python

      使用 Python 的好處

      使用 Python 的缺點

      嵌入式開發新手需要注意的事項

      運行嵌入式 Python 的硬件選項

      BBC micro:bit

      Raspberry Pi

      木板

      其他

      用于編寫嵌入式 Python 的軟件選項

      微Python

      電路Python

      項目:西蒙在 BBC micro:bit 上說游戲

      設置您的環境

      在屏幕上顯示說明

      運行你的代碼

      可選:在物理 micro:bit 上運行您的代碼

      獲取玩家輸入

      在模擬器中測試加速度計代碼

      積分和損失

      更進一步

      進一步閱讀

      micro:bit 資源

      其他運行 Python 的開發板

      結論

      編寫在終端或 Web 瀏覽器中運行的代碼非常有趣。然而,編寫影響現實世界的代碼可以在另一個層面上令人滿意。編寫這種代碼稱為嵌入式開發,而 Python 使它比以往任何時候都更易于訪問!

      在本教程中,您將學習:

      什么是嵌入式開發以及為什么要使用 Python 來完成它

      在嵌入式系統上運行 Python 的硬件和軟件選項是什么

      當Python的是一個非常適合嵌入式系統時,它的不

      如何使用MicroPython在 BBC micro:bit 上編寫基本游戲

      本教程包含允許您在BBC micro:bit上構建簡單游戲的代碼片段。要訪問完整代碼并預覽您將要構建的內容,請單擊以下鏈接:

      什么是嵌入式開發?

      嵌入式開發是為任何非通用計算機的設備編寫代碼。這個定義有點模棱兩可,所以一些例子可能會有所幫助:

      通用計算機包括筆記本電腦、臺式電腦、智能手機等。

      嵌入式系統包括洗衣機、數碼機、機器人等。

      作為一般經驗法則,如果您不會將某物稱為計算機,但它仍然運行著代碼,那么它可能是一個嵌入式系統。該名稱來自將計算機嵌入物理系統以執行某些任務的想法。

      嵌入式系統往往被設計為完成一項任務,這就是為什么我們將常規計算機稱為“通用”:它們被設計為完成多項任務。

      就像您需要計算機來運行常規代碼一樣,要運行嵌入式代碼,您也需要某種硬件。這些硬件通常稱為開發板,本教程將向您介紹一些旨在運行 Python的硬件。

      用于嵌入式開發的 Python

      學習 Python 最好的事情之一是它適用于很多地方。您可以編寫可以在任何地方運行的代碼,甚至可以在嵌入式系統上運行。在本節中,您將了解在嵌入式項目中使用 Python 所帶來的權衡以及開始時需要注意的一些事項。

      使用 Python 的好處

      Python 在構建嵌入式系統時帶來的核心優勢是開發速度。Python 具有可用于大多數任務的庫,這仍然適用于其嵌入式實現。您可以專注于構建您的系統,因為您遇到的許多問題已經得到解決。

      由于 Python比其他常見的嵌入式語言級別更高,因此您將編寫的代碼會更加簡潔。這有助于提高開發速度,這意味著您可以更快地編寫代碼,但它也有助于保持您的代碼易于理解。

      Python 是內存管理的。C++ 是嵌入式開發的常見選擇,但不是。在 C++ 中,您有責任在完成后釋放內存,這是很容易忘記的事情,導致程序內存不足。Python 為你做這件事。

      使用 Python 的缺點

      雖然 Python 的內存管理有很大幫助,但它確實會導致較小的速度和內存成本。MicroPython 文檔對內存問題進行了很好的討論。

      另一件要考慮的事情是 Python解釋器本身占用空間。對于編譯語言,程序的大小僅取決于您的程序,但 Python 程序需要運行它們的解釋器。Python 解釋器也占用 RAM。在 micro:bit 上,你不能用 Python 編寫藍牙代碼,因為 Python 和藍牙沒有足夠的空間同時使用。

      由于Python是解釋,但絕不能因此相當快編譯語言。解釋型語言需要在運行前解碼每條指令,但編譯型語言可以直接運行。然而,在實踐中,這很少重要,因為 Python 程序對于大多數用例來說仍然運行得足夠快。

      嵌入式開發新手需要注意的事項

      現代計算機有大量內存可供使用。當您對它們進行編程時,您不必太擔心您創建的列表的大小或一次加載整個文件。然而,嵌入式系統的內存有限。編寫程序時必須小心,不要一次在內存中存儲太多東西。

      同樣,嵌入式系統上的處理器速度比臺式計算機慢得多。處理器速度決定了代碼執行的速度,因此在嵌入式計算機上運行程序比在臺式計算機上運行需要更長的時間。考慮嵌入式代碼的效率更為重要——您不希望它永遠運行!

      對嵌入式系統進行編程時,最大的變化可能是電源要求。筆記本電腦、電話和臺式電腦要么插入墻上,要么配備大電池。嵌入式系統通常具有微型電池,并且必須持續很長時間,有時甚至數年。您運行的每一行代碼都會消耗一點電池壽命,而這一切都會加起來。

      以下是您在開始時應該注意的其他一些事項:

      如果您的設備上有網絡連接,那么它很可能很慢或不可靠。

      您可以選擇的庫要少得多。

      嵌入式系統通常沒有大量的持久存儲。

      嵌入式開發是一個很大的領域,有很多新人需要學習。不過現在,請記住在嵌入式系統上編寫精益代碼更為重要。這使得嵌入式系統非常有助于提高代碼的學習效率!

      運行嵌入式 Python 的硬件選項

      在編寫任何嵌入式代碼之前,您必須選擇您的代碼將在什么硬件上運行。有大量可用的開發板可供選擇,即使在運行 Python 的開發板中也是如此。您的選擇將取決于您使用它們的項目。在本節中,您將介紹一些可用選項。

      BBC micro:bit

      在BBC微:位是專為教育用途的嵌入式系統。在 micro:bit 上,有很多組件,包括按鈕、5x5 LED 屏幕、揚聲器和麥克風、加速度計和藍牙模塊。不幸的是,藍牙模塊無法與 Python 一起使用,但您仍然可以直接使用無線電。它可以在 Scratch、JavaScript和最重要的 Python 中編程。

      這是背面的一張照片,顯示了一些可用的很酷的組件:

      micro:bit 有很多很棒的在線資源,可以幫助您開始并提出項目想法。

      Raspberry Pi

      大多數 Raspberry Pi 在技術上是單板計算機而不是嵌入式系統,但它們仍然允許通過其 GPIO 引腳訪問外部硬件。該規則的一個例外是Raspberry Pi Pico,它是一種微控制器開發板。其他 Raspberry Pi 運行 Linux,這意味著您可以將它們用作完整的計算機,并且所有 Pis 開箱即用地支持 Python。

      有幾種不同型號的 Raspberry Pi 可用,但它們都能夠運行 Python 并使用電子設備。您應該選擇哪種模型取決于您的項目需求。這是最新型號之一:

      您可以在官方網站上找到有關 Raspberry Pi 不同型號的更多信息。有關可以使用 Raspberry Pi 和 Python創建的項目示例,請查看在 Raspberry Pi 上使用 Python 構建物理項目。

      木板

      該pyboard是一個電子產品開發板被設計為運行MicroPython。它比 micro:bit 強大得多,但沒有任何額外的好東西,比如 micro:bit 的板載屏幕和傳感器。這是pyboard 1.0:

      您可能會注意到黑板上有很多金色圓圈。這些被稱為引腳,用于將 pyboard 連接到其他電子元件。例如,如果您正在建造遙控汽車,您可能會將一些電機連接到它們。

      其他

      有很多與 Python 兼容的板和套件,太多了,無法在此一一列出。但是,有一些有趣的值得一提:

      該LoPy從Pycom連接到物聯網等網絡的專業互聯網LORA和Sigfox。

      基于ESP8266的開發板都運行 MicroPython。ESP8266 是一種廉價的支持 Wi-Fi 的微控制器。它的繼任者ESP32系列芯片也都運行 MicroPython。

      Python 也可以在 Nintendo DS 上運行。對于初學者來說,設置看起來有點復雜,但是這個項目太有趣了,不能不提。

      MicroPython 兼容的板子比本教程所能容納的要多得多。你應該做一些研究來為你的項目找到合適的。一個不錯的起點可能是Adafruit 的 MicroPython 商店。

      用于編寫嵌入式 Python 的軟件選項

      當您在計算機上安裝 Python時,您通常會安裝一個名為CPython的特定Python實現。Python 的實現是運行 Python 代碼的程序。

      您可以將 CPython 稱為默認的 Python 實現,因為它是由定義語言本身的人編寫的。然而,CPython 并不是 Python 的唯一實現。在本節中,您將了解一些專門針對編寫嵌入式代碼的實現。

      微Python

      MicroPython是事實上的標準嵌入式 Python 實現。它是一個 Python 3.x 實現,旨在在微控制器上運行。它不是 100% 兼容 CPython,但非常接近。這意味著,如果您編寫了在 Python 3.4 以下版本上運行的代碼,那么您很有可能讓它在 MicroPython 中運行。

      電路Python

      CircuitPython是MicroPython的一個分支,它支持略有不同的電路板列表,并進行了一些更改以使其對初學者更加友好。大多數情況下,您在使用 CircuitPython 時的體驗與使用 MicroPython 時的體驗非常相似。如果您的電路板僅支持它而不支持其他實現,您可以選擇使用 CircuitPython。

      項目:西蒙在 BBC micro:bit 上說游戲

      沒有什么比實際經驗更重要的了,所以在本節中,您將在 BBC micro:bit 上構建一個 Simon Says 游戲。如果你沒有,別擔心!有在線模擬器可以幫助您入門。

      西蒙說是一種兒童游戲,其中一個人向一組人發出指令。如果他們在指令前加上“西蒙說”,那么小組就必須這樣做。如果他們在沒有先說“西蒙說”的情況下給出指令,則該小組必須忽略該指令。為了讓我們的游戲更簡單,我們將只專注于提供指令的部分。

      游戲將按以下方式運行:

      micro:bit 會想到一個方向并告訴玩家。

      玩家將嘗試朝那個方向傾斜 micro:bit。

      如果玩家設法及時正確地傾斜 micro:bit,那么他們就會得到一分!

      如果玩家沒有及時做出正確的傾斜,那么 micro:bit 會顯示他們的分數,游戲重新開始。

      在開始編碼之前,您需要設置環境。

      設置您的環境

      無論您是否擁有物理 micro:bit,開始編碼的最快途徑是使用可用的在線編輯器。在本教程中,您將使用create.withcode 編輯器。當您打開編輯器時,您將看到以下屏幕:

      大部分屏幕都被文本緩沖區占據,您可以在其中輸入代碼。在右下角,您會看到一個播放按鈕。這將讓您在編寫代碼后運行代碼。

      在屏幕上顯示說明

      您的游戲需要做的第一件事是提出一個方向并將其告訴玩家。對于本場比賽的目的,你可以使用三個方向:left,right,和stay still。您的代碼需要選擇這些方向之一并將其顯示給玩家。這將被包裝在一個無限while循環中,以便它可以多次運行。

      注意:無限while循環在嵌入式編程中比在其他類型的編程中更常見。這是因為嵌入式系統往往只做一項工作,所以不存在掛斷系統和阻止其他程序運行的風險。

      您的代碼可能如下所示:

      from microbit import * from random import randrange # Define left, stay still, and right directions = ["L", "O", "R"] # While the micro:bit is on while True: # Pick a random direction direction = directions[randrange(3)] display.show(direction) # Sleep for a second (1000ms) sleep(1000)

      此代碼將每秒顯示不同的隨機方向。前兩行導入必要的函數:

      該microbit模塊包含與 micro:bit 接口所需的所有代碼。例如,display和accelerometer模塊在這里。該microbit模塊在 micro:bit 上預加載了 MicroPython,因此如果您在計算機上運行代碼時嘗試導入它,則可能會遇到錯誤。

      該random模塊允許您選擇一個隨機數。

      在導入之后,代碼定義了directions列表。這包含代表可用方向的三個字符。用字符定義這個列表的好處是它們可以直接顯示,因為 micro:bit 屏幕一次只有一個字符的空間。

      該while True:環告訴微:位永遠運行里面的代碼。實際上,這意味著它會在 micro:bit 通電時運行。在里面,代碼首先選擇一個隨機方向randrange()并顯示它。之后,它會睡一秒鐘。這會迫使 micro:bit 一秒鐘不做任何事情,從而確保玩家有時間看到指令。

      運行你的代碼

      現在你有一些代碼,你可以運行它!幸運的是,您不需要 micro:bit 來運行您的代碼,因為您的編輯器帶有內置模擬器。您可以通過單擊右下角的播放按鈕訪問它并運行您的代碼。

      當您單擊播放按鈕時,您將在編輯器中看到以下疊加彈出窗口:

      在其中,您將看到一個 micro:bit,屏幕應顯示方向列表中的隨機字符。如果沒有,請嘗試將上面的代碼復制到編輯器中,然后再次單擊播放按鈕。

      注意:?create.withcode 模擬器是一個很好的資源,但它有時會有點問題。如果您遇到問題,以下可能會有所幫助:

      有時,當您將代碼粘貼到編輯器中時,看起來編輯器屏幕的一半已經消失了。單擊編輯器內的任意位置以使其返回。

      如果在再次運行之前沒有按下紅色按鈕來停止代碼,它有時會同時運行代碼的兩個實例,從而導致奇怪的輸出。在再次運行代碼之前按下紅色停止按鈕可解決此問題。

      如果您是一名更高級的編碼員,您可以使用Device Simulator Express 擴展和偽 microbit 模塊將Visual Studio Code設置為 micro:bit 開發環境以進行代碼自動完成。

      這是您將在本教程的其余部分遵循的一般開發流程。

      可選:在物理 micro:bit 上運行您的代碼

      如果你有一個物理 micro:bit,那么運行你的代碼需要幾個額外的步驟。您需要下載一個.hex文件,然后將其復制到您的 micro:bit 上。

      要下載.hex文件,請在編輯器中查找以下按鈕:

      這將要求您將文件保存到您的計算機。保存它,然后抓住你的 micro:bit。使用 USB 數據線將您的 micro:bit 連接到您的計算機。您應該會看到它以與 USB 驅動器相同的方式出現。

      要對 micro:bit 進行編程,請將下載的.hex文件拖到您的 micro:bit 上。micro:bit 背面的紅色 LED 應閃爍。一旦它停止,您的程序就會加載到設備上并立即開始執行!

      提示:以下是一些提示,如果您遇到困難,可能會有所幫助:

      如果您需要從頭開始重新啟動程序,micro:bit 背面的 USB 連接器旁邊有一個重置按鈕。

      代碼中的錯誤將在屏幕上滾動。如果您有耐心并觀看它們,它們可以為您提供有關如何修復腳本的很好的線索。

      嵌入式 Python:在 BBC micro:bit 上構建游戲

      你必須非常努力地打破你的 micro:bit!如果出現問題,請仔細檢查您的代碼,不要害怕嘗試,即使您不確定它是否會起作用。

      既然您已經為開發設置了 micro:bit,您就可以繼續進行一些編碼了。

      獲取玩家輸入

      現在 micro:bit 可以告訴玩家該做什么,是時候獲取玩家的輸入了。為此,您將使用加速度計。加速度計是一種測量運動的裝置。它可以判斷 micro:bit 是否在向特定方向移動,對于游戲來說,重要的是 micro:bit 是否在特定方向傾斜。看看下面的圖表:

      在圖中,您將看到三個軸:X、Y 和 Z。它們就像您在學校的圖表中可能看到的軸一樣。X 軸代表左右運動,Y 軸代表上下運動,Z 軸代表朝向或遠離您的運動。

      micro:bit 上的加速度計返回來自這三個軸的值。由于您的游戲只關心向左和向右傾斜,因此您現在只需要 X 軸。accelerometer.get_x()返回范圍內的值(-2000, 2000),其中-2000一直向左2000傾斜并一直向右傾斜。

      您獲取玩家輸入的代碼需要執行三個步驟:

      讀取加速度計的 X 值。

      確定該 X 值是代表向左、向右還是保持靜止移動。

      確定這是否是正確的移動方向。

      這是完成這些步驟的代碼:

      # Previous code... while True: # Previous code... # Get the X-axis (left-right) tilt acc_x = accelerometer.get_x() # Determine direction if acc_x < -200: player_in = "L" elif abs(acc_x) < 200: player_in = "O" elif acc_x > 200: player_in = "R" # Check win condition if player_in == direction: # Player input correctly display.show(Image.HAPPY) else: display.show(Image.SAD) sleep(1000)

      這段代碼有點長,因為你必須檢查很多不同的條件。您要做的第一件事是從加速度計中獲取 X 軸值accelerometer.get_x()。請記住,這將在范圍內(-2000, 2000)。

      獲得 X 值后,您將執行一系列檢查以找出它代表的運動。任何大于200任一方向的值都被認為是傾斜的,小于任一方向的值都被認為200是靜止的。

      abs()通過從加速度計值中去除負號來幫助縮短代碼。這意味著該范圍內的數字(-200, 200)將被視為保持靜止。您可能希望使用該閾值來使游戲或多或少具有挑戰性。

      從播放器獲得方向輸入后,您檢查它是否正確。如果方向正確,則代碼會顯示一張快樂的臉。否則,它會顯示出悲傷的臉。然后代碼會休眠一秒鐘,讓玩家可以看到結果,而不會很快消失。

      在模擬器中測試加速度計代碼

      由于加速度計是檢測物理運動的傳感器,您可能想知道如何在模擬器中與其交互。幸運的是,模擬器提供了一個可以用鼠標控制的虛擬加速度計。

      以與之前相同的方式運行您的代碼,方法是單擊右下角的播放按鈕。您將看到 micro:bit 疊加層出現。覆蓋層頂部有一些選項卡,用于控制 micro:bit 的各種組件。單擊標有Accelerometer的選項卡。

      在此選項卡中,您將看到三個滑塊,每個軸一個。您將使用 X 軸滑塊來測試您的游戲。

      當您向右移動滑塊時,加速度計的 X 值將增加。同樣,當您向左移動滑塊時,X 值將減小。這相當于向左和向右傾斜 micro:bit 并允許您在瀏覽器中玩游戲。

      積分和損失

      現在基本游戲已經到位,是時候考慮增加點數和輸球來完成游戲了。請記住規范中描述的行為是,當玩家輸了時,micro:bit 將顯示玩家達到該點的總點數。如果玩家做對了,micro:bit 不應顯示任何內容:

      # Previous code... points = 0 while True: # Previous code... if player_in == direction: # Player's input is correct points += 1 else: display.scroll(points) display.show(Image.SAD) points = 0 sleep(1000)

      值得慶幸的是,這比上一步的變化要小。在while循環之外,您定義一個將跟蹤玩家點數的變量?points。

      再往下,您更改了對玩家輸入是否在正確方向上的檢查。如果玩家移動了正確的方向,他們的總分就會增加1。否則,您可以使用 使總點數在屏幕上滾動display.scroll(),顯示出悲傷的臉,然后重置總點數。

      您還會sleep()進入丟失代碼,因為沒有顯示圖像以使其正確。這使游戲更具挑戰性!

      為了幫助您檢查代碼并鞏固所學知識,以下是游戲的完整代碼:

      from microbit import display, Image, accelerometer, sleep from random import randrange # Define left, stay still, and right directions = ["L", "O", "R"] points = 0 # While the micro:bit is on while True: # Pick a random direction direction = directions[randrange(3)] display.show(direction) # Sleep for a second (1000ms) sleep(1000) # Get the X-axis (left-right) tilt acc_x = accelerometer.get_x() # Determine direction if acc_x < -200: player_in = "L" elif abs(acc_x) < 200: player_in = "O" elif acc_x > 200: player_in = "R" # Check win condition if player_in == direction: # Player's input is correct points += 1 else: display.scroll(points) display.show(Image.SAD) points = 0 sleep(1000)

      恭喜您構建了自己的游戲!您會注意到這段代碼只占用了 30 多行,包括注釋,這比傳統嵌入式語言中的等效程序要短得多。

      更進一步

      至此,您已經在嵌入式系統上構建了一個完整的游戲!如果你想要一些額外的挑戰,這里有一些想法:

      合并其他加速度計軸并將其變成Bop It的 micro:bit 版本!

      縮短玩家移動 micro:bit 的時間,如果他們得到正確的數字。你能做的最短時間是多少?你認為這是為什么?

      包括加速度計手勢。開箱即用,micro:bit 可以檢測到晃動、面朝下或面朝上,甚至自由落體。

      添加多人游戲功能,以便您可以與朋友一起玩。micro:bit 有一個無線電模塊,允許 micro:bits 之間的通信。

      這個列表不是確定的,而是應該讓你思考。如果你想出一個很酷的方法來擴展游戲,那么請在評論中分享!

      進一步閱讀

      嵌入式開發是一個巨大的領域,需要學習很多東西。如果您想了解有關使用 Python 進行嵌入式開發的更多信息,那么值得慶幸的是,那里有很多很棒的資源。這里有一些鏈接可以幫助您入門。

      micro:bit 資源

      關于 micro:bit 最好的事情之一是那里有大量的教育資源:

      microbit.org?: 官方 micro:bit 站點,包含項目、課程和更多代碼編輯器

      micro:bit MicroPython 文檔:micro:bit 上 Python 的高度可讀文檔

      在 BBC micro:bit 上構建貪吃蛇游戲:更復雜游戲的教程,帶您慢慢完成整個過程

      Micro:bit 教育基金會最近發布了micro:bit的第二個版本,有望激發全新的資源浪潮。

      其他運行 Python 的開發板

      micro:bit 并不是唯一的板子。絕對值得探索為您的項目找到合適的:

      MicroPython 開發板教程:MicroPython 為其支持的一些開發板提供了一些官方教程。例如,這是ESP8266的一個。

      標記為 MicroPython 的 Hackaday 項目:該站點提供了人們構建的項目的文章,可以給您一些靈感!

      Pycom 教程:Pycom 制作能夠連接到各種網絡的 MicroPython 兼容板。這些教程是了解可能性的好方法。

      有更多有趣的設備可以運行 Python。您一定會找到適合您項目的一款。

      結論

      Python 是為嵌入式系統編寫代碼的絕佳選擇。它使您能夠更快地開發您的代碼,并提供您在低級語言中找不到的安全保證。您現在已經掌握了使用 Python 開始嵌入式開發之旅的知識,并熟悉了一些可用的選項。

      在本教程中,您學習了:

      什么是嵌入式開發以及為什么要使用 Python 來完成它

      嵌入式系統編程和通用計算機有什么區別

      哪些選項可用于為嵌入式系統編寫Python代碼

      如何使用MicroPython在 BBC micro:bit 上編寫基本游戲

      嵌入式開發是一個廣闊而令人興奮的領域,充滿了有趣的發現。繼續學習,并確保在下面的評論中分享您的發現!

      5G游戲 Python 嵌入式

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:wps表格字數統計的方法(wps怎么字數統計)
      下一篇:前端開發規范總結
      相關文章
      亚洲国产精品日韩av不卡在线| 亚洲无mate20pro麻豆| 亚洲人成高清在线播放| 久久久亚洲精品无码| 日本亚洲视频在线| 在线综合亚洲欧洲综合网站| 精品久久亚洲中文无码| 国产成人精品日本亚洲专一区| 亚洲av日韩av综合| 久久亚洲精品国产精品婷婷| 亚洲一本到无码av中文字幕| 亚洲精品无播放器在线播放| 亚洲国产精品无码久久| 精品久久久久久久久亚洲偷窥女厕| 亚洲精品成a人在线观看☆| 亚洲AV无码XXX麻豆艾秋| 精品无码专区亚洲| 亚洲人成无码网WWW| 国产亚洲日韩一区二区三区| 国产亚洲高清不卡在线观看| 亚洲国产成人久久综合一| 亚洲一区二区三区日本久久九| 亚洲精品乱码久久久久久下载| 亚洲中字慕日产2021| 亚洲熟妇丰满xxxxx| 激情小说亚洲色图| 亚洲人成电影在线播放| 国产亚洲精午夜久久久久久| 亚洲成在人线av| 亚洲老熟女@TubeumTV| 亚洲av无码电影网| 国产亚洲一卡2卡3卡4卡新区 | 亚洲国产主播精品极品网红| 亚洲综合国产精品第一页| 国产AV无码专区亚洲AV毛网站| 亚洲网址在线观看你懂的| 亚洲三级在线播放| 精品亚洲成A人在线观看青青| 亚洲综合色视频在线观看| 亚洲成年人在线观看| 亚洲免费福利视频|