Arduino 从Web服务器ESP8266的文本字段获取值
我用esp8266做了一个网络服务器Arduino 从Web服务器ESP8266的文本字段获取值,arduino,webserver,textfield,esp8266,Arduino,Webserver,Textfield,Esp8266,我用esp8266做了一个网络服务器 sResponse = "<p>" "<center>" "<h1>ESP8266 Web Server</h1>" "<p>Time <input type='text' name='date_hh' size=2 autofocus> hh <input type='text' name='date_mm' size=2 autofocus> mm <inpu
sResponse =
"<p>"
"<center>"
"<h1>ESP8266 Web Server</h1>"
"<p>Time <input type='text' name='date_hh' size=2 autofocus> hh <input type='text' name='date_mm' size=2 autofocus> mm <input type='text' name='date_ss' size=2 autofocus> ss</p>"
"<p><a href=\"?pin=FUNCTION1ON\"><button>Save</button></a>"
"</center>";
client.print(sResponse);
sResponse=
“”
""
“ESP8266 Web服务器”
“时间hh-mm-ss”
“”
"";
客户。打印(响应);
我从Web服务器获得以下信息:
.如果单击“保存”按钮,我想读取三个文本字段的值 我该怎么办?或者,有没有其他(更好的)方法来构建这样的Web服务器
提前谢谢 你可以从这个开始 单击“保存”按钮时,可以通过GET请求将值作为查询字符串参数传递 然后可以使用
server.arg()
访问参数
//库
#包括
#包括
//无线网络
const char*ssid=“您的_ssid”;
const char*password=“您的密码”;
ESP8266Web服务器(80);
字符htmlResponse[3000];
void handleRoot(){
snprintf(htmlResponse,3000,
"\
\
\
\
\
\
\
时间\
嗯\
嗯\
党卫军\
\
拯救\
\
\
\
var-hh\
var-mm\
var-ss\
$(“#保存按钮”)。单击(函数(e){\
e、 预防默认值()\
hh=$('#date_hh').val()\
mm=$('#date_mm').val()\
ss=$('#date_ss').val();\
$.get('/save?hh='+hh+'&mm='+mm+'&ss='+ss,函数(数据){\
控制台日志(数据)\
});\
});\
\
\
");
server.send(200,“文本/html”,htmlResponse);
}
void handleSave(){
if(server.arg(“hh”)!=“”){
Serial.println(“小时数:+server.arg(“hh”));
}
if(server.arg(“mm”)!=“”){
Serial.println(“分钟:+server.arg(“mm”));
}
if(server.arg(“ss”)!=“”){
Serial.println(“秒:+server.arg(“ss”));
}
}
无效设置(){
//启动序列号
序列号开始(115200);
延迟(10);
//连接到WiFi网络
Serial.println();
Serial.println();
串行打印(“连接到”);
序列号println(ssid);
WiFi.begin(ssid,密码);
while(WiFi.status()!=WL_已连接){
延迟(500);
连续打印(“.”);
}
Serial.println(“”);
Serial.println(“WiFi连接”);
Serial.println(“IP地址:”);
Serial.println(WiFi.localIP());
server.on(“/”,handleRoot);
server.on(“/save”,handleSave);
server.begin();
Serial.println(“HTTP服务器已启动”);
}
void循环(){
server.handleClient();
}
您需要将输入放入表单,然后提交表单。得到是最简单的;您可以从C++、AS:EX:<代码> int DATEYMM =服务器.ARG(“DATEYMM”)。toint();代码>这是一种过度杀戮的方式,即使是很长一段时间。为什么不直接连接到时间服务器并打印出datetime@clockw0rk可能是离线操作?据我们所知,服务器可能处于AP模式。还是为了方便地输入任意非服务器时间进行测试?我同意时间服务器在99%的时间里是最好的。为什么需要
?没有更简单的方法不依赖G?
// Libraries
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
// WiFi network
const char* ssid = "your_ssid";
const char* password = "your_password";
ESP8266WebServer server ( 80 );
char htmlResponse[3000];
void handleRoot() {
snprintf ( htmlResponse, 3000,
"<!DOCTYPE html>\
<html lang=\"en\">\
<head>\
<meta charset=\"utf-8\">\
<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\
</head>\
<body>\
<h1>Time</h1>\
<input type='text' name='date_hh' id='date_hh' size=2 autofocus> hh \
<input type='text' name='date_mm' id='date_mm' size=2 autofocus> mm \
<input type='text' name='date_ss' id='date_ss' size=2 autofocus> ss \
<div>\
<br><button id=\"save_button\">Save</button>\
</div>\
<script src=\"https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js\"></script>\
<script>\
var hh;\
var mm;\
var ss;\
$('#save_button').click(function(e){\
e.preventDefault();\
hh = $('#date_hh').val();\
mm = $('#date_mm').val();\
ss = $('#date_ss').val();\
$.get('/save?hh=' + hh + '&mm=' + mm + '&ss=' + ss, function(data){\
console.log(data);\
});\
});\
</script>\
</body>\
</html>");
server.send ( 200, "text/html", htmlResponse );
}
void handleSave() {
if (server.arg("hh")!= ""){
Serial.println("Hours: " + server.arg("hh"));
}
if (server.arg("mm")!= ""){
Serial.println("Minutes: " + server.arg("mm"));
}
if (server.arg("ss")!= ""){
Serial.println("Seconds: " + server.arg("ss"));
}
}
void setup() {
// Start serial
Serial.begin(115200);
delay(10);
// Connecting to a WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
server.on ( "/", handleRoot );
server.on ("/save", handleSave);
server.begin();
Serial.println ( "HTTP server started" );
}
void loop() {
server.handleClient();
}