2建立网络服务器

ESP8266建立基本的网络服务器,在网页中显示Hello form ESP8266如果找不到显示404: Not Found

通过调用ESP8266WebServer库

 esp8266_server.begin();//启动网络服务器
  esp8266_server.on("/",handleRoot);
  esp8266_server.onNotFound(handleNotFound);

#include<ESP8266WiFi.h>
#include<ESP8266WiFiMulti.h>
#include<ESP8266WebServer.h>

ESP8266WiFiMulti wifiMulti; //建立ESP8266WiFiMulti对象名称为wifiMulti

ESP8266WebServer esp8266_server(80);//建立ESP8266WebServer对象
void setup() {
  Serial.begin(9600);//启动串口通讯

  wifiMulti.addAP("TP-LINK_1F04", ""); //参数中输入想要连接的WIFI名称密码

  Serial.print("Connecting to");

  int i = 0;
  while (wifiMulti.run() != WL_CONNECTED) {
    delay(1000);
    Serial.print(i++); Serial.print(' ');
  }

  Serial.println('\n');
  Serial.print("Connected to ");
  Serial.println(WiFi.SSID());
  Serial.print("IP address:\t");//串口输出IP address:
  Serial.println(WiFi.localIP());//串口输出IP地址

  esp8266_server.begin();
  esp8266_server.on("/",handleRoot);
  esp8266_server.onNotFound(handleNotFound);
}
void loop()
{
  esp8266_server.handleClient();
}

void handleRoot(){
  esp8266_server.send(200,"text/plain","Hello from ESP8266");
}

void handleNotFound(){
  esp8266_server.send(404,"text/plain","404:Not Found");
}

通过建立网络服务器实现对NodeMCU实现基本的控制

设置服务器根目录即'/'的函数'handleRoot'

  该函数的作用是每当有客户端访问NodeMCU服务器根目录时,

  NodeMCU都会向访问设备发送 HTTP 状态 200 (Ok) 这是send函数的第一个参数。

  同时NodeMCU还会向浏览器发送HTML代码,以下示例中send函数中第三个参数,

  也就是双引号中的内容就是NodeMCU发送的HTML代码。该代码可在网页中产生LED控制按钮。

  当用户按下按钮时,浏览器将会向NodeMCU的/LED页面发送HTTP请求,请求方式为POST。

  NodeMCU接收到此请求后将会执行handleLED函数内容

关键代码

void handleLED() {                          
  digitalWrite(LED_BUILTIN,!digitalRead(LED_BUILTIN));// 改变LED的点亮或者熄灭状态
  esp8266_server.sendHeader("Location","/");          // 跳转回页面根目录
  esp8266_server.send(303);                           // 发送Http相应代码303 跳转  
}

#include<ESP8266WiFi.h>
#include<ESP8266WiFiMulti.h>
#include<ESP8266WebServer.h>

ESP8266WiFiMulti wifiMulti; //建立ESP8266WiFiMulti对象名称为wifiMulti

ESP8266WebServer esp8266_server(80);//建立ESP8266WebServer对象
void setup() {
  Serial.begin(9600);//启动串口通讯

  pinMode(LED_BUILTIN, OUTPUT); //设置内置LED引脚为输出模式以便控制LED
  
  wifiMulti.addAP("TP-LINK_1F04", ""); //参数中输入想要连接的WIFI名称密码

  Serial.print("Connecting to");

  int i = 0;
  while (wifiMulti.run() != WL_CONNECTED) {
    delay(1000);
    Serial.print(i++); Serial.print(' ');
  }

  Serial.println('\n');
  Serial.print("Connected to ");
  Serial.println(WiFi.SSID());
  Serial.print("IP address:\t");//串口输出IP address:
  Serial.println(WiFi.localIP());//串口输出IP地址

  
  esp8266_server.begin();                           // 启动网站服务
  esp8266_server.on("/", HTTP_GET, handleRoot);     // 设置服务器根目录即'/'的函数'handleRoot'
  esp8266_server.on("/LED", HTTP_POST, handleLED);  // 设置处理LED控制请求的函数'handleLED'
  esp8266_server.onNotFound(handleNotFound);        // 设置处理404情况的函数'handleNotFound'
 
  Serial.println("HTTP esp8266_server started");//  告知用户ESP8266网络服务功能已经启动
}
void loop()
{
  esp8266_server.handleClient();
}

