mirror of
https://github.com/lsdlsd88/JC4827W543.git
synced 2026-07-22 03:44:00 +01:00
initial commit
This commit is contained in:
@@ -0,0 +1,158 @@
|
||||
/********************************************
|
||||
----湖南创乐博智能科技有限公司----
|
||||
文件名:41.WIFI Web Servers Relay.ino
|
||||
版本:V2.0
|
||||
author: zhulin
|
||||
说明:WIFI Web Servers 继电器实验
|
||||
********************************************/
|
||||
#include <WiFi.h>
|
||||
#include <ESPAsyncWebServer.h>
|
||||
|
||||
// 设为true定义继电器为常开(NO)
|
||||
#define RELAY_NO true
|
||||
|
||||
// 设置继电器数量
|
||||
#define NUM_RELAYS 1
|
||||
|
||||
// 将每个GPIO分配给一个继电器
|
||||
int relayGPIOs[NUM_RELAYS] = {17};
|
||||
|
||||
// 设置自己可以上网的WIFI账号和密码
|
||||
const char* ssid = "CMCC-404";
|
||||
const char* password = "zp198612";
|
||||
|
||||
const char* PARAM_INPUT_1 = "relay";
|
||||
const char* PARAM_INPUT_2 = "state";
|
||||
|
||||
// 在端口80上创建AsyncWebServer对象
|
||||
AsyncWebServer server(80);
|
||||
|
||||
const char index_html[] PROGMEM = R"rawliteral(
|
||||
<!DOCTYPE HTML><html>
|
||||
<head>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<style>
|
||||
html {font-family: Arial; display: inline-block; text-align: center;}
|
||||
h2 {font-size: 3.0rem;}
|
||||
p {font-size: 3.0rem;}
|
||||
body {max-width: 600px; margin:0px auto; padding-bottom: 25px;}
|
||||
.switch {position: relative; display: inline-block; width: 120px; height: 68px}
|
||||
.switch input {display: none}
|
||||
.slider {position: absolute; top: 0; left: 0; right: 0; bottom: 0; background-color: #ccc; border-radius: 34px}
|
||||
.slider:before {position: absolute; content: ""; height: 52px; width: 52px; left: 8px; bottom: 8px; background-color: #fff; -webkit-transition: .4s; transition: .4s; border-radius: 68px}
|
||||
input:checked+.slider {background-color: #2196F3}
|
||||
input:checked+.slider:before {-webkit-transform: translateX(52px); -ms-transform: translateX(52px); transform: translateX(52px)}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h2>ESP32 Web Server Relay</h2>
|
||||
%BUTTONPLACEHOLDER%
|
||||
<script>function toggleCheckbox(element) {
|
||||
var xhr = new XMLHttpRequest();
|
||||
if(element.checked){ xhr.open("GET", "/update?relay="+element.id+"&state=1", true); }
|
||||
else { xhr.open("GET", "/update?relay="+element.id+"&state=0", true); }
|
||||
xhr.send();
|
||||
}</script>
|
||||
</body>
|
||||
</html>
|
||||
)rawliteral";
|
||||
|
||||
// Replaces placeholder with button section in your web page
|
||||
String processor(const String& var){
|
||||
//Serial.println(var);
|
||||
if(var == "BUTTONPLACEHOLDER"){
|
||||
String buttons ="";
|
||||
for(int i=1; i<=NUM_RELAYS; i++){
|
||||
String relayStateValue = relayState(i);
|
||||
buttons+= "<h4>Relay #" + String(i) + " - GPIO " + relayGPIOs[i-1] + "</h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"" + String(i) + "\" "+ relayStateValue +"><span class=\"slider\"></span></label>";
|
||||
}
|
||||
return buttons;
|
||||
}
|
||||
return String();
|
||||
}
|
||||
|
||||
String relayState(int numRelay){
|
||||
if(RELAY_NO){
|
||||
if(digitalRead(relayGPIOs[numRelay-1])){
|
||||
return "";
|
||||
}
|
||||
else {
|
||||
return "checked";
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(digitalRead(relayGPIOs[numRelay-1])){
|
||||
return "checked";
|
||||
}
|
||||
else {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
void setup(){
|
||||
// 用于调试的串口
|
||||
Serial.begin(115200);
|
||||
|
||||
// 当程序开始时,将所有继电器设置为关闭-如果设置为常开(NO),当您将继电器设置为高时,继电器关闭
|
||||
for(int i=1; i<=NUM_RELAYS; i++){
|
||||
pinMode(relayGPIOs[i-1], OUTPUT);
|
||||
if(RELAY_NO){
|
||||
digitalWrite(relayGPIOs[i-1], HIGH);
|
||||
}
|
||||
else{
|
||||
digitalWrite(relayGPIOs[i-1], LOW);
|
||||
}
|
||||
}
|
||||
|
||||
// 连接到无线网络
|
||||
WiFi.begin(ssid, password);
|
||||
while (WiFi.status() != WL_CONNECTED) {
|
||||
delay(1000);
|
||||
Serial.println("Connecting to WiFi..");
|
||||
}
|
||||
|
||||
// 打印ESP32本地IP地址
|
||||
Serial.println(WiFi.localIP());
|
||||
|
||||
// 路由的根/网页
|
||||
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
|
||||
request->send_P(200, "text/html", index_html, processor);
|
||||
});
|
||||
|
||||
// Send a GET request to <ESP_IP>/update?relay=<inputMessage>&state=<inputMessage2>
|
||||
server.on("/update", HTTP_GET, [] (AsyncWebServerRequest *request) {
|
||||
String inputMessage;
|
||||
String inputParam;
|
||||
String inputMessage2;
|
||||
String inputParam2;
|
||||
// GET input1 value on <ESP_IP>/update?relay=<inputMessage>
|
||||
if (request->hasParam(PARAM_INPUT_1) & request->hasParam(PARAM_INPUT_2)) {
|
||||
inputMessage = request->getParam(PARAM_INPUT_1)->value();
|
||||
inputParam = PARAM_INPUT_1;
|
||||
inputMessage2 = request->getParam(PARAM_INPUT_2)->value();
|
||||
inputParam2 = PARAM_INPUT_2;
|
||||
if(RELAY_NO){
|
||||
Serial.print("NO ");
|
||||
digitalWrite(relayGPIOs[inputMessage.toInt()-1], !inputMessage2.toInt());
|
||||
}
|
||||
else{
|
||||
Serial.print("NC ");
|
||||
digitalWrite(relayGPIOs[inputMessage.toInt()-1], inputMessage2.toInt());
|
||||
}
|
||||
}
|
||||
else {
|
||||
inputMessage = "No message sent";
|
||||
inputParam = "none";
|
||||
}
|
||||
Serial.println(inputMessage + inputMessage2);
|
||||
request->send(200, "text/plain", "OK");
|
||||
});
|
||||
// 启动服务器
|
||||
server.begin();
|
||||
}
|
||||
|
||||
void loop() {
|
||||
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user