【深海王国】小学生都能玩的单片机?零基础入门单片机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

相关文章

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

解决jupyterLab打开后出现Config option `template_path`not recognized by `ExporterCollapsibleHeadings`问题

《解决jupyterLab打开后出现Configoption`template_path`notrecognizedby`ExporterCollapsibleHeadings`问题》在Ju... 目录jupyterLab打开后出现“templandroidate_path”相关问题这是 tensorflo

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件

如何提高Redis服务器的最大打开文件数限制

《如何提高Redis服务器的最大打开文件数限制》文章讨论了如何提高Redis服务器的最大打开文件数限制,以支持高并发服务,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录如何提高Redis服务器的最大打开文件数限制问题诊断解决步骤1. 修改系统级别的限制2. 为Redis进程特别设置限制

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联