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

    文章

    8099

    浏览量

    82483
  • GPIO
    +关注

    关注

    16

    文章

    1132

    浏览量

    50553
收藏 人收藏

    评论

    相关推荐

    linux服务器和windows服务器

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

    VPS服务器

    独占资源为什么用户往往会钟情于独立主机服务呢? 最重要的原因之一就是对服务器有完全的控制权并且不受外界其他因素的干扰. 而VPS主机则具有同样的功能! VPS实现了两个隔离,软件和硬件的隔离以及客户
    发表于 08-01 10:30

    服务器特点

    服务器的功能相对于PC机来说复杂许多,不仅指其硬件配置,更多的是指其软件系统配置。服务器实现如此多的功能,没有全面的软件支持是无法想象的。但是软件系统一多,又可能造成
    发表于 08-02 10:42

    iLink服务器软件

    iLink商用服务器特点:1、支持高并发,高稳定的单机和集群部署,单台支持50万在线,2万并发,消息毫秒级延迟;2、服务器支持SSL,
    发表于 07-07 10:56

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

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

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

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

    终端服务器怎么工作?

    支持动态IP(DHCP)和静态IP,支持网关和代理服务器,可以通过Internet传输数据。提供数据双向透明传输,实现串口转TCP/IP功能,用户不需要对原有系统做任何修改。
    发表于 09-18 09:02

    如何实现服务器自动推送消息?

    有个想法,想和大家探讨一下如何实现。功能:自己在本地写个日志,第二天自动推送到手机上想法:想法不成熟,因为知识面太少了,目前想的是自己在本地电脑写个日志,上传给服务器服务器第二天定时推送到指定邮箱上。想知道如何
    发表于 03-16 11:34

    如何实现SSH服务器

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

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

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

    TCP服务器创建过程

    用过正点原子LWIP服务器例程开发的朋友可能知道,例程的设计是只支持一个客户端连接的,但实际应用中往往需要用到多客户端连接。下面是在正点原子扩展例程网络实验14 NETCONN_TCP 服务器
    发表于 08-24 08:03

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

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

    如何实现树莓派定时拍摄照片上传到服务器的功能呢

    文章目录一、 概述二、相关环境及使用材料说明三、具体实现过程1.服务器代码2. 树莓派客户端代码3.STM32部分代码四、演示效果图一、 概述采用树莓派4B + 官方摄像头+阿里云服务器
    发表于 02-16 06:46

    浪潮天梭TS850多路服务器

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

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

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