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

并發服務器的設計與實現

評論