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

STM32与ESP8266模块探索及AT指令测试

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

【免费】stm32f103c8t6esp8266资料资源-优快云文库

一、等到了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烧录固件提示等待上电同步,下载失败-优快云博客

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

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烧录固件教程-优快云博客

 

找到问题(电源)

知道某一天,我购买了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。

总结了一种检验的方式,如果说模块重启之后,在波特率为74880的系统启动日志当中显示,当前的启动模式为1,7,则证明确实进入了下载模式,否则一定要查看IO0(gnd)  io15(gnd) rst(vcc)  en(vcc)等IO口的电平,对照手册以确保正确启动。烧录完程序之后,需要将io0拉至高电平再重启才能正常运行程序(或者也可以将rst短暂接地)

 

后续踩坑

 

近使用esp12f模块画了一个最小系统版,当io0接地的时候,启动每一次串口助手都会崩溃,甚至会导致电脑蓝屏重启esp模块本身也会重启,后续发现是我个人设计的USB HUB供电能力不足,并且CP en引脚上拉电阻过小,上电瞬时电流过大,造成模块反复重启.总之,一定要使用独立供电

 

之后在烧录程序的时候不小心把串口助手接反,导致五伏的电源接在了该模块的rx引脚上,当时拔掉串口重启后,依旧成功运行程序,但是下载程序之后,会反复重启,并且会在串口助手发送跟踪信息sector 1024

怀疑是烧坏了rx,导致程序下载失败假设该模块所谓的从flash启动,指的是从外部flash启动,或许可以通过直接烧写板载flash芯片的方式补救,后续有空再考证

 

esp01烧写失败

 

总结到正确的烧写经验之后,决定尝试之前一直烧写失败的esp01模块。该模块启动后,可在74880波特率下观察到正确的启动信息,但是一直无法下载程序.使用esp flash tool发现显示错误信息:设置串口波特率失败

 这张图是网上找的,我确定使用的是esp 8255,其他参数包括,波特率全部设置正确,最终怀疑是模块本身质量问题

 

二、测试AT指令

使用友善串口助手测试,但发送了AT、AT\r\n都没反应,或许该串口支助手不支持字符串转义,一定要使用ai-thinker官方的串口调试助手,一定要使用ai-thinker官方的串口调试助手,一定要使用ai-thinker官方的串口调试助手!!!

 

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和电脑通信,便于调试

https://www.bilibili.com/video/BV1ae411W7yD/?p=9&spm_id_from=333.999.top_right_bar_window_history.content...

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

然后为了便于我们进行m QT t调试,建议使用这个m QT t调试器

mqtt fx目前应该是不让免费用了,但是emqx官网有一个免费工具

 

 https://mqttx.app/zh/downloads

第一步,打开之后,这个名称还有用户名密码随便填,然后建立一个连接

第二步,订阅一个主题,这个主题就相当于是从单片机往电脑发的一个主题

单片机端代码

//我发布的是我的数据,订阅的是公家的数据

 

    const char *topics[] = {"xxx/hub/sub"};

    OneNet_Subscribe(topics, 1);

    printf("OneNet_Publish\r\n");
            
    OneNet_Publish("xxx/hub/pub", "MQTT Publish Test");
            
    ESP8266_Clear();

 

 

做微调

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

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

五,常试获取网络时间和天气

第一步,连接WIFI

方式一直接配网

步骤    AT 指令    说明    
1    `AT\r\n`    测试模块是否响应,返回 `OK`    
2    `AT+RST\r\n`    重启模块,返回 `ready` 表示启动完成    
3    `AT+CWMODE=1\r\n`    设置为 Station 模式(仅连接路由器)    
4    `AT+CWJAP="SSID","密码"\r\n`    连接 Wi-Fi,例如:`AT+CWJAP="MyWiFi","12345678"`    
5    `AT+CIFSR\r\n`    获取分配到的 IP 地址,返回类似: `+CIFSR:STAIP,"192.168.1.100"`    
 

 

方式二 smartstart

 

指令 说明 

`AT+CWSTARTSMART=1\r\n` 启动 SmartConfig(支持 ESP-Touch )

网上大部分的参数都为三,但是我的at指令只支持一

Esp touch下载地址

手机使用 ESP-Touch App 输入 Wi-Fi 名称和密码 

 注意,一旦成功连接WIFI那么esp的芯片会在flash保存这个WIFI,下次在上电的过程当中会自动连接,不用再次配网

第二步,建立TCP连接获取网络时间

 

AT+CIPSTART="api.k780.com",80

网上有很多实例,都是通过TCP去模拟一个http的请求头,但是实测没有办法正常请求,这个网站的API key需要自己去申请,但是发现错误请求可以返回一个GMT时间,于是不用注册也可以白嫖

AT+CIPSEND=5
> GET

大概是这样的数据

bad request........

nail....

8:10:10
注意,还有一种写法是AT+CIPSEND后面直接跟上请求的内容,但是实测每这样每次都会返回一个错误,建议把数据长度写成一个较大的值,然后再第二次发送请求内容

 

AT+CIPCLOSE

第三步,注册知心天气的API k获取天气

 https://www.seniverse.com/login

登录知心天气官网注册并且开通这个免费的服务

之后,点击控制台,再点击里面的我的产品,之后就能看到自己的密钥

 同样的方式,但是这次把请求换成下面这个:

GET https://api.seniverse.com/v3/weather/now.json?key=XXX&location=xiaogan&language=en&unit=c

成功拿到天气json!

 

五,尝试使用platform IO进行开发

 

未完待续

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值