ESP8266使用

ESP8266使用

如何开发esp8266?

通过串口发送AT指令,发送指令都要带上换行,设置波特率(出厂是esp8266的波特率可能是115200,看厂家说明),配置工作模式等操作。

1. 上电后,发送ATAT+RST指令:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EgUlzfis-1685439912769)(ESP8266%E4%BD%BF%E7%94%A8.assets/image-20230530131948028.png)]

出现OK和ready,说明上电成功。

2. 上电成功后,重新配置波特率(可以配置也可以不配置),我喜欢用9600波特率。指令是:

AT+UART=9600,8,1,0,0

配置完后,重新上电,串口助手调整波特率为9600再连接。

3. 继续发送发送ATAT+RST指令。

4. 设置工作模式:

AT+CWMODE=3 //1. 是station(设备)模式 2.是AP(路由)模式 3.是双模

出现OK即为成功:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-52TeUPcW-1685439912770)(ESP8266%E4%BD%BF%E7%94%A8.assets/image-20230530132537091.png)]

5. 作为设备模式使用时,需要连接与服务器同一局域网的wifi,直接(esp8266和电脑)连接同一个wifi即可,我连接的是手机热点。指令是:

AT+CWJAP="Xiaoli","Hao123555" //指令 热点名 密码(注意:热点名必须是不带中文的)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OW0Sdr5m-1685439912770)(ESP8266%E4%BD%BF%E7%94%A8.assets/image-20230530133025062.png)]

出现以上结果即为连上。连上后,手机会给esp8266分配一个ip地址,这样就可以连接服务器了。

6. 查看自身ip地址和被分配的ip地址:

AT+CIFSR //指令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3gyhBBWC-1685439912771)(ESP8266%E4%BD%BF%E7%94%A8.assets/image-20230530133459466.png)]

7. 连接服务器:

串口发送指令连接服务器:

AT+CIPSTART="TCP","192.168.104.239",8888 //指令,注意双引号逗号都要半角(英文)输入

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ivKv5FFA-1685439912772)(ESP8266%E4%BD%BF%E7%94%A8.assets/image-20230530134035402.png)]

连接成功后:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w4sPN6Rq-1685439912772)(ESP8266%E4%BD%BF%E7%94%A8.assets/image-20230530133853388.png)]

电脑如何查看ip地址:

  • win+R
  • cmd
  • ipconfig

8. 开启透传模式开始发送消息:

AT+CIPMODE=1 //开启透传模式
AT+CIPSEND //带回车
//发送两次不带换行的+++即可退出透传模式
+++
+++

既然通过发送指令就可以玩转esp8266,上面我是通过电脑的串口助手来发送指令,这样下面我们通过stm32单片机来完成这个发送指令的任务,我们就可以通过esp8266来点灯了。

当然,以上是把esp8266当做设备来使用的,可能会稍微复杂点,那么接下来,我们可以把esp8266当做服务器来使用(也就是wifi),这样实现esp8266点灯就会简单些。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z87BCr1T-1685439912773)(ESP8266%E4%BD%BF%E7%94%A8.assets/image-20230530154113226.png)]

stm32首先给esp8266发送相应的AT指令,这样就激活esp8266当做服务器,电脑连接上esp8266发出的wifi信号(客户端接入服务器),这样电脑就可以通过网络助手,来发送数据,进而控制stm32。

1. 设置工作模式

AT+CWMODE=2
//返回值:OK

2. 使能多链接

AT+CIPMUX=1
//返回值:OK

3. 建立TCPServer

AT+CIPSERVER=1 // default port = 333
//返回值:OK

4. 网络助手连接esp8266

//返回值0,CONNECT OK

5. 网络助手发送数据

//返回值:+IPD,0,n: xxxxxxxxxx 
//+IPD是固定字符串 0是通道,n是数据长度,xxx是数据

6. 断开连接

AT+CIPCLOSE=0
//返回值:0,CLOSED OK

以上就是当esp8266作为服务器时,需要发送的指令。


CubeMx配置:
以stm32f103ZET6为例。
1,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FeSqfVqY-1685439912773)(ESP8266%E4%BD%BF%E7%94%A8.assets/image-20230530160910826.png)]

2,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yhNyJfMv-1685439912774)(ESP8266%E4%BD%BF%E7%94%A8.assets/image-20230530161007613.png)]

3,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-alrGRReN-1685439912774)(ESP8266%E4%BD%BF%E7%94%A8.assets/image-20230530160808599.png)]

4,配置串口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XvXKypco-1685439912775)(ESP8266%E4%BD%BF%E7%94%A8.assets/image-20230530161122229.png)]

5,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yHJBwhQR-1685439912775)(ESP8266%E4%BD%BF%E7%94%A8.assets/image-20230530161227495.png)]

6,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0KMv3zMW-1685439912776)(ESP8266%E4%BD%BF%E7%94%A8.assets/image-20230530161259880.png)]

7,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Su6owt1e-1685439912776)(ESP8266%E4%BD%BF%E7%94%A8.assets/image-20230530161421109.png)]

8,配置路径

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GlxKAOyT-1685439912776)(ESP8266%E4%BD%BF%E7%94%A8.assets/image-20230530161603224.png)]

9,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-srRjNk3R-1685439912777)(ESP8266%E4%BD%BF%E7%94%A8.assets/image-20230530161641111.png)]

10,

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C1ddQD13-1685439912778)(ESP8266%E4%BD%BF%E7%94%A8.assets/image-20230530161912046.png)]


main.c代码如下:

/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : main.c
  * @brief          : Main program body
  ******************************************************************************
  * @attention
  *
  * Copyright (c) 2023 STMicroelectronics.
  * All rights reserved.
  *
  * This software is licensed under terms that can be found in the LICENSE file
  * in the root directory of this software component.
  * If no LICENSE file comes with this software, it is provided AS-IS.
  *
  ******************************************************************************
  */
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "usart.h"
#include "gpio.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "stdio.h"
#include "string.h"
/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
uint8_t uart_buf[2] = {'\0'};

_Bool OK_flag = 0;
_Bool Connect_flag = 0;
/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */

//1,设置工作模式
//uint8_t sworkMode[] = "AT+CWMODE=2\r\n";
//2,使能多连接
//uint8_t enabled[] = "AT+CIPMUX=1\r\n";
//3,建立TCPServer
//uint8_t TCPServer[] = "AT+CIPSERVER=1\r\n";

/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
//uart发送PA9
int fputc(int ch,FILE *f)//改写printf
{
	HAL_UART_Transmit(&huart1,(unsigned char *)&ch,1,50);
	return ch;
}

//接收中断函数PA10
uint8_t uart[12] = {'\0'};
int i = 0;
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	if(uart_buf[0] == 'O' || uart_buf[0] == '0' || uart_buf[0] == ':')
	{
		i = 0;
		memset(uart,'\0',sizeof(uart));
	}
	uart[i++] = uart_buf[0];
	memset(uart_buf,'\0',sizeof(uart_buf));
	
	if(i == 12) i = 0;
	
	if(uart[0] == 'O' && uart[1] == 'K') //OK
	{
		OK_flag = 1;
		memset(uart,'\0',sizeof(uart));
	}
	
	if(uart[0] == '0' && uart[1] == ',' && uart[2] == 'C') //0,CONNECT OK
	{
		Connect_flag = 1;
		memset(uart,'\0',sizeof(uart));
	}
	
	if(uart[0] == ':' && uart[1] == 'L' && uart[2] == '2') //OPEN 灯2
	{
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_1,GPIO_PIN_RESET);//点亮PC1
		memset(uart,'\0',sizeof(uart));
	}
	
	if(uart[0] == ':' && uart[1] == 'C' && uart[2] == 'L') //CLOSE
	{
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_1,GPIO_PIN_SET);//关闭PC1
		memset(uart,'\0',sizeof(uart));
	}
	
	HAL_UART_Receive_IT(&huart1,uart_buf,1);
}


/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
	HAL_UART_Receive_IT(&huart1,uart_buf,1);
	
	HAL_Delay(1000);//上电延时1s
	
	//1,设置工作模式
	printf("AT+CWMODE=2\r\n");
	while(!OK_flag) HAL_Delay(50);
	OK_flag = 0;
	
	//2,使能多连接
	printf("AT+CIPMUX=1\r\n");
	while(!OK_flag) HAL_Delay(50);
	OK_flag = 0;
	
	//3,建立TCPServer
	printf("AT+CIPSERVER=1\r\n");
	//while(!OK_flag);
	OK_flag = 0;
	while(!Connect_flag) HAL_Delay(50);
	
	printf("Connect successfully...\r\n");
	if(Connect_flag)
	{
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_RESET);
	}
	Connect_flag = 0;
	
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  };
  /* USER CODE END 3 */
}

/**
  * @brief System Clock Configuration
  * @retval None
  */
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  /** Initializes the RCC Oscillators according to the specified parameters
  * in the RCC_OscInitTypeDef structure.
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }

  /** Initializes the CPU, AHB and APB buses clocks
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  {
    Error_Handler();
  }
}

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**
  * @brief  This function is executed in case of error occurrence.
  * @retval None
  */
void Error_Handler(void)
{
  /* USER CODE BEGIN Error_Handler_Debug */
  /* User can add his own implementation to report the HAL error return state */
  __disable_irq();
  while (1)
  {
  }
  /* USER CODE END Error_Handler_Debug */
}

#ifdef  USE_FULL_ASSERT
/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t *file, uint32_t line)
{
  /* USER CODE BEGIN 6 */
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */


  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值