锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

【stm32f429igt6】的WiFi模块数据收发。

时间:2023-10-12 01:37:00 igt202传感器无线传感器模块sys

【stm32f429igt6】的WiFi模块数据收发。

主要模块:串口7 、串口3 esp8266 stm429igt6、网络调试助手、串口助手。

在这里插入图片描述

个人对上图的理解哈!
1:u3和WiFi是一对情侣 串口三有一个收发数组。例如,我们需要通过
传感器收集到的数据WiFi将模块发送到远端。将收集到的数据存储在串口3的数组中,WiFi模块将自动发送数组中的数据。当WiFi将收到的数据交给单片机进行交互,WiFi将收到的数据放入串口3的数组中,然后在单片机代码中读取数组OK了。

2:u7.单片机和串口助手,串口7printf函数在串口助手上可视化数据。

我们从main函数一步一步走吧!
int main(void) { 
             u8 data[32];  //my_mem_init(SRAMIN); ////内部内存池的初始化  //my_mem_init(SRAMCCM); ///内部初始化CCM内存池    HAL_Init();                     //初始化HAL库   sys_clock_init(360,25,2,8);     //设置时钟,180Mhz   delay_init(180);                //初始化延迟函数  adc_init();  led_init();                     //初始化LED   uart7_init(4800);             //初始化USART  usart3_init(115200);             //初始化USART  TIM3_Init(100-1,900-1); ///定时器3初始化,定时器时钟90M,900-1的分频系数,    EXTILine6_9_Config();  printf("test");  //atk_8266_wifista_test();  wifi_sta_tcp_client_connect();//wifi 连接  while(1)  { 
              wifi_data_send("lihua");//wifi发送数据给网络助手
		delay_ms(100);
		delay_ms(500);
		wifi_data_receive(data); //wifi接受数据 ,wifi模块将信息存进数组。
		delay_ms(100);
		
	}
	
	wifi_connect_confirm();//确认连接状态并重新连接
}

上面main函数中wifi_sta_tcp_client_connect(); //wifi 连接

这个函数是发送AT指令的。里面的参数在common.c中,所以只要看并修改common.c的代码就好了

void wifi_sta_tcp_client_connect(void)
{ 
        
	u8 ipbuf[16]; 	//IP缓存
	u8 *p;
	u8 a[32];
	p=a;						        //申请32字节内存
	atk_8266_send_cmd("AT+CWMODE=1","OK",50);		//设置WIFI STA模式

	delay_ms(1000);                             //延时4S等待重启成功
	delay_ms(1000);
	delay_ms(1000);
	delay_ms(1000);
	//设置连接到的WIFI网络名称/加密方式/密码,这几个参数需要根据您自己的路由器设置进行修改!! 
	sprintf((char*)p,"AT+CWJAP=\"%s\",\"%s\"",wifista_ssid,wifista_password);  
	//连接目标路由器,并获得IP
	printf("正在连接路由\r\n");
	atk_8266_send_cmd(p,"WIFI GOT IP",1000);
	//检测是否获得STA IP 
	while(atk_8266_send_cmd("AT+CIFSR","STAIP",20));
	atk_8266_send_cmd("AT+CIPMUX=0","OK",20);                //0:单连接,1:多连接
	printf("路由已连接\r\n");
	sprintf((char*)p,"AT+CIPSTART=\"TCP\",\"%s\",%s",server_ip,server_port);
	while(atk_8266_send_cmd(p,"OK",200))
	{ 
        
		LED3=!LED3;
		printf("ATK-ESP 连接TCP失败\r\n"); 
	}	
	LED3=1;
	
	atk_8266_send_cmd("AT+CIPMODE=1","OK",200);            //传输模式为:透传 
		
	atk_8266_get_wanip(ipbuf);                           //服务器模式,获取WAN IP
	USART3_RX_STA=0;
	
}

common.c(这是一部分,我相信大家都因该有完整代码。)

