0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ts7680演示服務(wù)器如何實(shí)現(xiàn)GPIO支持

星星科技指導(dǎo)員 ? 來源:嵌入式計(jì)算設(shè)計(jì) ? 作者:Michael Schmidt ? 2022-10-12 10:00 ? 次閱讀

TS-7680 采用標(biāo)準(zhǔn)系統(tǒng)架構(gòu)介面來控制 GPIO,因此支持 GPIO 的軟件包可由 Sysfs 接口在任何電路板上使用。

要控制GPIO,我們必須首先將GPIO編號(hào)寫入,然后使用文件讀取和寫入方向(輸入的有效值為“輸入”,輸出為“輸出”) 。我們還使用文件讀取和寫入GPIO的值,其中有效值為“高”和“低”。/sys/class/gpio/export/sys/class/gpio/gpio#/direction/sys/class/gpio/gpio#/direction

現(xiàn)在,讓我們看一下 中的實(shí)現(xiàn)。首先,我們需要“fs”模塊,因?yàn)槲覀儗⑴c文件系統(tǒng)中的 sysfs 文件進(jìn)行交互以控制我們的 GPIO:gpio.js

var fs = require(“fs”)

在執(zhí)行其他任何操作之前,讓我們實(shí)現(xiàn)一個(gè)函數(shù),以確保在實(shí)際訪問控制 GPIO 的 sysfs 文件之前已執(zhí)行 GPIO 初始化。這相當(dāng)簡單。只需嘗試將 GPIO 編號(hào)寫入導(dǎo)出文件并返回指示它是否成功的布爾值:

files-aHViPTYzODY3JmNtZD1pdGVtZWRpdG9yaW1hZ2UmZmlsZW5hbWU9aXRlbWVkaXRvcmltYWdlXzU5Yjk2YjZhMmU1OWUuanBnJnZlcnNpb249MDAwMCZzaWc9ZmY2NjMwM2I2YjIxNTg5MjYyZThkYWI1MzY0YWI0MjI253D

現(xiàn)在讓我們看一下該函數(shù)。當(dāng)我們寫入 sysfs 文件時(shí),我們將編寫一個(gè)字符串,該字符串將以某種方式命令內(nèi)核。此函數(shù)打開指定的文件并寫入字符串。由于寫入操作非常小,并且無需接觸任何存儲(chǔ)介質(zhì)即可與內(nèi)核交互,因此我們使用同步寫入。發(fā)生的任何錯(cuò)誤都將引發(fā)異常,我們將捕獲該異常以確定是否返回成功(true)或不返回(false)。TryWrite

files-aHViPTYzODY3JmNtZD1pdGVtZWRpdG9yaW1hZ2UmZmlsZW5hbWU9aXRlbWVkaXRvcmltYWdlXzU5Yjk3NjMyMDE5ZDYucG5nJnZlcnNpb249MDAwMCZzaWc9MzJjZGRmOGM0NTQyYTRlMTMyYTcyYTU4OWI3MTJiYTg253D

現(xiàn)在,我們已準(zhǔn)備好實(shí)際讀取或?qū)懭?GPIO。該函數(shù)將讀取 GPIO 編號(hào)并返回指示 GPIO 當(dāng)前狀態(tài)的字符串。如果 GPIO 是輸入,則返回的值將為“I”或 “;如果 GPIO 作為輸出被主動(dòng)驅(qū)動(dòng),則返回的值將為 ”“ 或 ”“。如果出現(xiàn)問題,也可以返回“”。gpio_getNPUT_HIGHINPUT_LOWHIGHLOWERROR

讓我們一步一步地看看該怎么做。首先,我們根據(jù)傳遞的 GPIO 編號(hào)獲取 GPIO 文件的路徑:

files-aHViPTYzODY3JmNtZD1pdGVtZWRpdG9yaW1hZ2UmZmlsZW5hbWU9aXRlbWVkaXRvcmltYWdlXzU5Yjk4MDVlZWU2NTYucG5nJnZlcnNpb249MDAwMCZzaWc9MmJlNzcyNTQyM2IxNjhhNzU1ZTIwZmQ0OTY5MjBjYmI253D

在此之后,我們確保在sysfs中初始化GPIO,如果不成功,則返回錯(cuò)誤。例如,傳遞的值可能無效:

if (!gpio_init(path,num)) return “ERROR”

然后,我們可以通過讀取相對(duì)于GPIO路徑的文件來獲得GPIO的方向。這將是“”表示輸出,或“”表示輸入:directionOUTIN

var dir=fs.readFileSync(path+“/direction”, “utf8”)

接下來,我們通過讀取文件來獲取GPIO的值。這將是一個(gè)“”或“,”,它將轉(zhuǎn)換為一個(gè)數(shù)字:value10

