菜鳥手冊(4):在Jetson NANO上使用GPIO

2021-02-19 GPUS開發者

本文翻譯自Jetsonhacks,因時間關係我們還沒有實測,請知悉。

點擊閱讀原文,觀看英文版本。

我們使用GPIO與NVIDIA Jetson Nano上的外部設備進行通信.

介紹

關於Jetson Nano的一個好處是有一個擴展頭,它對通用輸入輸出(GPIO)非常有用。您可能已經考慮過打開或關閉燈光作為程序的輸出,或者想要從外部按鈕讀取按下。這就是GPIO有用的地方!

在本文中,我們將介紹如何通過打開和關閉發光二極體(LED)來控制GPIO輸出。這可能是如何使用GPIO的最基本的例子之一。

您可能已經聽說過,Jetson Nano上的GPIO引腳布局與Raspberry Pi(RPi)的40引腳布局兼容。此外,還有一個Jetson GPIO python庫,它主要與RPi.GPIO兼容。 Jetson.GPIO預裝在標準的Jetson Nano鏡像包裡了。

話雖如此,請注意Jetson Nano上GPIO擴展接頭的電氣特性與Raspberry Pi不同。特別是,Jetson Nano在GPIO引腳上的流動電流遠低於RPi。

例如,RPi可以直接從GPIO引腳驅動LED,而Jetson則因為電流不足而使LED燈光昏暗。 Jetson需要一些幫助。正如您將看到的,開關電晶體正在拯救!

LED電路

零件清單

以下是我們將在此電路中使用的部分:

一個5毫米紅色LED

一個P2N2222電晶體

一個330Ω電阻

一個10kΩ電阻

若干電線

一塊麵包板將所有東西連接在一起

 

關於LED

led是這樣的。它們不線性地使用電流。如果任其自生自滅,它們會在一股神奇的煙霧中毀滅自己(就是燒掉啦)。但我們可以確保這不會發生。通過添加一個電阻(在這個應用程式中稱為限流電阻),我們將限制LED能夠繪製的電流量。我們根據歐姆定律選擇電阻。

天啊! 數學 …

電子學的基本規則之一是歐姆定律。 你可能聽說過它。

歐姆定律的簡述是:在同一電路中,通過某段導體的電流跟這段導體兩端的電壓成正比,跟這段導體的電阻成反比。

「這對我們意味著什麼?」簡而言之,我們可以通過巧妙地選擇一個合適的電阻,來設定LED實際可吸收電流的上限。這是因為電阻的電流值與所施加的電壓成正比。我們只需要知道一些關於LED的事情就可以計算出合適的電阻值。

首先,LED有所謂的正向電壓,這基本上是陰極和陽極之間的最小電壓差,你需要供應給LED。我們需要計算的另一件事是正向電流這是LED能夠連續處理的最大電流量。

本例中的LED正向電流為20mA,正向電壓為2.0V。我們將使用Jetson Nano 5V引腳驅動LED,所以我們從5V中減去正向電壓,然後除以20mA (0.020A),就像歐姆定律告訴我們的那樣:

我們得到150Ω的結果,這是流過這個特定LED安全的最大電流量的值。 這裡有幾點需要注意。 首先,電阻沒有150Ω。 即使有做,它們也有一些內在的公差,這表明它們可能與實際規定的阻力有一些差異。 這通常是一小部分,但較小的廉價電阻可能約為20%! 這意味著對於額定值為150Ω的電阻,電阻可以在120-180Ω的範圍內。

但以最大電流運行LED會影響其壽命。 通常,人們最終會使用220和470Ω之間的電阻來實現此應用。 我們將使用通用的330Ω。

關於這個電晶體

這樣就能保護我們的LED小朋友了。但是正如我們所說的,由於Jetson Nano GPIO引腳不夠強大,不足以單獨驅動LED,所以需要一些幫助。我們將使用電晶體作為開關,為LED提供電流。

電晶體放大能力。我們將使用雙極結電晶體(BJT)。BJTs有兩種:PNP和NPN。我們將使用NPN電晶體,這是大多數低功耗開關電路所使用的。

我們正在製造最基本的電晶體開關電路。一個普通的開關需要一個機械裝置來物理地啟動電路。我們這裡的開關將由電流控制從Jetson GPIO引腳發送到電晶體。來自Jetson的控制信號流入電晶體基座,發射極與地面連接,輸出端與集電極相連。

電路

這是我們將使用的電路示意圖:

L1是我們的5V LED

R1是LED的限流電阻

Q1是我們一直在討論的電晶體,P2N2222

