小编JBa*_*mer的帖子

通过串口发送什么

如果这是一个非常模糊的问题,我很抱歉,但我似乎无法正确地为此问题找到其他人.主要问题是,一旦在两个设备之间建立了串行连接,您如何使用该连接实现双向通信?

一个例子可能有帮助.假设你有一个温度传感器作为嵌入式设备,使用微控制器和用C语言编写的固件.你有一个从传感器到计算机的串口连接,以及计算机上的一些软件与C接口,比如C++应用程序.我理解如何在两侧设置串口并在两个设备之间读写单字节数据.真正的问题是你使用什么约定来在两个设备之间进行通信?

假设您的要求如下:

1.)您需要能够发送命令从嵌入式设备读取单个温度读数并将其发送到计算机以进行显示.

2.)您需要发送命令以使传感器启动和停止流温度值.

3.)您需要一组命令来设置固件中的各个方面,例如流速率,启动时的流,闪烁LED等.

4.)您需要某种结构来将复杂形式的数据发送到计算机,可能是一组电池电压读数.

如何实现这一目标

似乎有几种方式人们倾向于这样做:

简单字符串API:

从处理第三方传感器开始,最常见的是使用简单的基于字符串的API,使得用于启动和停止流的命令可以分别是"SS,1\r"和"SS,0\r".在这种情况下,你必须从串口读取,直到得到"\ r"字符,然后解析你得到的数据,看它是否有一个命令(逗号左边)和参数(逗号右边).这适用于上面的场景1到3,但不会使场景4变得非常简单.

JSON字符串API:

这与上面的相同,但不是将参数作为简单值传递,而是传递可以表示复杂数据结构的JSON对象.因此,您可以将电池电压阵列作为JSON阵列发送.该方法似乎涵盖了上述所有用例1-4.但是JSON发送字符串,使用嵌入式c解析起来比较困难.它可以为计算机方面创造奇迹,它可以使用更高级别的语言,例如具有用于读取JSON数据的库的Java.

包样式API:

这是我们接受的解决方案,我现在有点后悔.它涉及为我们发送的每个数据发送结构化的字节数约定.数据包结构如下所示.

[0xFF的] [0xFF的] [ID] [CMD] [D0] [D1] [D2] [D3] [D4] [D5] [D6] [D7] [0xEE] [0xEE] [0xEE]

通过这种结构,我们发送一个页眉和页脚(0xFF和0xEE)来验证数据包完整性,一个用于发送顺序数据包的id(用于传输数据数据),一个数据数组,我们可以用它来打包long,浮点数,整数等和一个命令字节(CMD),设备可以使用它来确定如何解析数据有效载荷(D0-D7).

所以我问,通过串口进行通信的最佳方式是什么?我还有其他方法吗?我最近做了很多web开发,看起来JSON是一个很好的抽象传输系统,但它有其局限性,因为你必须做更多的字符串解析,这在固件方面有点复杂.

json serial-port packet

5
推荐指数
2
解决办法
3708
查看次数

标签 统计

json ×1

packet ×1

serial-port ×1