【史上最全面ESP32教程】http通信

文章目录

  • 前言
  • HTTP协议是什么?
    • HTTP协议的特点
    • HTTP协议的常见应用
  • esp32 使用http通信
    • 通信流程
    • 基础使用
    • HTTPClient 常用的函数
      • 函数介绍:
        • `void end(void);`
        • `bool connected(void);`
        • `void setReuse(bool reuse);`
        • `void setUserAgent(const String& userAgent);`
        • `void setAuthorization(const char * user, const char * password);`
        • `int GET();`
        • `String getString(void);`
        • `int PATCH(uint8_t * payload, size_t size);`
        • `int PATCH(String payload);`
        • `int POST(uint8_t * payload, size_t size);`
        • `int POST(String payload);`
        • `int PUT(uint8_t * payload, size_t size);`
        • `int PUT(String payload);`
        • `int sendRequest(const char * type, String payload);`
        • `void addHeader(const String& name, const String& value, bool first = false, bool replace = true);`
        • `void collectHeaders(const char* headerKeys[], const size_t headerKeysCount);`
        • `String header(const char* name);`
        • `String header(size_t i);`
        • `String headerName(size_t i);`
        • `int headers();`
        • `bool hasHeader(const char* name);`
        • `int getSize(void);`
        • `const String &getLocation(void);`
        • `WiFiClient& getStream(void);`
        • `WiFiClient* getStreamPtr(void);`
        • `int writeToStream(Stream* stream);`
        • `String getString(void);`
        • `static String errorToString(int error);`
        • `void setCookieJar(CookieJar* cookieJar);`
        • `void resetCookieJar();`
        • `void clearAllCookies();`
  • 总结


前言

随着物联网(IoT)的快速发展,ESP32作为一款高性能、低功耗的Wi-Fi和蓝牙双模芯片,受到了广泛的关注和应用。在物联网设备中,HTTP协议是实现设备与服务器之间通信的常用协议。本文将介绍HTTP协议的基本概念及其常见应用场景。


HTTP协议是什么?

HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于传输超文本的应用层协议。它是万维网(WWW)的基础,定义了客户端(如浏览器)与服务器之间的通信规则。HTTP协议采用请求-响应模式,客户端发送请求,服务器返回响应。

HTTP协议的特点

  • 无状态:每次请求都是独立的,服务器不会保留之前请求的状态。
  • 灵活性:支持多种数据格式,如HTML、JSON、XML等。
  • 简单性:易于实现和使用,广泛应用于Web开发。

HTTP协议的常见应用

  • Web浏览:浏览器通过HTTP协议请求网页内容,服务器返回HTML页面。
  • API通信:物联网设备通过HTTP协议与服务器进行数据交互,如上传传感器数据或获取控制指令。
  • 文件传输:通过HTTP协议下载或上传文件,如软件更新或日志文件。

esp32 使用http通信

通信流程

  1. 连接网络
  2. 开始http通信
  3. 发送请求并获取响应
  4. 关闭连接

基础使用

我们需要使用HTTPClient类来进行通信
如果我们要开启一个http通信使用下面这个函数,参数为你要http通信的url:

bool begin(String url);

如果我们要GET一个内容,我们可以使用下面这个函数:

int GET();

他的返回值为状态码。
状态码有下面这些取值:

  • 200 OK:请求成功。具体的含义取决于HTTP方法。例如,GET方法表示资源已被获取并在消息体中传输。
  • 201 Created:请求成功,并且新的资源已经作为结果创建。这通常是在POST请求或某些PUT请求后发送的响应。
  • 204 No Content:没有要发送的内容,但头部可能有用。用户代理可能会使用新的头部更新此资源的缓存头部。
  • 301 Moved Permanently:请求的URL已永久移动到新位置,并且将来的引用应使用新的URL。
  • 400 Bad Request:服务器无法理解请求的语法。
  • 401 Unauthorized:请求需要用户验证。
  • 403 Forbidden:服务器理解请求,但拒绝执行它。
  • 404 Not Found:服务器找不到请求的资源。
  • 500 Internal Server Error:服务器遇到错误,无法完成请求

我们可以通过下面这个函数来获取GET的返回值:

String getString(void);

我们可以使用下面这个函数来关闭http连接:

