当前位置: 首页 > news >正文

【linux】一种基于虚拟串口的方式使两个应用通讯

在Linux系统中,两个应用之间通过串口(Serial Port)进行通信是一种常见的通信方式,特别是在嵌入式系统、工业自动化等领域。串口通信通常涉及到对串口设备的配置和读写操作。以下是一个基本的步骤指南,说明如何在Linux中设置两个应用以通过串口进行通信:

1. 确认串口设备

首先,你需要确认你的Linux系统上有哪些串口设备。通常,串口设备在/dev目录下,如/dev/ttyS0/dev/ttyUSB0等。你可以使用dmesg命令查看系统启动时串口设备的识别信息,或者使用ls /dev/tty*来列出所有tty设备。

2. 配置串口参数

串口通信需要配置一些参数,如波特率(Baud Rate)、数据位(Data Bits)、停止位(Stop Bits)、校验位(Parity)等。在Linux中,你可以使用stty命令来配置这些参数。例如,要将/dev/ttyS0配置为9600波特率,8数据位,1停止位,无奇偶校验,可以使用以下命令:

 

3. 编写通信程序

接下来,你需要编写两个程序,一个作为发送方,另一个作为接收方。这些程序可以使用Linux系统调用(如open()read()write()close())来操作串口设备。

示例代码(C语言)

发送方(sender.c)

#include <stdio.h> 
#include <stdlib.h> 
#include <fcntl.h> 
#include <unistd.h> 
#include <string.h> int main() { 
int fd = open("/dev/ttyS0", O_WRONLY); 
if (fd < 0) { 
perror("Error opening serial port"); 
return -1; 
} const char *msg = "Hello, Serial Port!"; 
write(fd, msg, strlen(msg)); close(fd); 
return 0; 
}

 

接收方(receiver.c)

#include <stdio.h> 
#include <stdlib.h> 
#include <fcntl.h> 
#include <unistd.h> 
#include <termios.h> #define BUFFER_SIZE 1024 int main() { 
int fd = open("/dev/ttyS0", O_RDONLY | O_NOCTTY | O_NDELAY); 
if (fd < 0) { 
perror("Error opening serial port"); 
return -1; 
} // 清除非阻塞标志 
fcntl(fd, F_SETFL, 0); char buffer[BUFFER_SIZE]; 
int num_bytes = read(fd, buffer, BUFFER_SIZE); 
if (num_bytes < 0) { 
perror("Error reading from serial port"); 
return -1; 
} buffer[num_bytes] = '\0'; 
printf("Received: %s\n", buffer); close(fd); 
return 0; 
}

 

4. 编译和运行程序

使用gcc编译你的C程序,并运行它们。确保发送方在接收方之前运行,或者确保接收方能够处理串口数据的到达。

5. 调试

如果通信没有按预期工作,检查以下几点:

  • 串口设备是否正确配置。
  • 串口参数(如波特率)在两个程序中是否一致。
  • 是否有其他程序正在使用同一个串口。
  • 使用dmesgtail -f /var/log/syslog(取决于你的系统)来查看系统日志,了解是否有错误信息。

通过以上步骤,你应该能够在Linux系统中设置两个应用通过串口进行通信。

另附一段串口测试源码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>int main() {int fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);if (fd == -1) {perror("open_port: Unable to open /dev/ttyS0 - ");return(-1);}struct termios options;tcgetattr(fd, &options);// 设置波特率cfsetispeed(&options, B9600);cfsetospeed(&options, B9600);// 设置数据位数options.c_cflag &= ~CSIZE; // Mask the character size bitsoptions.c_cflag |= CS8;// 设置为无奇偶校验位options.c_cflag &= ~PARENB;options.c_cflag &= ~CSTOPB;// 设置为一个字符一个停止位options.c_cflag &= ~CRTSCTS;// 应用设置tcsetattr(fd, TCSANOW, &options);// 写数据char *write_buffer = "Hello World";write(fd, write_buffer, sizeof(write_buffer));// 读数据char read_buffer[100];read(fd, read_buffer, sizeof(read_buffer));printf("Received: %s\n", read_buffer);close(fd);return 0;
}

