出品:1Z实验室 (1ZLAB: Make Things Easy)

概要

在本节课程阿凯为大家讲解了串口通信的接线方式,ESP32中的串口UART资源与相关API, 并给出了一个UART的小应用实例。

目录

串口通信

UART执行标准UART/USART双工串行通信协议,关于串口通信你需要的预备知识有码元, 波特率, 奇偶校验等概念。

可以在B站上观看串口通信科普视频.

TODO 英文的, 1Z实验室后面有精力也会考虑做一些科普视频

硬件接线

这里介绍的串口通信的使用方式不局限于ESP32开发板。

两个单片机设备进行串口通信,或者单片机通过USB转TTL模块与PC进行串口通信。

如果你对USB转TTL模块比较陌生的话,请打开淘宝自行搜索 USB转TTL模块 。

另外请留意USB转TTL的芯片型号,你可能需要安装其驱动。

我手里的这个USB转TTL的型号是CH340G, Ubuntu自带其驱动。

usb2ttl.png

设备与设备之间至少需要接三个线。如下图所示:

串口连接图.png

关于USB转TTL

GND是地线,提供低电平的参考电压。 接下来就是RX 信息接收端, 还有TX 信息发送端。 单片机A的RX 接单片机B的TX, 单片机B的RX 接单片机A的TX。

**至于VCC接口,可接可不接, 如果USB转TTL的正负极接反了容易导致电脑主板的烧毁。 **

要注意他们两个单片机的工作电压是否匹配,例如ESP32的工作电压是3.3v那么另外一个VCC接口也只能接VCC。 有的USB转TTL模块有3.3v与5v两个接口, 可以将ESP32开发板的VCC与USB转TTL的3.3v接口相连接, 或者将ESP32的VIN接口与USB转TTL的5v接口相连接。

UART构造器

不同于其他MicroPython开发板,ESP32可以自定义管脚作为UART, 不过ESP32自身只有两个UART资源。

导入UART 模块

from machine import UART

UART对象的构造器函数:

UART(id, baudrate, bits, parity, rx, tx, stop, timeout)

id : 串口编号

ESP32的UART资源只有两个, id有效取值范围为1,2

bandrate: 波特率(时钟频率)

常用波特率为:

9600 (默认)

115200

信息接受双方的波特率必须一致,否则会乱码。

bits:单个字节的位数(比特数)

8 (默认)

7

9

parity: 校验方式

None 不进行校验(默认)

0 偶校验

1 奇校验

rx:接收口的GPIO编号

在ESP32上面很多个管脚都可以自定义为UART管脚有效GPIO编号如下:

0,2,4,5,9,10, 12-19, 21-23,25, 26, 34-36, 39

tx:发送口的GPIO编号

有效GPIO管脚编号同rx

stop: 停止位个数

1 (默认)

2

timerout: 超时时间

取值范围: 0 < timeout ≤ 2147483647

演示实例

from machine import UART

uart = UART(2, baudrate=115200, rx=13,tx=12,timeout=10)

UART的API讲解

字符串读写

uart.read(10) # read 10 characters, returns a bytes object

# 读入10个字符, 返回一个比特对象

uart.read() # read all available characters

# 读取所有的有效字符

uart.readline() # read a line

# 读入一行

uart.readinto(buf) # read and store into the given buffer

# 读入并且保存在缓存中

uart.write('abc') # write the 3 characters

# 向串口写入3个字符abc

字符读写

uart.readchar() # read 1 character and returns it as an integer

# 读入一个字符

uart.writechar(42) # write 1 character

# 写入ASCALL码为42的字符

uart.writechar(ord('*')) # 等同于uart.writechar(42)

检测串口是否有数据

uart.any() # returns the number of characters waiting

ESP32串口自发自收实验

接线 将开发板的 13号引脚与12号引脚用杜邦线相连接

'''

ESP32串口通信-字符串数据自发实验

接线 将开发板的 13号引脚与12号引脚用杜邦线相连接。

'''

from machine import UART,Pin

import utime

# 初始化一个UART对象

uart = UART(2, baudrate=115200, rx=13,tx=12,timeout=10)

count = 1

while True:

print('\n\n===============CNT {}==============='.format(count))

# 发送一条消息

print('Send: {}'.format('hello {}\n'.format(count)))

print('Send Byte :') # 发送字节数

uart.write('hello {}\n'.format(count))

# 等待1s钟

utime.sleep_ms(1000)

if uart.any():

# 如果有数据 读入一行数据返回数据为字节类型

# 例如 b'hello 1\n'

bin_data = uart.readline()

# 将手到的信息打印在终端

print('Echo Byte: {}'.format(bin_data))

# 将字节数据转换为字符串 字节默认为UTF-8编码

print('Echo String: {}'.format(bin_data.decode()))

# 计数器+1

count += 1

print('---------------------------------------')

样例输出

===============CNT 1===============

Send: hello 1

Send Byte :

8

Echo Byte: b'hello 1\n'

Echo String: hello 1

---------------------------------------

===============CNT 2===============

Send: hello 2

Send Byte :

8

Echo Byte: b'hello 2\n'

Echo String: hello 2

---------------------------------------

===============CNT 3===============

Send: hello 3

Send Byte :

8

Echo Byte: b'hello 3\n'

Echo String: hello 3

---------------------------------------

课程预告

上文讲解了如何使用ESP32的UART资源,如何发送与接收字符串。 如果后续深入学习的话,可能还涉及到:

PC串口调试助手的使用。

自定义二进制通信协议。二进制数据打包与解包,需要用到python的的struct模块。