关键参数,
1:你连接的路由器SSID号(WiFi名字)和密码,这里可以看注释
2:你的物理机和esp8266连接同一个WiFi后的物理机ip和端口
(这个会被用在网络助手的参数选择上)配置好后给上面wifi_sta_tcp_client_connect();使用

//WIFI 透传,服务器地址.
const u8* server_ip=“192.168.1.141”;
const u8* server_port=“8081”;


//用户配置区

//连接端口号:8081,可自行修改为其他端口.
const u8* portnum="8082";		 

//WIFI STA模式,设置要去连接的路由器无线参数,请根据你自己的路由器设置,自行修改.
const u8* wifista_ssid="ChinaNet-EM102";		//路由器SSID号
const u8* wifista_encryption="wpawpa2_aes";//wpa/wpa2 aes加密方式
const u8* wifista_password="wearefamily";   //连接密码

//WIFI AP模式,模块对外的无线参数,可自行修改.
const u8* wifiap_ssid="ESP13";			      //对外SSID号
const u8* wifiap_encryption="wpawpa2_aes";	//wpa/wpa2 aes加密方式
const u8* wifiap_password="12345678"; 		  //连接密码 

//WIFI 透传,服务器地址.
const u8* server_ip="192.168.1.141";		
const u8* server_port="8081";	

//4个网络模式
const u8 *ATK_ESP8266_CWMODE_TBL[3]={ 
        "STA模式 ","AP模式 ","AP&STA模式 "};	    //ATK-ESP8266,3种网络模式,默认为路由器(ROUTER)模式 
//4种工作模式
const u8 *ATK_ESP8266_WORKMODE_TBL[3]={ 
        "TCP服务器","TCP客户端"," UDP 模式"};	//ATK-ESP8266,4种工作模式
//5种加密方式
const u8 *ATK_ESP8266_ECN_TBL[5]={ 
        "OPEN","WEP","WPA_PSK","WPA2_PSK","WPA_WAP2_PSK"};


common.c中的 atk_8266_send_data()

这个函数封装了u3_printf()将data发送到WiFi模块然后模块发给网络助手(这里当服务器)。

u8 atk_8266_send_data(u8 *data,u8 *ack,u16 waittime)
{ 
        
	u8 res=0; 
	USART3_RX_STA=0;
	u3_printf("%s",data);	                 //发送命令
	if(ack&&waittime)		                   //需要等待应答
	{ 
        
		while(--waittime)	                   //等待倒计时
		{ 
        
			delay_ms(10);
			if(USART3_RX_STA&0X8000)           //接收到期待的应答结果
			{ 
        
				if(atk_8266_check_cmd(ack))break;//得到有效数据 
				USART3_RX_STA=0;
			} 
		}
		if(waittime==0)res=1; 
	}
	return res;
}

common.c中的 atk_8266_send_cmd()

一条AT指令ESP8266就解析指令然后再开展下一步操作。所以我们发送数据前都先发AT指令。相应的应答我也不是很懂。

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(20);
			if(USART3_RX_STA&0X8000) //接收到期待的应答结果
			{ 
        
				if(atk_8266_check_cmd(ack))
				{ 
        
					//printf("ok");
					break;               //得到有效数据 
				}
					USART3_RX_STA=0;
			} 
		}
		if(waittime==0)res=1; 
	}
	return res;
} 
总结
WiFi模块和单片机是两个事! 单片机的代码不是在WiFi上跑的。所以你看到的都是交互都是基于串口3将单片机和WiFi模快连接。
代码中的什么WiFi发送和接收函数(看英文就ok了)都是使用数组中的数据。

这是AT指令配置WiFi模块

1.设置WIFI 模式为 Station:AT+CWMODE=1
2.连接到家中路由器:AT+CWJAP=“liuyao”,“liuyao1001”
3.发送AT指令建立 TCP 连接:AT+CIPSTART=“TCP”,“192.168.0.103”,8080
4.开启透传模式:AT+CIPMODE=1
5.开始透传发送:AT+CIPSEND
6.串口调试助手发送:hello I m TCP Client!
7.网络调试助手发送:hello I m TCP Server!

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章