void end(void);
#include <WiFi.h>
#include <HTTPClient.h>const char* ssid = ".......";        // WiFi网络名称
const char* password = ".......";  // WiFi网络密码void setup() {Serial.begin(115200);  // 初始化串口通信// 连接到WiFi网络WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED) {delay(1000);Serial.println("Connecting to WiFi...");}Serial.println("Connected to WiFi");// 设置HTTPClient对象HTTPClient http;// 为GET请求设置目标URLString url = "http://example.com/api/data"; // 替换为你的目标URL// 发送GET请求http.begin(url);// 发送请求并获取响应int httpResponseCode = http.GET();if (httpResponseCode > 0) { // 如果收到响应Serial.print("HTTP Response code: ");Serial.println(httpResponseCode); // 打印响应代码String payload = http.getString(); // 获取响应内容Serial.println(payload); // 打印响应内容} else {Serial.print("Error code: ");Serial.println(httpResponseCode); // 打印错误代码}http.end(); // 关闭连接
}void loop() {// 程序主循环,此处不需要添加其他代码
}

HTTPClient 常用的函数

函数介绍:

void end(void);
  • 函数原型: void end(void);
  • 函数作用: 关闭HTTPClient对象,释放资源。
  • 函数参数: 无。
  • 返回值的作用: 无返回值。
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    // 处理响应
    http.end(); // 关闭HTTP连接
    
bool connected(void);
  • 函数原型: bool connected(void);
  • 函数作用: 检查HTTPClient对象是否已连接到服务器。
  • 函数参数: 无。
  • 返回值的作用: 返回true表示连接成功,返回false表示未连接或连接已断开。
  • 示例代码:
    HTTPClient http;
    if (http.connected()) {// 执行请求操作
    } else {// 重新连接或处理断开连接情况
    }
    
void setReuse(bool reuse);
  • 函数原型: void setReuse(bool reuse);
  • 函数作用: 设置是否启用HTTP keep-alive功能,允许多次复用同一TCP连接。
  • 函数参数:
    • reuse:布尔值,true表示启用keep-alive,false表示禁用。
  • 返回值的作用: 无返回值。
  • 示例代码:
    HTTPClient http;
    http.setReuse(true); // 启用keep-alive
    
void setUserAgent(const String& userAgent);
  • 函数原型: void setUserAgent(const String& userAgent);
  • 函数作用: 设置HTTP请求的用户代理(User-Agent)标头。
  • 函数参数:
    • userAgent:String类型,要设置的用户代理字符串。
  • 返回值的作用: 无返回值。
  • 示例代码:
    HTTPClient http;
    http.setUserAgent("ESP32 Client");
    
void setAuthorization(const char * user, const char * password);
  • 函数原型: void setAuthorization(const char * user, const char * password);
  • 函数作用: 设置基本身份验证的用户名和密码。
  • 函数参数:
    • user:用户名字符串。
    • password:密码字符串。
  • 返回值的作用: 无返回值。
  • 示例代码:
    HTTPClient http;
    http.setAuthorization("username", "password");
    
int GET();
  • 函数原型: int GET();
  • 函数作用: 发送HTTP GET请求并接收响应。
  • 函数参数: 无。
  • 返回值的作用: 返回HTTP响应状态代码(例如200表示成功)。
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    // 处理响应
    
String getString(void);
  • 函数原型: String getString(void);
  • 函数作用: 获取HTTP响应的正文内容。
  • 函数参数: 无。
  • 返回值的作用: 返回包含HTTP响应正文内容的String对象。
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    if (httpResponseCode > 0) {String response = http.getString();Serial.println(response);
    }
    
int PATCH(uint8_t * payload, size_t size);
  • 函数原型: int PATCH(uint8_t * payload, size_t size);
  • 函数作用: 发送HTTP PATCH请求并附带数据。
  • 函数参数:
    • payload:指向要发送数据的字节数组的指针。
    • size:要发送数据的大小(字节数)。
  • 返回值的作用: 返回HTTP响应状态代码。
  • 示例代码:
    HTTPClient http;
    uint8_t data[] = { 0x01, 0x02, 0x03 };
    int httpResponseCode = http.PATCH(data, sizeof(data));
    
int PATCH(String payload);
  • 函数原型: int PATCH(String payload);
  • 函数作用: 发送HTTP PATCH请求并附带数据(字符串形式)。
  • 函数参数:
    • payload:要发送的数据字符串。
  • 返回值的作用: 返回HTTP响应状态代码。
  • 示例代码:
    HTTPClient http;
    String data = "key=value";
    int httpResponseCode = http.PATCH(data);
    
