<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

樹莓派Pico物理編程指南

jf_zGNBEhbi ? 來源:趣無盡 ? 作者:樹莓派實驗室 ? 2023-08-17 09:42 ? 次閱讀

樹莓派 Pico 的 RP2040 微控制器在設計時考慮到了物理計算。它的眾多通用輸入/輸出(GPIO)引腳讓它與一系列組件交互,允許你建立項目,從照明 LED 到記錄你周圍世界的數據。

物理計算并不比傳統計算更難學習,如果你能遵循本篇的內容,你會明白如何建立你自己的電 路,并對它們進行編程來執行你的命令。

第一個物理計算程序:Hello, LED!

就像在屏幕上打印「Hello, World」是學習編程語言的第一步,點亮 LED 是學習物理計算的經典入門。

你也可以在沒有任何額外組件的情況下開始,Pico 電路板上就有一個小的 LED。

這個 LED 被通電時,它會發光;當它關閉電源,它就會熄滅。

板載 LED 連接到 RP2040 的 GP25 引腳上。你可能還記得,這是RP2040上「缺失」的 GPIO 引腳之一。

打開 Thonny,連上你的 Pico。點擊進入腳本編輯區域,用以下一行開始你的編程:

import machine

這一小行代碼是在 Pico 上使用 MicroPython 的關鍵。它導入 MicroPython 代碼集合,也稱為庫。在本例中是「machine」庫。包含了 MicroPython 與 Pico 和其他 兼容 MicroPython 的設備通信所需的所有指令。如果沒有這一行,你將無法控制任何 Pico 的 GPIO 引腳。

選擇性導入
在 MicroPython 和 Python 中,都可以導入庫的一部分,而不是整個庫。這樣做可以使你的程序使用更少的內存,并允許你混合和匹配來自不同庫的函數。本教程中的程序導入了整個庫,在其他地方,你可能會看到程序有類似于 from machine import Pin,這是告訴 MicroPython 只從「machine」庫中導入「Pin」函數,而不是整個庫。

machine 庫公開了應用程序接口(API)。這個名稱聽起來很復雜,但是準確地描述了它的功能,它為你的程序提供了一種通過接口與 Pico 通信的方法。

程序的下一行提供了 machine 庫的 API 示例:

led_onboard = machine.Pin(25, machine.Pin.OUT)

這一行定義了一個名為 led_onboard 的對象,代碼的第二部分調用 machine 庫中的 Pin 函數。顧名思義,這個函數是為處理你的 Pico 的 GPIO 引腳而設計的。第一個參數是 25,是你設置的引腳編號。machine.Pin.OUT 則是告訴 Pico 該引腳應該被用作輸出而不是輸入。

這行代碼只起到了設置引腳的作用,它并不會點亮 LED。要做到這一點,你需要告訴 Pico 打 開這個引腳。在下一行輸入以下代碼:

led_onboard.value(1)

這一行將 led_onboard 的值設置為 1(表示「開」),也可以將值設置為 0 (表示「關」)。

單擊 Run 并將程序保存在 Pico 上,命名為 Blink.py。你會看到 LED 燈亮起來。祝賀你——你已經編寫了你的第一個物理計算程序!

然而,你會注意到 LED 仍然是亮著的。這是因為你的程序告訴 Pico 打開它,但從來沒有告訴它關閉 LED。你可以在程序的底部添加另一行:

led_onboard.value(0)

然而,這次運行程序 LED 似乎永遠不會點亮。這是因為 Pico 的工作速度非常非???,比你用 肉眼看到的速度快得多。LED 有被點亮,但在如此短的時間內,它似乎保持熄滅。要解決這個問題,你需要通過引入延遲來降低程序的速度。

轉到程序的最上面,并單擊第一行末尾,然后按回車鍵插入新行:

import utime

與 import machine 類似,這一行將一個新的 utime 庫導入 MicroPython。這個庫處理與時間有關的所有事情,從度量時間到向程序中插入延遲。

轉到程序的底部,并單擊 led_onboard.value(1) 行末尾,然后按回車鍵插入新行:

utime.sleep(5)

這將調用來自 utime 庫的 sleep 函數,該函數將使你的程序暫停數為你輸入的秒數,在本例中為 5 秒。

再次單擊 Run。這次你會看到你的 Pico 上的 LED 燈亮了,保持亮 5 秒鐘然后再熄滅。

最后,是時候讓 LED 循環閃爍了。為此,你需要創建一個循環。重寫你的程序:

import machine
import utime

led_onboard = machine.Pin(25, machine.Pin.OUT)

while True:
led_onboard.value(1)
utime.sleep(5)
led_onboard.value(0)
utime.sleep(5)

記住,循環中的行需要縮進四個空格,這樣 MicroPython 就知道它們構成了循環。再次點擊 Run,你會看到 LED 點亮 5 秒,熄滅 5 秒,然后再次點亮的不斷重復。LED 將繼續閃 爍,直到你點擊停止圖標取消你的程序和重置你的 Pico。

還有另一種方法來處理同樣的工作,即使用 toggle,而不是顯式地將 LED 的輸出設置為 0 或 1。刪除程序的最后四行,并替換它們,如下面這這樣:

import machine
import utime

led_onboard = machine.Pin(25, machine.Pin.OUT)

while True:
led_onboard.toggle()
utime.sleep(5)

再次運行程序。你將看到與之前相同的效果。板載的 LED 將點亮 5 秒,然后熄滅 5 秒,然后在無限循環中再次點亮。不過,這一次,你的程序縮短了兩行,你已經優化了它。toggle() 可用于所有數字輸出引腳,它只是在開和關之間切換:如果引腳當前是開的,toggle() 將其關閉;如果它是關閉的,toggle() 將它打開。

使用面包板

如果你使用面包板來保存組件并進行電氣連接,那么本章中接下來的項目將會更容易完成。

5f6934c0-3c4d-11ee-ac96-dac502259ad0.jpg

面包片上面有很多間距 2.54 毫米的孔洞。在這些孔下是金屬條,它們就像用跳線串連起來。

其中帶有正負標志的兩行通常用于接 Pico 的 5V/3.3V 和 GND 引腳。當然也可以用來接外部電源的正負極。用來給需要的元器件供電。

電子元件加到面包板上很簡單,只要把它們的引腳與孔對齊,然后輕輕插進去。你可以使用跳線再將引腳引入到 Pico 上。

把你的 Pico 插到面包板上,使它跨過面包板中間的空隙,microUSB 接口在最上面。在插入之前,請確保所有的排針都對準了孔位,否則可能很難插入或者折斷 Pico 的引腳。

5f950744-3c4d-11ee-ac96-dac502259ad0.jpg

外接 LED

對于這個項目,你需要一個面包板,公對公跳線,一個 LED,和一個 330Ω 電阻(或接近 330Ω)。如果你沒有面包板,你可以使用母對母杜邦線。

電阻在這里被當作限流電阻使用。它通過限制 LED 可以引出的電流量來保護你的 Pico 和 LED。如果沒有它,LED 可能會拉出太多的電流而燒毀。330Ω 對大多數常見的 LED 都適用。數值越高,LED 越暗;數值越低,LED 就越亮。

如果沒有電流限制電阻,千萬不要把 LED 連接到 Pico 上,除非你知道 LED 有一個合適的內置電阻。

用手指握住 LED,你會看到其中一根導線比另一根長。較長的引線稱為正極,較短的引線是 負極。正極需要通過電阻連接到你的 Pico 的 GPIO 管腳;負極需要連接到一個 GND 引腳。

從連接電阻器取一端(哪一端無關緊要),并將它插入到面包板的同一行,與 Pico 的 GP15 引腳在左下角。將另一端插入面包板下面的一個空置行中。

拿起 LED,把較長的支腳(正極)推到電阻器的末端所在的同一排。把較短的(負 極)放到同一行,但要穿過面包板中間的空隙,這樣它就能對齊。最后,在 LED 短腳的同一行插入一根 M2M 跳線,然后將它直接連接到你的 Pico 的 GND 引腳上。如下圖所示。

5fabfd64-3c4d-11ee-ac96-dac502259ad0.jpg

在 MicroPython 中控制一個外部 LED 和控制 Pico 板載的 LED 沒有什么不同,只需要改變程序代碼中引腳的編號。如果你關閉了 Thonny,重新打開它并加載前面的 Blink.py 程序。找到:

led_onboard = machine.Pin(25, machine.Pin.OUT)

編輯引腳號,將其從 25 改為 15。再把 led_onboard 修改為 led_external。最終代碼如下:

import machine
import utime

led_external = machine.Pin(15, machine.Pin.OUT)

while True:
led_external.toggle()
utime.sleep(5)

輸入:讀取按鍵

