ESP32单片机WiFi服务器应用开发

在现代电子项目中,单片机如ArduinoESP32等微控制器因其灵活性和低成本而受到广泛欢迎。这些设备能够通过多种方式与外部世界进行交互,包括通过串行端口、LCD显示屏、蓝牙和Wi-Fi通信协议等。本文将介绍如何使用ESP32开发一个基于WiFi的Web服务器应用,并通过Arduino IDE进行编程。

首先,需要了解WiFi的两种工作模式:一种是作为现有WiFi网络的客户端,另一种是作为访问点(AP)。在本文中,将关注后者,即ESP32作为访问点。为了实现这一点,需要使用两个库:WiFi.h库用于设置WiFi部分,WebServer.h库用于构建Web页面。

接下来,将详细介绍如何设置WiFi服务器。虽然互联网上有许多教程详细介绍了如何实现服务器,但本文将重点介绍如何创建一个有效的应用程序,而不会过分关注美学。

在设置函数中,首先创建一个软访问点:

void setup() { // Create SoftAP WiFi.softAP(ssid, password); WiFi.softAPConfig(local_ip, gateway, subnet); server.on("/", handle_root); server.onNotFound([](){server.send(404, "text/plain", "The content was not found.")}); server.begin(); }

在这里,使用WebServer库来模拟事件驱动的应用程序。例如,server.on("/", handle_root)将一个函数附加到一个请求上,在这种情况下,获取根页面"/"的请求将由函数handle_root满足。可以为服务器最终需要提供的每个“页面”附加函数,也可以为未知请求附加函数。

在循环函数中,有listen指令以及一个延迟,用于模拟板卡功能,即对控制、传感器等的定时循环。串行通信用于模拟中断以激活WiFi,它需要持续监听(注意小的delay(10)):

void loop() { while(Serial.available() > 0) { char cmd = Serial.read(); if(cmd == 115) listen = !listen; // s start/stop listening Serial.println(listen? "WEB on" : "WEB off"); } if(listen) server.handleClient(); else delay(1980); delay(10); }

处理请求的函数(右侧)并不特别有趣。通过args()方法获取的URL中参数的数量,可以区分请求,例如,如果数量为0,则发送根页面,否则可能是Ajax请求,通过arg("c")方法,函数检索并执行所需的命令。

HTML页面包含两个按钮,与onClick事件相关联,一个数字输入和一个用于接收答案的pre格式化标签。Ajax函数在接收到数据后,直接将其添加到pre格式化标签中。

<!DOCTYPE html> <html> <meta name='viewport' content='width=device-width, initial-scale=1'/> <body> <h1>Condor Web Server with ESP32 - AP Mode</h1> <input type='button' value='Set time' onClick='ajx("c=h&n="+$("n").value)'/> <input type='number' id='n' value='36000'/> <p> <input type='button' value='Get temp.' onClick='ajx("c=t")'/> </pre> </pre> <script type='text/javascript'> $=i=>document.getElementById(i); ajx=u=>{ var x = new XMLHttpRequest(); x.onreadystatechange = () => { if(x.readyState == 4) { if(x.status == 200) $( 'f').innerHTML += '\\n' + x.responseText; else $( 'f').innerHTML = 'Err: ' + x.status; } }; x.open('GET', '?'+u, true); x.send(null) } </script> </body> </html>

meta标签告诉浏览器适应客户端大小,因此在手机上,页面是可接受的。

要访问板卡,检查设备必须连接到WiFi板(通过设置中的App设置部分),然后在浏览器中输入IP,例如192.168.1.1;它应该显示一个页面,用户可以要求温度和湿度或设置时钟,输入从午夜开始的秒数。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485