var data=Number(fs.readFileSync(path+“/value”, “utf8”))

最后,我們將方向/值對(duì)轉(zhuǎn)換為相應(yīng)的字符串,該字符串返回給調(diào)用者:

files-aHViPTYzODY3JmNtZD1pdGVtZWRpdG9yaW1hZ2UmZmlsZW5hbWU9aXRlbWVkaXRvcmltYWdlXzU5Yjk4MTM4MzNiZTYucG5nJnZlcnNpb249MDAwMCZzaWc9MzFiN2Y5MDlhOWEzMzBmY2U4MzdhOWNhYmQwYjM1ZDk253D

Writing to a GPIO

下面是用于寫入 GPIO 的函數(shù)。就像 在 中一樣,我們根據(jù) GPIO 編號(hào)檢索基本路徑,并確保 GPIO 已初始化:gpio_setgpio_get

files-aHViPTYzODY3JmNtZD1pdGVtZWRpdG9yaW1hZ2UmZmlsZW5hbWU9aXRlbWVkaXRvcmltYWdlXzU5Yjk4MWIwMjMxMDcucG5nJnZlcnNpb249MDAwMCZzaWc9NDM3ZWIyMGE5MTQ3YzUzMzA0ZGQyYTI3MmM5NGUzMGE253D

現(xiàn)在,我們將傳遞的值(即“,”“,”或“”)轉(zhuǎn)換為要發(fā)送到方向寄存器的命令:INPUTHIGHLOW

files-aHViPTYzODY3JmNtZD1pdGVtZWRpdG9yaW1hZ2UmZmlsZW5hbWU9aXRlbWVkaXRvcmltYWdlXzU5Yjk4MWZkYzE2NmYucG5nJnZlcnNpb249MDAwMCZzaWc9Y2NkZmUzZGRlMzhiYmVlNjgyOTMzN2ZlOWU5Y2RmNzU253D

剩下的就是編寫命令并將成功或失敗返回給調(diào)用方:

files-aHViPTYzODY3JmNtZD1pdGVtZWRpdG9yaW1hZ2UmZmlsZW5hbWU9aXRlbWVkaXRvcmltYWdlXzU5Yjk4MmUxZTk4M2YucG5nJnZlcnNpb249MDAwMCZzaWc9N2YwYjNmMDQ2YTIwMTk3MWI0NDg0MjNmZTFiYWU0YWM253D

處理 HTTP 請(qǐng)求

此時(shí),我們已準(zhǔn)備好編寫函數(shù)來處理 HTTP 請(qǐng)求以執(zhí)行所請(qǐng)求的函數(shù)。首先,我們將 URL 拆分為多個(gè)組件。第一個(gè)組件將是基本網(wǎng)址(例如“gpio”);如果有兩個(gè)組件,我們將獲得指定的GPIO值;如果有三個(gè)組件,我們將指定的GPIO設(shè)置為指定的值。如果組件數(shù)量有任何不同,則發(fā)出的請(qǐng)求無效,我們將返回錯(cuò)誤:

files-aHViPTYzODY3JmNtZD1pdGVtZWRpdG9yaW1hZ2UmZmlsZW5hbWU9aXRlbWVkaXRvcmltYWdlXzU5Yjk4M2M0YmMyYjkucG5nJnZlcnNpb249MDAwMCZzaWc9NzY0M2RiOTVhNGY5YjQ3NDE1NzViOWI3ZWNkM2M0NmE253D

我們要做的下一件事是將GPIO編號(hào)拆分為一個(gè)數(shù)組。我們使用逗號(hào)字符執(zhí)行此操作,它允許將多個(gè) GPIO 指定為逗號(hào)分隔的列表。如果不存在逗號(hào),則僅指定一個(gè) GPIO,并且將返回一個(gè)包含單個(gè)元素的數(shù)組:

var numlist = url[1].split(“,”)

現(xiàn)在我們準(zhǔn)備開始發(fā)送我們的回復(fù)。由于正在發(fā)送JSON字符串,請(qǐng)繼續(xù)寫出開頭的數(shù)組字符:

res.write(“[”)

接下來,我們?cè)谡?qǐng)求中的所有GPIO號(hào)碼上設(shè)置一個(gè)循環(huán):

for (i=0;i

因?yàn)槲覀冋诰帉懸粋€(gè)JSON數(shù)組,所以需要在每個(gè)元素之間發(fā)送一個(gè)逗號(hào)。如果前面有一個(gè)元素,我們可以在每個(gè)元素的開頭寫逗號(hào):

if (i》0) res.write(“,”)

