stm32实现esp8266的AT指令

  • 前言
  • 一、什么是AT指令?
    • 1、概述
    • 2、指令类型
  • 二、实现步骤
    • 1、分析原理
    • 2.配置
    • 3.代码编写
  • 结果演示

前言

物联网,万物互联。这里涉及到的最基本的东西就是如何将所有的物联网设备连接在一起。最简单、最广泛使用的就是互联网。乐鑫公司推出的高性能、低功耗串口wiFi模块ESP8266应该是使用最广泛的一种wIFI模块之一了。

ESP8266内置一个Tensilica(泰思立达〉Xtensa架构的32位处理器L106,具有5级流水线(ARMCortexM3是3级流水线),最大时钟速度为160MHz,可以使用高达16MB的外部SPI Flash。该模块采用串口与MCU(或其他串口设备)通信,内置TCP/IP协议栈,能够实现串口与 wIFI之间的转换。通过该模块,传统的串口设备只需要简单的串口配置,即可通过wiFi传输自己的数据。

WiFi具有两种功能模式:一种叫 AP(Access Point)模式,一种叫Station模式。AP就是我们平时所说的热点,如无线路由器,开了热点的手机等,这些AP设备可以允许其他设备(如手机,笔记本电脑等)输入热点名(SSID)和密码(也可不设置密码)后连接上网;Station则是前面说的连接AP的设备,如手机,笔记本电脑等。ESP8266除支持上述两种模式以外,还可以支持第三种模式:AP+Station,即:将AP 和Station的功能合二为一,它主要是实现无线桥接的功能,该模式应用的场景不多,这里不作介绍。

ESP8266模块自身带有高性能的MCU,因此它既可以通过串口连接为外部 MCU提供 wiFi通信功能;也可以让用户直接在模块内置的MCU上基于RTOS SDK进行软件编程,开发出具有低功耗、低成本的WiFi连接产品,如市面上绝大部分的WiFi智能插座基本上都是直接使用ESP8266模块作主控芯片开发的。


一、什么是AT指令?

1、概述

AT即Attention,它由拨号调制解调器(Modem)的发明者贺氏公司(Hayes)为了控制Modem发明的控制协议。协议本身采用文本,每个命令均以AT打头,因此得名。90年代初,AT指令仅被用于Modem操作。

几年后,主要的移动电话生产厂商诺基亚、爱立信、摩托罗拉和HP共同为GSM研制了一整套AT指令,其中就包括对SMS的控制。AT指令在此基础上演化并被加入GSM 07. 05标准以及现在的GSMO7.07标准,其中拨打电话、收发短信、收发传真等全部由AT命令实现。而在随后的GPRS控制,3G模块,以及工业上常用的PDJ,均采用AT命令集来控制,这样AT指令也就成为了完全标准化和比较健全的标准。

AT指令是以AT作为开头,\r\n字符结束的字符串,每个指令执行成功与否都有相应的返回。其他的一些非预期的信息(如有人拨号进来、线路无信号等),模块将有对应的一些信息提示,接收端可做相应的处理。

2、指令类型

类型 指令格式 描述
执行指令 AT+<> 该命令用于执行受模块内部程序控制的变参数不可变的功能。
测试指令 AT+<>=? 该命令用于该命令用于查询设置指令的参数以及取值范围。
查询指令 AT+<>? 该命令用于返回参数的当前值。
设置指令 AT+<>=<…> 该命令用于设置用户自定义的参数值。

二、实现步骤

1、分析原理

① 从USART1收到的数据(PC端发过来的)转发给USART2(ESP8266 WiFi模块);

② 从USART2收到的数据(ESP8266 WiFi模块)转发给USART1(PC端)

流程图:

2.配置

①usrt1和usart2配置

保存

3.代码编写

② usart.c

static  uint8_t s_uart1_rxch;
char    g_uart1_rxbuf[256];
uint8_t g_uart1_bytes;//串口2
static  uint8_t s_uart2_rxch;
char    g_uart2_rxbuf[256];
uint8_t g_uart2_bytes;
/* USER CODE END 0 */UART_HandleTypeDef huart1;
UART_HandleTypeDef huart2;

usart1和usart2配置

void MX_USART1_UART_Init(void)
{/* USER CODE BEGIN USART1_Init 0 *//* USER CODE END USART1_Init 0 *//* USER CODE BEGIN USART1_Init 1 *//* USER CODE END USART1_Init 1 */huart1.Instance = USART1;huart1.Init.BaudRate = 115200;huart1.Init.WordLength = UART_WORDLENGTH_8B;huart1.Init.StopBits = UART_STOPBITS_1;huart1.Init.Parity = UART_PARITY_NONE;huart1.Init.Mode = UART_MODE_TX_RX;huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart1.Init.OverSampling = UART_OVERSAMPLING_16;huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;if (HAL_UART_Init(&huart1) != HAL_OK){Error_Handler();}/* USER CODE BEGIN USART1_Init 2 */HAL_UART_Receive_IT(&huart1, &s_uart1_rxch, 1);/* USER CODE END USART1_Init 2 */}
/* USART2 init function */void MX_USART2_UART_Init(void)
{/* USER CODE BEGIN USART2_Init 0 *//* USER CODE END USART2_Init 0 *//* USER CODE BEGIN USART2_Init 1 *//* USER CODE END USART2_Init 1 */huart2.Instance = USART2;huart2.Init.BaudRate = 115200;huart2.Init.WordLength = UART_WORDLENGTH_8B;huart2.Init.StopBits = UART_STOPBITS_1;huart2.Init.Parity = UART_PARITY_NONE;huart2.Init.Mode = UART_MODE_TX_RX;huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart2.Init.OverSampling = UART_OVERSAMPLING_16;huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;if (HAL_UART_Init(&huart2) != HAL_OK){Error_Handler();}/* USER CODE BEGIN USART2_Init 2 */HAL_UART_Receive_IT(&huart2, &s_uart2_rxch, 1);/* USER CODE END USART2_Init 2 */}void uart_forward(void)
{if( strstr(g_uart1_rxbuf, "\r\n") ){HAL_UART_Transmit(&huart2, (uint8_t *)g_uart1_rxbuf, g_uart1_bytes, 0xFF);clear_uart1_rxbuf();}if(g_uart2_bytes > 0){HAL_Delay(100);   //等待AT指令接收完成HAL_UART_Transmit(&huart1, (uint8_t *)g_uart2_rxbuf, g_uart2_bytes, 0xFF);clear_uart2_rxbuf();}
}

HAL_UART_RxCpltCallback();数据完全接受完成后调用

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if(huart->Instance == USART1){if( g_uart1_bytes < sizeof(g_uart1_rxbuf) ){g_uart1_rxbuf[g_uart1_bytes++] = s_uart1_rxch;}HAL_UART_Receive_IT(&huart1, &s_uart1_rxch, 1);}//usart2if(huart->Instance == USART2){if( g_uart2_bytes < sizeof(g_uart2_rxbuf) ){g_uart2_rxbuf[g_uart2_bytes++] = s_uart2_rxch;}HAL_UART_Receive_IT(&huart2, &s_uart2_rxch, 1);}
}

结果演示

stm32实现esp8266的AT指令相关推荐

  1. STM32使用ESP8266模块AT指令连接心知天气API获取天气信息

    由于之前使用STM32单片机来开发一些物联网的小项目,接触到了WIFI模块ESP8266,所以写下来记录一下.本文主要介绍的是STM32通过发送AT指令集来控制ESP8266 WIFI模块连接WiFi ...

  2. stm32车联网监控源码_物联网DIY,STM32配合ESP8266,APP控制LED,可以绑定天猫精灵...

    大家好,超子能力有限,技术不高,有什么错误的地方,欢迎批评指正.今天的文章不讲通信中的各种协议了,咱们做一个物联网入门的DIY程序设计,用意法半导体的STM32单片机配合ESP8266的WiFi模块, ...

  3. STM32与ESP8266物联网编程

    小白能懂:嵌入式进阶:RTOS嵌入式系统框架 第一章 嵌入式常用裸机编程框架 第二章 面向对象编程基础 第三章 ESP8622物联网基础 第四章 STM32与ESP8266物联网编程 文章目录 **小 ...

  4. 基于STM32的ESP8266天气时钟(2)--------MCU获取天气数据

    前言:上一章节我们通过串口调试助手,成功获取到天气数据,这一节我们将通过MCU的串口发送.接收功能,实现MCU获取天气数据. 传送门:基于STM32F103的网络天气时钟(1)---------通过串 ...

  5. 基于STM32的ESP8266使用教程(一)

    关于为什么要写这篇文章,因为之前在做一个项目的时候需要使用WIFI模块.X宝搜WIFI模块的时候推荐ESP8266这个模块,说是价格便宜.使用方便.但是在使用的过程中发现的确使用方便(因为是基于AT指 ...

  6. 基于STM32的ESP8266使用教程(二)

    写在前面:博主懒癌晚期,考研结束之后想着HAPPY一下,结果把这事忘了,开学了又有很多事情要干,直到昨天一博友留言(有邮件提醒),才想起有这么个坑要填,特来填坑.相关软件程序请参考"基于ST ...

  7. 基于STM32与ESP8266的太空人WiFi天气时钟(代码开源)

    前言:本文为手把手教学ESP8266著名开源项目--太空人WiFi天气时钟,不同的是本次项目采用的是STM32作为MCU.两者开发过程中有因为各自芯片的特点(时钟频率,内存大小等),导致开发程序大不相 ...

  8. 学习素材之USART篇——通过使用STM32与ESP8266(esp-01s)连接阿里云系列操作来了解USART协议和寄存器操作

    内容 通过使用STM32与ESP8266(esp-01s)连接阿里云系列操作来了解USART协议和寄存器操作 目录 USART详解 一.串口通讯协议简介 串口通讯的物理层 串口通讯的协议层 二.STM ...

  9. 【STM32 x ESP8266】连接 MQTT 服务器(报文,附部分源码解析)

    MQTT 协议作为物联网非常重要的传输协议,如何使用它十分重要,如果有不理解的同学可以点击这里学习,这里只是简单介绍一下.同时这里附上MQTT 3.1.1协议中文版 pdf 的链接,对协议底层感兴趣的 ...

最新文章

  1. DeepLearning tutorial(2)机器学习算法在训练过程中保存参数
  2. pandas实战教学电子书上线啦
  3. [BUUCTF-pwn]——gyctf_2020_borrowstack
  4. 如何找到SAP Spartacus UI可以扩展的outlet
  5. Java Duration类| isNegative()方法与示例
  6. Modbus协议栈应用实例之五:Modbus ASCII主站应用
  7. 不就是SELECT COUNT语句吗,竟然能被面试官虐的体无完肤
  8. 'OFFSET' 附近有语法错误。 在 FETCH 语句中选项 NEXT 的用法无效。
  9. bug篇——Windows启动redis报错Creating Server TCP listening socket 127.0.0.1:6379: bind: No error...
  10. Qt浅谈之三十二二维码条形码解析
  11. 新萝卜家园 GhostXP_SP3 五一纪念版
  12. 健康管理师可以从事哪些工作
  13. # Kinect V2 简介
  14. 以rpm为后端及以yum为前端工具的程序包管理器在Linux发行版系统centos中的使用...
  15. 21day学通python epub_Python Day21
  16. Spark 安装配置及下载地址
  17. 【流媒体】视频技术的一些基础概念
  18. 使用itext和JasperReports生成PDF文档
  19. GB 18030介绍及其与相关标准的比较-GB 18030的优点
  20. 实在智能RPA微观:电商应该如何告别单身

热门文章

  1. Java项目:基于java+ssm社会保险养老系统(计算机毕业设计)
  2. 香港虚拟主机哪家比较好
  3. css实现div盒子内显示两行或三行,超出部分用省略号显示
  4. 级联操作、一对多、多对多、代码demo
  5. 充电器快充取电芯片XSP06Q+锂电池5A电流快速充电
  6. java计算机毕业设计中小学教务管理平台源码+mysql数据库+系统+部署+lw文档
  7. redis集群读写,容错切换,从属调整,扩容,缩容
  8. 几个jQuery的图片裁剪插件
  9. windows10下nacos安装启动
  10. 使用blat实现在window系统下通过BAT批处理脚本发邮件功能