TS-7680 采用標準系統(tǒng)架構介面來控制 GPIO,因此支持 GPIO 的軟件包可由 Sysfs 接口在任何電路板上使用。
要控制GPIO,我們必須首先將GPIO編號寫入,然后使用文件讀取和寫入方向(輸入的有效值為“輸入”,輸出為“輸出”) 。我們還使用文件讀取和寫入GPIO的值,其中有效值為“高”和“低”。/sys/class/gpio/export/sys/class/gpio/gpio#/direction/sys/class/gpio/gpio#/direction
現(xiàn)在,讓我們看一下 中的實現(xiàn)。首先,我們需要“fs”模塊,因為我們將與文件系統(tǒng)中的 sysfs 文件進行交互以控制我們的 GPIO:gpio.js
var fs = require(“fs”)
在執(zhí)行其他任何操作之前,讓我們實現(xiàn)一個函數(shù),以確保在實際訪問控制 GPIO 的 sysfs 文件之前已執(zhí)行 GPIO 初始化。這相當簡單。只需嘗試將 GPIO 編號寫入導出文件并返回指示它是否成功的布爾值:
現(xiàn)在讓我們看一下該函數(shù)。當我們寫入 sysfs 文件時,我們將編寫一個字符串,該字符串將以某種方式命令內核。此函數(shù)打開指定的文件并寫入字符串。由于寫入操作非常小,并且無需接觸任何存儲介質即可與內核交互,因此我們使用同步寫入。發(fā)生的任何錯誤都將引發(fā)異常,我們將捕獲該異常以確定是否返回成功(true)或不返回(false)。TryWrite
現(xiàn)在,我們已準備好實際讀取或寫入 GPIO。該函數(shù)將讀取 GPIO 編號并返回指示 GPIO 當前狀態(tài)的字符串。如果 GPIO 是輸入,則返回的值將為“I”或 “;如果 GPIO 作為輸出被主動驅動,則返回的值將為 ”“ 或 ”“。如果出現(xiàn)問題,也可以返回“”。gpio_getNPUT_HIGHINPUT_LOWHIGHLOWERROR
讓我們一步一步地看看該怎么做。首先,我們根據(jù)傳遞的 GPIO 編號獲取 GPIO 文件的路徑:
在此之后,我們確保在sysfs中初始化GPIO,如果不成功,則返回錯誤。例如,傳遞的值可能無效:
if (!gpio_init(path,num)) return “ERROR”
然后,我們可以通過讀取相對于GPIO路徑的文件來獲得GPIO的方向。這將是“”表示輸出,或“”表示輸入:directionOUTIN
var dir=fs.readFileSync(path+“/direction”, “utf8”)
接下來,我們通過讀取文件來獲取GPIO的值。這將是一個“”或“,”,它將轉換為一個數(shù)字:value10
var data=Number(fs.readFileSync(path+“/value”, “utf8”))
最后,我們將方向/值對轉換為相應的字符串,該字符串返回給調用者:
Writing to a GPIO
下面是用于寫入 GPIO 的函數(shù)。就像 在 中一樣,我們根據(jù) GPIO 編號檢索基本路徑,并確保 GPIO 已初始化:gpio_setgpio_get
現(xiàn)在,我們將傳遞的值(即“,”“,”或“”)轉換為要發(fā)送到方向寄存器的命令:INPUTHIGHLOW
剩下的就是編寫命令并將成功或失敗返回給調用方:
處理 HTTP 請求
此時,我們已準備好編寫函數(shù)來處理 HTTP 請求以執(zhí)行所請求的函數(shù)。首先,我們將 URL 拆分為多個組件。第一個組件將是基本網(wǎng)址(例如“gpio”);如果有兩個組件,我們將獲得指定的GPIO值;如果有三個組件,我們將指定的GPIO設置為指定的值。如果組件數(shù)量有任何不同,則發(fā)出的請求無效,我們將返回錯誤:
我們要做的下一件事是將GPIO編號拆分為一個數(shù)組。我們使用逗號字符執(zhí)行此操作,它允許將多個 GPIO 指定為逗號分隔的列表。如果不存在逗號,則僅指定一個 GPIO,并且將返回一個包含單個元素的數(shù)組:
var numlist = url[1].split(“,”)
現(xiàn)在我們準備開始發(fā)送我們的回復。由于正在發(fā)送JSON字符串,請繼續(xù)寫出開頭的數(shù)組字符:
res.write(“[”)
接下來,我們在請求中的所有GPIO號碼上設置一個循環(huán):
for (i=0;i
因為我們正在編寫一個JSON數(shù)組,所以需要在每個元素之間發(fā)送一個逗號。如果前面有一個元素,我們可以在每個元素的開頭寫逗號:
if (i》0) res.write(“,”)
現(xiàn)在,我們將GPIO數(shù)字轉換為整數(shù),并進行一些錯誤檢查:
接下來,我們查看參數(shù)的數(shù)量,以決定是獲取還是設置GPIO信息。我們存儲返回字符串并將其寫入輸出:
循環(huán)完成后,我們關閉JSON數(shù)組并完成向客戶端的發(fā)送:
最后是我們的模塊。導出功能。我們處理任何選項并設置端點以連接到我們的gpio功能:
下一部分將討論如何支持加速計。
審核編輯:郭婷
-
服務器
+關注
關注
12文章
9123瀏覽量
85328 -
GPIO
+關注
關注
16文章
1204瀏覽量
52055
發(fā)布評論請先 登錄
相關推薦
評論