現(xiàn)在,我們將GPIO數(shù)字轉(zhuǎn)換為整數(shù),并進(jìn)行一些錯(cuò)誤檢查:

files-aHViPTYzODY3JmNtZD1pdGVtZWRpdG9yaW1hZ2UmZmlsZW5hbWU9aXRlbWVkaXRvcmltYWdlXzU5Yjk4NDc5NTQ4ZDQucG5nJnZlcnNpb249MDAwMCZzaWc9NzVkYTE5YTQzMmIyMmE4YzlhYzBlNGE4Y2E2YWEyZGI253D

接下來,我們查看參數(shù)的數(shù)量,以決定是獲取還是設(shè)置GPIO信息。我們存儲(chǔ)返回字符串并將其寫入輸出:

files-aHViPTYzODY3JmNtZD1pdGVtZWRpdG9yaW1hZ2UmZmlsZW5hbWU9aXRlbWVkaXRvcmltYWdlXzU5Yjk4NzJmMDM5MGUucG5nJnZlcnNpb249MDAwMCZzaWc9NTU0YzMzNjBlMWRiNzMzYzRhZTAxM2FiMmQ3NDA5YmI253D

循環(huán)完成后,我們關(guān)閉JSON數(shù)組并完成向客戶端的發(fā)送:

files-aHViPTYzODY3JmNtZD1pdGVtZWRpdG9yaW1hZ2UmZmlsZW5hbWU9aXRlbWVkaXRvcmltYWdlXzU5Yjk4NzZmMTU0ZGQucG5nJnZlcnNpb249MDAwMCZzaWc9NTVjYWJiNWI2NWYwNTAxZjQxYWY1ZGZiY2E2YmU1OGE253D

最后是我們的模塊。導(dǎo)出功能。我們處理任何選項(xiàng)并設(shè)置端點(diǎn)以連接到我們的gpio功能:

files-aHViPTYzODY3JmNtZD1pdGVtZWRpdG9yaW1hZ2UmZmlsZW5hbWU9aXRlbWVkaXRvcmltYWdlXzU5Yjk4N2U2NzQ0NGUucG5nJnZlcnNpb249MDAwMCZzaWc9MDI4NmFkYmQ3NmFmNjFjNDk2M2VhMmJhY2ViNjUwMjY253D

