初识ESP8266(二)————搭建网络服务器实现远程控制

一.实验介绍

8266搭建网络服务器,通过同一wifi信号下的终端访问ESP8266IP地址,对开发板进行控制。

二.代码

1.esp8266_server.begin()

作用:启动网络服务,搭建网络服务器

2.esp8266_server.on("/",handleRoot)

作用:如果其他终端请求访问根目录,则执行handleRoot函数

3.esp8266_server.onNotFound(handleNotFound)

作用:如果访问过程中发生404错误,执行handleNotFound函数

4.esp8266_server.handleClient()

作用:检查http服务器访问

5.esp8266_server.send(200,"text/plain","Hello World")

作用:发送200指令,以文本形式显示Hello World

6.esp8266_server.send(404,"text/plain","404:Not found")

作用:发送404指令,以文本形式显示404:Not found

7.esp8266_server.on("/",HTTP_GET,handleRoot)

作用:以HTTP_GET方式访问根目录,执行handleRoot函数,在访问网站时输入网址回车默认就是HTTP_GET方式

8.esp8266_server.on("/LED",HTTP_POST,handleLED)

作用:以HTTP_POST方式访问/LED页面,执行handleLED

三.代码

//搭建服务器并访问
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266WebServer.h>
ESP8266WiFiMulti wifiMulti;
ESP8266WebServer esp8266_server(80);
void setup(void)
{
  Serial.begin(9600);
  //添加wifi信息,自己选择最强信号连接
  wifiMulti.addAP("HUAWEI Mate 30","1234567890");
  int i=0;
  //等待连接
  while(wifiMulti.run()!=WL_CONNECTED)
  {
     delay(1000);
     Serial.print(i++);
     Serial.print(" ");
  }
  //连接成功,打印连接wifi的名称和IP地址
  Serial.println(" ");
  Serial.print("Connect:");
  Serial.println(WiFi.SSID());
  Serial.print("Address:");
  Serial.println(WiFi.localIP());
  //搭建网络服务器
  esp8266_server.begin();
  //其他设备请求访问根目录时,执行handleRoot函数
  esp8266_server.on("/",handleRoot);
  //访问根目录出现错误时,执行handleNotFound函数
  esp8266_server.onNotFound(handleNotFound);
  Serial.println("HTTP Started");
}
void loop(void)
{
  //处理服务器访问,相当于一直判断有没有设备访问网站,有的话处理对应信息
  esp8266_server.handleClient();
}
void handleRoot(void)
{
    //开发板发送指令200,将Hello World以文本形式显示
    esp8266_server.send(200,"text/plain","Hello World");
}
void handleNotFound(void)
{
    //开发板发送指令200,将404:Not found以文本形式显示
    esp8266_server.send(404,"text/plain","404:Not found");
}

在串口查看开发板IP地址 

使用同一wifi下的终端访问此IP地址,试验成功

//搭建网络服务器,通过服务器控制开发板板载LED实现亮灭
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266WebServer.h>
ESP8266WiFiMulti wifiMulti;
ESP8266WebServer esp8266_server(80);
void setup(void)
{
  int i=0;
  Serial.begin(9600);
  //设置LED引脚为输出
  pinMode(LED_BUILTIN,OUTPUT);
  //自动连接最强WiFi
  wifiMulti.addAP("HUAWEI Mate 30","1234567890");
  Serial.println("Connecting...");
  //等待连接
  while(wifiMulti.run()!=WL_CONNECTED)
  {
    delay(1000);
    Serial.print(i++);
    Serial.print(" ");
  }
  //连接成功,并打印WiFi名称和IP地址
  Serial.print("Connect OK:");
  Serial.println(WiFi.SSID());
  Serial.print("IP Address:");
  Serial.println(WiFi.localIP());
  //打开服务器
  esp8266_server.begin();
  //外围设备访问根目录
  esp8266_server.on("/",HTTP_GET,handleRoot);
  esp8266_server.on("/LED",HTTP_POST,handleLED);
  esp8266_server.onNotFound(handleBotFound);
  Serial.println("HTTP esp8266_server started");
}
void loop(void)
{
  //处理服务器访问
  esp8266_server.handleClient();     
  }
