注意:建议5v供电,波特率默认115200
- 常用指令
测试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)