ESP8266与NodeMCU开发(三)客户端

这一节将讲解如何将ESP8266编程设置为一个网页客户端,访问www.example.com,发送请求并获取返回数据,通过串口打印出来


流程如下:


1.首先需要连接上路由器或者任意AP,从而获得能访问外网的途径,这一点在上一章节中已经说明。

相关代码:

#define WIFINAME "wifi名称"
#define WIFIPW   "wifi密码"

WiFi.begin(WIFINAME, WIFIPW);

等待ESP8266连接上AP

while (WiFi.status() != WL_CONNECTED)//try link to router
  {
    delay(500);
    Serial.print(".");
  }


2.实例化一个客户端,用以建立http连接,并发送请求

设置请求网址

const char* host = "www.example.com";



实例化

WiFiClient client;

与服务端建立连接

client.connect(host, 80)

向服务端发送请求

client.print(String("GET /") + "HTTP/1.1\r\n" + "Host:" + host + "\r\n" +
                 "Connection: close\r\n" + "\r\n"
                );


3.如果连接建立并且请求发送成功,然后就可以收到由服务端发送的回复,使用一个字符串来保存

String line = client.readStringUntil('\n');



4.打印获取的回复讯息

Serial.println(line);






从打印结果可以看到,网页头部和主体都提示“HTTP Version Not Supported”,因为HTTP版本较低因此服务端未传送网页布局文件到ESP8266上,但整个通信过程是成功的。


在实际的编程中需要追加连接成功才发送请求的判断,以防止ESP8266因错误的指令而重启。



程序整体源代码:

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>

#define WIFINAME "ChinaMobile-45012"
#define WIFIPW   "wangjinxuan"
const char* host = "www.example.com";

void setup() {

  pinMode(BUILTIN_LED, OUTPUT);
  Serial.begin(115200);
  Serial.println("");
  WiFi.begin(WIFINAME, WIFIPW);//link to router
  Serial.print("Connecting..");
  while (WiFi.status() != WL_CONNECTED)//try link to router
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  Serial.print("Connected,IP Address:");//connecting succeed
  Serial.println(WiFi.localIP());

}

void loop() {
  // put your main code here, to run repeatedly:
  WiFiClient client;
  Serial.printf("\r\nConnectint to %s ..", host);
  Serial.println("");
  if (client.connect(host, 80))
  {
    Serial.println("Connected!");
    Serial.println("Send a request");
    client.print(String("GET /") + "HTTP/1.1\r\n" + "Host:" + host + "\r\n" +
                 "Connection: close\r\n" + "\r\n"
                );

    Serial.println("\r\n[Response:]");
    while (client.connected())
    {
      while (client.connected())
      {
        if (client.available())
        {
          String line = client.readStringUntil('\n');
          Serial.println(line);
        }
      }
      client.stop();
      Serial.println("\nClient stop, disconnected");
    }
  }
  else
  {
    Serial.println("connecting failed!");
    client.stop();
  }
  delay(8000);
}





参考:https://github.com/esp8266/Arduino/blob/master/doc/esp8266wifi/client-examples.md#select-a-server

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值