int POST(uint8_t * payload, size_t size);
  • 函数原型: int POST(uint8_t * payload, size_t size);
  • 函数作用: 发送HTTP POST请求并附带数据。
  • 函数参数:
    • payload:指向要发送数据的字节数组的指针。
    • size:要发送数据的大小(字节数)。
  • 返回值的作用: 返回HTTP响应状态代码。
  • 示例代码:
    HTTPClient http;
    uint8_t data[] = { 0x01, 0x02, 0x03 };
    int httpResponseCode = http.POST(data, sizeof(data));
    
int POST(String payload);
  • 函数原型: int POST(String payload);
  • 函数作用: 发送HTTP POST请求并附带数据(字符串形式)。
  • 函数参数:
    • payload:要发送的数据字符串。
  • 返回值的作用: 返回HTTP响应状态代码。
  • 示例代码:
    HTTPClient http;
    String data = "key=value";
    int httpResponseCode = http.POST(data);
    
int PUT(uint8_t * payload, size_t size);
  • 函数原型: int PUT(uint8_t * payload, size_t size);
  • 函数作用: 发送HTTP PUT请求并附带数据。
  • 函数参数:
    • payload:指向要发送数据的字节数组的指针。
    • size:要发送数据的大小(字节数)。
  • 返回值的作用: 返回HTTP响应状态代码。
  • 示例代码:
    HTTPClient http;
    uint8_t data[] = { 0x01, 0x02, 0x03 };
    int httpResponseCode = http.PUT(data, sizeof(data));
    
int PUT(String payload);
  • 函数原型: int PUT(String payload);
  • 函数作用: 发送HTTP PUT请求并附带数据(字符串形式)。
  • 函数参数:
    • payload:要发送的数据字符串。
  • 返回值的作用: 返回HTTP响应状态代码。
  • 示例代码:
    HTTPClient http;
    String data = "key=value";
    int httpResponseCode = http.PUT(data);
    
int sendRequest(const char * type, String payload);
  • 函数原型: int sendRequest(const char * type, String payload);
  • 函数作用: 发送自定义类型的HTTP请求,并附带数据(字符串形式)。
  • 函数参数:
    • type:HTTP请求类型,例如 “GET”, “POST”, “PUT” 等。
    • payload:要发送的数据字符串。
  • 返回值的作用: 返回HTTP响应状态代码。
  • 示例代码:
    HTTPClient http;
    int httpResponseCode = http.sendRequest("POST", "key=value");
    
void addHeader(const String& name, const String& value, bool first = false, bool replace = true);
  • 函数原型: void addHeader(const String& name, const String& value, bool first = false, bool replace = true);
  • 函数作用: 添加HTTP请求头。
  • 函数参数:
    • name:头部字段的名称。
    • value:头部字段的值。
    • first:可选参数,默认为false。如果为true,则将新头部添加到头部列表的开头。
    • replace:可选参数,默认为true。如果为true,则替换现有的同名头部;如果为false,则添加到现有同名头部后面。
  • 返回值的作用: 无返回值。
  • 示例代码:
    HTTPClient http;
    http.addHeader("Content-Type", "application/json");
    
void collectHeaders(const char* headerKeys[], const size_t headerKeysCount);
  • 函数原型: void collectHeaders(const char* headerKeys[], const size_t headerKeysCount);
  • 函数作用: 指定要收集的HTTP响应头。
  • 函数参数:
    • headerKeys:指向包含要收集的头部字段名称的数组。
    • headerKeysCount:数组中头部字段名称的数量。
  • 返回值的作用: 无返回值。
  • 示例代码:
    const char* headersToCollect[] = { "Content-Length", "Content-Type" };
    HTTPClient http;
    http.collectHeaders(headersToCollect, sizeof(headersToCollect) / sizeof(headersToCollect[0]));
    
String header(const char* name);
  • 函数原型: String header(const char* name);
  • 函数作用: 获取指定名称的HTTP响应头值。
  • 函数参数:
    • name:要获取的头部字段名称。
  • 返回值的作用: 返回包含头部字段值的String对象。
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    String contentType = http.header("Content-Type");
    
