以前用esp8266进行了通常的tcp链接,如今须要作一个能够直接访问远程服务器的项目,所以,研究了一下如何用esp8266实现http协议,因为网上的资料很杂,并且好像都没有说的很清楚。这里作出一个总结,关于以前的命令见下面的网址。html
因为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
app
所以只要在tcp发送的时候按照这个格式,便可完成http传输。tcp
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.net
此时就完成了一次访问 https://www.baidu.com/?tn=25017023_10_dg网址的操做,须要注意AT+CIPSEND=46调试
这个46是GET https://www.baidu.com/?tn=25017023_10_dg\r\n的长度xml
这个命令会检测到知足了46个字符以后,进行统一发送。htm
本次我采用AP+STA的模式实现,用esp远程访问我本身建的服务器,采用GET命令。(以后须要研究POST)。
采用STM32f103C8T6,的串口2来驱动ESP8266,采用串口1做为调试串口。运行的信息能够及时的在串口1回传到电脑。
1.首先进行相关模块的初始化,包括串口1 2 和LED.
2.检测模块是否在线,若是在线,那么开始进行GET操做,总体的GET方式采用上面介绍的方式。
3.开始给ESP8266发送对应的命令,操做进行链接服务器。具体的介绍参照上面的介绍,或者参照ESP83266的数据手册。
4.最终能够看到获取的信息,服务器也提示访问成功。
目前这个程序 有一个问题 ,就是每次访问的时候,只能访问一次,第二次服务器会切断联系,解决的方法是,把每次与服务器链接的那一段代码,也放到while循环内部,每次就会从新创建链接。这样就能够不断的访问这个网址。也能够将整个访问流程写成一个函数,每次传入一个网址进行GET访问,以后返回网址返回的东西便可。