前言
在超视距的环境下,人们总想对远程的硬件进行控制并传输应用数据。将一个硬件设置为服务器,通过浏览器对远程硬件的控制和数据推送。满足需求的话设定URI协议进行标识,将ESPDuino作为一个Web Server,来响应远程的控制指令,推送数据。
一、开发板加电,上传固件代码,串口监视显示联网成功,WEB服务器启动 在浏览器中输入ip
二、在浏览器中填写HTTP地址
GPIO是嵌入式中最常用的资源,是各种控制指令/响应的硬件接口,通过高低电平实现具体控制。/如图一/gpio/1表示把GPIO接口设置为高电平,这时将可以可以观察到,led灯灭了
将GPIO接口设置为低电平此时led灯常亮
1.源码分析
代码如下:
#define PIN_LED 16
#define KEY_FLASH 0
#include<ESP8266WiFi.h>
const char*ssid ="nfc";
const char*password="123456789";
WiFiServer server(80);
void setup(){
Serial.begin(115200);
delay(10);
pinMode(PIN_LED,OUTPUT);
digitalWrite(PIN_LED,LOW);
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");
//Start the server
server.begin();
Serial.println("Serial started");
//print the address
Serial.println(WiFi.localIP());
}
void loop(){
WiFiClient client=server.available();
if(!client){
return;
}
Serial.println("new client");
while(!client.available()){
delay(1);
}
String req=client.readStringUntil('\r');
Serial.println(req);
client.flush();
int val;
if(req.indexOf("/gpio/0")!=-1)
val=1;
else if(req.indexOf("/gpio/1")!=1)
val=1;
else{
Serial.println("invalid requst");
client.stop();
return;
}
digitalWrite(PIN_LED,val);
client.flush();
String s="HTTP/1.1 200 OK\r\n Content-Type:text/html\r\n\r\n<! DOCTYPE HTML>\r\n<html>\r\n CPIO is now";
s +=(val)? "high":"low";
s +="</html>\n";
client.print(s);
delay(1);
Serial.println("Client disconnected");
}
总结
通过浏览器来实现对远程硬件的控制和数据推送,作为连接人和硬件的桥梁,大大加深了更多远程服务实现的可能性,也为远程控制的人工智能实现了向前的一步。