香橙派串口通信定义帧头针尾python、c语言

一、前言

我没有选择使用wiringpi库进行串口通信

用的是serial库,但是一样可以通信的,没啥大问题

二、实现方法

(一)安装serial库:

   

  pip install pyserial

 (二)查看串口:ls /dev/ttyS*

(三)打开串口 :

没打开的就命令打开串口:

orangepi-config   

System-》Hardware-》uart        基本方法,不过多描述了,官方文档有开启方法的图片描述。

 针头尾都可以改动,串口就改/dev/ttyS9

python代码:
 

import serial
import time

BUFFER_SIZE = 128

def main():
    ser = serial.Serial("/dev/ttyS9", 9600)
    ser.flushInput()

    while True:
        if ser.in_waiting > 0:
            cmd = ser.readline().decode("utf-8").strip()
            print( cmd)

            start = cmd.find("head")
            end = cmd.find("tail")

            if start != -1 and end != -1 and start < end:
                data = cmd[start + 4:end]
                print("data:", data)
        

if __name__ == "__main__":
    main()

现象:

c代码:

       前提是你先安装好wiringpi这个库,额官方文档有讲如何安装wiringpi我不多描述

#include <wiringPi.h>
#include <wiringSerial.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#define BUFFER_SIZE 128

int main() {
    int fd;
    char cmd[BUFFER_SIZE] = {'\0'};
    int n_read;

    wiringPiSetup();
    fd = serialOpen("/dev/ttyS9", 9600);

    while (1) {
        while (serialDataAvail(fd) <= 0);

        n_read = read(fd, cmd, sizeof(cmd));
        printf("cmd:%s\n", cmd);

        char *start = strstr(cmd, "head");
        char *end = strstr(cmd, "tail");
        
        if (start != NULL && end != NULL && start < end) {
            char data[BUFFER_SIZE];
            memset(data, '\0', sizeof(data));
            strncpy(data, start + 4, end - start - 4);
            printf("Received data:%s\n", data);
        } else {
            printf("Invalid data received.\n");
        }
        memset(cmd, '\0', sizeof(cmd));
    }
    serialClose(fd);
    return 0;
}

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: LabVIEW是一种图形化编程语言,可用于编写和执行数据采集、处理和控制等各种应用程序。串口通信是一种通过串行接口进行数据传输的方式,常用于与外部设备(如传感器、执行器等)进行数据交互。 帧和帧尾是在串口通信中用于标识数据帧起始和结束的特定字节序列。在数据传输过程中,为了确保数据的完整性和准确性,通常会在每个数据帧的起始位置添加一个帧,并在帧尾位置添加一个帧尾。 帧可以是一个或多个字节的特定值,用于标识数据帧的开始。在接收端,可以通过检测到帧来确认数据传输的开始位置。帧的选择需要根据具体通信协议和应用需求来确定。 帧尾也是一个或多个字节的特定值,用于标识数据帧的结束。在接收端,可以通过检测到帧尾来确认数据传输的结束位置。帧尾的选择需要确保其与帧不会在数据中出现,以避免误判。 添加帧和帧尾可以提高数据传输的可靠性和稳定性。在LabVIEW中,可以使用串口通信模块来进行串口通信,并通过相应函数和工具来实现帧和帧尾的添加和检测。 总而言之,LabVIEW串口通信中的帧和帧尾用于标识数据帧的起始和结束。通过在数据帧的起始和结束位置添加特定的字节序列,可以提高数据传输的准确性和可靠性。 ### 回答2: LabVIEW是一款图形化编程语言和开发环境,用于实现数据采集、控制和数据分析等应用。串口通信是LabVIEW中常用的一种通信方式。帧和帧尾是在串口通信中用来标识数据帧的起始和结束的特殊字符或字节序列。 在LabVIEW中,可以利用串口通信功能模块来实现串口通信。首先需要指定串口的相关参数,包括波特率、数据位、停止位和奇偶校验等。然后,通过串口读取和写入模块,可以实现串口数据的接收和发送。 而帧和帧尾用于在数据传输中标识一个完整数据帧的开始和结束位置。帧通常是一个特定的字符或字节序列,用来告诉接收方数据帧的开始。帧尾则是标识一个数据帧的结束位置,也是一个特定的字符或字节序列。 在LabVIEW中,可以通过字符串操作和逻辑运算等方法,对接收到的数据进行解析,找到帧和帧尾的位置,从而提取出完整的数据帧。可以利用字符串操作函数,如Find Pattern和Concatenate Strings等,来定位帧和帧尾,并取出中间的数据内容。 总之,通过LabVIEW中的串口通信功能模块,结合帧和帧尾的定义,可以实现串口通信协议中的数据帧的解析和处理。这为数据的可靠传输和应用开发提供了便利。 ### 回答3: LabVIEW是一种图形化编程环境,可用于实现各种应用程序。串口通信是指通过串行接口将数据从一个设备传输到另一个设备。帧和帧尾是在数据传输中用于标识数据帧起始和结束的特殊字节序列。 在LabVIEW中实现串口通信的方法如下: 1. 打开串口:使用LabVIEW提供的串口通信函数,选择要使用的串口和波特率,并打开串口。 2. 发送数据:使用串口写函数将要发送的数据写入串口缓冲区,等待数据传输完成。 3. 接收数据:使用串口读函数读取串口缓冲区中的数据,将其存储到变量中以供后续处理。 4. 关闭串口:使用串口关闭函数关闭已打开的串口。 帧和帧尾是在数据传输中起到标识数据帧起始和结束的作用。通常,帧和帧尾是预先定义的固定字节序列,用于确定数据传输的开始和结束位置。在LabVIEW中,可以通过在发送数据之前加入帧,并在接收数据时检测帧和帧尾的方式来实现对数据帧的识别和解析。通过这种方式,可以确保接收到完整的数据帧。 总而言之,LabVIEW可以通过串口通信函数实现对串口的打开、发送和接收操作,而帧和帧尾可以用于标识数据帧的起始和结束位置,以确保数据的完整传输。这样,我们就能够在LabVIEW中实现串口通信中的帧和帧尾的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式学不会不改名

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值