【深海王国】小学生都能玩的单片机?零基础入门单片机Arduino带你打开嵌入式的大门!(8)
Hi٩(๑o๑)۶, 各位深海王国的同志们,早上下午晚上凌晨好呀~辛勤工作的你今天也辛苦啦
(o゜▽゜)o☆ 今天大都督继续为大家带来系列——小学生都能玩的单片机!带你一周内快速走进嵌入式的大门,let’s go!
(8)软串口与SoftwareSerial库使用
在第六节中我们提到了,如果我们Arduino开发板的0、1号引脚接线了,即硬件串口被占用了,想给Arduino下载程序,就需要先将0、1号引脚的线拔掉再下载,程序下载好以后才能接回去。
这样操作确实是有点麻烦,所以这节我们来学习软串口的使用,给Arduino开发板人为添加一个串口,以解决串口占用问题。
什么是软串口:
在Arduino平台上,软件串口(软串口)是通过软件模拟UART通信的方法,软串口在使用上跟硬串口一样,只不过用两个数字IO口代替RX、TX,以此来解决串口不够用的问题。
| Arduino系列 | 可用作软串口的引脚 |
|---|---|
| Arduino Uno | 除了0(RX)和1(TX)引脚外的任何引脚 |
| Arduino Mega | 几乎所有引脚,但是建议避开用于其他功能的特定引脚,如10(SS), 11(MOSI), 12(MISO), 13(SCK) |
| Arduino Nano | 除了0(RX)和1(TX)外的任何引脚 |
| Arduino Leonardo | 几乎任何引脚,包括多个模拟引脚 |
| Arduino Due | 所有数字引脚和模拟引脚 |
| Arduino Micro | 几乎任何引脚,包括多个模拟引脚 |
常用的软串口库:
-
SoftwareSerial: 这是Arduino IDE自带的软件串口库,也是最常用的软软件串口解决方案之一。它允许用户选择任何数字引脚来模拟串口通信。然而,这个库有一定的限制,比如不能同时发送和接收数据,以及在高波特率下可能不够稳定。
-
AltSoftSerial: 这个库相对于SoftwareSerial来说,在特定的引脚上提供了更高的性能和稳定性,但是它限定了可以用作软串口的引脚。它使用定时器来实现更准确的时间控制,因此在高速通信时比SoftwareSerial表现得更好,但这也意味着它会占用特定的定时器资源。
-
NeoSWSerial: 是另一种软件串口解决方案,它旨在解决SoftwareSerial的一些性能问题,特别是在高波特率上。它比SoftwareSerial占用更少的资源,并且可以在数据发送的同时接收数据。
以下是一个表格,总结了SoftwareSerial库、AltSoftSerial库和NewSoftSerial库的主要区别:
| 特性/库 | SoftwareSerial | AltSoftSerial | NewSoftSerial |
|---|---|---|---|
| 支持的硬件平台和芯片型号 | Arduino Uno、Mega等基于ATmega328P和ATmega2560芯片的开发板 | 包括ATtiny、ATmega、SAM3X8E等 | 支持更多开发板和芯片,包括ESP8266、ESP32、ATtiny等 |
| 可用的IO口数量和频率 | 两个IO口(RX和TX),最高115200bps | 多个IO口,最高31250bps | 多个IO口,最高38400bps |
| 稳定性和可靠性 | 在高速通信时可能出现数据丢失或错位 | 相对稳定可靠 | 相对稳定可靠 |
| 使用的方法和API | 方法和API比较类似于传统的Serial库 | 有自己独特的API和使用方法 | 方法和API比较类似于SoftwareSerial库 |
总的来说,我们初学会用SoftwareSerial库就够啦,但一定要注意!
SoftwareSerial库最高只能支持两个IO口(RX和TX),也就是最多只能额外跟一个设备串口通信。
最多只能额外跟一个设备串口通信。!
最多只能额外跟一个设备串口通信。!
最多只能额外跟一个设备串口通信。!
这个很重要,也就是说即使我们使用了SoftwareSerial库,算上Arduino UNO自带的硬件串口,也只能同时跟两个设备串口通信。
如果你需要跟更多设备通信,建议直接用Arduino Mega2560(后面会再介绍,它有四个硬件串口),或者使用NewSoftSerial库(后面也会教大家)。
SoftwareSerial库使用示例:
首先下载相应的库文件: SoftwareSerial库,下载库的方法参考(5)最新版Arduino IDE第三方库安装
以arduino uno r3开发板为例,应用代码如下:
#include <SoftwareSerial.h> //引用库文件
SoftwareSerial Serial1(2, 3); // 定义软串口RX为2, TX为3和软串口对象Serial1
//其它操作就跟正常串口函数一样了
//这些是常用的串口函数:
Serial1.begin(9600);
Serial1.read();
Serial1.write();
Serial1.available();
Serial1.print();
这里注意大家可以将软串口定义为Serial1、Serial2、Serial3这样,因为Arduino Mega2560的硬件串口就是这样命名的,方便我们项目移植,将Arduino UNO的代码转移到Arduino Mega2560上,操作也很简单,只用删除掉这两行代码,然后换一下接线就行啦。
#include <SoftwareSerial.h> //引用库文件
SoftwareSerial Serial1(2, 3); // 定义软串口RX为2, TX为3和软串口对象Serial1
以咱们深海王国APP系列的BLE低功耗蓝牙为例,进行软串口接线如下:

| Arduino | BLE蓝牙模块 |
|---|---|
| 2 (RX) | TX |
| 3 (TX) | RX |
| 3.3V | 3.3V |
| GND | GND |
串口函数介绍:
-
Serial.begin(9600);函数用于初始化串行通信,并设置数据传输速率(波特率)。在这个例子中,波特率被设置为9600比特/秒。 -
Serial.read();函数用于从串行缓冲区读取接收到的第一个字节的数据,然后该数据从缓冲区中删除。如果缓冲区为空(即没有数据可读),这个函数将返回-1。该函数主要用于从另一设备接收数据。 -
Serial.write();函数用于通过串行端口发送数据。它可以发送一个字节或一串字节(例如,一个字符串)。该函数返回写入的字节数。例如,Serial1.write(‘A’);会发送字符’A’,而Serial1.write(“Hello, world”);会发送一个字符串。 -
Serial.available();函数用于查询串行缓冲区中可读取的字节数,即检查有多少个字节的数据可被read()函数读取。在执行读取操作前检查这个值非常有用,可避免在没有数据可读取时去读取,从而降低出错的风险。 -
Serial.print();函数用于发送数据到串行端口,以ASCII字符形式。它可以发送多种类型的数据,包括数字、字符串和字符。例如,Serial.print(“Hello”);会将"Hello"字符串发送至串行端口。Serial.print(123);会将数字123以其对应的ASCII字符序列发送出去。不同于write()函数,print()在发送数字时会将其转换为可读的文本形式而不是原始的二进制或字节值。
今天的学习到这里就差不多啦,下节我们还会再了解一些做串口通讯时常见的问题,看到这里的你辛苦啦,加油٩(ˊᗜˋ)و✧。
哈哈,让焦虑不再蔓延,信息不再高壁,如果你觉得这篇文章对你有帮助,就来个免费的点赞吧!
(◍˃̶ᗜ˂̶◍)✩我深海大都督正式授予你深海王国公民的身份~
(・ω< )★ 加入深海大家庭,快乐摆烂每一天!
相关文章:
【深海王国】小学生都能玩的单片机?零基础入门单片机Arduino带你打开嵌入式的大门!(8)
Hi٩(๑o๑)۶, 各位深海王国的同志们,早上下午晚上凌晨好呀~辛勤工作的你今天也辛苦啦 (o゜▽゜)o☆ 今天大都督继续为大家带来系列——小学生都能玩的单片机!带你一周内快速走进嵌入式的大门,let’s go! (8&#x…...
第5天:视图与模板进阶
第5天:视图与模板进阶 目标 掌握视图逻辑和模板渲染,包括不同类型的视图、自定义模板标签和过滤器,以及模板继承和包含的概念。 任务概览 学习函数视图和类视图的使用。编写自定义模板标签和过滤器。理解模板的继承和包含机制。 详细步骤…...
线程间通信方式(互斥(互斥锁)与同步(无名信号量、条件变量))
1通信机制:互斥与同步 线程的互斥通过线程的互斥锁完成; 线程的同步通过无名信号量或者条件变量完成。 2 互斥 2.1 何为互斥? 互斥是在多个线程在访问同一个全局变量的时候,先让这个线程争抢锁的资源,那个线程争抢…...
Android使用data uri启动activity或service
设定AndroidManifest.xml 在AndroidManifest.xml文件中,我们可以设定activity或service的data。 <!-- activity定义方式 --> <activityandroid:name".page.main.MainActivity"><intent-filter><action android:name"an…...
能理解你的意图的自动化采集工具——AI和爬虫相结合
⭐️我叫忆_恒心,一名喜欢书写博客的研究生👨🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三连支…...
基于SpringBoot+大数据城市景观画像可视化设计和实现
💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,…...
Oracle表中的数据量达到30万条
当Oracle表中的数据量达到30万条,并且查询性能过慢时,增加索引是一个有效的优化方案。以下是一些建议来增加索引以提高查询性能: 分析查询需求: 首先,需要明确哪些查询是经常执行的,以及这些查询的WHERE子…...
【python】python学生成绩数据分析可视化(源码+数据+论文)【独一无二】
👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…...
如何定期更新系统以保护网络安全
定期更新系统保护网络安全的方法 定期更新系统是确保网络安全的关键措施之一。以下是一些有效的方法: 及时获取更新信息:用户应通过邮件订阅、官方网站、厂商渠道等途径获取最新的更新通知。此外,互联网上的安全论坛和社区也是获取相关安全资…...
华为数通——OSPF
正掩码:/24 255.255.255.0 反掩码: 255.255.255.255 -255.-255.-255.0 0.0.0.255 例如掩码:255.255.252.0 反掩码:0.0.3.255 在反掩码里面,0 bit 表示精确匹配,1…...
RedHat9 | Web服务配置与管理(Apache)
一、实验环境 1、Apache服务介绍 Apache服务,也称为Apache HTTP Server,是一个功能强大且广泛使用的Web服务器软件。 起源和背景 Apache起源于NCSA httpd服务器,经过多次修改和发展,逐渐成为世界上最流行的Web服务器软件之一。…...
API-事件监听
学习目标: 掌握事件监听 学习内容: 事件监听拓展阅读-事件监听版本 事件监听: 什么是事件? 事件是在编程时系统内发生的动作或者发生的事情。 比如用户在网页上单击一个按钮。什么是事件监听? 就是让程序检测是否有事…...
如何为自己的项目生成changelog
背景 在github上看到人家的更新日志感觉很cool,怎么能给自己项目来一套呢 环境信息 tdstdsdeMacBook-Pro demo-doc % node -v v14.18.1 tdstdsdeMacBook-Pro demo-doc % npm -v 6.14.15硬件信息 型号名称:MacBook Pro版本: 12.6.9芯片&…...
MySQL之表碎片化
文章目录 1. 前言2. InnoDB表碎片3. 清除表碎片3.1 查找碎片化严重的表3.2 清除碎片 4. 小结5. 参考 1. 前言 周一在对线上表进行数据清除时,发现一个问题,我要清除的单表大概有2500w条数据,清除数据大概在1300w条左右,清除之前通…...
碳+绿证如何能源匹配?考虑碳交易和绿证交易制度的电力批发市场能源优化程序代码!
前言 近年来,面对日益受到全社会关注的气候变化问题,国外尤其是欧美等发达国家和地区针对电力行业制定了一系列碳减排组合机制。其中,碳排放权交易(以下简称“碳交易”)和绿色电力证书交易(以下简称“绿证…...
【原创】springboot+mysql海鲜商城设计与实现
个人主页:程序猿小小杨 个人简介:从事开发多年,Java、Php、Python、前端开发均有涉猎 博客内容:Java项目实战、项目演示、技术分享 文末有作者名片,希望和大家一起共同进步,你只管努力,剩下的交…...
envi5.6+SARscape560安装(CSDN_20240623)
envi和SARscape的版本必须匹配,否则有些功能不能使用。 Envi5.6安装 1. 点击安装程序. 2. 进入安装界面,点击“Next”. 3. 选择“I accept the agreement”,点击“Next”。 4. 选择安装路径,建议直接安装在默认路径下࿰…...
基本循环神经网络(RNN)
RNN背景:RNN与FNN 在前馈神经网络中,信息的传递是单向的,这种限制虽然使得网络变得更容易学习,但在一定程度上也减弱了神经网络模型的能力。 在生物神经网络中,神经元之间的连接关系要复杂的多。前馈神经网络可以看着…...
win32API(CONSOLE 相关接口详解)
前言: Windows这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外,它同时也是⼀个很⼤的服务中⼼,调⽤这个服务中⼼的各种服务(每⼀种服务就是⼀个函数),可以帮应⽤程式达到开启视窗、描绘图形…...
python爬虫学习笔记一(基本概念urllib基础)
学习资料:尚硅谷_爬虫 学习环境: pycharm 一.爬虫基本概念 爬虫定义 > 解释1:通过程序,根据URL进行爬取网页,获取有用信息 > 解释2:使用程序模拟浏览器,向服务器发送请求,获取相应信息…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
如何在Windows本机安装Python并确保与Python.NET兼容
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
STM32标准库-ADC数模转换器
文章目录 一、ADC1.1简介1. 2逐次逼近型ADC1.3ADC框图1.4ADC基本结构1.4.1 信号 “上车点”:输入模块(GPIO、温度、V_REFINT)1.4.2 信号 “调度站”:多路开关1.4.3 信号 “加工厂”:ADC 转换器(规则组 注入…...
Linux基础开发工具——vim工具
文章目录 vim工具什么是vimvim的多模式和使用vim的基础模式vim的三种基础模式三种模式的初步了解 常用模式的详细讲解插入模式命令模式模式转化光标的移动文本的编辑 底行模式替换模式视图模式总结 使用vim的小技巧vim的配置(了解) vim工具 本文章仍然是继续讲解Linux系统下的…...
2025.6.9总结(利与弊)
凡事都有两面性。在大厂上班也不例外。今天找开发定位问题,从一个接口人不断溯源到另一个 接口人。有时候,不知道是谁的责任填。将工作内容分的很细,每个人负责其中的一小块。我清楚的意识到,自己就是个可以随时替换的螺丝钉&…...
