esp32串口通信

1、查看esp32的引脚图,寻找对应的串口

根据原理图,芯片上有3个串口(UART0, UART1UART2),但是UART1没有引出引脚。其中UART0GPIO3用于U0RXDGPIO1用于U0TXD)用作下载、调试串口,引脚不可改变;UART2默认引脚是GPIO16用作U2RXDGPIO17用作U2TXD

2、连接线路,使用Fritzing作图软件

3、esp32作为服务器端等待客户端往eps32发送的消息(使用Thonny软件把下面程序写入到esp32中)

因为串口0作为下载程序使用,所以下面使用串口2作为列子

from machine import UART, Pin
import time# 初始化UART
# 使用UART2,TX=17, RX=16,波特率115200
uart = UART(2, baudrate=115200, tx=17, rx=16)
uart.read()  # 清空缓冲区print("ESP32 UART接收程序已启动")# 主循环
while True:# 检查是否有数据可读if uart.any():# 读取接收到的数据received = uart.readline()try:# 尝试解码为UTF-8字符串message = received.decode('utf-8').strip()print(f"收到消息: {message}")# 发送响应response = f"ESP32已收到: {message}\r\n"uart.write(response.encode('utf-8'))except UnicodeDecodeError:# 如果解码失败,发送错误响应print("收到无法解码的消息")uart.write(b"Error: Invalid message format\r\n")# 短暂延时time.sleep(0.1)

4、客户端往串口2上发送消息,等待esp32的应答。

linux上需要安装pyserial库,运行如下命令

pip3 install pyserial

在虚拟机WSL2中运行客户端程序client.py,代码如下:(注意,需要确保WSL2中已经成功链接了串口2,具体链接步骤见附录)

import serial
import time# 根据系统选择合适的串口名称
port = '/dev/ttyUSB0'  # Linux系统
# port = 'COM4'        # Windows系统# 初始化串口,使用COM4,波特率115200
ser = serial.Serial(port, baudrate=115200, timeout=1)# 主循环
while True:# 发送消息到ESP32message = "Hello ESP32"ser.write((message + "\r\n").encode('utf-8'))print(f"已发送消息: {message}")# 等待ESP32的响应while True:time.sleep(0.1)  # 更短的等待时间if ser.in_waiting > 0:# 读取ESP32返回的消息response = ser.readline().decode('utf-8').strip()print(f"收到ESP32的响应: {response}")break  # 收到响应后退出等待循环

5、最终效果:

esp32收到客户端发送过来的消息,如下。

客户端发送消息后接收到esp32的应答消息。

附:如何让虚拟机WSL2链接上windows上的串口

步骤一:启动虚拟机的前,需要想设置启动串口,把widows上对应的串口映射到虚拟机wsl中,如下。(因为我电脑eps32的串口UART2在windows上显示的是COM4,所以我把对应的COM4映射到虚拟机中)

步骤二:wsl虚拟机中找到usb图标,右键勾选刚刚映射进来的串口,如下图

步骤三:查看wsl虚拟机上的串口是否正常识别,一般已ttyUSB*显示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/26433.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内部静态类和非内部静态类的区别

目录 问题: 原理: 外部类与非内部静态类 外部类与静态内部类 加载顺序 总结: 1.非静态内部类依赖于外部类的实例,而静态内部类不依赖于外部类的实例。 2.非静态内部类可以访问外部类的实例变量和方法,而静态内部…

Redis分布式锁的实现(Redission)

写在前面 本人在学习Redis过程中学习到分布式锁时太多困惑和疑难杂点 需要总结梳理思路 以下思路都是最简单最基本的思路 主要用到Redission工具类 会涉及到看门狗机制等 本文内容部分引自Javaguide,小林coding等热门八股 用于个人学习用途 分布式锁介绍 对于单机多线程来说…

【愚公系列】《Python网络爬虫从入门到精通》038-SQLite数据库

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…

【开源免费】基于SpringBoot+Vue.JS网络海鲜市场系统(JAVA毕业设计)

本文项目编号 T 222 ,文末自助获取源码 \color{red}{T222,文末自助获取源码} T222,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

JDK17安装方法/如何安装JDK17/环境变量配置

双击安装 我们这里安装jdk17 然后更改jdk目录 jdk环境变量配置 右键——>此电脑——>高级系统设置——>环境变量 当前用户的环境变量,另外有一个系统变量。 一般我们配置系统环境变量 一、配置JAVA_HOME 这里我们配置一个JAVA_HOME 我这里先前的jdk…

python集合set的常用方法