void handleRoot(){
   esp8266_server.send(200, "text/html", "<form action=\"/LED\" method=\"POST\"><input type=\"submit\" value=\"Toggle LED\"></form>");
}

void handleLED() {                          
  digitalWrite(LED_BUILTIN,!digitalRead(LED_BUILTIN));// 改变LED的点亮或者熄灭状态
  esp8266_server.sendHeader("Location","/");          // 跳转回页面根目录
  esp8266_server.send(303);                           // 发送Http相应代码303 跳转  
}

void handleNotFound(){
  esp8266_server.send(404,"text/plain","404:Not Found");
}

通过网络服务器将引脚状态显示在网页中

关键代码

void handleRoot() {
  String displayPinState;                   // 存储按键状态的字符串变量

  if (pinState == HIGH) {                   // 当按键引脚D3为高电平
    displayPinState = "Button State: HIGH"; // 字符串赋值高电平信息
  } else {                                  // 当按键引脚D3为低电平
    displayPinState = "Button State: LOW";  // 字符串赋值低电平信息
  }

  esp8266_server.send(200, "text/plain", displayPinState);
  // 向浏览器发送按键状态信息
}

#include<ESP8266WiFi.h>
#include<ESP8266WiFiMulti.h>
#include<ESP8266WebServer.h>

#define buttonPin D3 //定义按键引脚D3
ESP8266WiFiMulti wifiMulti; //建立ESP8266WiFiMulti对象名称为wifiMulti

ESP8266WebServer esp8266_server(80);//建立ESP8266WebServer对象
bool pinState; //储存引脚状态变量
void setup() {
  Serial.begin(9600);//启动串口通讯

  pinMode(buttonPin, INPUT_PULLUP); // 将按键引脚设置为输入上拉模式

  wifiMulti.addAP("TP-LINK_1F04", ""); //参数中输入想要连接的WIFI名称密码

  Serial.print("Connecting to");

  int i = 0;
  while (wifiMulti.run() != WL_CONNECTED) {
    delay(1000);
    Serial.print(i++); Serial.print(' ');
  }

  Serial.println('\n');
  Serial.print("Connected to ");
  Serial.println(WiFi.SSID());
  Serial.print("IP address:\t");//串口输出IP address:
  Serial.println(WiFi.localIP());//串口输出IP地址


  esp8266_server.begin();                           // 启动网站服务
  esp8266_server.on("/", handleRoot);    // 设置服务器根目录即'/'的函数'handleRoot'
  esp8266_server.onNotFound(handleNotFound);        // 设置处理404情况的函数'handleNotFound'

  Serial.println("HTTP esp8266_server started");//  告知用户ESP8266网络服务功能已经启动
}
void loop()
{
  esp8266_server.handleClient();//处理服务器访问
  pinState = digitalRead(buttonPin); //获取引脚状态
}

void handleRoot() {
  String displayPinState;                   // 存储按键状态的字符串变量

  if (pinState == HIGH) {                   // 当按键引脚D3为高电平
    displayPinState = "Button State: HIGH"; // 字符串赋值高电平信息
  } else {                                  // 当按键引脚D3为低电平
    displayPinState = "Button State: LOW";  // 字符串赋值低电平信息
  }

  esp8266_server.send(200, "text/plain", displayPinState);
  // 向浏览器发送按键状态信息
}


void handleNotFound() {
  esp8266_server.send(404, "text/plain", "404:Not Found");
}

Guess you like

Origin blog.csdn.net/qq_61134394/article/details/128371798