ESP8266实现http请求访问远程服务器

 

 

之前用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

要在ESP8266上请求本地服务器的数据,你需要使用以下步骤: 1. 首先,你需要连接ESP8266到你的无线网络。你可以使用以下代码进行连接: ```c #include <ESP8266WiFi.h> const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; void setup() { Serial.begin(9600); delay(1000); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); } void loop() { // your code here } ``` 2. 连接到无线网络后,你可以使用ESP8266的WiFiClient库来请求本地服务器的数据。以下是一个简单的例子: ```c #include <ESP8266WiFi.h> #include <WiFiClient.h> void setup() { Serial.begin(9600); delay(1000); WiFi.begin("your_SSID", "your_PASSWORD"); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); } void loop() { WiFiClient client; if (client.connect("192.168.1.100", 80)) { Serial.println("Connected to server"); client.println("GET /data HTTP/1.1"); client.println("Host: 192.168.1.100"); client.println("Connection: close"); client.println(); while (client.connected()) { String line = client.readStringUntil('\n'); Serial.println(line); } } else { Serial.println("Connection to server failed"); } delay(5000); } ``` 这个例子连接到IP地址为192.168.1.100的服务器,并请求路径为/data的数据。服务器应该返回一个HTTP响应,ESP8266将打印响应主体。你需要根据你的服务器配置修改IP地址和路径。 希望这可以帮助到你!
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值