【ESP32】串口+wifi 透传,以及回调函数的使用

本文主要记录【ESP32】串口+wifi 透传】的学习记录,主要包括
1.串口的AT 模式和透传模式
2. 串口命令解析
3. socket 连接
4. 回调函数的使用

📋 个人简介

1. 函数接口说明

对应博文:基于ESP32实现一个WIFI透传模块demo

这是一个练手的工程,综合了esp32的几个example,写一个简单的透传demo。参考一下某透传模块的指令,提取出以下几条(每条指令后应该加上换行符,比如"\n"、“\r\n”,否则将不识别):

  • 扫描AP
指令ATWS
响应AP : <num>,<ssid>,<chl>,<sec>,<rssi>,<bssid>
[ATWS] OK
  • 连接到 AP
指令ATPN=<ssid>,<pwd>
响应成功
[ATPN] OK
失败
[ATPN] ERROR:<error_code>
error_code1: 命令格式错误
2: 参数错误
3: 连接 AP失败
4: dhcp 超时
5:无ap信息
  • 建立socket
指令ATPC=<mode>,<Remote Addr>,<Remote Port>
响应成功
[ATPC] OK
失败
[ATPC] ERROR:<error_code>
参数mode:
 0:TCP
error_code1: 命令格式错误
2: 参数错误
3: 连接 server失败
4: 尚未连接AP
注意连接成功后直接进入透传模式

2.开发环境

操作系统:ubuntu 20.04

虚拟机:VMare Workstation 16

IDE:vscode 1.73.1

vscode插件:Espressif IDF v1.5.1

board:淘宝上的ESP32-S3-DevKitC-1兼容板

外置串口板子:淘宝上的cp2102 6合1串口模块

3.硬件连接

esp32_TXD:IO4 <-> 串口模块:RXD

esp32_RXD:IO5 <-> 串口模块:TXD

4.测试结果

说明:这个代码是有bug的,只用作练手用,三个命令必须依次发出去,若socket连接成功后,wifi断开,则程序就会卡死了

4.1发送 ATWS 命令,扫描 wifi 信息

AT 模式下,扫描信息

image-test_atws

4.2连接 wifi 热点指令

发送命令,启动连接任务,当连接失败时:

image-20230909143300997

输入正确密码,连接成功

image-20230909143359905

4.3测试 socket 服务器连接

连接 wifi 成功后,测试 socket

image-20230909144138905

连接成功后,改为透传模式

image-20230909144224146

5.回调函数使用说明

场景描述:

esp32 接收串口消息,然后解析消息,默认是 AT 模式,esp32 会将收到的消息返回至上位机

当收到连接 socket 指令后,若 socket.csocket 连接成功时,自动改为 透传 模式,esp32 会将串口消息发送至 socket 服务器

逻辑流程图,如下图所示:

image-20230909140905806

不同的工作模式下示意图:

image-20230909134710437

v2.0(2019.03.04.1) 提要: 手机连接AP (JF32Wifi_Config),密码默认88888888,打开浏览器,输入http://192.168.4.1即可进入Webconfig页面,WebConfig鉴权默认账户admin,密码88888888,进入后可自行修改; 版本特性: 1.支持BigIoT(贝壳物联)平台接入,在Network setting中选中BigIoT即可,目前只支持它的TCP模式,因此只能使用8181,8282,8585这三个TCP端口,三个端口的区别请查看BigIoT的官方文档 https://www.bigiot.net/help/1.html; 接着,填写好Cloud server setting中的Device ID与API Key并保存,启动后将自动连接到BigIoT的服务器,无论你选用是哪个端口,本固件都将每隔50秒发送一次心跳信息到服务器中,让设备自动保持连接; 2. 本固件的BigIoT模式已做好了,发送到ESP32模块串口的数据将直接到BigIoT服务器,相反BigIoT回来的数据会直接ESP32模块的串口,用户按BigIoT的官方文档,对数据进行解析即可; 3. 根据ESP32的文档,这个版本固件修改了SPIFFS格式化的时长,从20秒改成官方推荐的30秒,如果是新买的模块,首次使用的时候可能要多等一会儿,但更好地保证了格式化SPIFFS分区的正确性; 4. 更新了SDK的版本到1.0.1 5. 还是老话,自用/学习可以,商用请联系开发者,尊重劳动成果人人有责; 后话: 本来还想支持Blinker平台的,但找不到它的通讯协议文档,只找到了它的库,它的库直接集成到我的代码中时,程序无法正常工作(崩溃),如有相关技术资料,可以告诉我,我会尝试集成的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hh_linux

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值