用8266学习单片机-5-建立热点并控制GPIO-1-网页查看GPIO接口情况-其实智能家居也就这样。。打造自己的第一个智能灯

客户端模式

连接到网络中,向服务器发送或请求数据

服务器模式

通俗的说,就是8266开一个热点,然后手机连上这个热点可以和它在网页中进行通讯

服务器模式程序

WifiAccessPoint

文件-示例-ESP8266WIFI-WifiAccessPoint

/* 创建Wifi热点提供网站服务 */

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

#ifndef APSSID
#define APSSID "ESPap"		//wifi名称,可修改
#define APPSK  "thereisnospoon"		//wifi密码,可修改
#endif

const char *ssid = APSSID;
const char *password = APPSK;

ESP8266WebServer server(80);

/* 
连上wifi之后,进入浏览器输入192.168.4.1 ,可以直接访问8266的网站服务
*/
void handleRoot() {
  server.send(200, "text/html", "<h1>You are connected</h1>");
}

void setup() {
  delay(1000);
  Serial.begin(115200);
  Serial.println();
  Serial.print("Configuring access point...");
  /* 如果不想设置wifi密码,把下面的password删掉
  像这样:   WiFi.softAP(ssid);
  */
  WiFi.softAP(ssid, password);

  IPAddress myIP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(myIP);
  server.on("/", handleRoot);
  server.begin();
  Serial.println("HTTP server started");
}

void loop() {
  server.handleClient();
}

连上热点之后访问服务器确实出现了You are connected,为什么呢??
因为 server.on("/", handleRoot);这一句代码表示当服务器根目录被访问到的时候,就调用handleRoot函数
下面做一点小修改,热点控制LED

WifiAccessPoint - LED_BUILTIN

/*
通过浏览器将将灯设置为相反状态,亮就让你灭,灭就让你亮。
每访问一次网站,灯的状态就会发生变化(可刷新重复访问)
*/
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>

#ifndef APSSID
#define APSSID "ESPap"		//wifi名称,可修改
#define APPSK  "thereisnospoon"		//wifi密码,可修改
#endif

const char *ssid = APSSID;
const char *password = APPSK;

ESP8266WebServer server(80);

void handleRoot() {
  server.send(200, "text/html", "<h1>You are connected</h1>");
  digitalWrite(LED_BUILTIN,!digitalRead(LED_BUILTIN));  //将灯设置为相反状态,亮就让你灭,灭就让你亮
}

void setup() {
  delay(1000);
  Serial.begin(115200);
  Serial.println();
  Serial.print("Configuring access point...");
  WiFi.softAP(ssid, password);

  IPAddress myIP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(myIP);
  server.on("/", handleRoot);
  server.begin();
  Serial.println("HTTP server started");

pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  server.handleClient();
}

WifiAccessPoint - GPIO - LED

这样不过瘾吗???你说网页没变啊??
那我就变化一下吧
这里只对上面的代码修改了一处函数,每访问服务器一次就变化一下灯的状态,并读取状态显示在网页中。

void handleRoot() {
  digitalWrite(LED_BUILTIN,!digitalRead(LED_BUILTIN));  
  String str = "<h1>You are connected</h1> LED State: " + String(digitalRead(LED_BUILTIN)) ;
    server.send(200, "text/html", str);
}

这里需要说明的是,8266上的LED是负逻辑,就是状态为1为灭灯
但是GPIO上是正逻辑,不信试试一下D6外接LED和电阻,状态为1表示亮

void handleRoot() {
  digitalWrite(D6,!digitalRead(D6));  //将灯设置为相反状态,亮就让你灭,灭就让你亮
  String str = "<h1>You are connected</h1> LED State: " + String(digitalRead(D6)) ;
    server.send(200, "text/html", str);
}

void setup() {
/**************
不变
***/
  pinMode(D6, OUTPUT);
}

404

有人就问啊,网站不是有很多页面吗?那我连上8266访问一下其它页面会怎么样??
试试就试试,你以为我是谁,在地址栏反复刷新太无聊??看一下嘿嘿
地址栏输入192.168.4.1/led,回车Not found: /led
地址栏输入192.168.4.1/io,回车Not found: /io
辣我想让塔出现404页面怎么搞??

server.onNotFound(handleNotFound); 

这个说明当有人企图浏览不存在的网址的时候,就会调用handleNotFound函数,然后我们就可以在函数里定义404页面辣

/*
1.通过浏览器将将外置LED灯设置为相反状态,亮就让你灭,灭就让你亮,每访问一次网站,灯的状态就会发生变化(可刷新重复访问)
2.显示灯的状态
3.增加404页面提示
*/
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>

#ifndef APSSID
#define APSSID "ESPap"
#define APPSK  "123789"
#endif

const char *ssid = APSSID;
const char *password = APPSK;

ESP8266WebServer server(80);

void handleRoot() {
  digitalWrite(D6,!digitalRead(D6));  
  String str = "<h1>You are connected</h1> LED State: " + String(digitalRead(D6)) ;
    server.send(200, "text/html", str);
}

void handleNotFound(){                                        // 当浏览器请求的网络资源无法在服务器找到时,
  server.send(404, "text/plain", "404: Not found,There is nothing");   // NodeMCU将调用此函数。中文的话会乱码-.-
}

void setup() {
  delay(1000);
  Serial.begin(115200);
  Serial.println();
  Serial.print("Configuring access point...");
  WiFi.softAP(ssid,password);

  IPAddress myIP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(myIP);
  server.on("/", handleRoot);
  server.onNotFound(handleNotFound); 
  server.begin();
  Serial.println("HTTP server started");

  pinMode(D6, OUTPUT);
}

void loop() {
  server.handleClient();
}

整蛊专家

有点的网站管理后台通常就是这样的
www.asdas.com/admin
那我们也给自己写一个假的管理后台吧
192.168.4.1/admin

server.on("/admin", handleadmin);

这个说明说明捏??那就是当有人企图访问网站下的admin目录,就调用handleadmin函数处理这种情况-.-
不信你试试哇,正常情况下会红红的居中显示
This is a fake web, you are cheated -.-!!!

/*
1.通过浏览器将将外置LED灯设置为相反状态,亮就让你灭,灭就让你亮,每访问一次网站,灯的状态就会发生变化(可刷新重复访问)
2.显示灯的状态
3.增加404页面提示
*/
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>

#ifndef APSSID
#define APSSID "ESPap"
#define APPSK  "123789"
#endif

const char *ssid = APSSID;
const char *password = APPSK;

ESP8266WebServer server(80);

void handleRoot() {
  digitalWrite(D6,!digitalRead(D6));  
  String str = "<h1>You are connected</h1> LED State: " + String(digitalRead(D6)) ;
    server.send(200, "text/html", str);
}

void  handleadmin(){
   server.send(200, "text/html", "<h1 style='text-align: center; color: red' >This is a fake web, you are cheated -.-!!!!</h1>");
}
void handleNotFound(){                                        
  server.send(404, "text/plain", "404: Not found,There is nothing");   
}

void setup() {
  delay(1000);
  Serial.begin(115200);
  Serial.println();
  Serial.print("Configuring access point...");
  WiFi.softAP(ssid,password);

  IPAddress myIP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(myIP);
  server.on("/", handleRoot);
  server.on("/admin", handleadmin);
  server.onNotFound(handleNotFound); 
  server.begin();
  Serial.println("HTTP server started");

  pinMode(D6, OUTPUT);
}

void loop() {
  server.handleClient();
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值