老宇哥带你玩转 ESP32:04 串口玩起来是真方便
今天我们来玩儿串口
。
概述
ESP32 芯片有3 个
UART 接口,UART0,UART1,UART2,支持异步通信和 IrDA,通信速度最高可达 5Mbps,3 个接口可以被 DMA 或 CPU 直接访问,3 个串口带发送接收 FIFO,共享 1024*8bit 的 RAM,通过串口,我们可以非常方便的跟其它外设进行通信或者打印数据。
硬件
上图是硬件参考设计,我把默认的串口标注出来了,我们可以在Arduino的库中看到默认的引脚,如下图:
UART0 引脚直接在函数里面定义了,UART1、UART2使用宏定义,大家还记得我们在GPIO章节中说的吗,ESP32有GPIO矩阵
,外设都可以随意映射到绝大部分的引脚,比如我们想把UART2的引脚改变到GPIO26 GPIO27这两个上,我们直接调用相关函数就行了,这些都是可以实现的,硬件上非常灵活
。
U0TXD 线上需串联 499 Ω 电阻用于抑制 80 MHz 谐波。ESP32 UART 串口电路如下图所示:
这里还需要注意下,UART1的默认引脚为GPIO9,、GPIO10,这两个接口一般用于连接外部Flash,程序中默认使用这两个引脚的,所以我们在用的时候一定记得改到别的IO口。
软件
关于串口的一些概念,包括原理,波特率,停止位,奇偶校验,流控等概念,这些概念非常基础,这里就展开篇幅说了,需要的小伙伴自行了解,不同芯片,原理都是一样的。
我们讲一下基础的使用
:
首先我们需要在setup()中对串口进行初始化,非常简单,就一行代码搞定:
Serial.begin(115200);
这里默认是UART0的,将UART0波特率初始化为115200,其它参数都是默认的,如果我们想将UART0的TX RX改一下呢
,我们看下面:
Serial.begin(115200,SERIAL_8N1,26,27);
通过上面的函数,我们就把RX改到了26,TX改到了27,第一个参数为波特率设置,如果输入0就会自动监测波特率,第二个为串口配置参数,SERIAL_8N1为8位数据位,无校验位,1位停止位的意思,还有其它参数,大家可以自行到源码中看看
,加深印象。
看到这里才体会到GPIO矩阵的妙处,硬件设计大大的简化啊!
关于串口的函数,我们这里介绍几个常用的,完整的可以在HardwareSerial
类中看到。
void begin(unsigned long baud, uint32_t config=SERIAL_8N1, int8_t rxPin=-1, int8_t txPin=-1, bool invert=false, unsigned long timeout_ms = 20000UL); //串口初始化
void end();//失能串口
void updateBaudRate(unsigned long baud);//重新设置波特率
int available(void);//返回串口接收缓冲区中的数据
int read(void);//返回串口接收缓冲区的一个字节的数据,之后将缓冲区中的本字节删除
void flush(void);//等待串口收发数据完毕
size_t write(uint8_t);//写数据到TX缓冲区
size_t setRxBufferSize(size_t);//设置接收缓冲区的大小
这里只是简单展示几个函数,具体的用法有不懂的,或者想了解全部函数的,可以在arduino-esp32中打开具体的库看用法,只有这样,大家才能深刻了解,老宇哥这里只是带大家进门。
库函数中有标准输入输出函数,所以打印函数
必不可少的了,我们常用的打印函数如下:
Serial.print("芯片之家!"); //打印数据
Serial.println("This is a uart0 demo!"); //打印并换行
当然,也可以各种格式化打印,大家可以自行尝试!
Serial.println(data) //从串行端口输出数据,跟随一个回车(ASCII 13, 或 'r')和一个换行符(ASCII 10, 或 'n')。这个函数所取得的值与 Serial.print()一样。
Serial.println(b) //以十进制形式输出b的ASCII编码值,并同时跟随一个回车和换行符。
Serial.println(b, DEC)// 以十进制形式输出b的ASCII编码值,并同时跟随一个回车和换行符。
Serial.println(b, HEX) //以十六进数据形式输出b的ASCII编码值,并同时跟随一个回车和换行符。
Serial.println(b, OCT)//以八进数据形式输出b的ASCII编码值,并同时跟随一个回车和换行符。
Serial.println(b, BIN)//以二进数据形式输出b的ASCII编码值,并同时跟随一个回车和换行符。
Serial.print(b, BYTE)//以单个字节输出b,并同时跟随一个回车和换行符。
Serial.println(str)//如果 str是一个字符串或数组,输出整个 str的 ASCII编码字符串。
Serial.println()//仅输出一个回车和换行符。
完整程序1:
void setup()
{Serial.begin(115200);
}void loop()
{Serial.print("芯片之家!"); Serial.println("This is a uart0 demo!"); delay(1000);
}
完整程序2:
int recData; //接收的数据void setup() {Serial.begin(115200);
}void loop() {// 收到什么发什么数据if (Serial.available() > 0) {// 读取一个字节recData = Serial.read();Serial.print("received: ");Serial.println(recData,HEX);}
}
感谢大家,关于ESP32的学习,希望大家Enjoy!您的 转发点赞 就是我继续创作的最佳动力!
老宇哥带你玩转ESP32:03 GPIO数字输入与数字输出
老宇哥带你玩转ESP32:02使用VSCode+PlatformIO搭建开发环境
老宇哥带你玩转ESP32:01入门介绍
欢迎点分享、收藏、点赞、在看。
老宇哥带你玩转 ESP32:04 串口玩起来是真方便相关推荐
- 老宇哥带你玩转ESP32:02使用VSCode+PlatformIO搭建开发环境
上一篇文章给大家介绍了ESP32使用Arduino官方IDE进行开发的流程. 老宇哥带你玩转ESP32:01入门介绍 (点击阅读) 有部分同学反馈下载的时候特别慢,这个库是托管在GitHub的,国内有 ...
- 老宇哥带你玩转 ESP32:09 EEPROM的使用演示
今天我们来玩儿EEPROM. EEPROM概述 ESP32内部没有专门的EEPROM,但是我们可以通过FLASH模拟EEPROM,FLASH与EEPROM也是非常相似的,都是非易失性存储器,使用EEP ...
- 老宇哥带你玩转ESP32:03 GPIO数字输入与数字输出
今天我们来点灯. 多路复用器与GPIO矩阵 ESP32芯片有34个物理 GPIO Pad,每个Pad可以当作通用IO,也可以当作外设的引脚,GPIO 引脚通过非常复杂的 GPIO 矩阵互连,这基本上就 ...
- 老宇哥带你玩转ESP32:01入门介绍
接触物联网差不多10年了. 先跟大家聊聊,老宇哥11年进入大学,大一就在实验室开始了电子研发,记得那时候师兄介绍我买了一块郭天祥老师的51开发板,还有配套的一本书,虽然从小非常喜欢电子,经常折腾,有一 ...
- mysql为什么用b加树_为什么MySQL要用B+树?聊聊B+树与硬盘的前世今生【宇哥带你玩转MySQL 索引篇(二)】...
为什么MySQL要用B+树?聊聊B+树与硬盘的前世今生 在上一节,我们聊到数据库为了让我们的查询加速,通过索引方式对数据进行冗余并排序,这样我们在使用时就可以在排好序的数据里进行快速的二分查找,使得查 ...
- mysql 如何添加索引_MySQL如何创建一个好索引?创建索引的5条建议【宇哥带你玩转MySQL 索引篇(三)】...
MySQL如何创建一个好索引?创建索引的5条建议 过滤效率高的放前面 对于一个多列索引,它的存储顺序是先按第一列进行比较,然后是第二列,第三列...这样.查询时,如果第一列能够排除的越多,那么后面列需 ...
- 跟着老宇哥一起,咱们手把手一起DIY一个宠物喂食器,免费领开发套件!
跟涂鸦申请的福利,给喜欢开发的同学发放开发套件,只要是不是专门白嫖党,数量可以不做限制. 去年疫情突发,封城.封小区以及人员隔离,让原本享受千般宠爱的主子们变成了靠吃猫砂.塑料袋度日的小可怜,甚至有些 ...
- 蒙文字体怎么安装_焘哥带你玩转字体(三)字体的安装及显示问题
视频版 焘哥带你玩转字体(三)https://www.zhihu.com/video/1132957888620130304 上两篇文章我们共同了解了[衬线].[非衬线]字体,和如何识别字体的性格,以 ...
- 超哥带你玩转正则表达式-(六)
超哥带你玩转正则 目录 (一)一句话弄明白你的疑问 (二)正则表达式啥玩意? (三)正则表达式的语法(第一招) 1.元字符 2. 重复限定符 3. 分组 4. 转义 5. 条件或 6. 区间 (四)练 ...
最新文章
- MySQL存储引擎之Myisam和Innodb总结性梳理
- .NET Core多平台项目模板eShopOnContainers编译手记
- 30岁之前需要知道的10个人生底线,你知道几个?
- JMM内存模型详解(一)
- 前端薪资竟最差?程序员跳槽时如何才能谈个好价钱
- micropython性能低下_MicroPython支持的开发板:高性能、低成本创客首选
- CH341/CH340Linux驱动使用教程
- 常用的浏览器及其内核
- 数据总线、地址总线详解
- 某知名网络安全公司的渗透测试工程师面试题实战汇总
- klouderr什么意思_bought是什么意思_bought的翻译_音标_读音_用法_例句_爱词霸在线词典...
- delphi android 截屏,Delphi 截图\截屏
- 软件编程推荐书籍目录
- Vue中的SEO优化
- 海思Hi3516dv300屏幕调试MIPI TX接口LCD屏幕(京东方JD9366)
- ReactiveX函数简要说明
- 【AltiumDesigner专栏】01.06——ECAD-MCAD(二)
- 计算机一级ps操作,计算机一级考试《PS》:视图操作快捷键大全
- 心路历程(一)--天圆地方的时候
- 国产奶粉逆袭的10年:90后奶爸奶妈助力新国货逆袭洋品牌
热门文章
- vscode的c_cpp_properties.json
- 破解浏览器主页被锁定在毒霸网址大全的问题
- 正则(数字或者以英文逗号隔开的数字字符串)
- android 切回前台,Android退到后台与切到前台
- virbr0怎么关闭_kvm虚拟化关闭虚拟网卡virbr0的方法
- 关于烛光斧影——赵光义是否谋杀赵匡胤,是否合法继位
- 评估EtherCAT从站节点解决方案
- shell 回车键判断_Bash技巧:把变量赋值为换行符,判断文件是否以换行符结尾...
- vue updated
- Linux中使用sendmail发送邮件,指定任意邮件发送人