相关文章:

【linux】一种基于虚拟串口的方式使两个应用通讯

在Linux系统中&#xff0c;两个应用之间通过串口&#xff08;Serial Port&#xff09;进行通信是一种常见的通信方式&#xff0c;特别是在嵌入式系统、工业自动化等领域。串口通信通常涉及到对串口设备的配置和读写操作。以下是一个基本的步骤指南&#xff0c;说明如何在Linux中…...

并行程序设计基础——并行I/O(3)

目录 一、多视口的并行文件并行读写 1、文件视口与指针 1.1 MPI_FILE_SET_VIEW 1.2 MPI_FILE_GET_VIEW 1.3 MPI_FILE_SEEK 1.4 MPI_FILE_GET_POSTION 1.5 MPI_FILE_GET_BYTE_OFFSET 2、阻塞方式的视口读写 2.1 MPI_FILE_READ 2.2 MPI_FILE_WRITE 2.3 MPI_FILE_READ_…...

性能测试-jmeter脚本录制(十五)

一、jmeter脚本录制&#xff08;不推荐&#xff09;简介&#xff1a; 二、jmeter脚本录制步骤 1、添加代理服务器和线程组 2、配置http代理服务器的端口和目标线程组 3修改本机浏览器代理 4、点击启动 5、每次操作页面前&#xff0c;修改提示文字...

关系型数据库 - MySQL I

MySQL 数据库 MySQL 是一种关系型数据库。开源免费&#xff0c;并且方便扩展。在 Java 开发中常用于保存和管理数据。默认端口号 3306。 MySQL 数据库主要分为 Server 和存储引擎两部分&#xff0c;现在最常用的存储引擎是 InnoDB。 指令执行过程 MySQL 数据库接收到用户指令…...

解锁AI写作新境界:5款工具让你的论文创作事半功倍

在这个数字化飞速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经不再是科幻小说中的幻想&#xff0c;而是实实在在地融入了我们的日常生活。特别是在学术领域&#xff0c;AI技术的介入正在改变传统的论文写作方式。你是否还在为撰写论文而熬夜苦战&#xff1f;…...

一文读懂多组学联合分析产品在医学领域的应用

疾病的发生和发展通常涉及多个层面的生物学过程&#xff0c;包括基因表达、蛋白质功能、代谢物变化等。传统的单一组学研究只能提供某一层面的信息&#xff0c;而多组学关联分析能够综合多个层面的数据&#xff0c;提供更全面、更深入的疾病理解。例如&#xff0c;通过分析患者…...

js react 笔记 2

起因&#xff0c; 目的: 记录一些 js, react, css 1. 生成一个随机的 uuid // 需要先安装 crypto 模块 const { randomUUID } require(crypto);const uuid randomUUID(); console.log(uuid); // 输出类似 9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d 2. 使用 props, 传递参数…...

快速使用react 全局状态管理工具--redux

redux Redux 是 JavaScript 应用中管理应用状态的工具&#xff0c;特别适用于复杂的、需要共享状态的中大型应用。Redux 的核心思想是将应用的所有状态存储在一个单一的、不可变的状态树&#xff08;state tree&#xff09;中&#xff0c;状态只能通过触发特定的 action 来更新…...

活动系统开发之采用设计模式与非设计模式的区别-非设计模式

1、父类Base.php <?php /*** 初始化控制器* User: Administrator* Date: 2022/9/26* Time: 18:00*/ declare (strict_types 1); namespace app\controller; use app\model\common\Token; use app\BaseController; use app\BaseError; use OpenSSL\Encrypt; use app\model…...

JVM面试(六)垃圾收集器

目录 概述STW收集器的并发和并行 Serial收集器ParNew收集器Parallel Scavenge收集器Serial Old收集器Parallel Old收集器CMS收集器Garbage First&#xff08;G1&#xff09;收集器 概述 上一章我们分析了垃圾收集算法&#xff0c;那这一章我们来认识一下这些垃圾收集器是如何运…...

固态硬盘装系统有必要分区吗?

前言 现在的新电脑有哪一台是不使用固态硬盘的呢&#xff1f;这个好像很少很少了…… 有个朋友买了一台新的笔记本电脑&#xff0c;开机之后&#xff0c;电脑只有一个分区&#xff08;系统C盘500GB&#xff09;。这时候她想要给笔记本分区…… 这个真的有必要分区吗&#xf…...

网络安全架构师

网络安全架构师负责构建全面的安全框架&#xff0c;以保护组织的数字资产免受侵害&#xff0c;确保组织在数字化转型的同时维持强大的安全防护。 摩根大通的网络安全运营副总裁兼安全架构总监Lester Nichols强调&#xff0c;成为网络安全架构师对现代企业至关重要&#xff0c;…...

如何本地部署Ganache并使用内网穿透配置公网地址远程连接测试网络

目录 前言 1. 安装Ganache 2. 安装cpolar 3. 创建公网地址 4. 公网访问连接 5. 固定公网地址 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业应届生 今天给大家聊聊如何本地部署Ganache并使用内网穿透配置公网地址远程连接测试网络&#xff0c;欢迎大家点赞 &a…...

算法岗/开发岗 实况

深信服算法岗一面 第一题 树的直径有哪些解法 两次dfs和树形dp&#xff0c;讲了一下树形dp的思路 因为我的简历写的比较少&#xff0c;所以面试官问我一些个人信息和擅长哪方面。 我说&#xff1a;ACM大一下打到大三&#xff0c;然后去考研。dp写的多一点&#xff0c;还有思维…...

Nginx跨域运行案例:云台控制http请求,通过 http server 代理转发功能,实现跨域运行。(基于大华摄像头WEB无插件开发包)

文章目录 引言I 跨域运行案例开发资源测试/生产环境,Nginx代理转发,实现跨域运行本机开发运行II nginx的location指令Nginx配置中, 获取自定义请求header头Nginx 配置中,获取URL参数引言 背景:全景监控 需求:感知站点由于云台相关操作为 http 请求,http 请求受浏览器…...

【数据分析预备】Pandas

Pandas 构建在NumPy之上&#xff0c;继承了NumPy高性能的数组计算功能&#xff0c;同时提供更多复杂精细的数据处理功能 安装 pip install pandas导入 import pandas as pdSeries 键值对列表 # 创建Series s1 pd.Series([5, 17, 3, 26, 31]) s10 5 1 17 2 3 3 26 4 31 dt…...

MATLAB-基于高斯过程回归GPR的数据回归预测

目录 目录 1 介绍 1. 1 高斯过程的基本概念 1.2 核函数&#xff08;协方差函数&#xff09; 1.3 GPR 的优点 1.4. GPR 的局限 2 运行结果 3 核心代码 1 介绍 高斯过程回归&#xff08;Gaussian Process Regression, GPR&#xff09;是一种强大的非参数贝叶斯方法&…...

欧洲国际眼科盛会,中国眼科专家周进斩获六项屈光大奖

2024年第42届欧洲白内障和屈光外科医生协会(ESCRS)大会由世界青光眼协会(WGA)、欧洲白内障和屈光外科医生协会(ESCRS)主办&#xff0c;于2024年9月6日至10日在西班牙巴塞罗那举行。 这场眼科盛会&#xff0c;汇聚了来自全球130多个国家的上万名眼科医学领域的顶尖专家、学者和临…...

MySQL——数据库的高级操作(二)用户管理(2)创建普通用户

在创建新用户之前&#xff0c;可以通过 SELECT 语句查看 mysql.user 表中有哪些用户&#xff0c;查询结果如下&#xff1a; mysql> USE mysql; Database changed mysql> SELECT Host, User, authentication_string FROM mysql.user; ----------------------------------…...

VIT论文阅读

把图片看成一个个16x16的patch堆起来的 摘要 卷积神经网络不是必备的&#xff0c;一个纯transformer表现也是非常好的 transformer&#xff1f;2500天tpu v3 介绍 大规模上预训练&#xff0c;小规模任务数据集上微调。扩大模型时候还没观察到瓶颈&#xff08;还没出现过拟合…...

Python编程入门必备:def关键字与函数参数

在Python编程中&#xff0c;函数是组织代码、实现代码复用和模块化的基础单元。通过函数&#xff0c;可以将复杂的操作封装成独立的代码块&#xff0c;提高代码的可读性和维护性。本文将详细介绍Python中函数的定义和使用&#xff0c;包括def关键字、函数参数的各种类型以及函数…...

LiveKit的agent介绍

概念 LiveKit核心概念&#xff1a; Room&#xff08;房间&#xff09;Participant&#xff08;参会人&#xff09;Track&#xff08;信息流追踪&#xff09; Agent 架构图 ​ 订阅信息流 ​ agent交互流程 客户端操作 加入房间 房间创建方式 手动 赋予用户创建房间的…...

青龙面板 升级 及其 依赖更新修复 检测and日志删除等

青龙版本升级 先关闭服务 cd qinglong目录 docker-compose down 关闭 docker pull whyour/qinglong:版本号 //版本号自行选择&#xff0c;如果是为了修复错误&#xff0c;建议版本微升&#xff0c;不然就直接latest 启动 docker-compose up -d 进入容器&#xff0…...

坐牢第三十七天(Qt)

作业&#xff1a; 使用qt做一个闹钟 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPixmap> #include <QBitmap> #include <QLabel> //标签类 #include <QLineEdit> //行编辑器类 #include <QPushBu…...

Vidu 全球首发「主体参照」新功能,一键同步角色特征;GPT-4o 实时音频项目负责人离职创业丨 RTE 开发者日报

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…...

电子地图的主要功能与应用

电子地图&#xff0c;即数字地图&#xff0c;是利用计算机技术&#xff0c;以数字方式存储和查阅的地图。它不仅继承了传统纸质地图的基本功能&#xff0c;还通过现代科技手段实现了诸多创新应用。以下是电子地图的主要功能与应用&#xff1a; 一、主要功能 快速存取与显示&…...

基于Java+SpringBoot+Vue+MySQL的西安旅游管理系统网站

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于SpringBootVue的西安旅游管理系统网站【附源码文档】、…...

简单介绍 NVIDIA推出的图形处理单元(GPU)架构“安培架构“

概念 "安培架构"&#xff08;Ampere Architecture&#xff09;是 NVIDIA 推出的一款图形处理单元&#xff08;GPU&#xff09;架构&#xff0c;它是继图灵架构之后的下一代产品。安培架构最初在2020年发布&#xff0c;以其高性能和高效率而闻名&#xff0c;广泛应用…...

Qiskit:量子计算的Python工具包

Qiskit是由IBM开发的开源量子计算软件开发工具包&#xff0c;它提供了一套完整的工具&#xff0c;用于量子电路的设计、模拟、优化和执行。Qiskit支持量子算法的开发&#xff0c;并且可以与IBM的量子计算机硬件进行交互。 Qiskit的主要特点 量子电路设计&#xff1a;Qiskit允…...

Python——贪吃蛇

以下是一个简单的贪吃蛇游戏的Python代码示例&#xff1a; import pygame import time import random# 初始化 Pygame pygame.init()# 定义颜色 BLACK (0, 0, 0) WHITE (255, 255, 255) RED (255, 0, 0) GREEN (0, 255, 0) BLUE (0, 0, 255)# 设置屏幕尺寸 screen_width …...