String header(size_t i);
  • 函数原型: String header(size_t i);
  • 函数作用: 获取指定索引位置的HTTP响应头值。
  • 函数参数:
    • i:要获取的头部字段的索引(从0开始)。
  • 返回值的作用: 返回包含头部字段值的String对象。
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    String firstHeader = http.header(0);
    
String headerName(size_t i);
  • 函数原型: String headerName(size_t i);
  • 函数作用: 获取指定索引位置的HTTP响应头名称。
  • 函数参数:
    • i:要获取的头部字段的索引(从0开始)。
  • 返回值的作用: 返回包含头部字段名称的String对象。
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    String firstName = http.headerName(0);
    
int headers();
  • 函数原型: int headers();
  • 函数作用: 获取HTTP响应中头部字段的数量。
  • 函数参数: 无。
  • 返回值的作用: 返回头部字段的数量。
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    int numHeaders = http.headers();
    
bool hasHeader(const char* name);
  • 函数原型: bool hasHeader(const char* name);
  • 函数作用: 检查HTTP响应中是否存在指定名称的头部字段。
  • 函数参数:
    • name:要检查

的头部字段名称。

  • 返回值的作用: 如果存在指定名称的头部字段,则返回true;否则返回false
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    if (http.hasHeader("Content-Type")) {// 处理存在Content-Type头部的情况
    }
    
int getSize(void);
  • 函数原型: int getSize(void);
  • 函数作用: 获取HTTP响应正文的大小(字节数)。
  • 函数参数: 无。
  • 返回值的作用: 返回HTTP响应正文的大小。
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    int contentSize = http.getSize();
    
const String &getLocation(void);
  • 函数原型: const String &getLocation(void);
  • 函数作用: 获取HTTP响应中的 Location 头部字段的值,用于处理重定向。
  • 函数参数: 无。
  • 返回值的作用: 返回包含 Location 头部字段值的String对象的引用。
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    String redirectLocation = http.getLocation();
    
WiFiClient& getStream(void);
  • 函数原型: WiFiClient& getStream(void);
  • 函数作用: 获取底层的WiFiClient对象,用于直接访问底层网络连接。
  • 函数参数: 无。
  • 返回值的作用: 返回一个WiFiClient对象的引用。
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    WiFiClient& stream = http.getStream();
    
WiFiClient* getStreamPtr(void);
  • 函数原型: WiFiClient* getStreamPtr(void);
  • 函数作用: 获取底层的WiFiClient对象指针,用于直接访问底层网络连接。
  • 函数参数: 无。
  • 返回值的作用: 返回一个指向WiFiClient对象的指针。
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    WiFiClient* streamPtr = http.getStreamPtr();
    
int writeToStream(Stream* stream);
  • 函数原型: int writeToStream(Stream* stream);
  • 函数作用: 将HTTP响应内容写入给定的流(Stream)对象。
  • 函数参数:
    • stream:指向目标流对象的指针。
  • 返回值的作用: 返回写入流的字节数。
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    WiFiClient client;
    int bytesWritten = http.writeToStream(&client);
    
String getString(void);
  • 函数原型: String getString(void);
  • 函数作用: 获取HTTP响应的正文内容。
  • 函数参数: 无。
  • 返回值的作用: 返回包含HTTP响应正文内容的String对象。
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    String response = http.getString();
    
static String errorToString(int error);
  • 函数原型: static String errorToString(int error);
  • 函数作用: 将HTTPClient库中的错误代码转换为对应的错误消息字符串。
  • 函数参数:
    • error:HTTPClient库中定义的错误代码。
  • 返回值的作用: 返回表示错误消息的String对象。
  • 示例代码:
    HTTPClient http;
    http.begin("http://example.com/api/data");
    int httpResponseCode = http.GET();
    if (httpResponseCode < 0) {String errorMessage = HTTPClient::errorToString(httpResponseCode);Serial.println(errorMessage);
    }
    
void setCookieJar(CookieJar* cookieJar);
  • 函数原型: void setCookieJar(CookieJar* cookieJar);
  • 函数作用: 设置用于管理HTTP请求和响应中Cookie的CookieJar对象。
  • 函数参数:
    • cookieJar:指向CookieJar对象的指针。
  • 返回值的作用: 无返回值。
  • 示例代码:
    CookieJar cookieJar;
    HTTPClient http;
    http.setCookieJar(&cookieJar);
    
