【深海王国】小学生都能玩的单片机?零基础入门单片机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:使用程序模拟浏览器,向服务器发送请求,获取相应信息…...

MyBatis映射器:一对多关联查询
大家好,我是王有志,一个分享硬核 Java 技术的金融摸鱼侠,欢迎大家加入 Java 人自己的交流群“共同富裕的 Java 人”。 在学习完上一篇文章《MyBatis映射器:一对一关联查询》后,相信你已经掌握了如何在 MyBatis 映射器…...

100多个ChatGPT指令提示词分享
当前,ChatGPT几乎已经占领了整个互联网。全球范围内成千上万的用户正使用这款人工智能驱动的聊天机器人来满足各种需求。然而,并不是每个人都知道如何充分有效地利用ChatGPT的潜力。其实有许多令人惊叹的ChatGPT指令提示词,可以提升您与ChatG…...

vue2和vue3数据代理的区别
前言: vue2 的双向数据绑定是利⽤ES5的⼀个 API ,Object.defineProperty( )对数据进行劫持结合发布订阅模式的方式来实现的。 vue3 中使⽤了 ES6的Proxy代理对象,通过 reactive() 函数给每⼀个对象都包⼀层Proxy,通过 Proxy监听属…...

已解决ApplicationException异常的正确解决方法,亲测有效!!!
已解决ApplicationException异常的正确解决方法,亲测有效!!! 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 分析错误日志 检查业务逻辑 验证输入数据 确认服务器端资源的可用性 增加对特殊业务情况的处理…...

「前端+鸿蒙」鸿蒙应用开发-常用UI组件-图片-参数
在鸿蒙应用开发中,图片组件是展示图像的关键UI元素。以下是详细介绍图片组件的三个主要参数:图片尺寸、图片缩放和图片插值,并提供相应的示例代码。 图片尺寸 图片尺寸指的是图片组件在界面上显示的宽度和高度。你可以使用像素(px)或其他单位来指定尺寸。 width: 设置图片…...

Tobii Pro Lab 1.232是全球领先的眼动追踪研究实验软件
Tobii Pro Lab是全球领先的眼动追踪研究实验软件。软件功能强大且拥有友好的用户界面,使眼动追踪研究变得更加简单、高效。该软件提供了很高的灵活性,可运行高级实验,深入了解注意力和认知过程。 获取软件安装包以及永久授权联系邮箱:289535…...

【flink实战】flink-connector-mysql-cdc导致mysql连接器报类型转换错误
文章目录 一. 报错现象二. 方案二:重新编译打包flink-connector-cdc1. 排查脚本2. 重新编译打包flink-sql-connector-mysql-cdc-2.4.0.jar3. 测试flink环境 三. 方案一:改造flink连接器 一. 报错现象 flink sql任务是:mysql到hdfs的离线任务&…...

【Linux】系统文件IO·文件描述符fd
前言 C语言文件接口 C 语言读写文件 1.C语言写入文件 2.C语言读取文件 stdin/stdout/stderr 系统文件IO 文件描述符fd: 文件描述符分配规则: 文件描述符fd: 前言 我们早在C语言中学习关于如何用代码来管理文件,比如文件的…...

【计算机网络篇】数据链路层(6)共享式以太网_网络适配器_MAC地址
文章目录 🍔网络适配器🍔MAC地址🗒️IEEE 802局域网的MAC地址格式📒IEEE 802局域网的MAC地址发送顺序🥚单播MAC地址🥚广播MAC地址🥚多播MAC地址🔎小结 🍔网络适配器 要将…...

导入别人的net文件报红问题sdk
1. 使用cmd命令 dotnet --info 查看自己使用的SDK版本 2.直接找到项目中的 global.json 文件,右键打开,直接修改版本为本机的SDK版本,就可以用了...