目录 集合的定义 集合的基础操作 多个集合之间的操作 集合的for循环 集合的定义 集合的基础操作 集合.add(元素) 添加新元素 集合.pop() 从集合中随机取出一个元素 集合.clear() 清空集合 集合.remove(元素) 移除元素 #定义集合,集合自动去重了 set1{"春"…

看得见摸得着的AI:具身智能

“如果Siri有手有脚,你的生活会变成什么样?” 想象一下: • 你家的扫地机器人不再横冲直撞,而是像猫咪一样轻巧绕过桌脚 • 手机里的语音助手能“摸”到你发烧的额头,主动帮你叫医生 • 工厂里的机械臂会边干活边学习&…

ES、OAS、ERP、电子政务、企业信息化(高软35)

系列文章目录 ES、OAS、ERP、电子政务、企业信息化 文章目录 系列文章目录前言一、专家系统(ES)二、办公自动化系统(OAS)三、企业资源规划(ERP)四、典型信息系统架构模型1.政府信息化和电子政务2.企业信息…

【算法学习之路】4.简单数论(4)

简单数论(4) 前言三.高精度1.什么是高精度2.解决办法 精度乘除法一.精度乘法1.数据的存储2.步骤3.例题:高精度乘法 二.精度除法1.例子2.步骤3.例题:高精度除法 前言 我会将一些常用的算法以及对应的题单给写完,形成一套…

Linux 动静态库和_make_进度条(一)

文章目录 一、如何理解条件编译二、动静态库1. 理论2. 实践3. 解决普通用户的sudo问题4. 技术上理解库 三、make和make_file 一、如何理解条件编译 1. gcc code.c -o code -DM 命令行级别的宏定义预处理的本质就是修改编辑我们的文本代码 头文件展开到源文件中去注释宏替换条…

基于springboot+vue的拖恒ERP-物资管理

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

Leetcode-853. Car Fleet [C++][Java]

目录 一、题目描述 二、解题思路 Leetcode-853. Car Fleethttps://leetcode.com/problems/car-fleet/description/ 一、题目描述 There are n cars at given miles away from the starting mile 0, traveling to reach the mile target. You are given two integer array …

Vue核心知识:动态路由实现完整方案

在Vue中实现动态路由,并结合后端接口和数据库表设计,是一个复杂的项目,需要多个技术栈和步骤的配合。以下将详细描述整个实现过程,包括数据库设计、后端接口设计、前端路由配置以及如何实现动态路由的功能。 目录 一、需求分析二…

CMU15445(2023fall) Project #4 - Concurrency Control踩坑历程

把树木磨成月亮最亮时的样子, 就能让它更快地滚下山坡, 有时会比骑马还快。 完整代码见: SnowLegend-star/CMU15445-2023fall: Having Conquered the Loftiest Peak, We Stand But a Step Away from Victory in This Stage. With unwavering…

天疱疮是一种慢性、严重的皮肤疾病

天疱疮是一种慢性、严重的皮肤疾病,对患者的日常生活带来很大的困扰。为了更好地预防天疱疮的发生,我们需要了解其成因及传播途径,并采取相应的预防措施。以下是关于天疱疮预防的小知识。 一、了解天疱疮 天疱疮是一种自身免疫性疾病&#…

神经网络代码入门解析

神经网络代码入门解析 import torch import matplotlib.pyplot as pltimport randomdef create_data(w, b, data_num): # 数据生成x torch.normal(0, 1, (data_num, len(w)))y torch.matmul(x, w) b # 矩阵相乘再加bnoise torch.normal(0, 0.01, y.shape) # 为y添加噪声…

解决android studio(ladybug版本) gradle的一些task突然消失了

今天不知道干了啥,AS(ladybug版本)右边gradle的task有些不见了,研究了半天解决了,这里记录下: 操作: File -->Settings-->Experimental--> 取消选项“Enable support for multi-vari…

软件测试之白盒测试知识总结

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 概念与定义 白盒测试:侧重于系统或部件内部机制的测试,类型分为分支测试(判定节点测试)、路径测试、语句测试…

Unity中动态切换光照贴图的方法

关键代码:LightmapSettings.lightmaps lightmapDatas; LightmapData中操作三张图:lightmapColor,lightmapDir,以及一张ShadowMap 这里只操作前两张: using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI;public cl…

LLC谐振变换器恒压恒流双竞争闭环simulink仿真

1.模型简介 本仿真模型基于MATLAB/Simulink(版本MATLAB 2017Ra)软件。建议采用matlab2017 Ra及以上版本打开。(若需要其他版本可联系代为转换)针对全桥LLC拓扑,利用Matlab软件搭建模型,分别对轻载&#xf…