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

工程资料上传中

链接为工程文件。
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函数中,从而确保它能经常被调用。
}

在这里插入图片描述

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ESP8266使用UPnP实现发现设备功能的基本流程如下: 1. ESP8266作为UPnP控制点,发送搜索请求(M-SEARCH)到网络中的UPnP设备。 2. 网络中的UPnP设备接收到搜索请求后,返回设备描述文档(Device Description Document)。 3. ESP8266解析设备描述文档,获取设备的基本信息、服务信息等。 4. ESP8266根据设备描述文档中的信息,与设备进行通信,实现相应的功能。 在ESP8266中,可以使用UPnP库来实现UPnP协议栈,包括搜索设备、解析设备描述文档等功能。以下是一个简单的搜索设备的示例代码: ``` #include <ESP8266WiFi.h> #include <WiFiUdp.h> #include <UPnP.h> WiFiUDP udp; UPnP upnp(udp); void setup() { Serial.begin(115200); WiFi.begin("ssid", "password"); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); udp.begin(1900); upnp.searchRootDevice(); } void loop() { int n = upnp.parseResponse(); if (n > 0) { Serial.print("Found "); Serial.print(n); Serial.println(" devices"); for (int i = 0; i < n; i++) { Serial.println(upnp.getDeviceType(i)); Serial.println(upnp.getFriendlyName(i)); Serial.println(upnp.getLocation(i)); } } delay(1000); } ``` 该代码中,首先连接WiFi网络,然后创建一个UDP对象和一个UPnP对象。在setup函数中,调用upnp.searchRootDevice()方法发送搜索请求。在loop函数中,调用upnp.parseResponse()方法解析设备描述文档,获取搜索到的设备信息。最后,使用upnp.getDeviceType(i)、upnp.getFriendlyName(i)、upnp.getLocation(i)等方法获取设备的类型、名称、位置等信息。 需要注意的是,UPnP搜索请求需要发送到多播地址239.255.255.250,端口号为1900。同时,设备描述文档可能存在多个版本,需要根据版本进行解析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值