【MaixPy快速上手】點亮LED

語言: CN / TW / HK

點亮 LED

點燈程式作為學習所有開發板的第一個程式,就像學所有程式語言都是先學 hello world 一樣,具有著神聖的意義

1. 電路

眾所周知, 點亮一個 LED 需要一個電源, 一個電阻, 一個 LED 燈泡, 在 Maix Dock 開發板上, 有三個 LED, 線路如下:

比如我們希望紅燈點亮, 即 LED_R 連線的這個 LED, 圖中可以看到 LED 的正極已經連線了 3.3V 電源, 所以我們只要讓 LED_R 為低電平 LED 即可點亮。

注意, 這裡 LED_R 是給這個引腳取的一個別名, 實際上是連線到晶片的一個引腳,比如 Pin13或者說IO13

2. 外設到引腳的對映: FPIOA(現場可程式設計 IO 陣列, Field Programmable Input and Output Array)

可能你曾經用過一些微控制器,在手冊上都規定了引腳和片上外設功能(就是晶片內部整合的外設,比如 GPIOI2CSPI 等)的繫結,或者重對映。比如規定了 I2C 只能用 Pin9Pin10,啟動了重對映功能後,只能用Pin11Pin12

但是 MaixPy 所使用的硬體 K210 的片上外設對應的引腳(硬體引腳)是可以任意對映的,相比之下 K210 硬體設計和軟體設計的自由度更大。 比如 I2C 可以使用 Pin11Pin12,也可以改成其它任意引腳

注意要區分 GPIOIO的區別, IO也可以叫Pin 也就是引腳,是晶片引出來的硬體引腳, 而GPIO是一種外設,可以控制這些Pin/IO 的外設

因為有了這個強大的對映功能, 所以在使用引腳時,需要增加一步對映的步驟:

from fpioa_manager import fm    # 匯入庫
fm.register(28, fm.fpioa.GPIO0)

這裡我們將引腳 28 對映為了 GPIO0 的功能, 執行了這句命令後,引腳28GPIO0就對映(繫結)好了,要取消對映(解綁),則需要呼叫fm.unregister函式,具體看API文件,這裡不介紹

另外,Pin 和 外設只能唯一對應, 不能一對多,需要對同一個外設或者引腳重複對映,否則程式可能產生難以發現的錯誤(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)

按照前面執行程式碼的方法在終端裡面執行程式碼, 會發現 LED 燈被點亮了!

接下來我們分析程式碼:

  • fpioa_manager 包匯入fm 物件,主要用於引腳和外設的對映

  • 從包 Maix 匯入了 GPIO 這個類, GPIO 外設相關操作

  • 定義一個變數io_led_red,值為13,即Pin13/IO13, 具體 LED 的引腳連線到了晶片的哪個引腳,請在前面的開發板介紹中看原理圖

  • 使用fm(fpioa manager 的縮寫)這個內建的物件來註冊晶片的外設和引腳的對應關係, 這裡 fm.fpioa.GPIO0 是 K210 的一個 GPIO 外設(注意區分 GPIO(外設) 和引腳(實實在在的硬體引腳)的區別 ), 所以把 fm.fpioa.GPIO0 註冊到了 引腳 IO13

  • 然後定義一個 GPIO 物件led_r, 具體引數看 GPIO API 文件, 在左邊側邊欄查詢。

  • 使用 led_r.value(1) 或者 led_r.value(0) 來設定高低電平即可, 因為這裡設定了低電平, 根據上面的原理圖可知低電平導通,LED 燈亮

到這裡已經可以點燈了, 現在可以自己嘗試用 for 迴圈來實現 LED 閃爍或者流水燈~做出不同的變換效果