至少可以说,PiSquare附带的原始代码非常简陋!愚蠢的是,我曾假设PiSquare会附带一些允许与 HAT 交互的可配置软件。有点像,但太基础了。
这个项目的目的是调查和编写 Raspberry Pi 和PiSquare的代码。我选择了我拥有的最简单的 HAT 之一——PiHut Status 板。它由 5 个按钮和 10 个 LED(5 个红色和 5 个绿色)组成。我选择的任务是控制机舱中的一些灯和插头,并查看每个灯和插头的状态。灯是 Philips Hue,插头是 TP-Link——两者都有 Python 库(phue和kasa)。
PiSquare 上已经安装了 MicroPython,因此您应该可以立即复制此代码。
服务器软件将读取配置文件(TOML格式)。您应该能够定义多个 HAT 配置,因此您可以将多个 PiSquares 与一个 Pi 服务器(未经测试)一起使用。
这三个值(psalias、类型和主机)定义了每个按钮的“名称”、它控制的设备类型以及每个“处理程序”中使用的“主机”值。
每个 HAT 都需要自己的库来处理特定 HAT 的输入/输出。在启动“侦听器”代码之前,服务器将为每个 HAT 实例化一个类对象。
“侦听器”代码(希望如此!)是通用的,仅用于处理来自 PiSquare 的输入。目前,该流量始终从 PiSquare 开始,对每个请求的响应都会发送回 PiSquare。我希望稍后扩展它,这样它也可以从 Pi 开始对话。
PiHutStatus 类设置并处理来自 PiSquare 的所有消息。该定义由 configuration.toml 文件提供。如果您编写自己的 HAT 处理程序代码,则需要确保包含“handlerequest”方法,该方法接收从 PiSquare 发送的消息并执行您想要的任何操作!
main.py 中的 PiSquare 客户端代码主要是特定于 HAT 的。但是,它确实包含一段通用代码,用于处理 PiSquare 与 Wi-Fi 的连接以及与 Pi 之间的消息发送/接收。
Python 很好地处理了 Python 字典和 JSON 之间的转换,所以我使用 JSON 在 PiSquare 和 Pi 之间发送信息。
一般格式为:
{'client': 'clientname', 'payload': {payload}}`
有效负载的结构取决于所需的“操作”。对于此 HAT,它是“requeststatus”或“changestate”。
'changestate' 动作的格式,它打开/关闭灯/插头或切换状态,是:
{'action': 'changestate',
'button': 'whichbutton',
'status': 'on/off/toggle'}
“requeststatus”动作的格式,请求灯/插头的当前状态(开或关)
{'action': 'requeststatus',
'button': 'whichbutton'}
对于您自己的 HAT,您可以根据需要定义有效负载!
PiSquare并不完美,但经过一些争论,我已经定型并能够处理一顶简单的帽子,并为通信端提供了一堆可重用的代码。Comms 仍然需要一些工作(例如从 Pi 初始化对话),但希望这是一个足够好的开始,让大多数人开始使用大多数 HAT。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !