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

通过Linux串口实现树莓派与电脑通信

目录

一  串口说明

二  USB—TTL模块

● usb-ttl模块接口 

三  串口通信常用的API

四  修改串口的配置文件 

五  串口通信代码验证

● 发送一个字符/字符串到串口

● 树莓读取串口数据(字符)

● 代码拓展(双方)


一  串口说明

我在基于全志H6实现Linux串口通信这篇文章中也有详解介绍:点击查看详细内容

串口通信经常使用在多机通信中。不管是软件还是硬件,都存在模块化的编程思想。

● 半双工:A传数据给B,B只接收数据,什么也不能做;

● 全双工:A传数据给B的同时,B也能给A传输数据;

实现串口多机通信的协议设置:串口号,数据格式和波特率。

● 串口号:CH340软件来接收或生成串口号;

● 波特率:好比人的语速,常用的115200,9600;

● 数据格式:可以比作人交流的语种。数据位;奇偶校验位;停止位。

类似于人和人在交流沟通时,都必须使用同一种语言和语速,这样通信双方才能明白对方的内容。

二  USB—TTL模块

作用:将通信双方识别的电平转换为通信电平。

● 我们常用的单片机,引出来的串口,如果不加其他的接口电路,出来的信号就是TTL电平;

● 如果需要看串口的打印信息,一般是需要接一个上位机的,常规的就是电脑,而现在的电脑一般的通信接口只有USB;

● 对于USB口而言,是没法和TTL串口直接通信的,因为接口不匹配,电平也不匹配,这时候就需要借助其它设备来实现接口与电平的转换;

● 常规操作是使用CH340这种芯片所制作的USB转串口模块,这个模块就可以实现TTL串口和USB之前的转换。

● usb-ttl模块接口 

● RXD :数据输入引脚,数据接收;

● TXD :数据发送引脚,数据发送;

接线说明:如图 

在树莓派接入USB-TTL模块时,除了交叉连接RXD和TXD两端,最好在接入GND,保持电平的稳定。

三  串口通信常用的API

头文件:#include <wiringSerial.h>

① int serialOpen (char *device, int baud)

作用打开并初始化串口

● device:串口的地址,在Linux中就是设备所在的目录。默认一般是"/dev/ttyAMA0"。

● baud:波特率,

● 返回值:正常返回文件描述符fd,否则返回-1失败。

② void serialClose (int fd)

作用关闭fd关联的串口

● fd:文件描述符

③ void  serialPutchar (int fd, unsigned char c)

作用发送一个字节的数据到串口

● fd:文件描述符

● c:要发送的字符数据

④ void  serialPuts (int fd, char *s)

作用发送一个字符串到串口

● fd:文件描述符

● s:发送的字符串,字符串要以'\0'结尾

⑤ int   serialDataAvail (int fd)

作用获取串口缓存中可用的字节数。

● fd:文件描述符

● 返回:串口缓存中已经接收的,可读取的字节数,-1代表错误

⑥ int serialGetchar (int fd)

作用从串口读取一个字节数据返回。

说明如果串口缓存中没有可用的数据,则会等待10秒,如果10后还有没,返回-1。所以,在读取前,做好通过serialDataAvail判断下。

● fd:文件描述符

● 返回值:读取到的字符

四  修改串口的配置文件 

在使用串口通信之前,一定要修改相关配置文件,不然容易出错。

cd /boot/   :进入系统根目录中的boot目录;

sudo vim cmdline.tx    :用超级用户权限打开cmdline.tx文件,内容如图:

③ 删除圈中的部分,保存退出;

sudo reboot重启即可 

五  串口通信代码验证

● 发送一个字符/字符串到串口

#include <stdio.h>
#include <wiringSerial.h>//串口头文件
#include <wiringPi.h>int main()
{int fd; //文件描述符if(wiringPiSetup() == -1){ //初始化库printf("init wiringPi error!\n");return -1;}fd = serialOpen("/dev/ttyAMA0",115200);//初始/打开/创建串口,并设置波特率while(1){//      serialPutchar(fd,'a'); //发送一个字符serialPuts(fd,"hello pi!\r\n"); //发送一个字符串到串口,\r\n串口中换行delayMicroseconds(1000000); //延时设置1000000us = 1s,每隔1s就发送}return 0;
}

● 树莓读取串口数据(字符)

