ESP8266使用AJAX技术实现动态更新网页

本文介绍了如何使用ESP8266和AJAX技术实现实时传感器数据监控,避免了传统方法中需要频繁刷新网页的低效问题。通过在ESP8266上创建一个Web服务器,并结合AJAX异步更新,可以实现网页只更新必要的内容,提高物联网应用的效率。示例包括了传感器数据读取和LED控制,展示了如何利用JavaScript、XML和HTTP请求实现这一功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工程资料上传中

链接为工程文件。
https://download.csdn.net/download/u011993802/33142527

在许多物联网应用中,有些情况下需要连续监控传感器数据,而最简单的方法是通过使用ESP8266 Web服务器来提供HTML网页服务。但是这种方法的问题在于,必须以特定的时间间隔刷新Web浏览器才能获取更新的传感器数据。这不仅效率低下,而且需要很多时钟周期才能执行其他任务。该问题的解决方案称为“Asynchronous JavaScript and XML”或简称AJAX。使用AJAX技术,我们可以监视实时数据而无需刷新整个网页,这不仅节省了时间,而且还节省了宝贵的时钟周期。通过本文,您将学习如何在ESP8266上实现基于AJAX的网络服务器。

什么是AJAX?

如前所述,AJAX表示“Asynchronous JavaScript and XML”,可用于更新网页的一部分,而无需重新加载所需页面。它通过自发地请求和接收来自服务器的数据来实现。 AJAX的功能是异步更新网页内容。这意味着,仅需要更新页面上的一部分内容时,用户的网络浏览器就无需刷新整个网页。

AJAX的日常示例就是Google的建议功能,当我们在Google搜索栏中键入内容时,Google会开始建议相关的搜索字符串。在此过程中,网页不会重新加载,但是需要更改的信息会使用AJAX在后台更新。

AJAX是如何工作的?

AJAX使用两种方法的组合:XML(可扩展标记语言)和 JavaScript和HTML。

XML (Extensible Markup Language)

XML是一种标记语言。 XML主要用于接收具有特定格式的服务器数据。尽管它可以接收纯文本形式的数据。当用户访问网页并发生事件(在我们的例子中是“按下按钮”)时,JavaScript创建一个XMLHttpRequest对象,该对象随后以XML格式在网络浏览器和网络服务器之间传输信息。 XMLHttpRequest对象将对更新后的页面数据的请求发送到Web服务器,服务器处理该请求,在服务器端创建一个响应,然后将其发送回浏览器,然后浏览器使用JavaScript处理该响应并将其显示在网页上。

JavaScript和HTML

JavaScript在AJAX中执行更新过程。对更新内容的请求以XML进行格式化,以使其易于理解,然后JavaScript刷新了该内容,供用户查看更新的页面。

在这里插入图片描述
如上图所示,对于AJAX请求,浏览器使用JavaScript将XMLHttpRequest发送到服务器。该对象包含告诉服务器正在请求什么的数据。服务器仅响应从客户端请求的数据。然后,浏览器接收数据,仅更新页面中需要更新的部分,而不是重新加载整个网页。

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include "index.h" //Html网页
const char *ssid = "ssid ";//WIFI账号
const char *password = "password ";//WIFI密码
ESP8266WebServer server(80);//开启web服务器

void handleRoot()//根网页
{
    String s = webpage;
    server.send(200, "text/html", s);
}
void sensor_data()//获取数据
{
    int a = analogRead(A0);
    int temp = a / 4.35;
    String sensor_value = String(temp);
    server.send(200, "text/plane", sensor_value);
}

void led_control()//led灯控制
{
    String state = "OFF";
    String act_state = server.arg("state");
    if (act_state == "1")
    {
        digitalWrite(LED_BUILTIN, HIGH); //LED ON
        state = "ON";
    }
    else
    {
        digitalWrite(LED_BUILTIN, LOW); //LED OFF
        state = "OFF";
    }
    server.send(200, "text/plane", state);
}

void setup()//设置
{
    pinMode(LED_BUILTIN, OUTPUT);//led灯设置为输出
    WiFi.begin(ssid, password);//连接WIFI
    Serial.begin(115200);//打开串口
    while (WiFi.status() != WL_CONNECTED)
    {
        Serial.println("Connecting...");
    }

    Serial.println("");
    Serial.print("Connected to ");
    Serial.println(ssid);
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());

    server.on("/", handleRoot);//加载网页
    server.on("/led_set", led_control);//绑定
    server.on("/adcread", sensor_data);//绑定
    server.begin();
}

void loop()
{
    // put your main code here, to run repeatedly:
    server.handleClient();
//此函数主要作用是检查有没有客户端设备通过网络向ESP8266网络服务器发送请求。
//每一次handleClient`函数被调用时,ESP8266网络服务器都会检查一下是否有客户端发送HTTP请求。
//因此建议将该函数放在loop函数中,从而确保它能经常被调用。
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值