R2是基準電阻,它可以告知電路中有多少電流流過。

對於該電路,請使用NPN BJT電晶體

計算電晶體位

還有一點神秘感。當Jetson GPIO為低電平(0V)時,電晶體處於截止模式。它看起來像集電極和發射極之間的開路。

然而,有大量的電流施加到基極,此時電晶體開始「飽和」。這就像集電極和發射極之間的短路一樣。那時,電流流動,我們的LED亮起來,一切都很美好和快樂。

在我們的示例中,基極電流由位於Jetson GPIO引腳和電晶體基極之間的基極電阻決定。基極電阻的功能與LED上的限流電阻大致相同。注意,電晶體的飽和度由電流決定,而不是由BJT中的電壓決定。

需要更多的數學來確定基本電阻應該是什麼值。

還有一個小技巧。我們需要再用一次歐姆定律。我們知道Jetson的GPIO是3.3v。除以0.00020a得到電阻,對吧?不。結果是,在我們需要考慮的基極和發射極之間有0.7V的落差。這種下降是由於電晶體基極到發射極的N-P結造成的。所以: 

在該電路中,基極電阻的13000Ω值是集電極可以達到20mA的最大電阻。

您會注意到,在我們的電路中,我們使用的是10kΩ電阻而不是13kΩ。 這有幾個原因。 首先,我們知道由於早期的限制電阻,LED不會吸收超過20mA的電流。 其次,13kΩ不是常見的電阻值,因此我們需要替代。 如果你想要安全,你會傾向於增大而不是減少。

布線

現在我們準備好把所有東西連接起來,讓它旋轉。LED和電晶體的電流都是單向流動的,並且都有正極和負極。對於LED來說,+是陽極,-是陰極。在一個5mm的LED上,正極通常有一個較長的腿,而負極通常在燈泡的邊緣有一個平坦的點。

對於電晶體,集電極在正極,發射極在負極。引腳的排列取決於所選的特定零件。

根據上面的原理圖,這裡有一個接線圖:

你需要檢查你的電晶體。收集器、基極和發射器是不同的,這取決於您擁有的部件號。這裡用的是P2N2222。我們將在Jetson上的引腳2上把紅線連接到+5V,在引腳6上把黑線連接到GND,在引腳12上把電晶體基座連接到基極電阻上。下面的演示示例選擇Pin 12。

軟體

一旦一切都連接好了,我們就可以運行一些軟體來讓LED眨眼了。

我們可以從命令行控制我們的LED。以下是一些有用的命令:

# Map GPIO Pin
# gpio79 is pin 12 on the Jetson Nano
$ echo 79 > /sys/class/gpio/export
# Set Direction
$ echo out > /sys/class/gpio/gpio79/direction
# Bit Bangin'!
$ echo 1 > /sys/class/gpio/gpio79/value
$ echo 0 > /sys/class/gpio/gpio79/value
# Unmap GPIO Pin
$ echo 79 > /sys/class/gpio/unexport
# Query Status
$ cat /sys/kernel/debug/gpio

在上面的代碼中,79指的是Linux sysfs GPIO的gpio79。如果我們看一下Jetson Nano J41的Pinout,我們可以看到gpio79實際上是pin 12。

主要:除了電源引腳、地引腳、IIC和UART的引腳外,其他的所有插針引腳,在默認的Jetson配置下,都是GPIO。插針引腳邊上的其他名字,則對應了當用戶對設備樹做出更改和重新映射引腳後,各自的推薦(特殊功能)用途。

Lady插一句:

這裡有三點需要說的:

(1)大部分的器件的引薦要麼做GPIO,要麼具有特殊功能。

(2)特殊功能往往可以被重新映射,例如UART2(假設的)可以被映射到某3個引腳上,也可以被映射到另外的其他地方。很多板子在生產的時候,首選的映射位置會在電路板上標明。(但也有板子會標明所有的可選映射位置)。

(3)本文說明了默認配置下都是GPIO,但用戶可以通過修改設備樹的方式進行重新映射和功能指定。

為了能夠訪問GPIO引腳,您需要具有適當的權限。這可以通過兩種方式實現。首先,可以從超級用戶終端運行命令。打開終端執行:

$ sudo su

然後就可以使用正確的權限執行命令。此外,可以將權限分配給您所屬的組。這通常是由:

$ sudo groupadd -f -r gpio 
$ sudo usermod -a -G gpio your_user_name 

通過將99-gpio.rules文件複製到rules.d目錄來安裝自定義udev規則:

$ sudo cp /opt/nvidia/jetson-gpio/etc/99-gpio.rules /etc/udev/rules.d/

