OSCUP
是一种开源 UART 协议,专为与 ESP32 ARM 处理器配合使用而设计。详细记录的代码有助于弄清楚如何在 UART 端口上实现自定义协议。使用此协议,您可以传输和接收由固定前导码跟踪的数据。它为每个发送的数据包实现 ACK 和 NACK,以管理错误或丢失的数据包。
它依赖于 Espressiff 提供的原始库,例如 /device/uart.h 用于连接低级硬件和功能。该协议提供两个功能write
,read
用于发送和接收数据。当您创建一个新的 Oscup 对象时,您需要向它传递一个 ID,该 ID 用于跟踪发送数据包的设备。可选地,Oscup 对象可以被实例化,指定 UART 端口和相关的 UART TX 引脚和 UART RX 引脚。默认情况下,通信发生在 UART 0,或者更确切地说是 USB 端口。
事实上,可以使用 OSCUP 进行计算机和 ESP32 之间或两个 ESP32 之间的通信。
每次协议在 UART 上写入数据时,它都会在数据包中插入一条命令。该命令是强制性的,否则您可能会问自己为什么要使用协议(只需使用 arduino Serial)。显然,在接收方,您必须区分接收到的命令。有可用的 4 个主要命令:
SHARE
:此命令表示发送方只想与接收方共享此数据(出于次要原因)。如果您只想在其他设备上打印数据,则可以使用它。CONFIRM
:此命令表示将发送的数据是操作的结果(例如,我们按下设备 1 上的按钮,我们将数据发送到设备 2,我们希望设备 2 不仅打印此数据,而且存储它们).ACK
: 用于告诉发送方,接收方已经收到数据包NACK
: 用于告诉发送方,接收方还没有收到数据包;发件人将尝试再次发送 显然,您可以配置您喜欢执行每个命令的操作。我们建议不要使用 ACK 和 NACK,至于其他两个,前面的指示只是我们为使用这两个命令定义的指南。另外,你可以在arduino上配置新命令(command = uint8_t),直接在write函数中发送begin
: 初始化 UART 参数并将其转发给控制硬件。必须在 void setup() 中调用它。它以波特率作为唯一的输入参数,它将决定通信波特率。write
:写函数接受一个命令“用户定义”,有效负载的长度和有效负载,其长度固定为 40 字节。此函数将此数据写入 UART 并返回错误代码。read
:它读取传入的数据并将它们插入 packet_t 结构中,该结构在 .h 文件中定义。如果一切正常,它返回读取缓冲区的长度,否则返回负错误。get_timer
: 返回定时器的计数器get_APB_clk
: 返回 APB 的频率。通常 APB 用于设置嵌入式处理器上的外设频率。我们是 Daniel 和 Riccardo,都是大学的 AI 学生。我们开发了这个协议来从 ESP32 获取数据来做 AI 的事情(在我们的 Git Repo 上查看 FiremanSam)。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !