当前位置:   article > 正文

ESP8266控制基于STM32f103智能小车_通过esp8266控制智能小车

通过esp8266控制智能小车

1. 引言

STM32智能小车需要做一个用WIFI控制小车运行和舵机运转的需求。所以选用ESP8266WIFI模块,采用其透传模式来实现这一功能。所谓透传模式就是,服务器端下发指令到ESP8266;而ESP8266模块不会对指令进行任何的数据处理,直接将指令通过uart传给单片机。


2. 接线

在这里插入图片描述
上图是ESP8266简易的PCB,如图所示,ESP8266一共有8个接口。
首先我们需要连接VCC和GND,
UTXD接STM32的RX,
URXD接单片机的TX,
CH_PD(EN)脚随便接一个GPIO口,编程该GPIO引脚拉至高电平
其余引脚悬空


3. 资料下载

正点原子ESP8266资料
安信可ESP8266资料下载—提取码8889


4.代码

ESP8266.c

#include "esp8266.h"
#include "string.h"
#include "usart.h"
#include "usart3.h"
#include "stm32f10x.h"
#include "sys.h" 
#include "delay.h"
#include "led.h"

void esp8266_start_trans(void)
{
	//设置工作模式 1:station模式   2:AP模式  3:兼容 AP+station模式
	esp8266_send_cmd("AT+CWMODE=2","OK",50);
	//Wifi模块重启
	esp8266_send_cmd("AT+RST","OK",20);
	delay_ms(1000);         //延时3S等待重启成功
	delay_ms(1000);
	delay_ms(1000);	
    //AP模式
	esp8266_send_cmd("AT+CWSAP=\"ESP8266\",\"12345678\",1,4","OK",200);
	esp8266_send_cmd("AT+CIPMUX=1","OK",20);
	esp8266_send_cmd("AT+CIPSERVER=1,8080","OK",200);
}
//向ESP8266发送命令
//cmd:发送的命令字符串;ack:期待的应答结果,如果为空,则表示不需要等待应答;waittime:等待时间(单位:10ms)
//返回值:0,发送成功(得到了期待的应答结果);1,发送失败
u8 esp8266_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
{
	u8 res=0; 
	USART3_RX_STA=0;
	u3_printf("%s\r\n",cmd);	//发送命令
	if(ack&&waittime)		//需要等待应答
	{
		while(--waittime)	//等待倒计时
		{
			delay_ms(10);
			if(USART3_RX_STA&0X8000)//接收到期待的应答结果
			{
				if(esp8266_check_cmd(ack))
				{
					printf("ack:%s\r\n",(u8*)ack);
					break;//得到有效数据 
				}
					USART3_RX_STA=0;
			} 
		}
		if(waittime==0)res=1; 
	}
	return res;
} 
//ESP8266发送命令后,检测接收到的应答
//str:期待的应答结果
//返回值:0,没有得到期待的应答结果;其他,期待应答结果的位置(str的位置)
u8* esp8266_check_cmd(u8 *str)
{
	char *strx=0;
	if(USART3_RX_STA&0X8000)		//接收到一次数据了
	{ 
		USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;//添加结束符
		strx=strstr((const char*)USART3_RX_BUF,(const char*)str);
	} 
	return (u8*)strx;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64

ESP8266.h

#ifndef __ESP8266_H
#define __ESP8266_H
#include "sys.h"
#include "stdio.h"	

//用户配置AT指令
extern char restart[];
extern char cwmode[];
extern char cwlap[];
extern char cwjap[];
extern char cifsr[];
extern char cipmux[];
extern char cipstart[];
extern char cipsend[];
extern char cipserver[];
extern char cwlif[];
extern char cipstatus[];
extern char cipsto[];
extern char cipmode[];
extern char test[];


//函数

u8 esp8266_send_cmd(u8 *cmd,u8 *ack,u16 waittime);
u8* esp8266_send_data(u8 *cmd,u16 waittime);
u8* esp8266_check_cmd(u8 *str);
void esp8266_start_trans(void);
u8 esp8266_quit_trans(void);	
#endif

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

部分main.c

int main(void)
{
	    delay_init();									// 延时函数初始化
	    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 设置NVIC中断分组2;2位抢占优先级;2位响应优先级
		usart3_init(115200);							// 串口初始化为115200
	    GPIO_init();
	    esp8266_start_trans(); // esp8266进行初始化
	    while (1)
	    { 
		  if (USART3_RX_STA & 0x8000)
		  {
			printf("USART3_RX_BUF=%s\r\n", USART3_RX_BUF);
			sprintf(a, "%s", USART3_RX_BUF);
			printf("a=%s", a);
			// 判断收到的字符串是否含有“forward”
			if (strstr((const char *)a, "forward"))
			{
				Forward();
				delay_ms(10);
			}
			else if (strstr((const char *)a, "back"))
			{
				Back();
				delay_ms(10);
			}
			USART3_RX_STA = 0;
			}	
	    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

5. 结尾

代码部分还应该有uart的初始化部分,和CH_PD脚的GPIO口拉高部分。在这里没有过多赘述。上述文章若有不对的地方还请指点。

源代码自提—提取码sqnh

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/684638
推荐阅读
相关标签
  

闽ICP备14008679号