請注意,對於要執行的新規則,您可能需要通過發出以下命令來重新引導或重新加載udev規則:

sudo udevadm control --reload-rules && sudo udevadm trigger

這個順序來自Jetson- gpio Python庫文檔,它安裝在默認的Jetson Nano鏡像中:/opt/nvidia/ Jetson- gpio/doc/README.txt。

Jetson.GPIO Python庫

有一個適用於Python的官方Jetson.GPIO庫。 Jetson.GPIO庫旨在與RPi.GPIO兼容。 我們可以運行Sample以獲得簡單的輸出來控制我們的LED:

$ cd / opt / nvidia / jetson-gpio / samples

$ sudo ./run_samples.sh simple_out.py

run_samples.sh腳本設置Jetson.GPIO庫的路徑,並調用simple_out.py來點亮連接到GPIO頭上的PIN 12的LED。

這只是觸及Jetson.GPIO庫,實際可用的比這更豐富。

結論

雖然打開和關閉LED似乎很多步驟,但我們現在有了通過Jetson GPIO header 控制外部設備的基礎。 

更對關於Jetson NAO:

菜鳥手冊(2):給Jetson Nano安裝樹莓派攝像頭

菜鳥手冊(1):給Jetson Nano安裝DC電源

菜鳥手冊(3):(被我刪掉了)

