Esp8266 wifi模块测试 stm32f103 uart4

注意:建议5v供电,波特率默认115200

  1. 常用指令

        测试wifi模块是否与32连接 

         选择wifi的模式

        连接wifi 

 

         设置传输模式:透传是模块将32发来的信息向外界发送,非透传是向模块发送指令

         建立TCP连接

 2. 常用指令

        二话不说直接上代码

函数的介绍:

注:send_get函数的times和get都已经失效,暂时没删去这两个参数,可以合理的随便赋值

/*
send_get函数
参数:
	str   要发送给esp模块的指令
	rest  预计esp会反馈的信息
	times 一次发送的最大的等待时间
	n_max 最大发送次数
返回值:
	如果发送次数大于n_max则返回0
	成功则返回1
*/
u8 send_get(u8* str,u8* rest,u16 times_max,u8 n_max);
/*
touchuan函数
参数:
	type  1为开启透传,0为关闭透传
返回值:
	失败则返回0
	成功则返回1
*/
u8 touchuan(u8 type);
/*
check_at函数
参数:无
返回值:
	失败则返回0
	成功则返回1
*/
u8 check_at(void);
/*
wifi_connect函数
参数:
	ssid  wifi名字
	pwd   wifi密码
返回值:
	失败则返回0
	成功则返回1
*/
u8 wifi_connect(char* ssid , char* pwd);
/*
Tcp_c_connect函数
参数:
	ip    服务端ip地址
	port  服务端端口号
返回值:
	失败则返回0
	成功则返回1
*/
u8 Tcp_c_connect(char* ip , char* port);

send_get函数

u8 send_get(u8* str,u8* rest,u16 times_max,u8 n_max)
{
	u16 times = 0;
	u8 n = 0;
	u4_printf("%s\r\n",str);
  while(strstr((const char*)USART4_RX_BUF,(const char*)rest) == NULL) 
  {
//		if(n == n_max && times == times_max)
//			break;
// 	  if(times == times_max)
//	 	 u4_printf("AT\r\n") , times = 0 ,delay_ms(1),n++;
//	  times++;
		n = 0;
  }
	for(times = 0;times < uart4_num;times++)
  {
  	 USART4_RX_BUF[times] = 0;
  }
	uart4_num = 0;
//	if(n < n_max)
		return 1;
//	else
//		return 0;
}

check_at函数

u8 check_at(void)//wifi模块是否连接正常
{
	if(send_get("AT","OK",5000,1))
	{
		return 1;
	}
	else
		return 0;
}

touchuan函数

u8 touchuan(u8 type)//透传的开启1与关闭0
{
	if(type == 1)//开启透传
	{
		if(send_get("AT+CIPMODE=1","OK",5000,1))
		{
			delay_ms(1000);
			if(send_get("AT+CIPSEND","OK",5000,1))
			{
				return 1;
			}
			else
				return 0;
		}
		else
			return 0;
	}
	else//关闭透传
	{
		if(send_get("AT+CIPMODE=0\r\n","OK",5000,1))
			return 1;
		else
			return 0;
	}
}

wifi_connect函数

u8 wifi_connect(char* ssid , char* pwd)
{
	char p[100];
	sprintf(p,"AT+CWJAP=\"%s\",\"%s\"",ssid,pwd);
	if(send_get((u8*)p,"WIFI CONNECTED",5000,1))
		return 1;
	else
		return 0;
}

tcp_connect函数

u8 Tcp_c_connect(char* _ip , char* _port)
{
	char p[100];
	sprintf(p,"AT+CIPSTART=\"%s\",\"%s\",%s","TCP",_ip, _port);
	delay_ms(10);
	if(send_get((u8*)p , "CONNECT" , 5000 , 1))
	{
		return 1;
	}
	else
		return 0;
}

主函数代码

int main(void)
{	
	int t = 0;
	char *sid  = "Public";
	char *pwd  = "";
	char ip[16]   = "172.16.24.206";
	char *port = "4399";
	delay_init();	    	 //延时函数初始化	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
	uart_init(115200);	 //串口初始化为9600
	usart4_init(115200);	 
	LED_Init();		  	 //初始化与LED连接的硬件接口 
	
	
	u4_printf("+++");
	delay_ms(1000);

	check_at();
	printf("监测在线成功\r\n");
	delay_ms(1000);
	send_get("AT+CIPMODE=0","OK",5000,1);
	printf("AT+CIPMODE=0成功\r\n");
	delay_ms(1000);
	send_get("AT+CWMODE=1","OK",5000,1);
	printf("AT+CWMODE=1成功\r\n");
	delay_ms(1000);
	wifi_connect(sid,pwd);
	printf("wifi连接成功\r\n");
	delay_ms(3000);
	Tcp_c_connect(ip,port);
	printf("tcp连接成功\r\n");
	delay_ms(1000);
	touchuan(1);
	printf("开启透传成功\r\n");
	delay_ms(1000);
	while(1)
	{
		u4_printf("你好\r\n");
		delay_ms(1000);
	}	 
}

完整的工程链接:ESPwifi使用(stm32)/f103mini · 李嘉轩/OAT_网络 - 码云 - 开源中国 (gitee.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值