之前用esp8266进行了一般的tcp连接,现在需要做一个可以直接访问远程服务器的项目,因此,研究了一下如何用esp8266实现http协议,由于网上的资料很杂,而且好像都没有说的很清楚。这里做出一个总结,关于之前的命令见下面的网址。


由于http协议处在tcp/ip协议的应用层,tcp协议工作在传输层,只需要在tcp传输层中按照http协议中的数据格式,发送数据就可以完成http传输数据。http协议数据如下所示:

GET /mix/76.html?name=kelvin&password=123456 HTTP/1.1
 Host: www.fishbay.cn
 Upgrade-Insecure-Requests: 1
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
 Accept-Encoding: gzip, deflate, sdch
 Accept-Language: zh-CN,zh;q=0.8,en;q=0.6


 

因此只要在tcp发送的时候按照这个格式,即可完成http传输。

http协议的步骤如下所示:

AT+RST
 AT+CWMODE=3//设置格式
 AT+RST
 AT+CWJAP="xxxxx","xxxx"//账号和密码
 AT+CIPSTART="TCP","www.baidu.com",80
 AT+CIPSEND=46
 GET https://www.baidu.com/?tn=25017023_10_dg

此时就完成了一次访问 https://www.baidu.com/?tn=25017023_10_dg网址的操作,需要注意AT+CIPSEND=46

这个46是GET https://www.baidu.com/?tn=25017023_10_dg\r\n的长度

这个命令会检测到满足了46个字符之后,进行统一发送。

 

 

本次我采用AP+STA的模式实现,用esp远程访问我自己建的服务器,采用GET命令。(之后需要研究POST)。

采用STM32f103C8T6,的串口2来驱动ESP8266,采用串口1作为调试串口。运行的信息可以及时的在串口1回传到电脑。

1.首先进行相关模块的初始化,包括串口1 2 和LED.

esp32做远程服务器 esp8266远程服务器_ESP8266

 

2.检测模块是否在线,如果在线,那么开始进行GET操作,整体的GET方式采用上面介绍的方式。

esp32做远程服务器 esp8266远程服务器_esp32做远程服务器_02

3.开始给ESP8266发送对应的命令,操作进行连接服务器。具体的介绍参照上面的介绍,或者参照ESP83266的数据手册。

数据手册的下载地址为:

 

esp32做远程服务器 esp8266远程服务器_服务器_03

esp32做远程服务器 esp8266远程服务器_http_04

 4.最终可以看到获取的信息,服务器也提示访问成功。

esp32做远程服务器 esp8266远程服务器_ESP8266_05

目前这个程序 有一个问题 ,就是每次访问的时候,只能访问一次,第二次服务器会切断联系,解决的方法是,把每次与服务器连接的那一段代码,也放到while循环内部,每次就会重新建立连接。这样就可以不断的访问这个网址。也可以将整个访问流程写成一个函数,每次传入一个网址进行GET访问,之后返回网址返回的东西即可。