位置导航: ESP8266库 / WiFiServer库 / 本页
说明
本函数用于检查是否有客户端访问ESP8266开发板所建立的网络服务器。
语法
server.hasClient()
参数
无
返回值
返回值类型为bool。当检查到有客户端访问ESP8266开发板所建立的网络服务器,则返回true,否则返回false。
示例程序
关于本函数的具体使用方法,请参考以下代码,尤其是代码中高亮的语句部分。
当您将以下示例程序中的WiFi连接信息修改并且将本示例程序上传ESP8266开发板后,开发板随即会自动连接WiFi。WiFi连接成功后,您将可以从串口监视器获取当前ESP8266开发板的IP地址。此时,ESP8266已经成功建立了网络服务器。您可以通过ESP8266的IP地址来访问该网络服务器。
假设您的ESP8266开发板IP地址是192.168.0.110。那么接下来您可以通过浏览器输入该IP地址。(如下图所示)
当您在浏览器地址栏中输入Ip后并按下回车,这时您将看到浏览器中显示上图所示的网页页面。该页面即是通过ESP8266所建立的。另外,我们在以下程序中使用了server.hasClient()
来检查是否有客户端访问服务器,以便进一步获取客户端发来的HTTP请求。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
/********************************************************************** 项目名称/Project : 零基础入门学用物联网 程序名称/Program name : WIFIServer_demo_5 团队/Team : 太极创客团队 / Taichi-Maker (www.taichi-maker.com) 作者/Author : Dapenson 日期/Date(YYYYMMDD) : 20200323 程序目的/Purpose : 此示例程序演示了如何使用WiFiServer库建立网络服务器。通过以下网址可以设置板载LED灯的状态 http://server_ip/gpio/0将设置 LED_BUILTIN 引脚设置为低电平, http://server_ip/gpio/1将设置 LED_BUILTIN 引脚设置为高电平 以上网址链接中的server_ip指的是ESP8266模块的IP地址。 本程序使用了server.hasClient函数来判断是否有客户端与服务器产生连接。 ----------------------------------------------------------------------- 本示例程序为太极创客团队制作的《零基础入门学用物联网》中示例程序。 该教程为对物联网开发感兴趣的朋友所设计和制作。如需了解更多该教程的信息,请参考以下网页: http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/ ***********************************************************************/ #include <ESP8266WiFi.h> //此处设置您的wifi接入信息 #ifndef STASSID #define STASSID "taichimaker" #define STAPSK "12345678" #endif const char* ssid = STASSID; const char* password = STAPSK; //创建TCP server对象,并将端口指定为80 WiFiServer server(80); void setup() { //打开串口 Serial.begin(115200); //初始化板载LED pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, 0); //连接WiFi Serial.println(); Serial.println(); Serial.print(F("Connecting to ")); Serial.println(ssid); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print(F(".")); } Serial.println(); Serial.println(F("WiFi connected")); //启动TCP server服务器 server.begin(); Serial.println(F("Server started")); //停止小包合并发送,停止之后,消息会直接发送,不会延时 server.setNoDelay(true); //打印TCP server状态码 Serial.print(F("server.status :")); Serial.println(server.status()); //打印IP地址 Serial.println(WiFi.localIP()); } void loop() { //使用server.hasClient()来确保有效的TCP连接 if (server.hasClient()) { //检查客户端是否已连接 WiFiClient client = server.available(); if (!client) { return; } Serial.println(F("new client")); client.setTimeout(5000); //默认为 1000 //打印TCP server状态码 Serial.print(F("server.status :")); Serial.println(server.status()); //读取客户端发起的TCP请求 String req = client.readStringUntil('\r'); Serial.println(F("request: ")); Serial.println(req); //解析请求里是否含有以下指定内容 int val; //检查发起的请求内容是否包含"/gpio/0" if (req.indexOf(F("/gpio/0")) != -1) { val = 0; //检查发起的请求内容是否包含"/gpio/1" } else if (req.indexOf(F("/gpio/1")) != -1) { val = 1; } else { Serial.println(F("invalid request")); val = digitalRead(LED_BUILTIN); } //根据要求设置板载LED状态 digitalWrite(LED_BUILTIN, val); //读取剩余的内容,用于清除缓存 while (client.available()) { client.read(); } //将响应体发送到客户端 注:若要使用中文则必须在其中添加<meta charset=\"utf-8\">声明编码 client.print(F("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n<meta charset=\"utf-8\">NodeMCU板载LED灯的状态 : ")); client.print((val) ? F("关") : F("开")); client.print(F("<br><br> <a href='http://")); client.print(WiFi.localIP()); client.print(F("/gpio/1'> 点击关灯 </a> , 或 <a href='http://")); client.print(WiFi.localIP()); client.print(F("/gpio/0'> 点击开灯 </a> </html>")); //通过浏览器点击按钮之后,TCP连接将会被重置,并且浏览器会发起新的TCP请求到我们的8266服务器,从而去控制LED灯 Serial.println(F("Disconnecting from client")); } } |
相关内容
— status – 获取服务器运行状态
位置导航: ESP8266库 / WiFiServer库 / 本页