ts7680演示服务器如何实现GPIO支持

描述

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 编号写入导出文件并返回指示它是否成功的布尔值:

GPIO

现在让我们看一下该函数。当我们写入 sysfs 文件时,我们将编写一个字符串,该字符串将以某种方式命令内核。此函数打开指定的文件并写入字符串。由于写入操作非常小,并且无需接触任何存储介质即可与内核交互,因此我们使用同步写入。发生的任何错误都将引发异常,我们将捕获该异常以确定是否返回成功(true)或不返回(false)。TryWrite

GPIO

现在,我们已准备好实际读取或写入 GPIO。该函数将读取 GPIO 编号并返回指示 GPIO 当前状态的字符串。如果 GPIO 是输入,则返回的值将为“I”或 “;如果 GPIO 作为输出被主动驱动,则返回的值将为 ”“ 或 ”“。如果出现问题,也可以返回“”。gpio_getNPUT_HIGHINPUT_LOWHIGHLOWERROR

让我们一步一步地看看该怎么做。首先,我们根据传递的 GPIO 编号获取 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”))

最后,我们将方向/值对转换为相应的字符串,该字符串返回给调用者:

GPIO

Writing to a GPIO

下面是用于写入 GPIO 的函数。就像 在 中一样,我们根据 GPIO 编号检索基本路径,并确保 GPIO 已初始化:gpio_setgpio_get

GPIO

现在,我们将传递的值(即“,”“,”或“”)转换为要发送到方向寄存器的命令:INPUTHIGHLOW

GPIO

剩下的就是编写命令并将成功或失败返回给调用方:

GPIO

处理 HTTP 请求

此时,我们已准备好编写函数来处理 HTTP 请求以执行所请求的函数。首先,我们将 URL 拆分为多个组件。第一个组件将是基本网址(例如“gpio”);如果有两个组件,我们将获得指定的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

接下来,我们查看参数的数量,以决定是获取还是设置GPIO信息。我们存储返回字符串并将其写入输出:

GPIO

循环完成后,我们关闭JSON数组并完成向客户端的发送:

GPIO

最后是我们的模块。导出功能。我们处理任何选项并设置端点以连接到我们的gpio功能:

GPIO

下一部分将讨论如何支持加速计。

       审核编辑:郭婷

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分