正文
基于STM32F407的WIFI通信(使用的是ESP8266模块)
本次做的是WIFI通信所实现的功能是:由单片机端向客户端发送数据。模式:STA模式(及连接路由器的方式)。(所实现的功能比较简单,只是单方向发送,测试5次,每次均成功,非常稳定,代码也非常简洁)。废话不多说,直接上代码。
(本次上传的代码对于比较懂的仁兄已经够用,如果还有仁兄想要参考完整的源码,可加我微信:wpt666aaa 或QQ:2036795517),这个很方便的。
主要代码
主函数部分:
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "usmart.h"
#include "usart3.h"
#include "common.h"
#include "esp8266.h"
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
delay_init(168);
uart_init(115200);
usart3_init(115200);
esp8266_start_trans();
delay_ms(1000);
esp8266_send_data("555",100);
atk_8266_quit_trans();
while(1)
{
}
}
- 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
- 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
esp8266.c文件
void esp8266_start_trans(void)
{
atk_8266_send_cmd("AT+CWMODE=1","OK",50);
atk_8266_send_cmd("AT+RST","ready",100);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
while(atk_8266_send_cmd("AT+CWJAP=\"WPT\",\"123456789\"","WIFI GOT IP",800));
atk_8266_send_cmd("AT+CIPMUX=0","OK",30);
while(atk_8266_send_cmd("AT+CIPSTART=\"TCP\",\"192.168.43.63\",8080","OK",180));
atk_8266_send_cmd("AT+CIPMODE=1","OK",180);
atk_8266_send_cmd("AT+CIPSEND","OK",60);
}
common.c文件
u8* atk_8266_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;
}
u8 atk_8266_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(atk_8266_check_cmd(ack))
{
printf("ack:%s\r\n",(u8*)ack);
break;
}
USART3_RX_STA=0;
}
}
if(waittime==0)res=1;
}
return res;
}
u8 atk_8266_quit_trans(void)
{
while((USART3->SR&0X40)==0);
USART3->DR='+';
delay_ms(15);
while((USART3->SR&0X40)==0);
USART3->DR='+';
delay_ms(15);
while((USART3->SR&0X40)==0);
USART3->DR='+';
delay_ms(500);
return atk_8266_send_cmd("AT","OK",20);
}
u8* esp8266_send_data(u8 *cmd,u16 waittime)
{
char temp[5];
char *ack=temp;
USART3_RX_STA=0;
u3_printf("%s",cmd);
if(waittime)
{
while(--waittime)
{
delay_ms(10);
if(USART3_RX_STA&0X8000)
{
USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;
ack=(char*)USART3_RX_BUF;
printf("ack:%s\r\n",(u8*)ack);
USART3_RX_STA=0;
break;
}
}
}
return(u8*)ack;
}
- 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
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 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
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
至于其余的文件都是一些常规的配置文件,这里就不多说了,如果想要源码添加我的联系方式私聊我即可。
结果展示
上图是我试验所得到的结果,之前说过了,我向电脑发送的数据是我自己随便取的一段数字:555。大家可以根据自己的喜好设置数据发送的内容。
上图是我用到的单片机和WIFI通信模块。
经验总结
本人实现这个功能前前后后花了将近一个月,学到了很多东西,可能对于大佬来说,我现在做的都算不上什么,不过对于我这个单片机入门水平的小白来说,感慨还是挺多的。
1.首先,就是一定要保证你的单片机是可以正常运行的,WIFI通信模块(本人使用的是正点原子的ESP28266模块,性能还是可以的)。可以用一个USB转TTL进行指令操作,判断ESP8266模块是否能正常运行(因为最近要忙着准备电赛,这个我过一段时间会再发布一个对应的指令调试教程)
2.其次,一定要多阅读代码。我是查阅了CSDN上几乎所有的相关代码,各种修改,删减,浓缩成现在这个样子。目前我这个代码放眼整个CSDN应该算是最精简的了(当然,不排除某些牛逼的大佬可以做到更加精简),你们可以在我这个代码的基础上添加各种功能,如果不需要,你就可以直接拿来用了。
3.你只有看懂了,才能拿来用,所以最好不要放过任何一个疑问,说不定这个疑问就是解决问题的关键。
4.最后在强调一下我这部分代码实现的功能:由单片机向电脑或手机传送数据(你们需要在电脑或手机下载一个网络调试助手)。或者自己开发一个APP用来接收数据。如果你们想要双向数据传输,可自行添加修改代码,这里我就不便多说了。可以说我提供的这段代码算是最最基础的,你们可以在这个基础上做一些“上层建筑”,都是可以的。
5.最后的最后,支持还是要支持一下的,请求各路英雄豪杰多多打赏,多多关注,多多点赞,我是只发布高质量文章的李白有点儿黑。
源码的链接:https://download.csdn.net/download/qq_50027598/18936540