下一部分將討論如何支持加速計(jì)

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    9160

    瀏覽量

    85425
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1204

    瀏覽量

    52102
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    什么是服務(wù)器虛擬化?私人云服務(wù)器

    什么是 服務(wù)器虛擬化 ? 服務(wù)器虛擬化是一種將物理服務(wù)器轉(zhuǎn)化為虛擬服務(wù)器的過程,使得多個(gè)虛擬服務(wù)器可以在同一臺(tái)物理
    的頭像 發(fā)表于 08-08 10:44 ?1363次閱讀

    linux服務(wù)器和windows服務(wù)器

    管理工具。這 使得Windows服務(wù)器更適合那些對(duì)服務(wù)器操作系統(tǒng)不太熟悉的用戶,如小型企業(yè)和個(gè)人網(wǎng)站的管理員。 Windows服務(wù)器還擁有廣泛的應(yīng)用支持。在商業(yè)應(yīng)用領(lǐng)域,很多企業(yè)軟件和
    發(fā)表于 02-22 15:46

    【NanoPi NEO申請(qǐng)】基于NanoPi NEO的簡單服務(wù)器的制作

    申請(qǐng)理由:項(xiàng)目描述:利用NanoPi NEO開發(fā)套件制作一個(gè)簡單的家庭終端服務(wù)器,能夠實(shí)現(xiàn)1、利用GPIO口連接外部傳感以測量相關(guān)的值2、設(shè)備接入以訪問相關(guān)傳感
    發(fā)表于 10-25 16:17

    Web服務(wù)器演示的源代碼在哪里?

    我已經(jīng)購買了ML505,并且我已經(jīng)嘗試了它附帶的Web服務(wù)器演示。我的計(jì)算機(jī)檢測到它并建立連接,但我無法在指定的地址顯示一個(gè)網(wǎng)頁(我嘗試了許多設(shè)置無濟(jì)于事)。但是,真正的問題是 - Web服務(wù)器
    發(fā)表于 08-21 09:35

    如何實(shí)現(xiàn)SSH服務(wù)器?

    你好,有人已經(jīng)實(shí)現(xiàn)了SSH(2版)服務(wù)器嗎?你好嗎?SSH只是帶有SSL的telnet,還是有其他的東西有一個(gè)基本的SSH服務(wù)器?如何實(shí)施SFTP?感謝
    發(fā)表于 03-24 10:14

    OPC服務(wù)器開發(fā)淺談 — 服務(wù)器模型

    的開發(fā),主要包括兩大部分的工作:OPC接口的實(shí)現(xiàn)和設(shè)備驅(qū)動(dòng)部分的開發(fā)。OPC接口的實(shí)現(xiàn),實(shí)質(zhì)上就是按照OPC標(biāo)準(zhǔn)進(jìn)行COM接口開發(fā),對(duì)于大多數(shù)的OPC服務(wù)器開發(fā)者來說,我認(rèn)為沒有必要涉足。目前市場...
    發(fā)表于 07-02 08:29

    服務(wù)器與物理服務(wù)器的區(qū)別是什么?

    是指物理上的單獨(dú)服務(wù)器,物理服務(wù)器的構(gòu)成包括處理、硬盤、內(nèi)存、系統(tǒng)總線。用戶可以方便的進(jìn)行遠(yuǎn)程維護(hù),免費(fèi)重裝系統(tǒng) 硬件級(jí)別上實(shí)現(xiàn)云主機(jī)之間的完全隔離; 內(nèi)置冗余的共享存儲(chǔ)和智能備份,
    發(fā)表于 12-09 09:56

    ASUS華碩 TS500-E6/PS4服務(wù)器主板BIOS 0

    ASUS華碩 TS500-E6 PS4服務(wù)器主板BIOS 0902版 主板驅(qū)動(dòng)
    發(fā)表于 12-06 11:54 ?24次下載

    功能服務(wù)器支持的操作系統(tǒng)

    功能服務(wù)器支持的操作系統(tǒng)              目前功能服務(wù)器支持的操作系統(tǒng)主要
    發(fā)表于 01-08 14:49 ?882次閱讀

    光盤鏡像服務(wù)器支持的操作系統(tǒng)

    光盤鏡像服務(wù)器支持的操作系統(tǒng)               目前光盤鏡像服務(wù)器支持
    發(fā)表于 01-09 11:48 ?742次閱讀

    浪潮天梭TS850多路服務(wù)器

    浪潮天梭TS850是我國國內(nèi)第一款自主設(shè)計(jì)的八路服務(wù)器,為我國云計(jì)算的自主可控奠定了硬件基礎(chǔ)。 成功推出國內(nèi)第一款自主設(shè)計(jì)的八路服務(wù)器天梭TS850。這款
    發(fā)表于 03-25 15:18 ?31次下載

    AMD重新構(gòu)思服務(wù)器科技,現(xiàn)可支持APU服務(wù)器軟件

    AMD重新構(gòu)思服務(wù)器科技,現(xiàn)可支持APU服務(wù)器軟件,幫助服務(wù)器適應(yīng)現(xiàn)代數(shù)據(jù)中心工作負(fù)載的新一代開發(fā)工具亮相APU13開發(fā)者峰會(huì)。
    發(fā)表于 11-15 10:19 ?655次閱讀

    如何實(shí)現(xiàn)對(duì)TS-7680硬件的支持

      一旦 npm 升級(jí),任何時(shí)候它運(yùn)行都會(huì)返回一個(gè)錯(cuò)誤,說 npm 不支持 node.js v0.10.29,你應(yīng)該升級(jí)到更新的版本。忽略此警告,因?yàn)?v0.10.29 是 TS-7680 支持的最新版本,因?yàn)檩^新的版本缺少 A
    的頭像 發(fā)表于 06-29 14:20 ?787次閱讀
    如何<b class='flag-5'>實(shí)現(xiàn)</b>對(duì)<b class='flag-5'>TS-7680</b>硬件的<b class='flag-5'>支持</b>

    并發(fā)服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)

    并發(fā)服務(wù)器支持多個(gè)客戶端的連接,最大可接入的客戶端數(shù)取決于內(nèi)核控制塊的個(gè)數(shù)。當(dāng)使用Socket API時(shí),要使服務(wù)器能夠同時(shí)支持多個(gè)客戶端的連接,必須引入多任務(wù)機(jī)制,為每個(gè)連接創(chuàng)建一個(gè)
    的頭像 發(fā)表于 04-25 15:35 ?850次閱讀
    并發(fā)<b class='flag-5'>服務(wù)器</b>的設(shè)計(jì)與<b class='flag-5'>實(shí)現(xiàn)</b>

    gpu服務(wù)器是干什么的 gpu服務(wù)器與cpu服務(wù)器的區(qū)別

     相比于傳統(tǒng)的CPU服務(wù)器,GPU服務(wù)器支持同時(shí)計(jì)算大量相似的計(jì)算操作,可以實(shí)現(xiàn)更強(qiáng)的并行計(jì)算性能。GPU服務(wù)器通常配備多個(gè)高性能的GPU,
    的頭像 發(fā)表于 12-02 17:20 ?1924次閱讀