對于這個項目,你將需要一個面包板,公對公跳線,和一個按鈕開關。將他們按照圖中示意的位置安裝好。其中按鈕有引腳的兩側分別插入面包板,并且橫跨在面包板正中間(物理上隔斷兩側引腳的連通)。

按鈕的一側接 Pico 的 3V3 引腳,另一側接 Pico 的 GND 引腳。

5fc3b378-3c4d-11ee-ac96-dac502259ad0.jpg

隱藏的內置電阻

與 LED 不同,按鈕開關不需要限流電阻。它仍然需要一個所謂的上拉或下拉電阻,這取決于你的電路如何工作。如果沒有上拉或下拉電阻,輸入信號會有「噪聲」,即使你沒有按下按鈕也會觸發。

那么電路中的電阻器在哪里?它藏在 Pico 芯片里。就像它有一個板載 LED,Pico 內置一個板載可編程電阻連接到每個 GPIO 引腳??梢愿鶕枰?MicroPython 中將其設置成下拉電阻或上拉電阻。

有什么區別呢?

下拉電阻將引腳連接到 GND,這意味著當按鈕被按下時,讀取到的輸入值是 0。

上拉電阻連接引腳到 3V3,這意味著當按鈕沒有按下,讀取到的輸入值是 1。

本書中所有的電路都使用下拉模式下的可編程電阻。

打開 Thonny,然后在新的一行啟動一個新程序:

import machine

接下來,你需要使用 machine API 設置一個引腳作為輸入,而不是輸出:

button = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN)

這與你的 LED 項目的工作方式相同:創建一個名為「button」的對象,它包括引腳號 GP14,并將其配置為一個電阻設置為下拉的輸入。不過,創建對象并不意味著它會自己做任 何事情,就像之前創建LED對象并不能使 LED 發光一樣。

要真正讀取按鈕,你需要再次使用 machine API,這一次使用 value 函數讀取,而不是設置引腳的值。輸入以下一行:

print(button.value())

單擊 Run 并將程序保存為 Button.py,記住以確保它保存在你的 Pico MicroPython device 里。你的程序將打印出從 GP14 讀取到的值。因為輸入端使用的是一個下拉電阻,這個值將是 0,讓你知道按鈕沒有被按下。

用手指按住按鈕,并再次按下 Run 圖標。這一次,你將看到值 1 打印到 Shell。按下按鈕就電

路導通并改變了從引腳讀取的值。要連續讀取按鈕,你需要在程序中添加一個循環。編輯程序如下:

import machine
import utime

button = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN)

while True:
if button.value() == 1:
print("You pressed the button!")
utime.sleep(2)

再次單擊 Run 按鈕。你的 Pico 運行速度要比你的觀察速度快得多,并且沒有延遲,即使是簡單地按一下按鈕,也可以向 Shell 打印數百條消息!如果你按住按鈕超過兩秒的延遲,它會每兩秒打印一條消息,直到你松開按鈕。

輸入和輸出:同時使用

大多數電路都有不止一個元件,這就是為什么 Pico 有這么多 GPIO 管腳?,F在是時候把你學 到的所有東西結合在一起,制作一個更復雜的電路了:一個用按鈕開關 LED 的裝置。

5fde870c-3c4d-11ee-ac96-dac502259ad0.jpg

實際上,這個電路將前面的兩個電路組合成一個。你可能記得你使用 GP15 來驅動外部 LED,GP14 來讀取按鈕?,F在重建你的電路,使 LED 和按鈕同時在面包板上,仍然連接到 GP15 和 GP14。別忘了 LED 的限流電阻。

在 Thonny 啟動一個新程序,并開始導入你的程序需要的兩個庫:

import machine
import utime

接下來,設置輸入和輸出引腳:

led_external = machine.Pin(15, machine.Pin.OUT)
button = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN)

然后創建一個讀取按鈕值的循環:

while True:
if button.value() == 1:

不過,這一次你將根據輸入引腳的值切換輸出引腳上 LED 的狀態,而不是將消息打印到 Shell。使用下面的代碼:

led_external.value(1)
utime.sleep(2)

這足以讓 LED 亮起來,但當按鈕沒有被按下時,你還需要再次關閉它。添加以下新行,刪除 8 個空格中的 4 個,這意味著這行將不是 if 語句的一部分,而是無限循環的一部分:

led_external.value(0)

最終代碼如下:

import machine
import utime

led_external = machine.Pin(15, machine.Pin.OUT)
button = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_DOWN)