void resetCookieJar();
  • 函数原型: void resetCookieJar();
  • 函数作用: 重置CookieJar,清除所有保存的Cookie。
  • 函数参数: 无。
  • 返回值的作用: 无返回值。
  • 示例代码:
    HTTPClient http;
    http.resetCookieJar();
    
void clearAllCookies();
  • 函数原型: void clearAllCookies();
  • 函数作用: 清除所有保存的Cookie,无论它们是否过期。
  • 函数参数: 无。
  • 返回值的作用: 无返回值。
  • 示例代码:
    HTTPClient http;
    http.clearAllCookies();
    

总结

本文简要介绍了HTTP协议的基本概念及其在物联网设备中的常见应用。HTTP协议作为一种简单、灵活的通信协议,广泛应用于Web开发和物联网设备中。希望本文能帮助读者更好地理解HTTP协议及其在ESP32中的应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/44504.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简谈设计模式之建造者模式

建造者模式是一种创建型设计模式, 旨在将复杂对象的构建过程与其表示分离, 使同样的构建过程可以构建不同的表示. 建造者模式主要用于以下情况: 需要创建的对象非常复杂: 这个对象由多个部分组成, 且这些部分需要一步步地构建不同的表示: 通过相同的构建过程可以生成不同的表示…

skywalking-1-服务端安装

skywalking很优秀。 安装服务端 skywalking的服务端主要是aop服务&#xff0c;为了方便查看使用还需要安装ui。另外采集的数据我们肯定要存起来&#xff0c;这个数据库就直接用官方的banyandb。也就是aop、ui、banyandb都使用官方包。 我们的目的是快速使用和体验&#xff0c…

Xshell配置ssh免密码登录(密钥登陆)

文章目录 一、Xshell登陆步骤 一、Xshell登陆步骤 1.生成客户端的公钥私钥 2.生成公钥文件 3.生成私钥文件 4.将公钥传输进要登录的服务器中 5.修改公钥文件名为authorized_keys (authorized_keys是用于存储公钥的特殊文件,如果已经有了这份文件,可以在末尾追加) 6.连…

时序预测 | Matlab实现TCN-Transformer的时间序列预测

时序预测 | Matlab实现TCN-Transformer的时间序列预测 目录 时序预测 | Matlab实现TCN-Transformer的时间序列预测效果一览基本介绍程序设计 效果一览 基本介绍 基于TCN-Transformer模型的时间序列预测&#xff0c;可以用于做光伏发电功率预测&#xff0c;风速预测&#xff0c;…

apt curl wget git 命令行临时设置代理

一、linux 代理全局设置 export http_proxyhttp://192.168.6.9:8080/ export https_proxyhttps://192.168.6.9:8080/ 可以 export https_proxyhttp://192.168.6.9:8080/ 也可以缺点&#xff0c;有些工具不生效&#xff0c;每次要取消代理设置也麻烦 二、linux 命令行临时设置…

Qt框架中信号与槽机制的实现原理及在QGC中的具体应用场景

Qt 框架的信号与槽机制是其最强大和独特的功能之一。它使得对象之间的通信变得非常简单和直观&#xff0c;尤其在处理用户界面事件和其他异步操作时。以下是 Qt 信号与槽机制的实现原理及其在 QGroundControl (QGC) 中的具体应用场景。 信号与槽机制的实现原理 信号与槽的基本…

小白学webgl合集-Three.js加载器

