前言
这一节,我们来聊聊stm32的fota例程中用到的wifi芯片esp8266。这里涉及到一个基于该芯片的wifi模块esp-01。它是安信可公司基于esp8266 芯片的wifi模块。在stm32 fota demo工程里,我们用它来实现无线通信。下面先来认识一下该模块,然后在demo里重点介绍基于esp8266 芯片相关底层驱动的实现过程。
esp-01模块
esp-01模块集成esp8266ex wifi芯片,支持802.11b/g/n协议,支持uart/gpio等接口,内嵌lwip协议栈,支持sta/ap/sta+ap工作模式,是一款低成本的无线模块。
esp-01模块采用dip-8封装。尺寸和引脚定义见下图。提供一个uart接口和两个gpio口。
stm32f769探索板的cn2接口支持对esp-01模块的扩展,可以直接将esp-01模块插在cn2接口上。stm32f769和esp-01之间通过串口通信,串口配置为:115200波特率,8位数据位,无奇偶校验,1位停止位。连接如下:
at指令格式
esp-01的at指令集就是esp8266的at指令集。可以细分为四种类型:
要注意的是,不是每条at指令都具备上面4种类型,具体要去看该条at指令的说明。
使用双引号表示字符串数据。比如“123”,就是一个字符串,而123就是数字。
开头的at指令两个字符必须大写,每条命令以回车换行符结尾“\r\n”
esp8266的at指令集又分为:基础at命令(对模块的配置,串口设置等),wifi功能at命令(设置wifi模式,连接ap等),tcp/ip功能at命令(建立tcp连接,收发数据等)。
作为tcp客户端工作
模块初始化
程序上电运行后,在开始使用wifi模块前,必须先对其进行初始化。除了gpio口以及串口的初始化外,还需要对wifi模块进行配置,使其工作在我们希望的模式下。在stm32 fota demo里esp8266应该工作在station模式和多连接模式下。所以在初始化的时候,需要通过相应的at指令进行配置。下面是初始化的代码以及at指令执行的过程。
连接到ap
上图的黄色部分是wifi模块的返回状态。必须要接收到ok\r\n,才能去读取ip地址。连接wifi热点的过程,需要的时长不一定,有时2、3秒,有时6、7秒。所以这里最好把等待的时间 留长一点,否则经常会出现连接wifi热点失败的情况。
与服务器建立连接
连接到wifi热点后,就可以开始与服务器建立连接了。esp8266支持5个并发连接。
一般我们知道的不是目标服务器的ip地址,而是域名。所以在开始创建连接之前需要先通过dns服务获该取域名对应的ip地址。esp8266也提供了相应的at指令。
下面是代码中的一段和建立连接相关的代码:
发送数据
发送数据过程分两步:
1.发送at+cipsend=,命令。说明要往哪个socket通道,发送多少字节的数据。
2.收到wifi模块返回的ok\r\n>后,再发送数据。
下面是例程中,esp8266发送数据的代码实现。
接收数据的模式
注意:该示例中mqtt和http应用都在一个task里面调用,如果在不同的task实现,接收驱动需要做相应修改。
小结
在例程中,和wifi模块相关的驱动由三层组成:
在esp8266_io.c中,是最底层的跟stm32外设打交道的部分。包括初始化引脚,从串口读取和发送数据;
esp8266.c中是对at指令的实现。
wifi.c是wifi底层驱动和上层的一个接口。我们可以看到它的函数和esp8266.c中的某些函数名字都很类似。
我们前面讲的内容基本都在这三个文件中,对于如果想更换wifi模块来讲,它主要涉及到的代码也就是这三部分。
裸眼3D在医疗领域的应用
模拟的革命:德州仪器启动创新研究中心硅谷实验室
饿了么正式宣布收购百度外卖 内部邮件曝光
含银焊锡丝优缺点有哪些?
增添哪些新成员?北斗地面增强系统实现1厘米定位
STM32 OTA例程中的WiFi芯片ESP8266
通信模块在自动摊铺机中分布式控制系统中的应用
苍穹数码获批博士后科研工作站,打造高水平科研人才团队
如何进行晶体二极管的正负极判断
将AI和数据分析联系:以找到新冠病毒的治疗方法
VISYON推出全新VR视频点播平台,兼容大多数VR头盔
基于声表面波的无线无源温度传感器为此提供了良好的解决方案
美国打华为就像狗追车,中美“科技冷战”
基于微处理器实现一对异步串口连接的接口设计
IDEA 30个天花板技巧
AI编译器的逐底竞争
S7-1500 DB数据块的类型和使用方法1
博世宣布适用于飞行出租车的新传感器平台
机器人在工业4.0中扮演什么角色
OmniVision推出采用业界最小的分割像素技术的汽车图像传感器