【常用模块】ESP8266 WIFI串口通信模块使用详解(实例:附STM32详细代码)_esp8266串口wifi实例

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

但是这也存在一个问题,要是我后来又想发送命令了,但是却也当成是数据发送过去了。这可怎么办?

这就要退出透传模式了。怎么退出,发送数据"+++"就可以了。注意:此时“+++”后面,不接“发送新行”!

WIFI模块的使用

ESP8266的一般使用顺序

这里的“一般”指的是:ESP8266连接当前环境的热点,与服务器建立TCP连接,传输数据。

  1. AT+CWMODE=1:设置工作模式(STA模式)
  2. AT+RST:模块重启(生效工作模式)
  3. AT+CWJAP=“111”,“11111111”:连接当前环境的WIFI热点(热点名,密码)
  4. AT+CIPMUX=0:设置单路连接模式
  5. AT+CIPSTART=“TCP”,“xxx.xxx.xxx.xxx”,xxxx:建立TCP连接
  6. AT+CIPMODE=1:开启透传模式
  7. AT+CIPSEND:透传模式下,传输数据
  8. +++:退出透传模式
ESP8266的封装代码

关于与单片机的引脚连接:ESP8266与USART3(引脚PB10、PB11)连接。

首先是USART的配置:

#include "delay.h"
#include "usart3.h"
#include "stdarg.h"	 	 
#include "stdio.h"	 	 
#include "string.h"	 
#include "timer.h" 

//串口接收缓存区 	
u8 USART3_RX_BUF[USART3_MAX_RECV_LEN]; 				//接收缓冲,最大USART3_MAX_RECV_LEN个字节.
u8  USART3_TX_BUF[USART3_MAX_SEND_LEN]; 			//发送缓冲,最大USART3_MAX_SEND_LEN字节

//通过判断接收连续2个字符之间的时间差不大于10ms来决定是不是一次连续的数据.
//如
### 使用ESP8266实现STM32的OTA远程升级 尽管提供的参考资料主要描述了使用ESP32来完成STM32的OTA更新[^1],但可以基于类似的原理扩展到ESP8266平台。以下是关于如何通过ESP8266实现STM32 OTA远程升级的具体方法。 #### 1. 原理概述 ESP8266作为无线通信模块负责接收来自服务器的新固件文件并将其传输至STM32微控制器。STM32接收到新固件后执行自我更新操作。此过程涉及以下几个核心部分: - **网络连接**:ESP8266建立Wi-Fi连接以访问互联网上的固件资源。 - **数据传输协议**:通常采用HTTP或MQTT等协议下载固件。 - **串口桥接**:ESP8266通过UART接口将固件发送给STM32。 - **Bootloader支持**:STM32需具备自定义引导加载程序以便处理传入的固件包。 #### 2. 软硬件准备 - 硬件方面需要一块带有足够闪存空间用于存储临时固件镜像的ESP8266开发板以及目标设备——即待升级的任意型号STM32单片机。 - 软件上则要编写适用于双方的操作逻辑代码;对于ESP端而言主要是获取指定URL下的二进制文件并通过串行链路传递出去;而MCU侧重点在于解析这些字节流进而实施刷写动作。 #### 3. 实现步骤详解 ##### (a) 配置环境与依赖库安装 确保已正确设置Arduino IDE或其他IDE中的ESP8266开发环境,并导入必要的第三方类库比如WiFiClientSecure.h 或者 PubSubClient.h 如果计划利用SSL加密或者消息队列技术的话。 ##### (b) 编码示例 - ESP8266部分 下面给出一段简单的伪代码展示如何让ESP8266充当网关角色从远端拉取最新版本的应用软件再推送给下游节点: ```cpp #include <ESP8266WiFi.h> #include <WiFiClient.h> const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; void setup() { Serial.begin(9600); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED){ delay(500); Serial.println("Connecting to WiFi..."); } } void loop(){ HTTPClient http; String url = "http://example.com/firmware.bin"; if(http.begin(url)){ int httpResponseCode = http.GET(); if(httpResponseCode>0){ File f = SPIFFS.open("/firmware.bin", FILE_WRITE); // Save firmware locally first if(f){ size_t totalBytesRead=0; while(http.connected()){ uint8_t buffer[64]; size_t bytesRead=http.read(buffer,sizeof(buffer)); if(bytesRead<=0){break;} f.write(buffer,bytesRead); totalBytesRead+=bytesRead; } f.close(); Serial.printf("Downloaded %d bytes\n",totalBytesRead); sendToFirmwareToSTM(); // Custom function defined elsewhere }else{ Serial.println("Failed opening file on SPIFFS"); } }else{ Serial.printf("GET request failed with code:%s\n",http.errorToString(httpResponseCode).c_str()); } http.end(); } } ``` 上述脚本片段展示了怎样构建一个基本框架去抓取在线托管的服务器上的二进制映象并且保存下来之后转发给另一个实体,在这里就是我们的ARM Cortex-M系列处理器单元。 ##### (c) STM32端编程要点 针对接受方也就是嵌入式系统的控制芯片来说,它应该能够监听特定波特率的数据流入事件,并按照预定算法逐步填充内部Flash区域直至整个流程结束为止。这部分工作可能涉及到中断服务子程序的设计或者是轮询机制的选择取决于具体应用场景的需求差异性。 值得注意的是,为了简化事务复杂度同时也提高安全性水平,建议预先烧录好专门定制过的bootloader组件进去,这样即使主应用程序崩溃也不会影响后续迭代部署的可能性。 --- ### 结论 综上所述,借助于成本低廉却功能强大的物联网模组如ESP8266完全可以达成跨地域范围内的自动化维护目的—即时推送修正补丁或是全新特性集合给现场运行的产品实例们带来便利的同时也降低了人工干预频率从而节约运营开支提升效率效益比值。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值