THREE.TextureLoader: 用途: 加载单个图像文件并将其作为纹理应用到材质上。示例: const loader new THREE.DataTextureLoader(); loader.load(path/to/data.bin, function (texture) {const material new THREE.MeshBasicMaterial({ map: texture });const geometry new TH…

使用Spring Boot和Couchbase实现NoSQL数据库

使用Spring Boot和Couchbase实现NoSQL数据库 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 一、引言 NoSQL数据库越来越受到开发者的欢迎&#xff0c;特别是…

引用计数器(kref)

1、什么是引用计数器 如果我们写了一个字符驱动&#xff0c;当硬件设备插上时&#xff0c;系统会生成一个设备节点。用户在应用空间操作这个设备节点就可以操作设备。如果此时将硬件断开&#xff0c;驱动是不是就要立刻释放呢&#xff1f;如果立刻释放&#xff0c;应用程序是不…

docker-compose构建、运行多容器简介

&#xff08;1&#xff09;准备依赖的镜像&#xff0c;包括mariadb、jdk1.8、nginx&#xff0c;配置docker-compose.yml文件 services:mariadb:image: mariadbports:- "3314:3306"environment:- MARIADB_ROOT_PASSWORD123456volumes:- ./mysql:/var/lib/mysqlnetwor…

PLC数采网关在实际应用中有哪些效能?天拓四方

在工业自动化领域中&#xff0c;PLC扮演着至关重要的角色&#xff0c;它负责控制和监测生产线的各个环节。然而&#xff0c;随着工业4.0的推进和智能制造的快速发展&#xff0c;单纯依靠PLC进行现场控制已无法满足企业对数据集中管理、远程监控和智能分析的需求。因此&#xff…

Efficient Estimation of Word Representations in Vector Space论文笔记解读

基本信息 作者TomasMikolovdoi10.48550发表时间2013期刊ICLR网址http://arxiv.org/abs/1301.3781 研究背景 1. What’s known 既往研究已证实 前馈神经网络语言模型(NNLM) 循环神经网络语言模型(RNNLM) 2. What’s new 创新点 Word2vec有两种模型&#xff1a;CBOW和Skip-gr…

AJAX-个人版2.0

AJAX&#xff08;Asynchronous Javascript And Xml&#xff09; 传统请求及缺点 传统的请求都有哪些&#xff1f; 直接在浏览器地址栏上输入URL。点击超链接提交form表单使用JS代码发送请求 window.open(url)document.location.href urlwindow.location.href url… 传统请…

【对抗算法复现】CW

首先进行数据的预处理 transform transforms.Compose([transforms.ToTensor(), # 将图片转换为Tensor&#xff0c;自动将[0,255]映射到[0,1]transforms.Normalize((0.491,0.482 ,0.446), (0.247 ,0.243 ,0.261)) # 对张量进行标准化&#xff0c;使其范围为[-1,1] ])CW实现 …

“十四五”新型基础设施建设

一、基础设施 基础设施包括交通设施、邮电通讯设施、能源动力设施、供水排水设施、环保设施、防卫防灾安全设施等传统基础设施。这些设施共同构成了一个国家或地区正常运转的支柱&#xff0c;确保社会经济活动的正常进行。 交通设施&#xff1a;交通设施是基础设施的重要组成部…

AbyssFish单连通周期边界多孔结构2D软件

软件介绍 AbyssFish单连通周期边界多孔结构2D软件&#xff08;以下简称软件&#xff09;可用于生成具备周期性边界条件的单连通域多孔结构PNG图片&#xff0c;软件可设置生成模型的尺寸、孔隙率、孔隙尺寸、孔喉尺寸等参数&#xff0c;并且具备孔隙形态控制功能。 软件生成的…

视频号热门视频数据分析工具,快速查看同行数据创作者必看!

每天排行榜是帮助创作者查看同行数据为自己提供创作灵感&#xff0c;此外每天排行榜热门的视频收集了用户喜欢看的类型。 灵感分类了解当前社会关注的热点内容。该工具通过监测和分析视频号全网舆情&#xff0c;选取热门话题进行排序&#xff0c;形成一个每日热点排行榜。 这…

yolov8 分类太阳能板

原文:yolov8 分类太阳能板 - 知乎 (zhihu.com) 1、数据集 https://github.com/zae-bayern/elpv-dataset​github.com/zae-bayern/elpv-dataset 2、数据分析 import matplotlib.pyplot as plt import ostrain_dir = "./images" valid_extensions=(.jpg, .png, .j…

华为防火墙上的配置(1)

实验拓扑图 实验要求&#xff1a; 1、DMZ区内的服务器&#xff0c;生产区仅能在办公时间内&#xff08;9&#xff1a;00-18:00)可以访问&#xff0c;办公区的设备全天可以访问 2、生产区不允许访问互联网&#xff0c;办公区和游客区允许访问互联网 3、办公区设备10.0.2.10不…

00:HAL库的认识

一&#xff1a;HAL库 开发现状&#xff1a; 1&#xff1a;下载 网站&#xff1a; https://www.st.com/zh/embedded-software/stm32cube-mcu-mpu-packages.html 去选择我们的系列 我们使用的是STM32F103C8t6的这个 继续一直向下拉点击这个&#xff1b;之后傻瓜步骤直接可以…