除HardwareSerial外,Arduino还提供了SoftwareSerial类库,它可以将你的其他数字引脚通过程序模拟成串口通信引脚。
通常我们将Arduino UNO上自带的串口称为硬件串口,而使用SoftwareSerial类库模拟成的串口,称为软件模拟串口(简称软串口)。
在Arduino UNO上,提供了0(RX)、1(TX)一组硬件串口,可与外围串口设备通信,如果要连接更多的串口设备,可以使用软串口。
软串口是由程序模拟实现的,使用方法类似硬件串口,但有一定局限性:在Arduino UNO MEGA上部分引脚不能被作为软串口接收引脚,且软串口接收引脚波特率建议不要超过57600。
SoftwareSerial类成员函数
软串口类库并非Arduino UNO核心类库,因此使用前你需要先声明包含SoftwareSerial.h头文件。
其中定义的成员函数与硬件串口类似,available()、begin()、read()、write()、print()、println()、peek() 等用法相同,这里便不一一列举。
此外软串口后还有如下成员函数:

SoftwareSerial()
SoftwareSerial类的构造函数,通过它可指定软串口RX、TX引脚。
语法:
SoftwareSerial mySerial= SoftwareSerial(rxPin, txPin)
SoftwareSerial mySerial(rxPin, txPin)
参数:
mySerial:用户自定义软件串口对象
rxPin:软串口接收引脚
txPin:软串口发送引脚

listen()
开启软串口监听状态。
Arduino UNO在同一时间仅能监听一个软串口,当你需要监听某一软串口时,需要该对象调用这个函数开启监听功能。
语法:
mySerial.listen()
参数:
mySerial:用户自定义的软件串口对象
返回值:

isListening()
监测软串口是否正在监听状态。
语法:
mySerial.isListening()
参数:
mySerial:用户自定义的软件串口对象
返回值:
Boolean型
True:正在监听
False:没有监听

end()
停止监听软串口。
语法:
mySerial. end()
参数:
mySerial:用户自定义的软件串口对象
返回值:
Boolean型
True:关闭监听成功
False:关闭监听失败

overflow()
检测缓冲区是否溢出。
语法:
mySerial.overflow()
参数:
mySerial:用户自定义的软件串口对象
返回值:
Boolean型
True:溢出
False:没有溢出

建立软串口通信
SoftwareSerial类库是Arduino IDE默认提供的一个第三方类库,和硬件串口不同,其声明并没有包含在Arduino核心库中,因此要建立软串口通信,首先需要声明包含SoftwareSerial.h头文件,然后即可使用该类库中的构造函数,初始化一个软串口实例。如:
SoftwareSerial mySerial(2, 3);
即是新建一个名为mySerial的软串口,并将2号引脚作为RX端,3号引脚作为TX端。完整示例如下:

/*
Arduino UNO软串口通信
*/#include <SoftwareSerial.h>
//实例化软串口
SoftwareSerial mySerial(2, 3); // RX, TXvoid setup()
{Serial.begin(115200);while (!Serial) {}Serial.println("Goodnight moon!");mySerial.begin(9600);mySerial.println("Hello, world?");
}void loop()
{if (mySerial.available())Serial.write(mySerial.read());if (Serial.available())mySerial.write(Serial.read());
}

在实际使用中,你可能还会用到其他串口设备,如串口无线透传模块、串口传感器等,只要是标准串口设备,其程序的编写方法都基本相同。

同时使用多个软串口
当需要连接多个串口设备时,可以建立多个软串口,但限于软串口的实现原理,Arduino UNO只能同时监听一个软串口,当存在多个软串口设备时,你需要使用listen() 函数指定需要监听的设备。如程序中存在portOne、portTwo两个软串口对象时,你欲监听portOne,便需要使用portOne.listen() 语句,要切换监听port2,便使用portTwo.listen() 语句。
示例程序如下:

/*[kenrobot_code]
Arduino UNO软串口通信
通过listen()切换监听软串口
*/
#include <SoftwareSerial.h>
SoftwareSerial portOne(10, 11);
SoftwareSerial portTwo(8, 9);void setup() {Serial.begin(9600);while (!Serial) {}portOne.begin(9600);portTwo.begin(9600);
}void loop() {
//监听1号软串口portOne.listen();Serial.println("Data from port one:");while (portOne.available() > 0) {char inByte = portOne.read();Serial.write(inByte);}Serial.println();
//监听2号软串口portTwo.listen();Serial.println("Data from port two:");while (portTwo.available() > 0) {char inByte = portTwo.read();Serial.write(inByte);}Serial.println();
}       //[/kenrobot_code]

本文转自arduino中文论坛
https://www.arduino.cn/forum.php?mod=viewthread&tid=47262&highlight=软串口

