STM32通过ESP8266与云服务器的通信

个人从局域网内调试ESP8266开始就碰了一堆壁,在此总结一下,希望可以帮到看到这篇文章的人,关键性细节问题详情请见第五部分
注:仅以STA模式为例
第一部分:描述
STM32通过ESP8266连接无线路由器访问阿里云服务器并实现透传
第二部分:硬件连接
一般的ESP8266都是6针脚,我个人的连接方式是:VCC接3.3v,GND接GND,RXD与TXD分别接USART3的TXD与RXD。另外两个引脚不需要管。

本次试验我所用的硬件:stm32f103zet6,esp8266,笔记本电脑,云服务器,家用的无线路由器(要能联网,还得开启DHCP)

第三部分:工程及程序描述
逻辑流程:先把ESP8266设置为STA Client透传模式,然后使用串口调试助手向USART1发送字符串,在USART1的接收中断内把字符串发送给USART3,再通过ESP8266经由无线路由器寻址云服务器,最终把字符串发送到云服务器。在云服务器端的SocketTool将收到字符串。

主要代码:

#include "sys.h"
#include "delay.h"
#include "usart.h"  		 	 		
#include "usart3.h"
#include "common.h" 
#include "StaConfig.h"
/************************************************
 第一次测试完成日期:2020/2/7
 第一次描述:通过USART3连接ESP8266的TX与RX。相关AT指令以及数据发送均通过USART3进行
 主函数调用setClient设置为STAClient透传模式与阿里云服务器取得通信,通过在电脑上使用
 串口助手发送字符串到串口1并在串口1中断服务函数内通过调用发送数据函数通过串口3发送给
 ESP8266,然后再经由路由器发送到云服务器。云服务器端通过网络调试助手创建一个TCP SERVER
 然后就可以向STM32发送数据了,接收到的数据由相应函数处理回显到串口调试助手内。
************************************************/


 int main(void)
 {	 
	u8 ipbuf[50];
	delay_init();	    	 //延时函数初始化	  
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
	uart_init(115200);	 	//串口初始化为115200
	usart3_init(115200);		//初始化串口3 
	setClient(ipbuf);
	while(1)
	{
		atk_8266_at_response(1);
		delay_ms(300);
	}
}
#include "StaConfig.h"
#include "common.h"
/***********************************************************/
//第一次测试完工日期:2020/2/7																	
//作者:lht
/***********************************************************/
 void setClient(u8 *ipbuf)//设置ESP8266工作在STA模式的CLIENT设置并开启透传
 {
	//printf("AT恢复出厂设置:%d\n",atk_8266_send_cmd("AT+RESTORE","OK",1000));
	 printf("AT测试:%d\n",atk_8266_send_cmd("AT","OK",500));
	 printf("设置为STA模式:%d\n",atk_8266_send_cmd("AT+CWMODE=1","OK",500));//设置为STA模式
	 printf("重启:%d\n",atk_8266_send_cmd("AT+RST","OK",500));//重启生效
		delay_ms(1000);         //延时3S等待重启成功
		delay_ms(1000);
		delay_ms(1000);
	 printf("连接到路由器:%d\n",atk_8266_send_cmd("AT+CWJAP=\"FAST666\",\"你的路由器密码\"","OK",1000));//连接路由器
	 printf("设置单链接:%d\n",atk_8266_send_cmd("AT+CIPMUX=0","OK",3500));
	 atk_8266_get_wanip(ipbuf);
	 printf("IP:%s\n",ipbuf);																																			
	 //端口号不要带引号,否则会有意想不到的错误。
	 printf("连接到服务器:%d\n",atk_8266_send_cmd("AT+CIPSTART=\"TCP\",\"39.96.35.227\",8080","OK",3000));//连接到SERVER
	 printf("开启透传模式:%d\n",atk_8266_send_cmd("AT+CIPMODE=1","OK",3500));//开启透传模式
	 printf("开始透传:%d\n",atk_8266_send_cmd("AT+CIPSEND","OK",550));//开始透
 
 }
	 
  void setServer(u8 *ipbuf)//设置ESP8266工作在STA模式的SERVER设置
 {
	 //printf("AT恢复出厂设置:%d\n",atk_8266_send_cmd("AT+RESTORE","OK",1000));
	 printf("AT测试:%d\n",atk_8266_send_cmd("AT","OK",500));
	 printf("设置为STA模式:%d\n",atk_8266_send_cmd("AT+CWMODE=1","OK",500));//设置为STA模式
	 printf("重启:%d\n",atk_8266_send_cmd("AT+RST","OK",500));//重启生效
		delay_ms(1000);         //延时3S等待重启成功
		delay_ms(1000);
		delay_ms(1000);
	 printf("连接到路由器:%d\n",atk_8266_send_cmd("AT+CWJAP=\"FAST666\",\"你的路由器密码\"","OK",1000));//连接路由器
	 printf("设置多链接:%d\n",atk_8266_send_cmd("AT+CIPMUX=1","OK",3500));
	 printf("开启服务器:%d\n",atk_8266_send_cmd("AT+CIPSERVER=1,8086","OK",2000));
	 atk_8266_get_wanip(ipbuf);
	 printf("IP:%s\n",ipbuf);
	 printf("开始传输:%d\n",atk_8266_send_cmd("AT+CIPSEND=3,25","OK",550));//开始透传
 }

第四部分:测试
透传发送:使用串口调试助手向USART1发送字符串,在USART1的接收中断内把字符串发送给USART3,再通过ESP8266经由无线路由器寻址云服务器,最终把字符串发送到云服务器。在云服务器端的SocketTool将收到字符串

透传接收:服务器端发送字符串后ESP8266将收到的字符串发送给USART3,然后再把字符串打印到串口调试助手内显示
在这里插入图片描述
在这里插入图片描述

第五部分:问题警示
1.拿到ESP8266后我们通常都是先用AT指令测试下。当把ESP8266与板子连接好后不要误以为可以直接通过串口调试助手向ESP8266发送指令。除非直接连在串口1上。ESP8266返回的信息也是要在程序内接收中断函数的打印出来才会显示的,不是直接就能显示。即没有程序支持你的信息是显示不出来的

2.Sta Client模式下连接无线路由器的时候SSID与PASSWORD都是要带双引号的,并且编辑为一条字符串信息,而不是分成两条

3.连接服务器时端口号不要带双引号,否则要出问题。并且把协议类型,IP,端口编辑为一条字符串信息,协议类型与IP均用双引号。

4.当在自己电脑上用网络调试助手建立TCP Server供ESP8266连接时你的电脑不要用无线网,否则无法建立连接,如果是用SocketTool建立TCP Server能很清楚看到你的Server IP是0.0.0.0,毫无疑问肯定连不上.

5.防火墙拦截时把防火墙关了或者设置调试工具允许通过。

6.云端调试的准备工作见下面的博客:
阿里云服务器与个人电脑TCP通信的调试

7.官方的ESP8266文档并不是没有错误,只是整体不会有错,但一些细节可能有问题,建议多找几份权威文档对比看就能发现问题

然后按照上面我的试验步骤走就ok了。接下来我会在服务器端用JAVA编写web后台来进行数据收发并写入云端数据库
完整代码:https://download.csdn.net/download/naruhina/12142026

发布了74 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/naruhina/article/details/104211705