【深海王国】小学生都能玩的单片机?零基础入门单片机Arduino带你打开嵌入式的大门!(8)

本文主要是介绍【深海王国】小学生都能玩的单片机?零基础入门单片机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几乎任何引脚,包括多个模拟引脚

常用的软串口库:

  1. SoftwareSerial: 这是Arduino IDE自带的软件串口库,也是最常用的软软件串口解决方案之一。它允许用户选择任何数字引脚来模拟串口通信。然而,这个库有一定的限制,比如不能同时发送和接收数据,以及在高波特率下可能不够稳定。

  2. AltSoftSerial: 这个库相对于SoftwareSerial来说,在特定的引脚上提供了更高的性能和稳定性,但是它限定了可以用作软串口的引脚。它使用定时器来实现更准确的时间控制,因此在高速通信时比SoftwareSerial表现得更好,但这也意呀着它会占用特定的定时器资源。

  3. NeoSWSerial: 是另一种软件串口解决方案,它旨在解决SoftwareSerial的一些性能问题,特别是在高波特率上。它比SoftwareSerial占用更少的资源,并且可以在数据发送的同时接收数据。

以下是一个表格,总结了SoftwareSerial库、AltSoftSerial库和NewSoftSerial库的主要区别:

特性/库SoftwareSerialAltSoftSerialNewSoftSerial
支持的硬件平台和芯片型号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低功耗蓝牙为例,进行软串口接线如下:
在这里插入图片描述

ArduinoBLE蓝牙模块
2 (RX)TX
3 (TX)RX
3.3V3.3V
GNDGND

串口函数介绍:

  1. Serial.begin(9600);函数用于初始化串行通信,并设置数据传输速率(波特率)。在这个例子中,波特率被设置为9600比特/秒。

  2. Serial.read();函数用于从串行缓冲区读取接收到的第一个字节的数据,然后该数据从缓冲区中删除。如果缓冲区为空(即没有数据可读),这个函数将返回-1。该函数主要用于从另一设备接收数据。

  3. Serial.write();函数用于通过串行端口发送数据。它可以发送一个字节或一串字节(例如,一个字符串)。该函数返回写入的字节数。例如,Serial1.write(‘A’);会发送字符’A’,而Serial1.write(“Hello, world”);会发送一个字符串。

  4. Serial.available();函数用于查询串行缓冲区中可读取的字节数,即检查有多少个字节的数据可被read()函数读取。在执行读取操作前检查这个值非常有用,可避免在没有数据可读取时去读取,从而降低出错的风险。

  5. Serial.print();函数用于发送数据到串行端口,以ASCII字符形式。它可以发送多种类型的数据,包括数字、字符串和字符。例如,Serial.print(“Hello”);会将"Hello"字符串发送至串行端口。Serial.print(123);会将数字123以其对应的ASCII字符序列发送出去。不同于write()函数,print()在发送数字时会将其转换为可读的文本形式而不是原始的二进制或字节值。

今天的学习到这里就差不多啦,下节我们还会再了解一些做串口通讯时常见的问题,看到这里的你辛苦啦,加油٩(ˊᗜˋ)و✧。

哈哈,让焦虑不再蔓延,信息不再高壁,如果你觉得这篇文章对你有帮助,就来个免费的点赞吧!
(◍˃̶ᗜ˂̶◍)✩我深海大都督正式授予你深海王国公民的身份~

(・ω< )★ 加入深海大家庭,快乐摆烂每一天!

这篇关于【深海王国】小学生都能玩的单片机?零基础入门单片机Arduino带你打开嵌入式的大门!(8)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1088141

相关文章

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

python操作redis基础

《python操作redis基础》Redis(RemoteDictionaryServer)是一个开源的、基于内存的键值对(Key-Value)存储系统,它通常用作数据库、缓存和消息代理,这篇文章... 目录1. Redis 简介2. 前提条件3. 安装 python Redis 客户端库4. 连接到 Re

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2

Spring Boot集成SLF4j从基础到高级实践(最新推荐)

《SpringBoot集成SLF4j从基础到高级实践(最新推荐)》SLF4j(SimpleLoggingFacadeforJava)是一个日志门面(Facade),不是具体的日志实现,这篇文章主要介... 目录一、日志框架概述与SLF4j简介1.1 为什么需要日志框架1.2 主流日志框架对比1.3 SLF4

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin

vscode不能打开终端问题的解决办法

《vscode不能打开终端问题的解决办法》:本文主要介绍vscode不能打开终端问题的解决办法,问题的根源是Windows的安全软件限制了PowerShell的运行,而VSCode默认使用Powe... 遇到vscode不能打开终端问题,一直以为是安全软件限制问题,也没搜到解决方案,因为影响也不大,就没有管