之前用esp8266进行了一般的tcp连接,现在需要做一个可以直接访问远程服务器的项目,因此,研究了一下如何用esp8266实现http协议,由于网上的资料很杂,而且好像都没有说的很清楚。这里做出一个总结,关于之前的命令见下面的网址。
https://blog.csdn.net/qq_34020487/article/details/100904978
由于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.
2.检测模块是否在线,如果在线,那么开始进行GET操作,整体的GET方式采用上面介绍的方式。
3.开始给ESP8266发送对应的命令,操作进行连接服务器。具体的介绍参照上面的介绍,或者参照ESP83266的数据手册。
数据手册的下载地址为:https://download.csdn.net/download/qq_34020487/11799004
4.最终可以看到获取的信息,服务器也提示访问成功。
目前这个程序 有一个问题 ,就是每次访问的时候,只能访问一次,第二次服务器会切断联系,解决的方法是,把每次与服务器连接的那一段代码,也放到while循环内部,每次就会重新建立连接。这样就可以不断的访问这个网址。也可以将整个访问流程写成一个函数,每次传入一个网址进行GET访问,之后返回网址返回的东西即可。
最终的工程文件下载地址为: https://download.csdn.net/download/qq_34020487/11832774