八色木

ESP8266制作光监测器

本文将介绍如何使用一个ESP8266开发板制作光强度检测器,并将检测结果在本地网页显示。

前言

你是否碰到过这样的问题,当你外出时突然忘记了家里的灯是否还开着,忘了关家里的灯怎么办呢?这个项目将允许你通过一个每秒更新的简单网页,查看房间的灯是否亮着。

电路连接

首先,连接一些外部元件到ESP8266开发板。将LDR光敏电阻通过一个10k的下拉电阻连接到3.3v。LDR光敏电阻将根据它接收到的光强度来改变电阻值,然后再用跳线连接10k电阻到ESP8266的ADC引脚。

电路原理图如下:

程序设计思路

首先加载Hello World服务器的示例文件,为了让它声明light值并自动刷新,文中更改了handleRoot回调函数来提供定制的html代码。由于没有使用SD卡,所以无法使用javascript自动刷新这些值。庆幸的是,HTML本身提供了一种按设置的间隔时间刷新页面的方法。只需要在<p>标签后面添加<meta http-equiv="refresh" content="1">。记住需要在代码中包含你的WiFi证书。

然后,通过浏览器访问ESP8266的IP地址就可以查看页面,在示例中IP地址是192.168.0.41,在浏览器设置中允许网站自动刷新,如果希望在不网络上(例如在使用4G网络的手机上)查看网页,需要将对应端口转发到ESP8266的IP地址。例如,输入的不是192.168.0.41,端口转发的类型是“MY_IP:THE_PORT_I_CHOSE_TO_FORWARD”,MY_IP是你的外网IP地址,THE_PORT_I_CHOSE_TO_FORWARD路由器设置中设置的端口。通过端口转发,现在就算你不在家也可以检查家里的灯是开着还是关着了!

完整代码

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

const char* ssid = "SSID";
const char* password = "PSSWD";

ESP8266WebServer server(80);

void handleRoot() {
  String msg = "<html><head><title>ESP8266 Light Levels</title></head>";
  msg += "<body>";
  msg += "<p>The light level is: ";
  msg += String(analogRead(A0))+"</p>";
  msg += "<meta http-equiv=\"refresh\" content=\"1\" />";
  msg += "</body></html>";
  server.send(200, "text/html", msg);
}

void handleNotFound(){
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET)?"GET":"POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  for (uint8_t i=0; i<server.args(); i++){
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }
  server.send(404, "text/plain", message);
}

void setup(void){
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  if (MDNS.begin("esp8266")) {
    Serial.println("MDNS responder started");
  }

  server.on("/", handleRoot);

  server.onNotFound(handleNotFound);

  server.begin();
  Serial.println("HTTP server started");
}

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

更多内容可查看:Arduino的光强度检测使用Arduino连接LDR传感器实现液晶屏的亮度控制

Exit mobile version