0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

星星科技指导员 来源:嵌入式计算设计 作者:Michael Schmidt 2022-10-12 10:00 次阅读

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

files-aHViPTYzODY3JmNtZD1pdGVtZWRpdG9yaW1hZ2UmZmlsZW5hbWU9aXRlbWVkaXRvcmltYWdlXzU5Yjk2YjZhMmU1OWUuanBnJnZlcnNpb249MDAwMCZzaWc9ZmY2NjMwM2I2YjIxNTg5MjYyZThkYWI1MzY0YWI0MjI253D

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

files-aHViPTYzODY3JmNtZD1pdGVtZWRpdG9yaW1hZ2UmZmlsZW5hbWU9aXRlbWVkaXRvcmltYWdlXzU5Yjk3NjMyMDE5ZDYucG5nJnZlcnNpb249MDAwMCZzaWc9MzJjZGRmOGM0NTQyYTRlMTMyYTcyYTU4OWI3MTJiYTg253D

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

让我们一步一步地看看该怎么做。首先,我们根据传递的 GPIO 编号获取 GPIO 文件的路径:

files-aHViPTYzODY3JmNtZD1pdGVtZWRpdG9yaW1hZ2UmZmlsZW5hbWU9aXRlbWVkaXRvcmltYWdlXzU5Yjk4MDVlZWU2NTYucG5nJnZlcnNpb249MDAwMCZzaWc9MmJlNzcyNTQyM2IxNjhhNzU1ZTIwZmQ0OTY5MjBjYmI253D

在此之后,我们确保在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”))

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

files-aHViPTYzODY3JmNtZD1pdGVtZWRpdG9yaW1hZ2UmZmlsZW5hbWU9aXRlbWVkaXRvcmltYWdlXzU5Yjk4MTM4MzNiZTYucG5nJnZlcnNpb249MDAwMCZzaWc9MzFiN2Y5MDlhOWEzMzBmY2U4MzdhOWNhYmQwYjM1ZDk253D

Writing to a GPIO

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

files-aHViPTYzODY3JmNtZD1pdGVtZWRpdG9yaW1hZ2UmZmlsZW5hbWU9aXRlbWVkaXRvcmltYWdlXzU5Yjk4MWIwMjMxMDcucG5nJnZlcnNpb249MDAwMCZzaWc9NDM3ZWIyMGE5MTQ3YzUzMzA0ZGQyYTI3MmM5NGUzMGE253D

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

files-aHViPTYzODY3JmNtZD1pdGVtZWRpdG9yaW1hZ2UmZmlsZW5hbWU9aXRlbWVkaXRvcmltYWdlXzU5Yjk4MWZkYzE2NmYucG5nJnZlcnNpb249MDAwMCZzaWc9Y2NkZmUzZGRlMzhiYmVlNjgyOTMzN2ZlOWU5Y2RmNzU253D

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

files-aHViPTYzODY3JmNtZD1pdGVtZWRpdG9yaW1hZ2UmZmlsZW5hbWU9aXRlbWVkaXRvcmltYWdlXzU5Yjk4MmUxZTk4M2YucG5nJnZlcnNpb249MDAwMCZzaWc9N2YwYjNmMDQ2YTIwMTk3MWI0NDg0MjNmZTFiYWU0YWM253D

处理 HTTP 请求

此时,我们已准备好编写函数来处理 HTTP 请求以执行所请求的函数。首先,我们将 URL 拆分为多个组件。第一个组件将是基本网址(例如“gpio”);如果有两个组件,我们将获得指定的GPIO值;如果有三个组件,我们将指定的GPIO设置为指定的值。如果组件数量有任何不同,则发出的请求无效,我们将返回错误:

files-aHViPTYzODY3JmNtZD1pdGVtZWRpdG9yaW1hZ2UmZmlsZW5hbWU9aXRlbWVkaXRvcmltYWdlXzU5Yjk4M2M0YmMyYjkucG5nJnZlcnNpb249MDAwMCZzaWc9NzY0M2RiOTVhNGY5YjQ3NDE1NzViOWI3ZWNkM2M0NmE253D

我们要做的下一件事是将GPIO编号拆分为一个数组。我们使用逗号字符执行此操作,它允许将多个 GPIO 指定为逗号分隔的列表。如果不存在逗号,则仅指定一个 GPIO,并且将返回一个包含单个元素的数组:

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

现在我们准备开始发送我们的回复。由于正在发送JSON字符串,请继续写出开头的数组字符:

