STM32 ESP8266模块的探索&AT指令介绍

文章讲述了作者在将ESP8266与STM32F103集成过程中遇到的固件烧录问题、电源问题,以及如何通过AT指令操作和OneNET驱动进行WiFi连接的详细过程。作者强调了正确供电的重要性。
摘要由CSDN通过智能技术生成

这是本文的配套资料,最终工程请参考 新_ESP8266资料\stm32f103成功移植的项目

【免费】stm32f103c8t6esp8266资料资源-CSDN文库

一、等到了ready

产品参数

我使用的是ai-thinker的esp8266-01s,以下为产品规格书

引脚定义: 

 依据引脚定义,GND接GND,VCC接3.3V,TX接USB转TTL的Rx, Rx 接USB转TTL的RX,之后尝试多次,都只是显示

初次尝试

ets Jan 8 2013,rst cause:2, boot mode:(3,6)

[12:27:20.994]

[12:27:20.994] load 0x40100000, len 6960, room 16

[12:27:21.004] tail 0

[12:27:21.004] chksum 0xa5

[12:27:21.004] load 0x3ffe8008, len 24, room 8

[12:27:21.014] tail 0

[12:27:21.014] chksum 0x1c

[12:27:21.014] load 0x3ffe8020, len 3196, room 8

[12:27:21.024] tail 4

[12:27:21.024] chksum 0xde

[12:27:21.024] csum 0xde

[12:27:21.211]

[12:27:21.214] ets Jan 8 2013,rst cause:4, boot mode:(3,6)

[12:27:21.224]

[12:27:21.224] wdt reset

[12:27:21.224] ets_main.c

查了许多资料,说是没刷固件,于是用flash down tool刷固件,可总是停在sync,最终看到这位大佬的文章:ESP8266烧录固件提示等待上电同步,下载失败-CSDN博客

尝试后问题虽解决,但总是烧录不了,以下是日志:

0x3ff00050: 17790000
0x3ff00054: 020078bc
0x3ff00058: 1c00b000
0x3ff0005c: 00c8c9a3
check_err_0: 0bcheck_err_1: 00check_err_2: 00check_err_3: 02check_err_4: 0b====================
EFUSE NORMAL MODE 

接到5v依旧不行,我认为不是电源问题。。。

烧录固件

ESP8266 教程2 — 烧录AT固件_esp8266烧录固件教程-CSDN博客

找到问题(电源)

知道某一天,我购买了tft lcd屏幕,vcc gnd接好,但就是不亮!当时改了三天的驱动,依旧不行。抱着死马当活马医的心态,我用两节干电池供电,居然亮了!!!我于是意识到电源不对,用万用表检测3.3v引脚和gnd引脚之间的电压,发现只有2.23V!!!我不用jlink供电,直接供电,再次测量,是3.27V,看来,这jlink害人不浅!!!

最终,终于等到了ready!!!

电脑上也能看到ESP_XXX的WiFi 

我尝试了很多供电方式,发现两节干电池供电不稳,一直乱码;插座上的USB供电,电流不够,esp8266反复重启;USB转TTL供电显示ets Jan 8 2013,rst cause:4, boot mode:(3,6) 。只有用USB充电线连接电脑USB口和stm32f103电源接口时才显示ready。

二、测试AT指令

使用友善串口助手测试,但发送了AT、AT\r\n都没反应,使用ai-thinker官方的串口调试助手成功接收到OK 

AT+GMR—查询版本信息

AT+CIPSERVER—建⽴ TCP 服务器

AT+CIPSERVERMAXCONN—设置服务器允许建⽴的最⼤连接数

AT+CIPMODE—设置传输模式 AT+SAVETRANSLINK—保存透传到 Flash

AT+CIPSTO—设置 TCP 服务器超时时间

AT+PING—Ping 功能

AT+CIUPDATE—通过 Wi-Fi 升级软件

AT+CIPDINFO—接收⽹络数据时是否提示对端 IP 和端⼝

+IPD—接收⽹络数据

AT+CIPRECVMODE—设置 TCP 连接的数据接收⽅式

AT+CIPRECVDATA—被动接收模式时,读取缓存的 TCP 数据

AT+CIPRECVLEN—被动接收模式时,查询缓存 TCP 数据的⻓度

AT+CIPSNTPCFG—设置时域和 SNTP 服务器.

AT+CIPSNTPTIME—查询 SNTP 时间..................................................

详细指令可参考 本文资料

三、模块介绍

芯片

如图,芯片左侧焊接的是一块flash,用于存储程序,右侧是esp8266芯片,前方是板载天线 。

上方有一个LED灯,当串口收发数据时会闪烁

芯片型号可参照ESP8266系列模组专题 | 安信可科技 (ai-thinker.com)

 接线

tx接RX,RX接TX,EN接3.3v(外接一个上拉电阻更好)

AT指令

1.简介

1.AT command set(AT指令集)AT(attention)

处理成功,返回OK

处理失败,返回ERROR

2.波特率为115200

3.发送时要勾选发送新行,否则要加\r\n(CR(Carriage Return回车\r)LF(Line feed换行\n))

4.有的指令标注了保存到flash,这样的是再次开机依旧有效的

例如我想知道当前AT+CWMODE的值:

AT+CWMODE?
+CWMODE:1

OK

我想设置AT+CWMODE的值:

AT+CWMODE=1

OK

(我使用的esp8266用的可能是旧版的固件,只有AT+CWMODE,新版 应该有AT+CWMODE_CUR和AT+CWMODE_DEF两种)

像AT、AT+RST都是固定的,不带参数,属于执行指令

2、基础指令

示例:
AT+GMR
AT version:2.3.0.0-dev(s
-bcd64d2 - ESP8266 - Jun 23 2021 11:42:05)
SDK version:v3.4-22-g967752e2
compile time(b498b58):Jun 30 2021 11:28:20
Bin version:2.2.0(ESP8266_1MB)

OK

发送ATE0关闭回显(E可能为echo缩写):

ATE0

OK

在发送AT,就只会回复OK了

ATE1开启回显

3.基础WIFI功能

1.AT+CWMODE

四、移(白)植(嫖)onenet驱动

找驱动

onenet例程可参考本文资料

我是用的是这个免费的公共mqtt服务器:免费的公共 MQTT 服务器 | EMQ (emqx.com)

下载好我提供的资料后,打开 新_ESP8266资料\2.OneNET-V3.2-OneNET-裸机-基础例程\21.MQTT-例程\1.ESP8266-MQTT-订阅、发布主题

查看引脚定义,发现stm32f103c8t6的RX引脚有PA3和PA10 ,TX有PA2和PA9

这里我们使用PA2、PA3和esp8266通信,PA9和PA10和电脑通信,便于调试

main.c中     const char *topics[] = {"kylinBoard"}; 设置mqtt通信的主题,可参考这位大佬的博文:详解MQTT主题和通配符_mqtt topic 通配符-CSDN博客

做微调

esp8266.c中

#define ESP8266_WIFI_INFO       "AT+CWJAP=\"ONENET\",\"IOT@Chinamobile123\"\r\n"

ONENET是WIFI名称、IOT@Chinamobile123是WiFi密码,配置成自己家的WIFI

#define ESP8266_ONENET_INFO     "AT+CIPSTART=\"TCP\",\"183.230.40.39\",6002\r\n"

 183.230.40.39改成自己服务器的IP

6002改成自己服务器的端口

我使用的是emqx的公用服务器,改成#define ESP8266_ONENET_INFO     "AT+CIPSTART=\"TCP\",\"broker.emqx.io\",1883\r\n"

成功

最终打印出信息

PROID: 77247, AUIF: test, DEVID:5616839

Tips: 连接成功

Subscribe Topic: stmSmartDesktopScreen/cmd

Tips: MQTT Subscribe OK

topic: /mylocator/sub, topic_len: 14, payload: {"lock_SW":1}

, payload_len: 14

topic: /mylocator/sub, topic_len: 14, payload: {"lock_SW":1}

, payload_len: 14

topic: /mylocator/sub, topic_len: 14, payload: {"lock_SW":1}

, payload_len: 14

topic: /mylocator/sub, topic_len: 14, payload: {"lock_SW":1

最后,请大家一定注意供电,注意供电,注意供电,我就是被供电害惨了!!!

开发 ESP8266 WiFi 模块STM32 库函数需要进行以下步骤: 1. 确定 ESP8266 WiFi 模块的 AT 指令集 在使用 ESP8266 WiFi 模块之前,需要先了解其支持的 AT 指令集,包括 AT+RST、AT+CWMODE、AT+CWJAP、AT+CIPSTART、AT+CIPSEND 等。可以通过 ESP8266 WiFi 模块的官方文档或 AT 指令集手册来获取这些信息。 2. 初始化 STM32 的串口通信 ESP8266 WiFi 模块使用串口与 STM32 进行通信,因此需要在 STM32 上初始化串口通信。可以使用 STM32 的 USART 库函数来实现。 3. 封装 ESP8266 WiFi 模块的 AT 指令 在进行 ESP8266 WiFi 模块的 AT 指令通信时,需要将 AT 指令封装成一串字符串,并通过串口发送给 ESP8266 WiFi 模块。在 STM32 库函数中,可以封装一个函数来实现该功能。 4. 实现 ESP8266 WiFi 模块的 AT 指令响应 当 ESP8266 WiFi 模块接收到 STM32 发送的 AT 指令后,需要返回响应信息。可以通过 STM32 的串口接收中断来实现对 ESP8266 WiFi 模块响应信息的接收,并通过库函数将其处理。 5. 实现 WiFi 模块的网络连接 通过使用 ESP8266 WiFi 模块的 AT 指令,可以实现 WiFi 模块的网络连接。可以通过封装 STM32 库函数来实现 ESP8266 WiFi 模块的网络连接。 6. 实现 WiFi 模块的数据传输 通过 ESP8266 WiFi 模块的 AT 指令,可以实现 WiFi 模块的数据传输,包括数据发送和数据接收。可以封装 STM32 库函数来实现 ESP8266 WiFi 模块的数据传输。 总之,使用 STM32 库函数开发 ESP8266 WiFi 模块需要对 ESP8266 WiFi 模块的 AT 指令集有一定的了解,并且需要熟悉 STM32 的串口通信和 USART 库函数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值