SoftwareSerial库的使用——Arduino软件模拟串口通信相关推荐

  1. STM32F0 HAL库软件模拟串口发送数据

    试验STM32F0官方提供的例程的时候,希望看到程序中某些变量的值,但是程序中往往没有串口发送部分,自己加又非常麻烦. 而点亮LED的程序基本上每个例程都有.所以用点亮LED引脚模拟串口发送数据就很方 ...

  2. 利用python程序、虚拟串口软件、串口通信助手,实现串口通信(两串口互相收发文字)

    一.流程简述 程序可以参考: https://blog.csdn.net/colcloud/article/details/42454839 这是我参考后简化的版本: https://github.c ...

  3. linux gpio 模拟串口,STM32的GPIO口模拟串口通信.rar

    [实例简介] 利用GPIO.EXTI外部中断.TIM定时器实现URAT串口,该例子来自21IC网,未做改动,明天自己调试,看看效果 完全是根据UART协议编写 [实例截图] [核心代码] STM32的 ...

  4. 普通io口模拟串口通信

    之前公司在做项目的时候需要用到多串口,板载串口资源不足,就在网上找相关内容,结合自己的理解做出虚拟串口. 模拟串口需要用到两个普通io引脚,一个定时器. /** *软件串口的实现(IO模拟串口) * ...

  5. Arduino入门_串口通信

    一.Arduino串口通信 串口(COM口):是Arduino与其他设备进行通信的接口. Q:连接电脑USB的线为什么可以上传程序,而电源线无法上传? A:PC一端的数据线接口是USB接口,连接Ard ...

  6. Ariduino入门笔记——9. Arduino 默认函数(串口通信)

    文章目录 什么是串口 Serial 串口函数 串口准备--if(Serial) 获取可读取的字节数--available() 获取可写入的最大字节数--availableForWrite() 串口连接 ...

  7. 基于c#的串口设备通讯c#项目工程含虚拟串口软件与串口通信工具(C#源码)

    利用pc与串口通讯,在工业领域使用的很多: 串口通信(Serial Communications)的概念非常简单,串口按位(bit)发送和接收字节.尽管比按字节(byte)的并行通信慢,但是串口可以在 ...

  8. pc wifi 软件 模拟串口_唐山现代新型物联网软件

    唐山现代新型物联网软件 ejsnb5p 唐山现代新型物联网软件 .系列数字示波器配合使用时,只能测量(被测信信地就是大地,信端输出幅度小于)信的波形.编程简单方便,界面形象直观,具有强大的数据可视化分 ...

  9. SSCOM串口软件模拟TCP通信接发信息

    开两个页面,一个做服务端Server,一个做客户端Client 注意红框保持一致,服务端点侦听,客户端点链接,即可通信.

最新文章

  1. 你属于程序员中的哪种人?
  2. 机器学习知识点(四)最小二乘法Java实现
  3. hdfs源码分析第二弹
  4. RAID 0、1、5、1+0总结
  5. Equipment upload 不起作用的分析
  6. c语言block内部的实现原理,iOS中block变量捕获原理详析
  7. ENVI入门系列教程---一、数据预处理---8.图像裁剪
  8. 大数据时代保护个人信息安全该采取什么措施?
  9. 关键词文章生成器-智能关键词文章生成器
  10. 什么是小规模纳税人、小型微利企业、小微企业
  11. SIM卡的PIN码(CHV)及对应的APDU命令
  12. 在linux上运行迷宫问题,C语言 迷宫问题(堆栈及其应用)
  13. CK11N改标准价格
  14. android 仿飞猪日历,vue 日期选择 类似飞猪
  15. Java飞书三方网站对接
  16. 论文笔记之Non-Local
  17. 2021牛客寒假算法基础集训营1
  18. 程序员面试笔试宝典学习记录(一)(常见面试笔试题目)
  19. HTML5span中加入超链接,HTML中文本标签,超链接标签以及图像标签的简单介绍
  20. Information:java: 系统资源不足。

热门文章

  1. 基于jsp毕业设计题目50例
  2. c语言 编程 打怪,一起用C语言打怪物
  3. Android4.4之后休眠状态下Alarm不准时的问题
  4. rust进水器怎么用_净水器的使用方法和注意事项
  5. python numpy库 一些统计量计算
  6. 小程序的3种副业方式,合适你来可以来
  7. yocto 更新补丁方法
  8. 【C语言】fwrite 写如0X0A时,自动添加0X0D的解决方法
  9. The bean ‘xxx‘ could not be injected as a ‘xxx‘ because it is a JDK dynamic proxy that implements:
  10. log4j与log4j2性能对比及log4j升级至log4j2方案