相關焦點

  • jetson nano開發使用的基礎詳細分享
    前言:最近拿到一塊jetson nano 2GB版本的板子,折騰了一下,從燒錄鏡像、修改配件等,準備一篇開箱基礎文章給大家介紹一下這塊AI開發板。有關在  Jetson Nano上運行這些基準測試的說明,請參見  此處。推理使用批量1和FP16精度,採用 JetPack 4.2附帶的NVIDIA TensorRT加速器庫。Jetson Nano在許多場景中都具有實時性能,能夠處理多個高清視頻流。
  • jetson nano -燒錄系統,從頭配置
    貼網址:系統鏡像地址https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#write安裝參考資料http://spotpear.cn/public/index/study/detail/id/172.html
  • Jetson Nano日記4:Achiconda和PyTorch安裝配置
    核心思路是,在Nano板子上配置好python,Anaconda和PyTorch環境。如無特別指明,以下命令都是在ssh登錄到jetson nano後遠程執行。PyTorch & torchvisionJetson Nano在官方image中已經預集成了GPU驅動,不需要額外下載nvidia-driver-430等PCIe驅動,可見https://forums.developer.nvidia.com/t/nvidia-driver-not-included-in-the-image-for-jetson-nano/76795
  • Jetson nano - USB攝像頭使用
    #當你跨過思想上的障礙,餘下的路你走的會順風順水。
  • 英偉達NVIDIA Jetson Nano 2GB點亮篇
    考試前的最後一篇文章https://developer.download.nvidia.com/assets/embedded/downloads/jetson-nano-2gb-jp441-sd-card-image/jetson-nano-2gb-jp441-sd-card-image.zip?
  • Jetson Nano 夜用超長評測
    (注:適配器標定5V 8A) 另外,如果使用DC供電,則必須禁用USB電源.(短路帽插上)串口和音頻口在不是很顯眼的位置出現.測試軟體:系統鏡像:jetson-nano-sd-r32.1-2019-03-18.zip (你猜哪裡下載?不知道?
  • 在Jetson Nano上使用LiDAR和ROS Melodic構建地圖
    本教程來自:原文轉自:https://www.hackster.io/shahizat005/building-a-map-using-lidar-with-ros-melodic-on-jetson-nano
  • 15分鐘連接Jetson Nano與K8S,輕鬆搭建機器學習集群
    我將介紹使用GPU運行容器所需的NVIDIA docker設置,以及將Jetson連接到Kubernetes集群。在成功將節點連接到集群後,我還將展示如何在Jetson Nano上使用GPU運行簡單的TensorFlow 2訓練會話。K3s是一個輕量級Kubernetes發行版,其大小不超過100MB。在我看來,它是單板計算機的理想選擇,因為它所需的資源明顯減少。
  • Jetson Nano 上安裝 OctoPrint
    sudo apt update2,安裝依賴安裝*Python* pip*(是*Python*的包安裝程序)、python dev(包含 Python C API 頭文件的包)、*Python** setuptools(Python distutils 的增強集合,允許開發人員更輕鬆地構建和分發 Python 包)、Python venv(一個虛擬環境
  • 乾貨 | NVIDIA Jetson NANO詳解
    憑藉這款低成本的Jetson平板,Nano使用了與幾年前Jetson TX1類似的Tegra晶片。該Tegra X1 SoC具有四核Cortex-A57處理器和128核NVIDIA Maxwell GPU,使用Tegra X1設計的一個好處是,開源Linux內核支持比剛剛發布的soc更好,甚至在新驅動程序棧中還有開源的Tegra Maxwell圖形支持。Jetson Nano還提供4GB的LPDDR4內存、千兆乙太網、12條MIPI通道、4個USB埠,最多可以同時驅動兩個顯示器。
  • 如何使用 NVIDIA Jetson 和 Amazon SageMaker 結合打造智能邊緣
    4.9.140-tegra  aarch64架構,所以NVIDIA給了我們一個microSD card的鏡像來燒錄到板子上,但由於推理框架、庫、軟體、驅動等等都要遵循其架構。鏡像燒錄參考:https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#writeNIVIDA JetPack 可以實現在 Jetson 平臺上快速構建機器學習環境,JetPack 包括系統鏡像、TensorRT、CUDA、各種庫和 API、開發工具
  • NVIDIA Jetson Nano 2GB 系列文章(2):安裝系統
    記住位置如下:Jetson Nano 2GB:https://developer.nvidia.com/jetson-nano-2gb-sd-card-image下載會消耗較多時間,需要一些耐性。點選上圖「Flash from files」後,選擇要安裝的鏡像文件,這裡選擇 Jetson Nano 2GB 的鏡像文件「jetson-nano-jp441-2gb-sd-card-image.zip」,然後選項的圖標會產生變化(如下圖)。其中「sd-blod.img」是 jetson-nano-jp441-2gb-sd-card-image.zip 解壓縮之後的文件。
  • 這是 Jetson Nano 2GB的入門指南,請查收
    「 Jetson Nano 2GB」是一種低價版本,其內存容量比2019年3月發布的「 NVIDIA Jetson Nano Developer Kit」(4GB)要少,但價格較低,主要用於學生和教育。相信大家都收到貨了吧。小編在這裡給大家列出了Jetson Nano 2GB的參數以及使用指南。
  • 極客小電腦Jetson Nano評測
    另外,USB電源要考慮到大電流下會有壓降,建議使用大品牌的正品充電器,2A輸出時的實際電壓必須超過4.75V。如果怕壓降導致電壓過低,你可以使用DELL、Lenovo的5.25V的平板電腦充電器。或者直接購買Seeed Studio提供的規格5V3A的電源適配器。板子上有個供電選擇跳帽,編號J48。
  • NVIDIA Jetson Nano新手手冊:一場當沒有人告訴你該做什麼你要能夠知道該做什麼的無畏冒險
    這本手冊是在我們的指導原則中一個較簡略的匯整。我們希望這些原則可以協助每一位加入我們QQ技術支持群的新人,並感謝你來到這裡,讓我們一同創造出偉大的事物。https://devtalk.nvidia.com/default/board/371/jetson-nano/3.
  • 樹莓派4代PI4B相關資料連結
    :連結:https://pan.baidu.com/s/1q-FOjn5z-rhT99YCkDZPfQ提取碼:77g910寸HDMI觸控螢幕手冊:步驟 1, 樹莓派要使用的SD卡必須先用SDFormatter格式化下載所需使用鏡像img官網下載:       https://www.raspberrypi.org/
  • 用Jetson NANO做一個防疲勞駕駛的神器
    該系統的功能分為嗜睡檢測,情緒檢測和行車監控(使用Yolov3)模塊。睡意和情感模塊使用OpenCV的Haar Cascades方法進行面部檢測。一旦檢測到駕駛員的面部,這些模塊就會使用內置在PyTorch中並在Jetson Nano上運行的卷積神經網絡來檢測駕駛員的眼睛狀態(張開/閉合)和駕駛員的情緒。
  • NVIDIA論壇常見Jetson問題匯總(2)
    答:請參考NVIDIA Jetson Module EEPROM Layout(網址:https://docs.nvidia.com/jetson/archives/l4t-archived/l4t-3231/index.html#page/Tegra%2520Linux%2520Driver%2520Package%2520Development%2520Guide%2Fjetson_eeprom_layout.html
  • Jetson-inference的安裝
    2021-01-22   15:56前日給jetson nano安裝jetson-inference
  • 如何用樹莓派控制 GPIO 引腳並操作繼電器
    sudo nano /etc/network/interfaces這個命令會用一個叫做 nano 的編輯器打開這個文件。它是一個非常簡單又易於使用的文本編輯器。如果你不熟悉基 Linux 的作業系統,可以使用鍵盤上的方向鍵來操作。