很抱歉如果我的问题不够清晰,我无法正确表达它以找到其他遇到同样问题的人。主要问题是,一旦两个设备之间建立了串行连接,如何使用该连接实现双向通信?
举个例子,假设你有一个嵌入式设备作为温度传感器,使用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进行解析。对于计算机端而言,它将非常实用,因为它可以使用高级语言(如Java)来读取JSON数据的库。
分组式API:
这是我们接受并且我现在有些后悔的解决方案。它涉及为我们发送的每个数据发送结构化的字节包约定。包结构如下所示:[0xFF][0xFF][ID][CMD][D0][D1][D2][D3][D4][D5][D6][D7][0xEE][0xEE][0xEE]
使用这种结构,我们发送头和尾(0xFF和0xEE)来验证数据包的完整性,一个ID用于发送顺序数据包(用于传输数据数组),一个数据数组,我们可以使用它来打包长整型,浮点型,整型等,以及一个命令字节(CMD),设备可以使用它来确定如何解析数据负载(D0-D7)。
那么我想问,串行端口通信最受欢迎的方式是什么?还有其他我没有考虑到的方式吗?最近我一直在做Web开发,JSON似乎是一个不错的抽象传输系统,但它也有其局限性,因为您必须进行更多的字符串解析,这在固件方面有些复杂。
举个例子,假设你有一个嵌入式设备作为温度传感器,使用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进行解析。对于计算机端而言,它将非常实用,因为它可以使用高级语言(如Java)来读取JSON数据的库。
分组式API:
这是我们接受并且我现在有些后悔的解决方案。它涉及为我们发送的每个数据发送结构化的字节包约定。包结构如下所示:[0xFF][0xFF][ID][CMD][D0][D1][D2][D3][D4][D5][D6][D7][0xEE][0xEE][0xEE]
使用这种结构,我们发送头和尾(0xFF和0xEE)来验证数据包的完整性,一个ID用于发送顺序数据包(用于传输数据数组),一个数据数组,我们可以使用它来打包长整型,浮点型,整型等,以及一个命令字节(CMD),设备可以使用它来确定如何解析数据负载(D0-D7)。
那么我想问,串行端口通信最受欢迎的方式是什么?还有其他我没有考虑到的方式吗?最近我一直在做Web开发,JSON似乎是一个不错的抽象传输系统,但它也有其局限性,因为您必须进行更多的字符串解析,这在固件方面有些复杂。