點燈程序作為學(xué)習(xí)所有開發(fā)板的第一個程序,就像學(xué)所有編程語言都是先學(xué) hello world 一樣,具有著神圣的意義
1. 電路

眾所周知, 點亮一個 LED 需要一個電源, 一個電阻, 一個 LED 燈泡, 在 Maix Dock 開發(fā)板上, 有三個 LED, 線路如下:
M5[F7TJVK2%OSV366N3(DX3.png (27.16 KB, 下載次數(shù): 92)
下載附件
2021-6-24 09:46 上傳
比如我們希望紅燈點亮, 即LED_R連接的這個 LED, 圖中可以看到 LED 的正極已經(jīng)連接了 3.3V 電源, 所以我們只要讓 LED_R 為低電平 LED 即可點亮。
注意, 這LED_R是給這個引腳取的一個別名, 實際上是連接到芯片的一個引腳,比如Pin13或者說IO13
2. 外設(shè)到引腳的映射: FPIOA(現(xiàn)場可編程 IO 陣列, Field Programmable Input and Output Array)

可能你曾經(jīng)用過一些單片機,在手冊上都規(guī)定了引腳和片上外設(shè)功能(就是芯片內(nèi)部集成的外設(shè),比GPIO、I2C、SPI等)的綁定,或者重映射。比如規(guī)定了I2C只能Pin9和Pin10,啟動了重映射功能后,只能用Pin11和Pin12 。
但是 MaixPy 所使用的硬件 K210 的片上外設(shè)對應(yīng)的引腳(硬件引腳)是可任意映的,相比之下 K210 硬件設(shè)計和軟件設(shè)計的自由度更大。 比I2C可以使Pin11和Pin12,也可以改成其它任意引腳
[color=rgba(0, 0, 0, 0.501960784313726)]注意要區(qū)分 GPIO 和 IO的區(qū)別, IO也可以叫Pin 也就是引腳,是芯片引出來的硬件引腳, 而GPIO是一種外設(shè),可以控制這些Pin/IO 的外設(shè)
因為有了這個強大的映射功能, 所以在使用引腳時,需要增加一步映射的步驟:
- from fpioa_manager import fm # 導(dǎo)入庫
- fm.register(28, fm.fpioa.GPIO0)
復(fù)制代碼 這里我們將引腳 28 映射為了 GPIO0 的功能, 執(zhí)行了這句命令后,引腳28和GPIO0就映射(綁定)好了,要取消映射(解綁),則需要調(diào)用fm.unregister函數(shù),具體看API文檔,這里不介紹
另外,Pin 和 外設(shè)只能唯一對應(yīng), 不能一對多,需要對同一個外設(shè)或者引腳重復(fù)映射,否則程序可能產(chǎn)生難以發(fā)現(xiàn)的錯誤(BUG)
3. 代碼

我們控制 LED 需要使用到 GPIO
程序如下:
- from fpioa_manager import fm
- from Maix import GPIO
- io_led_red = 13
- fm.register(io_led_red, fm.fpioa.GPIO0)
- led_r=GPIO(GPIO.GPIO0, GPIO.OUT)
- led_r.value(0)
復(fù)制代碼
按照前面運行代碼的方法在終端里面運行代碼, 會發(fā)現(xiàn) LED 燈被點亮了!
接下來我們分析代碼:
- 從 fpioa_manager 包導(dǎo)入fm 對象,主要用于引腳和外設(shè)的映射
- 從包 Maix 導(dǎo)入了 GPIO 這個類, GPIO 外設(shè)相關(guān)操作
- 定義一個變量io_led_red,值為13,即Pin13/IO13, 具體 LED 的引腳連接到了芯片的哪個引腳,請在前面的開發(fā)板介紹中看原理圖
- 使用fm(fpioa manager 的縮寫)這個內(nèi)置的對象來注冊芯片的外設(shè)和引腳的對應(yīng)關(guān)系, 這里 fm.fpioa.GPIO0 是 K210 的一個 GPIO 外設(shè)(注意區(qū)分 GPIO(外設(shè)) 和引腳(實實在在的硬件引腳)的區(qū)別 ), 所以把 fm.fpioa.GPIO0 注冊到了 引腳 IO13;
- 然后定義一個 GPIO 對象led_r, 具體參數(shù)看 GPIO API 文檔, 在左邊側(cè)邊欄查找。
- 使用 led_r.value(1) 或者 led_r.value(0) 來設(shè)置高低電平即可, 因為這里設(shè)置了低電平, 根據(jù)上面的原理圖可知低電平導(dǎo)通,LED 燈亮
到這里已經(jīng)可以點燈了, 現(xiàn)在可以自己嘗試用 for 循環(huán)來實現(xiàn) LED 閃爍或者流水燈~做出不同的變換效果
|