void handleRoot(void)
{
  //发送200指令,以html形式,后面为html代码创建一个按钮在/LED页面,以POST形式访问
  //按钮的名称为Toggle LED
  esp8266_server.send(200,"text/html","<form action=\"/LED\" method=\"POST\"><input type=\"submit\" value=\"Toggle LED\"></form>");
  }
void handleLED(void)
{
  //读取LED电平并翻转
  digitalWrite(LED_BUILTIN,!digitalRead(LED_BUILTIN));
  //跳转根目录
  esp8266_server.sendHeader("Location","/");
  esp8266_server.send(303);
  }
void handleBotFound(void)
{
  esp8266_server.send(404,"text/plain","404 Not Found");
  }

wifi连接成功

打开开发板IP地址,点击按钮,开发板LED实现亮灭

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266WebServer.h>
ESP8266WiFiMulti WiFiMulti;
ESP8266WebServer esp8266_server(80);
#define buttonPin D3
bool PinState;
void setup(void)
{
  int i=0;
  Serial.begin(9600);
  WiFiMulti.addAP("HUAWEI Mate 30","1234567890");

  while(WiFiMulti.run()!=WL_CONNECTED)
  {
    delay(1000);
    Serial.print(i++);
    Serial.print(" ");
  }
  Serial.println("  ");
  Serial.print("Connect OK:");
  Serial.println(WiFi.SSID());
  Serial.print("IP Address:");
  Serial.println(WiFi.localIP());

  esp8266_server.begin();
  esp8266_server.on("/",HTTP_GET,handleRoot);
  esp8266_server.onNotFound(handleBotFound);
  Serial.println("HTTP esp8266_server started");
}
void loop(void)
{
  esp8266_server.handleClient();
  //时刻检查D3电平
  PinState=digitalRead(buttonPin);
}
void handleBotFound(void)
{
  esp8266_server.send(404,"text/plain","404 NOT FOUND");
}
void handleRoot(void)
{
  String str;
  if(PinState==HIGH)
  {
    str="Button State: HIGH";
  }
  else
  {
    str="Button State: LOW";
  }
  esp8266_server.send(200,"text/plain",str);
}

 wifi连接成功

 

在FLASH按键没按下时为高电平

FLASH按键按下后为低电平

 

 

  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WLAN是英文WirelessLAN的缩写,就是无线局域网的意思。无线以太网技术是一种基于无线传输的局域网技术,与有线网络技术相比,具有灵活、建网迅速、个人化等特点。将这一技术应用于电信网的接入网领域,能够方便、灵活地为用户提供网络接入,适合于用户流动性较大、有数据业务需求的公共场所、高端的企业及家庭用户、需要临时建网的场合以及难以采用有线接入方式的环境等 作为全球公认的局域网权威,IEEE802工作组建立的标准在过去十年内在局域网领域独领风骚。这些协议包括了802.3Ethernet协议、802.5TokenRing协议、802.3z100BASE-T快速以太网协议。在1997年,经过了7年的工作以后,IEEE发布了802.11协议,这也是在无线局域网领域内的第一个国际上被认可的协议。  在1999年9月,他们又提出了802.11b"HighRate"协议,用来对802.11协议进行补充,802.11b在802.11的1Mbps和2Mbps速率下又增加了5.5Mbps和11Mbps两个新的网络吞吐速率。利用802.11b,移动用户能够获得同Ethernet一样的性能、网络吞吐率、可用性。这个基于标准的技术使得管理员可以根据环境选择合适的局域网技术来构造自己的网络,满足他们的商业用户和其他用户的需求。802.11协议主要工作在ISO协议的最低两层上,并在物理层上进行了一些改动,加入了高速数字传输的特性和连接的稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值