#include <stdio.h>
#include <wiringPi.h>
#include <wiringSerial.h>int main()
{int fd;int cmd;if(wiringPiSetup() == -1){printf("init wiringPi error!\n");return -1;}fd = serialOpen("/dev/ttyAMA0",115200);while(serialDataAvail(fd) != -1){ //初始化serialDataAvail()函数cmd = serialGetchar(fd);  //cmd接收该函数的返回值,一个字符printf("get data:%c\n",cmd);}serialClose(fd);//退出return 0;
}

● 代码拓展(双方)

#include <stdio.h>
#include <wiringPi.h>
#include <wiringSerial.h>int main()
{int fd;int cmd;if(wiringPiSetup() == -1){printf("init wiringPi error!\n");return -1;}fd = serialOpen("/dev/ttyAMA0",115200);while(serialDataAvail(fd) != -1){ //初始化serialDataAvail()函数cmd = serialGetchar(fd);  //cmd接收该函数的返回值,一个字符printf("get data:%c\n",cmd);if(cmd == '2'){serialPuts(fd,"hello 2\r\n");//串口中换行\r\n结合使用}if(cmd == '3'){ //树莓收到字符3时,就发送hello 3这个字符串到串口serialPuts(fd,"hello 3\r\n");}if(cmd == '4'){serialPuts(fd,"hello 4\r\n");}}serialClose(fd);//退出return 0;
}

相关文章:

通过Linux串口实现树莓派与电脑通信

目录 一 串口说明 二 USB—TTL模块 ● usb-ttl模块接口 三 串口通信常用的API 四 修改串口的配置文件 五 串口通信代码验证 ● 发送一个字符/字符串到串口 ● 树莓读取串口数据&#xff08;字符&#xff09; ● 代码拓展&#xff08;双方&#xff09; 一 串口…...

全球变暖 蓝桥杯 178

题目描述你有一张某海域 NxN 像素的照片&#xff0c;"."表示海洋、"#"表示陆地&#xff0c;如下所示&#xff1a;........##.....##........##...####....###........其中"上下左右"四个方向上连在一起的一片陆地组成一座岛屿。例如上图就有 2 座…...

Java现在好找工作吗?

Java到2023年已经28岁了&#xff0c;可能你会怀疑它是否还一如当年一样的强大&#xff0c;在应用层领域独占鳌头。但是基于Java庞大的市场占有率和需求&#xff0c;它依然在保持着更新迭代&#xff0c;依然是最常用的底层开发语言&#xff0c;基于其安全性、开放性、稳定性和跨…...

Flink 第1章 基础介绍和特性

一 Flink概念 1.1 Flink的概念 Flink是一个框架和分布式处理引擎&#xff0c;用于对无界和有解数据流进行状态计算。如下图所示&#xff1a; 1.2 Flink的应用场景 1.3 Flink的目标 1.高吞吐量 2.低延迟 3&#xff0c;结果的准确性和良好的容错性。 1.4 Flink与spark的区别…...

docker 安装 nginx无坑版

一. 拉取镜像 docker pull nginx二. 创建挂载目录 mkdir -p /usr/local/nginx/conf mkdir -p /usr/local/nginx/log mkdir -p /usr/local/nginx/html三. 从nginx容器里复制nginx的配置文件到主机里 创建个容器 docker run --name nginx -p 80:80 -d nginx将容器内的配置文件…...

自己动手做chatGPT:向量的概念和相关操作

chatGPT的横空出世给人工智能注入一针强心剂&#xff0c;它是历史上以最短时间达到一亿用户的应用。chatGPT的能力相当惊人&#xff0c;它可以用相当流利的语言和人对话&#xff0c;同时能够对用户提出的问题给出相当顺畅的答案。它的出现已经给各个行业带来不小冲击&#xff0…...

【洛谷刷题】蓝桥杯专题突破-深度优先搜索-dfs(7)

目录 写在前面&#xff1a; 题目&#xff1a;P1596 [USACO10OCT]Lake Counting S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述&#xff1a; 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 解题思路&#xff1a; …...

Python嵌套函数(Nested function)和闭包(closure)

Python嵌套函数&#xff08;Nested function&#xff09;和闭包&#xff08;closure&#xff09; 闭包&#xff08;closure&#xff09;是建立在嵌套函数基础上的&#xff0c;是一种特殊的嵌套函数结构。 先看嵌套函数&#xff08;Nested function&#xff09;。 Python允许…...

【实战】React 必会第三方插件 —— Cron 表达式生成器(qnn-react-cron)

文章目录一、引子二、配置使用1.安装2.使用&#xff08;1&#xff09;直接调用&#xff08;2&#xff09;赋值到表单&#xff08;Form&#xff09;&#xff08;3&#xff09;自定义功能按钮&#xff08;4&#xff09;隐藏指定 Tab&#xff08;5&#xff09;其他三、常见问题及解…...

C# 教你如何终止Task线程

我们在多线程中通常使用一个bool IsExit类似的代码来控制是否线程的运行与终止&#xff0c;其实使用CancellationTokenSource来进行控制更为好用&#xff0c;下面我们将介绍CancellationTokenSource相关用法。C# 使用 CancellationTokenSource 终止线程使用CancellationTokenSo…...

整合SpringCache

整合SpringCache 1、引入依赖cache还有redis <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId> </dependency>2、写配置 spring:cache:type: redis3、测试使用缓存 Cache…...

05 - 环境变量编程

---- 整理自狄泰软件唐佐林老师课程 查看所有文章链接&#xff1a;&#xff08;更新中&#xff09;Linux系统编程训练营 - 目录 文章目录1. 初识环境变量1.1 问题1.2 main函数&#xff08;默认进程入口&#xff09;1.3 什么是环境变量&#xff1f;1.4 环境表的构成1.5 思考2. 深…...

vue3后台管理系统

后面可参考下&#xff1a;vue系列&#xff08;三&#xff09;——手把手教你搭建一个vue3管理后台基础模板 以下代码项目gitee地址 文章目录1. 初始化前端项目初始化项目添加加载效果配置 vite.config.js2. 使用路由安装路由配置路由配置别名和跳转安装pathvite.config.jsjsco…...

掷骰子式的乐趣:探究C语言生成随机数的奥秘

掷骰子式的乐趣&#xff1a;探究C语言生成随机数的奥秘一、引言二、C标准库的rand函数三、srand函数的使用四、基于时间的种子生成五、高质量随机数的应用一、引言 C语言中生成随机数是一项非常重要的功能&#xff0c;因为许多现代应用程序需要使用随机数。随机数可以用于密码…...

一线大厂软件测试常见面试题1500问,背完直接拿捏面试官,

三、测试理论 3.1 你们原来项目的测试流程是怎么样的? 我们的测试流程主要有三个阶段&#xff1a;需求了解分析、测试准备、测试执行。 1、需求了解分析阶段 我们的SE会把需求文档给我们自己先去了解一到两天这样&#xff0c;之后我们会有一个需求澄清会议&#xff0c; 我…...

小迪安全day12WEB漏洞-SQL注入之简要SQL注入

小迪安全day12WEB漏洞-SQL注入之简要SQL注入 注入产生原理详细分析 可控变量带入数据库查询变量未存在过滤或过滤不严谨 连接符区分 and是sql语句连接符&#xff0c;&是uel参数连接符 and 11是注入语句&#xff0c; &是添加一个新变量 数据库内容 数据库A 网站…...

自动化测试学习(七)-正则表达式,你真的会用吗?

目录 一、正则表达式在python中如何使用 二、用正则表达式匹配更多模式 三、常用字符分类的缩写代码 总结 所谓正则表达式&#xff08;regex&#xff09;&#xff0c;就是一种模式匹配&#xff0c;学会用正则匹配&#xff0c;就可以达到事半功倍的效果。 一、正则表达式在…...

验证码——vue中后端返回的图片流如何显示

目录 前言 一、p调用接口获取验证码 canvas画布渲染&#xff1f; 二、后端返回图片&#xff08;图片流&#xff09;&#xff0c;前端显示 1.blob 2.arraybuffer 总结 前言 登录界面经常会有验证码&#xff0c;验证码的实现方式也有很多&#xff0c;我目前做过以下两种&…...

聚观早报 | 拼多多驳斥Google的指控;80%美国人工作将被AI影响

今日要闻&#xff1a;拼多多驳斥Google“恶意软件”的指控&#xff1b;80%美国人工作将被AI影响&#xff1b;iPhone 15 Pro设计图上热搜&#xff1b;贾扬清离职阿里投身AI大模型创业&#xff1b;OPPO Find X6 系列发布拼多多驳斥Google“恶意软件”的指控 3 月 21 日&#xff0…...

define,typedef,inline 的区别

define 1.用于在代码中创建宏定义&#xff0c;将一个标识符替换为一个表达式或语句。例如&#xff1a; #define PI 3.14159 #define SQUARE(x) ((x) * (x))这样&#xff0c;程序中所有出现的 PI 都将被替换为 3.14159&#xff0c;SQUARE(x) 则被替换成了 (x) * (x)。 使用 #…...

告别繁琐!3步解锁教育资源获取新方式,效率提升10倍的高效工具

告别繁琐&#xff01;3步解锁教育资源获取新方式&#xff0c;效率提升10倍的高效工具 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具 项目地址: https://gitcode.com/GitHub_Trending/tc/tchMaterial-parser 在数字化学习与教学资源管理…...

墨语灵犀处理时序数据实战:基于LSTM的预测模型辅助开发

墨语灵犀处理时序数据实战&#xff1a;基于LSTM的预测模型辅助开发 最近在做一个销量预测的项目&#xff0c;团队里新来的同事看着一长串的时序数据和复杂的LSTM模型代码&#xff0c;有点无从下手。他问我&#xff1a;“这些参数到底该怎么调&#xff1f;预测出来的曲线波动这…...

失真度测量仪校准 失真度测量仪校准检定装置应用方案 失真度仪校准器 失真度仪检定装置

在电子测量、计量检定、设备运维及科研生产等领域&#xff0c;失真度仪是检测信号纯净度的核心仪器&#xff0c;其测量精度直接决定产品质量管控、设备运维可靠性及科研数据准确性。但实际应用中&#xff0c;传统校准设备普遍存在精度不足、操作繁琐、场景适配性差、数据管理不…...

实时与非实时操作系统核心技术对比与应用解析

实时与非实时操作系统技术解析1. 操作系统分类概述现代计算机系统根据任务调度机制的不同&#xff0c;主要分为实时操作系统(RTOS)和分时操作系统两大类。这两类系统在任务调度、资源分配和响应机制等方面存在本质区别&#xff0c;适用于不同的应用场景。1.1 实时操作系统定义实…...

不会写代码?用TRAE+AI零代码搞定你的第一个Obsidian插件(2025最新版)

不会写代码&#xff1f;用TRAEAI零代码搞定你的第一个Obsidian插件&#xff08;2025最新版&#xff09; 你是否曾经在使用Obsidian时&#xff0c;发现现有的插件无法完全满足你的个性化需求&#xff1f;或许你想要一个能够自动整理笔记标签的工具&#xff0c;或者一个能根据内…...

马年开始杂谈补

总感觉时间越过越快&#xff0c;是不是年纪大了。马年春节9天假期&#xff0c;历史上最长春节&#xff0c;一眨眼就过去了。今年刚开始就发生了很多事&#xff0c;不知福祸。首先是人工智能发展迅速&#xff0c;各种智能体开始出现。美以伊战争&#xff0c;油价狂飙。到了3月&a…...

Linux终极生态指南:5个实战技巧打造高效开源工作流

Linux终极生态指南&#xff1a;5个实战技巧打造高效开源工作流 【免费下载链接】awesome-linux :penguin: A list of awesome projects and resources that make Linux even more awesome. :penguin: 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-linux Linux生…...

从“概要”到“详细”:实测CoCode AI如何接力完成软件设计全流程(附避坑指南)

从“蓝图”到“代码”&#xff1a;AI驱动微服务设计的全流程实战解析 当我在上个月接手一个电商平台的用户积分系统重构项目时&#xff0c;面对两周内交付完整技术方案的时间压力&#xff0c;第一次尝试用AI工具完成从需求分析到详细设计的全流程。这个过程中&#xff0c;AI不仅…...

Axure RP本地化全攻略:从界面优化到效率提升的开源工具本地化指南

Axure RP本地化全攻略&#xff1a;从界面优化到效率提升的开源工具本地化指南 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包&#xff0c;不定期更新。支持 Axure 9、Axure 10。 项目地址: https://gitcode.com/gh_mirrors/ax/axur…...

Wan2.2-I2V-A14B企业级部署:Nginx反向代理+HTTPS+负载均衡扩展方案

Wan2.2-I2V-A14B企业级部署&#xff1a;Nginx反向代理HTTPS负载均衡扩展方案 1. 企业级部署概述 Wan2.2-I2V-A14B作为高性能文生视频模型&#xff0c;在企业级应用中需要满足高并发、高可用和安全访问等需求。本文将详细介绍基于Nginx反向代理、HTTPS加密和负载均衡的完整部署…...