本文将介绍如何使用一个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传感器实现液晶屏的亮度控制。