简单实现Web控制ESP32,附入门最快的方式

先看效果

typecho的markdown用不了html标签,只能放个直链了
视频直链

那时

很早以前就想玩这种东西了,那时候还没有5G,现在……我来了!

入门最快的方法

要问怎样入门最快?直接找好兄弟!

我:

简单实现Web控制ESP32,附入门最快的方式

然后我就得到了:需要什么(硬件)、用什么(软件)……

再然后:给链接!

基本入门,达成。

硬件、环境

硬件:

  • ESP32开发板一块 cp2102
  • 数据线一根,能传输数据的。
  • 其他硬件还没到,需要什么得看想做什么

软件:

  • VSCode
  • VSCode插件:PlatformIO IDE

PlatformIO IDE安装好后新建项目,Board选择DOIT ESP32 DEVKIT V1,然后Aruino的库就自动安装好了

(原本我用的AruinoIDE,各种错误各种坑,得亏好兄弟了)

ESP32程序编写

platformio.ini 加一个配置项 monitor_speed = 115200

开发是使用的C++

引入头文件:

#include <Arduino.h>
#include <WebServer.h>
#include <WiFi.h>

连接WiFi我就不描述了。

再创建一个WebServer对象:

WebServer server(80);

注册uri,并启动Web服务器:

//客户端访问回调函数
void indexHandler()
{
  server.send(200, "text/html", "index");
}
//客户端访问回调函数
void testHandler(){
  server.send(200, "text/html", "test seccess");
  Serial.print("test Controller | Time:");
  Serial.println(millis());
}

//注册URI
server.on("/", indexHandler);
server.on("/test", testHandler);
//启动WebServer
server.begin();

loop函数中处理请求:

server.handleClient();

ESP32 完整代码

#include <Arduino.h>
#include <WebServer.h>

#include <WiFi.h>
// #include <string>
const char *ssid = "wifi";
const char *password = "wifi";
WebServer server(80);

String indexHtml = String("") + "<!DOCTYPE html>" +
                   "<html>" +
                   "	<head>" +
                   "		<meta charset=\"utf-8\">" +
                   "		<title>ESP32 WebController</title>" +
                   "	</head>" +
                   "	<body>" +
                   "		<h1>Web Controller</h1>" +
                   "		<button onclick=\"test()\" type=\"button\" style=\"height: 100px;width: 200px;background-color: #1aa6f67d;border: 0px;\">Test</button>" +
                   "	</body>" +
                   "	<script type=\"text/javascript\">" +
                   "		function test() {" +
                   "			var ajax = new XMLHttpRequest();" +
                   "			ajax.open(\'get\', \'/test\');" +
                   "			ajax.send();" +
                   "			ajax.onreadystatechange = function() {" +
                   "				if (ajax.readyState == 4 && ajax.status == 200) {" +
                   "					console.log(ajax.responseText);" +
                   "				}" +
                   "			}" +
                   "		}" +
                   "	</script>" +
                   "</html>";

void indexHandler()
{
  server.send(200, "text/html", indexHtml);
}

void testHandler()
{
  server.send(200, "text/html", "test seccess");
  Serial.print("test Controller | Time:");
  Serial.println(millis());
}

void setup()
{
  // put your setup code here, to run once:
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(2000);
    Serial.println(WiFi.status());
    Serial.println("Connecting to WiFi..");
  }
  Serial.println(WiFi.status());
  Serial.println("Connected.");
  Serial.println(WiFi.localIP().toString());

  server.on("/", indexHandler);
  server.on("/test", testHandler);
  server.begin();
}

void loop()
{
  // put your main code here, to run repeatedly:
  server.handleClient();
}

Web页面

主要就是使用了个原生Ajax向esp32程序注册的URI发出请求,再由esp32程序的请求回调函数进行处理

完整代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>ESP32 WebController</title>
	</head>
	<body>
		<h1>Web Controller</h1>
		<button onclick="test()" type="button" style="height: 100px;width: 200px;background-color: #1aa6f67d;border: 0px;">Test</button>
	</body>
	<script type="text/javascript">
		function test() {
			var ajax = new XMLHttpRequest();
			ajax.open('get', '/test');
			ajax.send();
			ajax.onreadystatechange = function() {
				if (ajax.readyState == 4 && ajax.status == 200) {
					console.log(ajax.responseText);
				}
			}
		}
	</script>
</html>

万丈高楼平地起

这是第一步,可以说是很简单了,但这又是最重要的一环。

之后可以使用websocket与云服务器+控制端+esp终端进行实时互联,当然也可以用其他的,总之就是:起飞

上一篇:JavaWeb复习巩固


下一篇:Ajax的学习