while True:
if button.value() == 1:
led_external.value(1)
utime.sleep(2)
led_external.value(0)

單擊 Run 并將程序保存為 Pico 上的 Switch.py。

起初,什么都不會發生。按下按鈕,你就會看到 LED 燈亮起來。松開按鈕兩秒鐘后,指示燈再次熄滅,直到你再次按下按鈕。

祝賀你!你已經建立了你的第一個電路,它根據一個輸入引腳控制另一個輸出引腳,我們已經在 構建模塊程序的路上跨越了一大步!






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    48

    文章

    6868

    瀏覽量

    148276
  • led照明
    +關注

    關注

    34

    文章

    2610

    瀏覽量

    141829
  • GPIO
    +關注

    關注

    16

    文章

    1149

    瀏覽量

    50734
  • python
    +關注

    關注

    52

    文章

    4698

    瀏覽量

    83610
  • 樹莓派
    +關注

    關注

    114

    文章

    1654

    瀏覽量

    104863

原文標題:樹莓派 Pico 物理編程入門

文章出處:【微信號:趣無盡,微信公眾號:趣無盡】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    樹莓權威用戶指南

    教育,但很快樹莓就得到計算機和硬件愛好者青睞;他們用它學習編程,并創造出各種各樣新奇的、風靡一時的軟硬件應用?! ?《raspberry pi用戶指南》由
    發表于 07-01 00:23

    樹莓學習指南三部曲,從編程到實戰一應俱全

    本資料介紹的是樹莓派系列教程資料匯總,包括了:樹莓python編程指南,實戰指南
    發表于 09-10 18:23

    樹莓pico入門學習筆記(一)相關資料推薦

    樹莓pico入門學習筆記選擇自己熟悉的編程語言樹莓pic
    發表于 07-01 09:28

    樹莓Pico迷你開發板及所使用的RP2040 MCU芯片有哪些特性

    Raspberry Pi Pico是什么?樹莓Pico迷你開發板及所使用的RP2040 MCU芯片有哪些特性?
    發表于 09-14 06:50

    樹莓pico如何入門?

    樹莓pico如何入門?
    發表于 10-13 08:11

    怎么實現樹莓Pico電機運動控制MicroPython+pioasm編程?

    怎么實現樹莓Pico電機運動控制MicroPython+pioasm編程?
    發表于 10-27 06:37

    樹莓Pico的相關資料分享

    關注、星標公眾號,直達精彩內容1月22日,樹莓基金會最新發布一款低成本、高性能的微控制器開發板Raspberry Pi Pico,新產品相比普通樹莓
    發表于 11-03 08:44

    使用樹莓Pico開發板的一些思考與應用實踐資料分享

    本博文根據樹莓基金會2021年1月21日公開的兩部最新官方英文技術文獻[1]、[2]以及博主最近使用樹莓Pico開發板的一些思考與應用實
    發表于 11-12 06:07

    使用樹莓Pico做了一個自動駕駛小車

    樹莓Pico做了一個自動駕駛小車,連接上藍牙,可以用手機控制它的移動了。
    發表于 01-05 07:32

    樹莓Pico的相關資料推薦

    1月22日,樹莓基金會最新發布一款低成本、高性能的微控制器開發板Raspberry Pi Pico,新產品相比普通樹莓體積更小,售價僅4
    發表于 02-07 07:37

    樹莓Pico分線板V2.0資料分享

    描述樹莓 Pico 分線板 V2.0展示了具有改進性能的流行 Pi Pico Breakout Board Rev 1.0 的修訂版。更多功能,更好的實用性和優化的成本。特征:Ras
    發表于 07-28 07:54

    請教大神樹莓pico項目創建后,rtthread文件夾沒有文件是何原因?

    請教大神樹莓pico項目創建后,rtthread文件夾沒有文件是何原因?
    發表于 09-28 09:56

    樹莓PICO:使用rt-thread micropython軟件包聯網獲取天氣

    1、在樹莓PICO上實現http請求demo  項目描述  本項目使用樹莓PICO開發板和E
    發表于 11-14 16:19

    如何讓樹莓Pico支持LoRaWAN?

    Mistry,最近為樹莓Pico搞定了LoRa和以太網支持。   目前他的庫能讓Semtech SX1276無線電模塊更好的工作在Pico和其它RP2040芯片的開發板上。   當
    發表于 05-11 10:44

    樹莓Python編程指南分享

    樹莓python編程指南
    發表于 10-07 08:43
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>