使用PySerial让PC与ESP32进行串口通信

推广

扫码关注微信公众号1Z实验室, 回复关键词ESP32串口通信 获取更多源码样例。

source-uart.png

出品:1Z实验室 (1ZLAB: Make Things Easy)

1Z实验室 Make Things Easy . 致力于在机器人+计算机视觉+人工智能的重叠区域, 制作小白友好的教程.

ad.png

参考文献

micropython串口通信_MicroPython-ESP32串口通信-1Z实验室相关推荐

  1. ESP32串口通信 双机串口通信

    ESP32串口 ESP32双机串口通信 环顾论坛居然无使用uart进行双击通信的案例或者讲解!!! 还是自己摸索吧!环境依旧是arduino(熟练使用ESP32后必得用vs code,这个IDE居然有 ...

  2. esp32的uart串口发送16进制通信指令调用实例

    esp32的uart串口发送16进制通信指令调用实例 简介 最近想用esp32通过uart发送的16进制指令来控制一个语言播放模块,记录一下调用uart的过程,请大佬斧正.比较愚笨,过程中踩了很多坑, ...

  3. 变频器怎么设置_如何利用串口调试软件与变频器通信?

     西门子博途的全套视频教程下载!  西门子S7-1500内部培训PPT下载! 每一个做工控的都必须要会利用串口调试软件来和我们的外围设备来做通讯测试.今天我们就来学习怎么用串口调试软件控制台达的这款变 ...

  4. 串口通信模块3:串口通信编程基础(读写、关闭)

    上一节总结了如何打开串口并讨论了如何配置串口,本节是在上一节的基础上,进一步讨论串口编程的基础--如何进行文件读写?如何关闭串口? 1. 读写串口 串口的读写操作和文件的读写操作是一样的,也是通过Re ...

  5. 串口通信模块2:串口通信编程基础(打开、配置)

    有两种方式可以操作串口:同步操作方式和异步操作方式(即重叠操作方式).同步操作时,API函数会阻塞直到操作完成以后才能返回(在多线程方式中,虽然不会阻塞主线程,但是仍然会阻塞监听线程):而异步操作方式 ...

  6. 串口怎样配置才能无论奇偶校验都能正常接收_(七)串口(串行)通信

    (七)串口(串行)通信 一.简介 如果将单片机比作一个人的话,每个单片机都是一个个体,大多数人是无法一个人在这个社会上生存的,通常都需要和领导.家人.朋友.甚至陌生人进行交流,而在交流的时候,交流的双 ...

  7. python串口通信_python 读取串口数据的示例

    python3 读取串口数据 demo 最近在写一个demo,zigbee串口连接树莓派,树莓派使用串口通信接受zigbee穿过来得值.其中我是用的树莓派是3代B+,zigbee每隔三秒钟从串口输出数 ...

  8. linux下串口多线程通信 ,多串口收发数据错乱问题解决办法

    最近在写AM335x平台的串口测试工具,最开始的时候写的第一版本,测试一直很ok,但是存在一些缺陷,于是就想改进一下,没想到后面在新的板子测试,竟然发现了以个很致命的问题,在旧系统旧内核测试一切正常, ...

  9. cubemx stm32 陶晶驰 串口屏 基于YXY通信原理的串口屏驱动代码

    陶晶驰串口屏 资料 陶晶驰串口屏是本质是一个MCU,屏幕是MCU的模块,一般是一块TFT屏幕.在串口屏厂商提供的软件上面编写界面,然后通过串口直接烧到串口屏的MCU上,然后在屏幕上展示出来. 串口屏资 ...

最新文章

  1. wamp php非线程安全,wampserver PHP多版本切换
  2. 嵌入式学习笔记之XMODEM
  3. MySql基础入门-mysql体系结构
  4. .balignl 16,0xdeadbeef浅析
  5. session很快失效_深夜,我偷听到程序员要对session下手...
  6. Apollo进阶课程㉒丨Apollo规划技术详解——Motion Planning with Autonomous Driving
  7. Ubuntu 配置 Tomcat
  8. VisualVM提示检测不到本地JAVA程序
  9. Python编程基础16:类和对象
  10. python fortran混编 ctypes_关于python调用fortran编译的dll的问题
  11. Netty工作笔记0044---scheduledTaskQueue
  12. Bailian2694 逆波兰表达式(POJ NOI0202-1696, POJ NOI0303-1696)【文本】
  13. spring-cloud-demo
  14. java教学视频平台系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  15. 生物信息学入门 富集分析与蛋白质互作用网络(PPI)的可视化 Cystocape入门指南
  16. 2021-03-03-Beamforming algorithms - beamformers
  17. P2893 [USACO08FEB] Making the Grade G(dp优先队列)
  18. windows11桌面删除ie图标
  19. 那些在一个公司死磕了5-10年的人,最后都怎么样了?
  20. ubuntu 下使用 Python 和 SL4A 的 Android 应用程序构建您自己的android开发环境

热门文章

  1. ccna考试真题及经验介绍
  2. 对ETC上线Coinbase反应的众生相
  3. selenium之窗口操作
  4. laravel 模型查找数据
  5. lvs keepalived的tcp 长连接的问题解决办法
  6. Spring Cloud构建微服务架构:服务消费(Ribbon)
  7. 安装Ubuntu18.04遇到的问题
  8. c语言函数指针的理解与使用(学习)
  9. 沈阳初步建成国内领先的城市级大数据资源库
  10. 6.3 Spring Boot集成mongodb开发