res.write(“[”)

接下来,我们在请求中的所有GPIO号码上设置一个循环:

for (i=0;i

因为我们正在编写一个JSON数组,所以需要在每个元素之间发送一个逗号。如果前面有一个元素,我们可以在每个元素的开头写逗号:

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

现在,我们将GPIO数字转换为整数,并进行一些错误检查:

files-aHViPTYzODY3JmNtZD1pdGVtZWRpdG9yaW1hZ2UmZmlsZW5hbWU9aXRlbWVkaXRvcmltYWdlXzU5Yjk4NDc5NTQ4ZDQucG5nJnZlcnNpb249MDAwMCZzaWc9NzVkYTE5YTQzMmIyMmE4YzlhYzBlNGE4Y2E2YWEyZGI253D

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

files-aHViPTYzODY3JmNtZD1pdGVtZWRpdG9yaW1hZ2UmZmlsZW5hbWU9aXRlbWVkaXRvcmltYWdlXzU5Yjk4NzJmMDM5MGUucG5nJnZlcnNpb249MDAwMCZzaWc9NTU0YzMzNjBlMWRiNzMzYzRhZTAxM2FiMmQ3NDA5YmI253D

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

files-aHViPTYzODY3JmNtZD1pdGVtZWRpdG9yaW1hZ2UmZmlsZW5hbWU9aXRlbWVkaXRvcmltYWdlXzU5Yjk4NzZmMTU0ZGQucG5nJnZlcnNpb249MDAwMCZzaWc9NTVjYWJiNWI2NWYwNTAxZjQxYWY1ZGZiY2E2YmU1OGE253D

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

files-aHViPTYzODY3JmNtZD1pdGVtZWRpdG9yaW1hZ2UmZmlsZW5hbWU9aXRlbWVkaXRvcmltYWdlXzU5Yjk4N2U2NzQ0NGUucG5nJnZlcnNpb249MDAwMCZzaWc9MDI4NmFkYmQ3NmFmNjFjNDk2M2VhMmJhY2ViNjUwMjY253D

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

审核编辑:郭婷

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

    关注

    12

    文章

    9133

    浏览量

    85351
  • GPIO
    +关注

    关注

    16

    文章

    1204

    浏览量

    52060
收藏 人收藏

    评论

    相关推荐

    什么是服务器虚拟化?私人云服务器

    什么是 服务器虚拟化 ? 服务器虚拟化是一种将物理服务器转化为虚拟服务器的过程,使得多个虚拟服务器可以在同一台物理
    的头像 发表于 08-08 10:44 1351次阅读

    linux服务器和windows服务器

    管理工具。这 使得Windows服务器更适合那些对服务器操作系统不太熟悉的用户,如小型企业和个人网站的管理员。 Windows服务器还拥有广泛的应用支持。在商业应用领域,很多企业软件和
    发表于 02-22 15:46

    【NanoPi NEO申请】基于NanoPi NEO的简单服务器的制作

    申请理由:项目描述:利用NanoPi NEO开发套件制作一个简单的家庭终端服务器,能够实现1、利用GPIO口连接外部传感以测量相关的值2、设备接入以访问相关传感
    发表于 10-25 16:17

    Web服务器演示的源代码在哪里?

    我已经购买了ML505,并且我已经尝试了它附带的Web服务器演示。我的计算机检测到它并建立连接,但我无法在指定的地址显示一个网页(我尝试了许多设置无济于事)。但是,真正的问题是 - Web服务器
    发表于 08-21 09:35

    如何实现SSH服务器

    你好,有人已经实现了SSH(2版)服务器吗?你好吗?SSH只是带有SSL的telnet,还是有其他的东西有一个基本的SSH服务器?如何实施SFTP?感谢
    发表于 03-24 10:14

    OPC服务器开发浅谈 — 服务器模型

    的开发,主要包括两大部分的工作:OPC接口的实现和设备驱动部分的开发。OPC接口的实现,实质上就是按照OPC标准进行COM接口开发,对于大多数的OPC服务器开发者来说,我认为没有必要涉足。目前市场...
    发表于 07-02 08:29

    服务器与物理服务器的区别是什么?

    是指物理上的单独服务器,物理服务器的构成包括处理、硬盘、内存、系统总线。用户可以方便的进行远程维护,免费重装系统 硬件级别上实现云主机之间的完全隔离; 内置冗余的共享存储和智能备份,
    发表于 12-09 09:56

    ASUS华硕 TS500-E6/PS4服务器主板BIOS 0

    ASUS华硕 TS500-E6 PS4服务器主板BIOS 0902版 主板驱动
    发表于 12-06 11:54 24次下载

    功能服务器支持的操作系统

    功能服务器支持的操作系统              目前功能服务器支持的操作系统主要
    发表于 01-08 14:49 880次阅读

    光盘镜像服务器支持的操作系统

    光盘镜像服务器支持的操作系统               目前光盘镜像服务器支持
    发表于 01-09 11:48 742次阅读

    浪潮天梭TS850多路服务器

    浪潮天梭TS850是我国国内第一款自主设计的八路服务器,为我国云计算的自主可控奠定了硬件基础。 成功推出国内第一款自主设计的八路服务器天梭TS850。这款
    发表于 03-25 15:18 31次下载

    AMD重新构思服务器科技,现可支持APU服务器软件

    AMD重新构思服务器科技,现可支持APU服务器软件,帮助服务器适应现代数据中心工作负载的新一代开发工具亮相APU13开发者峰会。
    发表于 11-15 10:19 655次阅读

    如何实现TS-7680硬件的支持

      一旦 npm 升级,任何时候它运行都会返回一个错误,说 npm 不支持 node.js v0.10.29,你应该升级到更新的版本。忽略此警告,因为 v0.10.29 是 TS-7680 支持的最新版本,因为较新的版本缺少 A
    的头像 发表于 06-29 14:20 784次阅读
    如何<b class='flag-5'>实现</b>对<b class='flag-5'>TS-7680</b>硬件的<b class='flag-5'>支持</b>

    并发服务器的设计与实现

    并发服务器支持多个客户端的连接,最大可接入的客户端数取决于内核控制块的个数。当使用Socket API时,要使服务器能够同时支持多个客户端的连接,必须引入多任务机制,为每个连接创建一个
    的头像 发表于 04-25 15:35 842次阅读
    并发<b class='flag-5'>服务器</b>的设计与<b class='flag-5'>实现</b>

    gpu服务器是干什么的 gpu服务器与cpu服务器的区别

     相比于传统的CPU服务器,GPU服务器支持同时计算大量相似的计算操作,可以实现更强的并行计算性能。GPU服务器通常配备多个高性能的GPU,
    的头像 发表于 12-02 17:20 1914次阅读