从零构建安全物联网网关:ESP32/ESP8266的HTTP认证与硬件级防护融合实践

ESP8266&&32 AES加密、解密 (ECB方式) #include <stdio.h> #include "esp_system.h" #include "mbedtls/aes.h" #include <stddef.h> #include <stdint.h> #include "config.h" #include <string.h> #include <stdio.h> #in... 阅读详情

从零构建安全物联网网关:ESP32/ESP8266的HTTP认证与硬件级防护融合实践

在智能家居和工业物联网快速发展的今天,嵌入式设备的安全性问题日益凸显。许多开发者习惯性地将关注点放在网络通信加密上,却忽略了硬件层面的安全防护。本文将带您深入探索如何将HTTP基础认证与ESP32/ESP8266的硬件安全特性相结合,构建真正端到端的安全物联网网关解决方案。

1. 物联网网关安全架构设计思路

构建安全的物联网网关需要从整体架构入手,采用分层防御策略。传统的Web服务器认证往往只关注软件层面的用户名密码验证,而在实际部署中,硬件级别的安全漏洞可能成为攻击者的突破口。

深度防御架构应当包含以下四个层次:

  • 硬件安全层:利用芯片级安全特性如Flash加密、安全启动机制
  • 通信安全层:采用HTTPS加密传输,防止中间人攻击
  • 认证授权层:实现多因素认证和细粒度权限控制
  • 应用安全层:输入验证、输出编码和会话管理

ESP32和ESP8266虽然都是乐鑫推出的物联网芯片,但在安全特性上存在显著差异。ESP32提供了更为完善的硬件安全功能,包括:

安全特性ESP32ESP8266
Flash加密支持不支持
安全启动支持不支持
数字签名支持不支持
加密加速器支持不支持

在实际项目中,如果安全要求较高,建议优先选择ESP32系列芯片。对于资源受限的场景,ESP8266仍然可以通过软件方案实现基本的安全防护。

2. 硬件级安全防护实战配置

2.1 ESP32安全启动配置

安全启动是防止未经授权固件运行的第一道防线。ESP32的安全启动机制基于RSA数字签名验证,确保只有经过签名的固件才能被执行。

// 安全启动配置示例
void setup_security() {
  // 检查安全启动状态
  if (!esp_secure_boot_enabled()) {
    Serial.println("安全启动未启用,建议在生产环境中启用");
  }
  
  // 启用Flash加密
  if (esp_flash_encryption_enabled()) {
    Serial.println("Flash加密已启用");
  } else {
    Serial.println("警告:Flash加密未启用");
  }
}

启用安全启动需要在编译时进行配置,以下是关键步骤:

  1. 生成签名密钥对:使用ESP-IDF提供的espsecure.py工具
  2. 烧录签名密钥:将公钥烧录到ESP32的eFuse中
  3. 签名固件:对编译后的固件进行数字签名
  4. 启用安全启动:通过eFuse设置永久启用安全启动

重要提示:一旦启用安全启动和Flash加密,相关配置将无法逆转。在开发阶段建议先进行充分测试,然后再在生产设备上启用这些功能。

2.2 Flash加密实现方案

Flash加密保护存储在闪存中的敏感数据,包括Wi-Fi凭证、API密钥和用户认证信息。ESP32的Flash加密使用AES-256算法,密钥存储在芯片的eFuse中,对外不可见。

开发模式与发布模式的选择:

  • 开发模式:允许后续更新加密固件,适合开发调试阶段
  • 发布模式:提供最高安全性,但禁止后续固件更新

配置Flash加密需要在项目配置文件中设置:

# sdkconfig 配置示例
CONFIG_SECURE_FLASH_ENCryption_MODE_DEVELOPMENT=y
CONFIG_SECURE_BOOT=y
CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES=y

对于ESP8266这类不支持硬件加密的芯片,我们可以通过软件加密来保护敏感数据:

// ESP8266软件加密示例
#include <Crypto.h>
#include <AES.h>

AES256 aes;
byte key[32] = { /* 你的加密密钥 */ };
byte iv[16] = { /* 初始化向量 */ };

String encryptData(String plaintext) {
  aes.setKey(key, 32);
  aes.setIV(iv, 16);
  aes.cbc_encrypt((byte*)plaintext.c_str(), (byte*)plaintext.c_str(), plaintext.length());
  return base64::encode(plaintext);
}

3. HTTP认证机制深度优化

3.1 增强型HTTP基本认证

传统的HTTP基本认证虽然实现简单,但存在 credentials 以Base64编码传输的安全风险。我们可以通过以下方式进行增强:

#include <ESPAsyncWebServer.h>
#include <ArduinoJson.h>

AsyncWebServer server(80);

// 增强型认证中间件
bool enhancedAuth(AsyncWebServerRequest *request) {
  if (!request->authenticate(http_username, http_password)) {
    // 记录认证失败尝试
    logFailedAttempt(request->client()->remoteIP());
    
    // 添加延迟防止暴力破解
    delay(1000);
    
    // 检查是否达到失败尝试阈值
    if (getFailedAttempts(request->client()->remoteIP()) > 5) {
      // 暂时阻止该IP地址
      blockIP(request->client()->remoteIP(), 300000); // 阻止5分钟
      return false;
    }
    
    return request->requestAuthentication();
  }
  
  // 认证成功,重置失败计数
  resetFailedAttempts(request->client()->remoteIP());
  return true;
}

3.2 会话管理与超时控制

为了避免认证凭证长期有效,我们需要实现会话超时机制:

// 会话管理结构
struct Session {
  String sessionId;
  IPAddress clientIP;
  unsigned long lastActivity;
  String username;
};

std::vector<Session> activeSessions;

// 检查会话有效性
bool validateSession(AsyncWebServerRequest *request) {
  String sessionCookie = request->getHeader("Cookie")->value();
  if (sessionCookie.indexOf("SESSIONID=") != -1) {
    String sessionId = sessionCookie.substring(sessionCookie.indexOf("SESSIONID=") + 10);
    sessionId = sessionId.substring(0, sessionId.indexOf(";"));
    
    for (auto &session : activeSessions) {
      if (session.sessionId == sessionId && 
          session.clientIP == request->client()->remoteIP() &&
          millis() - session.lastActivity < SESSION_TIMEOUT) {
        session.lastActivity = millis();
        return true;
      }
    }
  }
  return false;
}

4. 网络通信安全强化措施

4.1 HTTPS加密通信

虽然ESP32/ESP8266的资源有限,但仍然可以实现HTTPS通信。对于资源充足的ESP32,建议使用HTTPS替代HTTP:

#include <WiFiClientSecure.h>
#include <ESPAsyncWebServer.h>

// 配置SSL证书
const char* ssl_cert = R"EOF(
-----BEGIN CERTIFICATE-----
// 你的证书内容
-----END CERTIFICATE-----
)EOF";

const char* ssl_key = R"EOF(
-----BEGIN PRIVATE KEY-----
// 你的私钥内容
-----END PRIVATE KEY-----
)EOF";

AsyncWebServer server(443);

void setup() {
  // 设置SSL证书
  server.getServer().setRSACert(new X509List(ssl_cert), new PrivateKey(ssl_key));
  
  // 配置路由
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    if(!enhancedAuth(request)) return;
    request->send(200, "text/html", index_html);
  });
  
  server.begin();
}

4.2 防止常见网络攻击

物联网设备面临多种网络攻击威胁,我们需要实现相应的防护措施:

CSRF保护:

String generateCSRFToken() {
  // 生成随机CSRF令牌
  String token = "";
  for (int i = 0; i < 32; i++) {
    token += char(random(65, 90));
  }
  return token;
}

bool validateCSRFToken(AsyncWebServerRequest *request) {
  String token = request->getParam("csrf_token")->value();
  String cookieToken = request->getHeader("Cookie")->value();
  // 验证令牌匹配
  return token.equals(cookieToken);
}

请求频率限制:

// 请求频率限制器
struct RequestRecord {
  IPAddress ip;
  unsigned long lastRequest;
  int requestCount;
};

std::vector<RequestRecord> requestRecords;

bool checkRateLimit(IPAddress ip) {
  unsigned long currentTime = millis();
  
  // 清理过期记录
  requestRecords.erase(std::remove_if(requestRecords.begin(), requestRecords.end(),
    [currentTime](const RequestRecord& record) {
      return currentTime - record.lastRequest > 60000; // 1分钟
    }), requestRecords.end());
  
  // 查找或创建记录
  auto it = std::find_if(requestRecords.begin(), requestRecords.end(),
    [ip](const RequestRecord& record) { return record.ip == ip; });
  
  if (it == requestRecords.end()) {
    requestRecords.push_back({ip, currentTime, 1});
    return true;
  }
  
  if (currentTime - it->lastRequest < 1000 && it->requestCount > 5) {
    return false; // 1秒内超过5次请求
  }
  
  it->lastRequest = currentTime;
  it->requestCount++;
  return true;
}

5. 实战:智能家居网关安全实现

现在我们将前面介绍的安全措施整合到一个完整的智能家居网关示例中。这个示例演示了如何控制一个LED灯,但实际中可以扩展为控制任何家用设备。

5.1 系统架构设计

硬件组件:

  • ESP32开发板
  • LED灯和继电器模块
  • 温湿度传感器(可选)

软件架构:

  • 安全启动和Flash加密(ESP32)
  • HTTPS Web服务器
  • 增强型认证系统
  • 会话管理
  • 请求频率限制

5.2 完整代码实现

#include <WiFi.h>
#include <AsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <ArduinoJson.h>
#include <WiFiClientSecure.h>

// 配置网络凭据
const char* ssid = "你的Wi-Fi名称";
const char* password = "你的Wi-Fi密码";

// 认证凭据
const char* http_username = "admin";
const char* http_password = "StrongPassword123!";

// SSL证书(示例,实际使用时替换为你的证书)
const char* ssl_cert = R"EOF(
-----BEGIN CERTIFICATE-----
// 你的证书内容
-----END CERTIFICATE-----
)EOF";

const char* ssl_key = R"EOF(
-----BEGIN PRIVATE KEY-----
// 你的私钥内容
-----END PRIVATE KEY-----
)EOF";

AsyncWebServer server(443);
const int ledPin = 2;

// 会话管理
struct Session {
  String sessionId;
  IPAddress clientIP;
  unsigned long lastActivity;
};
std::vector<Session> activeSessions;

String generateSessionId() {
  String sessionId = "";
  const char charset[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  for (int i = 0; i < 32; i++) {
    sessionId += charset[random(0, sizeof(charset) - 1)];
  }
  return sessionId;
}

bool validateSession(AsyncWebServerRequest *request) {
  // 会话验证逻辑
  // ...
}

void setup() {
  Serial.begin(115200);
  pinMode(ledPin, OUTPUT);
  
  // 连接Wi-Fi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("正在连接Wi-Fi...");
  }
  Serial.print("IP地址: ");
  Serial.println(WiFi.localIP());
  
  // 配置SSL
  server.getServer().setRSACert(new X509List(ssl_cert), new PrivateKey(ssl_key));
  
  // 路由配置
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    if (!validateSession(request)) {
      return request->requestAuthentication();
    }
    request->send(200, "text/html", homepage_html);
  });
  
  server.on("/login", HTTP_POST, [](AsyncWebServerRequest *request){
    // 处理登录请求
    // ...
  });
  
  server.on("/control", HTTP_POST, [](AsyncWebServerRequest *request){
    if (!validateSession(request)) {
      return request->send(401, "text/plain", "未授权");
    }
    
    // 处理控制请求
    String action = request->getParam("action")->value();
    if (action == "on") {
      digitalWrite(ledPin, HIGH);
      request->send(200, "text/plain", "LED已开启");
    } else if (action == "off") {
      digitalWrite(ledPin, LOW);
      request->send(200, "text/plain", "LED已关闭");
    }
  });
  
  server.begin();
  Serial.println("HTTPS服务器已启动");
}

void loop() {
  // 清理过期会话
  unsigned long currentTime = millis();
  activeSessions.erase(std::remove_if(activeSessions.begin(), activeSessions.end(),
    [currentTime](const Session& session) {
      return currentTime - session.lastActivity > 3600000; // 1小时过期
    }), activeSessions.end());
  
  delay(10000); // 每10秒清理一次
}

5.3 安全监控与日志记录

实现安全监控系统,记录重要事件用于安全审计:

// 安全事件日志
void logSecurityEvent(String eventType, String description, IPAddress ip) {
  File logFile = SPIFFS.open("/security.log", "a");
  if (logFile) {
    String logEntry = "[" + String(millis()) + "] " + eventType + " - " + 
                     description + " - IP: " + ip.toString() + "\n";
    logFile.print(logEntry);
    logFile.close();
  }
}

// 定期上传日志到安全服务器
void uploadLogs() {
  if (WiFi.status() == WL_CONNECTED) {
    WiFiClientSecure client;
    client.setInsecure(); // 仅用于测试,生产环境应使用证书验证
    
    if (client.connect("security-server.com", 443)) {
      File logFile = SPIFFS.open("/security.log", "r");
      if (logFile) {
        client.println("POST /upload-logs HTTP/1.1");
        client.println("Host: security-server.com");
        client.println("Content-Type: text/plain");
        client.print("Content-Length: ");
        client.println(logFile.size());
        client.println();
        
        while (logFile.available()) {
          client.write(logFile.read());
        }
        
        logFile.close();
        SPIFFS.remove("/security.log"); // 清理已上传的日志
      }
      client.stop();
    }
  }
}

在实际项目中部署这些安全措施后,我们的物联网网关将具备企业级的安全防护能力。从硬件安全到网络通信,从身份认证到会话管理,每个环节都得到了充分考虑和加固。

记得根据实际需求调整安全策略的严格程度,在安全性和用户体验之间找到合适的平衡点。特别是在资源受限的物联网设备上,过度安全措施可能会影响设备性能,需要根据具体场景做出权衡。

通过本文介绍的技术方案,您应该能够构建一个既安全又实用的物联网网关,为智能家居或工业物联网应用提供可靠的安全保障。

Espressif 系列:ESP8266 系列_(15).ESP8266安全与加密 在物联网(IoT)应用中,安全性和加密是至关重要的。随着越来越多的设备连接到互联网,保护这些设备免受恶意攻击和数据泄露成为开发者必须考虑的问题。ESP8266作为一款功能强大的Wi-Fi模块,提供了多种安全和加密机制,以确保数据传输的安全性和设备的完整性。本节将对前面讨论的内容进行总结,并展望未来的发展方向。Wi-Fi安全:ESP8266支持多种Wi-Fi安全协议,包括WEP、WPA和WPA2。虽然WEP不安全,但在某些情况下可能仍然被使用。 阅读详情

相关推荐

arduino-crypto:ESP8266 Arduino的最小加密库

ESP8266加密 这是ESP8266 IOT设备的最小轻量级加密库。 它提供以下功能: SHA256 AES 128和256 SHA256HMAC 液化天然气 SHA256和AES的实现基于axTLS的实现,但移植到ESP8266 Arduino平台,归功于Cameron Rich的axTLS项目。 用法 SHA256HMAC 以下代码段演示了如何计算消息的SHA256 HMAC身份验证代码。 /* Include the crypto library into your project */ #include <Crypto> /* The length of the key we will use for this HMAC */ /* The key can be of any length, 16 and 32 are common */ #define KEY_

探索ESP8266加密世界的奥秘 - ESP8266 Crypto库深度解析

探索ESP8266加密世界的奥秘 - ESP8266 Crypto库深度解析 在物联网(IoT)的浩瀚宇宙中,安全成为了每个连接设备不可或缺的守护者。针对这一需求,我们带来了ESP8266 Crypto——一个专为ESP8266量身定制的轻量级加密库,让小型智能设备也能拥有强大的安全保障。 项目介绍 ESP8266 Crypto是一个简洁高效的安全解决方案,它针对ESP8266这个广受欢迎的物联网...

gitblog_00071的博客 685

esp8266 MD5的加密

esp8266 MD5的加密 源码例子 值得可以参考 MD5的加密源码值得 可以参考 可以参考可以参考可以参考

ATK-ESP8266使用说明(STM32-F4)

ATK-ESP8266——仅STA模式下

weixin_62584795的博客 1232

Esp8266 细聊HmacMD5的加密方法带来的安全性,并实践在esp8266上,最大保障传输的过程的信息的安全性

Esp8266 细聊HmacMD5的加密方法带来的安全性,并实践在esp8266上,最大保障传输的过程的信息的安全性。 博文对应地址:https://blog.youkuaiyun.com/xh870189248/article/details/83751704

最新推荐-2026年固态电池+锂电正极+硅基负极等关键技术实践PPT合集(55份).zip

2026年最新固态电池+锂电正极+硅基负极等关键技术实践PPT合集,共55份。供大家查阅。 一、固态电池 1.全固态电池用硅基负极材料研究进展 2.全固态电池硅基负极的开发思考 3.功能型固态电解质设计及界面调控 4.固态电池及关键材料研发与产业化进展 5.固态电池的产业化应用探索 6.固态锂电池开发现状及未来展望 7.固态锂离子电池正极结构设计与材料选择 8.固态锂金属电池设计与应用 9.硫化物全固态电池石墨和硅负极性能调控技术 10.硫化物固态电解质行业应用 11.聚合物基固态电解质与固态电池的关键技术 12.蜂鸟声共振技术-固态电池产业化的革命性创新 13.长安汽车固态电池应用探索 14.高安全性固态电池技术发展趋势 15.高性能硫化物全固态锂电池解决方案 16.高硅体系的膨胀解决方案 二、硅基负极 1.化学气相沉积碳包覆技术在硅基负极材料中的应用 2.新型粘结剂解决 硅基负极膨胀问题 3.氧化亚硅负极材料化学预锂化与界面设计 4.流化床法生产磷酸铁锂及硅负极材料研究 5.石墨烯包覆硅碳负极 6.硅基材料的发展现状及展望 7.硅基负极与固态电解质 8.硅基负极技术与进展 9.硅基负极材料体积膨胀解决策略 10.硅基负极材料及其结构设计 11.硅基负极材料的冶金法制备 12.硅基负极材料的发展与应用 13.硅基负极材料研究进展 14.硅基负极材料:从基础研究到产业应用 15.硅基负极析锂行为及调制研究 16.硅碳负极低成本制造技术报告 17.硅碳负极制备用多孔碳的开发 18.硅碳负极挑战和进展 19.硅碳负极新路线及关键材料制备 20.硅碳负极锂离子电池应力特性研究 21.锂电石墨负极材料工程化技术进步 22.锂离子电池负极材料 23.高容量石墨烯-硅基复合负极材料的研究进展 三、锂电正极 1.基于AI和图论结构化学的锂电池的材料基因探索 2.废旧磷酸铁锂电池梯次及再生利用进展 3.电动汽车大功率充电标准体系与检测认证实践 4.磷酸铁及磷酸铁锂异物防控管理 5.磷酸铁锂正极材料:液相法合成及产业化应用研究 6.磷酸锰铁锂正极材料的研究现状 7.车用动力电池安全标准化工作进展及未来展望 8.锂电层状氧化物正极材料的原子尺度失效机制 9.锂电正极材料工厂异物防控管理图册 10.锂离子电池高熵正极材料成分设计及储锂机制研究 11.高压实磷酸铁锂正极材料生产工艺配方.docx 12.高安全正极材料添加剂提升三元锂电安全性 13.高比能富锂锰基电池关键技术 14.高能量密度锂离子电池正极材料及应用研究 15.高镍单晶三元正极材料研究 16.三元高电压单晶正极材料

micropython基础入门(esp32/esp8266单片机开发)

2022 / 01/ 30: 新版esptool 刷micropython固件指令不是 esptool.py cmd... 而是 esptool cmd... 即可;另外rshell 在 >= python 3.10 的时候出错解决方法可以查看:  已于2022年发布的: 第二章:修复rshell在python3.10出错 免费内容: https://edu.youkuaiyun.com/course/detail/29666 2025/07/07: 由于该视频在2019年制作,当时py3.7;现在py3.13 由于pyreadline冲突rshell已不能用;如果仍要使用rshell请安装py3.12并用我修改的rshell: https://github.com/gamefunc/rshell/releases micropython语法和python3一样,编写起来非常方便。如果你快速入门单片机玩物联网而且像轻松实现各种功能,那绝力推荐使用micropython。方便易懂易学。 同时如果你懂C语音,也可以用C写好函数并编译进micropython固件里然后进入micropython调用(非必须)。 能通过WIFI联网(2.1章),也能通过sim卡使用2G/3G/4G/5G联网(4.5章)。 为实现语音控制,本教程会教大家使用tensorflow利用神经网络训练自己的语音模型并应用。为实现通过网页控制,本教程会教大家linux(debian10 nginx->uwsgi->python3->postgresql)网站前后台入门。为记录单片机传输过来的数据, 本教程会教大家入门数据库。  本教程会通过通俗易懂的比喻来讲解各种原理与思路,并手把手编写程序来实现各项功能。 本教程micropython版本是 2019年6月发布的1.11; 更多内容请看视频列表。  学习这门课程之前你需要至少掌握: 1: python3基础(变量, 循环, 函数, 常用库, 常用方法)。 本视频使用到的零件与淘宝上大致价格:     1: 超声波传感器(3)     2: MAX9814麦克风放大模块(8)     3: DHT22(15)     4: LED(0.1)     5: 8路5V低电平触发继电器(12)     6: HX1838红外接收模块(2)     7:红外发射管(0.1),HX1838红外接收板(1)     other: 电表, 排线, 面包板(2)*2,ESP32(28)  

智能汽车域控制器FOTA升级方案探讨

上文提到的Entry属性,包括Active 属性, Bootable 属性, Successful 属性, Retrycnt 属性 ,Active 属性用于标志槽的优先级,bootloader优先选择Active 属性=1的槽启动,Bootable 属性标志槽可否可启动,Successful 属性标志槽是否成功启动过,Retrycnt 属性标志槽可尝试启动的次数。芯片启动后,首先进入Bootloader阶段,此阶段将读取存储系统的分区属性,根据属性值进行逻辑判断,并确定进入哪个分区,详见流程图。

huibian1234的博客 1570

第二十二章 ESP32获取天气预报(WiFi+https+json+mbedtls)

源码地址:https://github.com/HX-IoT/ESP32-Developer-Guide ESP32开发指南QQ群:824870185,内有pdf版,排版整洁。 综合演练目标 掌握HTTPS流程 掌握mbedTLS流程 项目知识点 本篇教程所要描述的就是通过免费的天气预报API获取对应城市当天以及未来几天的天气情况。通过按键选择想要获取天气的城市,然后通过TCP连接...

开源一小步 1万+

224G PAM-4 通道的 PCB 和封装设计

该行业正在努力实现层厚非常低的 sub-Dk = 3 材料,以及更先进的加工,这将使封装和 PCB 中的透射电镜截止值更高。当回波损耗占主导地位时,我们基本上需要去除沿互连产生阻抗失配的任何元件,就像上面描述的更光滑的铜和更低的 Dk 值一样。第二个影响是传输线阻抗匹配在 56 GHz 范围内的非常高的频率下非常困难的主要原因之一,另一个因素是 Tx 或 Rx 封装/缓冲器中的寄生效应。由于 PCB 和封装中的长度刻度,这是 BGA 上的焊盘、过孔和球等小结构开始在输入阻抗中产生明显偏差的频率范围。

jkh920184196的博客 843

Python实战:高效稳定采集微信视频号评论的API爬虫方案

网络爬虫是数据采集领域的核心技术,其原理是通过程序模拟浏览器行为,向目标服务器发送HTTP请求并解析响应数据,从而自动化获取网页或接口中的信息。这项技术的核心价值在于能够高效、批量化地收集公开数据,为市场分析、舆情监控和竞品研究提供数据基础。在社交媒体分析、电商价格监控等应用场景中,爬虫技术尤为重要。针对微信视频号这类动态加载的复杂应用,传统的GUI自动化工具(如影刀RPA)常面临性能瓶颈和风控挑战。本文聚焦于通过Python实现**无感采集**,直接与后端**API接口**交互,构建稳定高效的评论数据采集

weixin_30899023的博客 333

一分钟了解MQTT协议 ESP32/ESP8266 MQTT API指南

文章目录 MQTT协议 一,客户端 二,服务端 三,消息服务质量 四,主题 五,MQTT控制报文 5.1 固定报头 5.2 可变报头 5.3 有效载荷 5.4 控制报文类型 5.4.1 连接报文 5.4.2 发布publish 5.4.3 订阅主题subscribe 六,安全 ESP-MQTT API 指南 概括 一,特性 二,应用示例

ching的博客 1918

PIVlab软件入门:从GUI操作到2D2C粒子测速实战

本文详细介绍了PIVlab软件在2D2C粒子测速中的入门与实战应用。从GUI操作到环境搭建,再到图像预处理和核心参数设置,帮助用户快速掌握这一基于MATLAB的开源工具。通过实际案例和技巧分享,展示了PIVlab在流体力学实验中的高效性和实用性。

weixin_42547431的博客 227

Esp8266 进阶之路33【大神篇】如何优雅地像乐鑫原厂封装esp8266底层寄存器的逻辑思维,做成自己的静态库库文件,让第三方人使用?

本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。 1、 Esp8266之 搭建开发环境,开始一个“hellow world”串口打印。 2、 Esp8266之 利用GPIO开始使用按钮点亮你的“第一盏灯”。 3、 Esp8266之 利用 &amp;amp;quot;软件定时器 &amp;amp;quot; 定时0.5秒闪烁点亮一盏LED。 4 、Es...

徐宏的博客 | 修身齐家治国平天下 7017

KEGG数据库与KAAS工具:基因功能注释的实用指南

本文提供了使用KEGG数据库与KAAS工具进行基因功能注释的完整实用指南。详细阐述了如何从准备基因或蛋白序列开始,通过KAAS服务器获取KEGG Orthology(KO)编号,并解读注释结果。文章进一步介绍了如何利用KOBAS工具进行通路富集分析,将定性观察转化为定量洞察,并分享了提高注释准确率、处理大数据集及使用API等避坑技巧与高阶方法,为基因组学、转录组学研究者奠定坚实的数据分析基础。

weixin_29292535的博客 394

锂电池的充电和放电曲线解读

锂电池充放电曲线是反映其性能的关键指标。充电曲线分为恒流和恒压两阶段:恒流阶段电压快速上升,恒压阶段电流逐渐降低;放电曲线则呈现平台期和快速衰减期特征。这些曲线受温度、充放电倍率及材料体系(如三元锂或磷酸铁锂)显著影响。通过分析曲线特征,可优化电池管理系统,实现精准的SOC估算、快充策略制定及故障诊断,从而在电池性能与安全性间取得平衡。不同应用场景(如新能源汽车或消费电子)对曲线形态有特定要求。

start_up_go的博客 5073

基于ESP8266 SDK部分功能的二次封装

一,目的。 使用ESP8266官方提供的固件SDK的人都知道,在大部分的API接口调用和使用逻辑上跟标准C APP开发是有很大差别的,有些功能需要自己花很大时间去进行功能封装和逻辑设计,对于一个精通C语言的人,也很难在短时间内开发出一个简单功能的。同时如果需要使用硬件驱动功能,如:I2C,UART,PWM等,没有驱动开发经验的人即使把代码写出来了,但一旦遇到问题,也很难去解决,这需要有一定的硬件

yunjinwang的专栏 5941

一层一责,一聚合一包:DDD分层架构下的微服务代码模型、三重边界与服务数据协作

领域模型画得再清楚,落不进代码也是空谈。本文以一个可运行的客户中心微服务为线索,先对比整洁架构、六边形架构与DDD分层架构,指出三者共同守护的那条隔离核心业务的红线;再把DDD分层落成四个一级目录、以聚合为单位分包、一个聚合一个仓储的代码模型,拆解实体、聚合根、值对象、领域事件、领域服务与仓储的设计要点;随后厘清逻辑、物理、代码三重边界,并用检查器实测:干净代码零越界,拆出积分聚合时领域代码无需改动;注入九处越界后,必须先重构才能拆分。最后梳理服务调用三场景与PO、DO、DTO、VO的协作。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 177万+

低功耗蓝牙BLE之AES-128加密算法

低功耗蓝牙中的所有加密和认证都基于同一个加密引擎,称为高级加密系统(AES)

zzfenglin的博客 2万+

使用Simulink进行无刷电机霍尔传感器信号处理电路的仿真

位置检测:霍尔传感器可以检测转子的位置,这对于实现无刷电机的电子换向至关重要。提高效率:通过准确的位置信息,可以优化电机的工作状态,提高效率和性能。通过上述步骤,我们简要介绍了如何基于Simulink实现无刷电机霍尔传感器信号处理电路的仿真。

MHD0815的博客 432

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

在漫画中读懂AES加密算法[转]

今天看了Moserware的《A Stick Figure Guide to the Advanced Encryption Standard(AES)》收获了不少,对AES算法有了更加清楚的理解,这篇博客用了大量的情景图文来展示AES的发展历史和算法的具体流程,虽然是2009年的博文,但是在今天仍然是很有借鉴意义。今天将这篇博文翻译过来,翻译不畅,暂且抛砖引玉。 很...

maxma的博客 1091

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ESP8266 free rtos sdk 使用工程自带的 base64加密 和 和 md5 加密

最近在研究 esp8266 自带的加密程序,在工程中给了 md5 加密和 base64加密  搞了一下午才顺利编过,哎真是个菜鸡! 记忆力不太好,为了防止忘记,所以在此记录一下,希望能帮助到需要的人. 先讲一下base64 ,对这个加密算法感兴趣的话可以去百度一下,很多资料的. 用到这个加密的时候 首先希望工程里面会有自带的,就不用自己再去琢磨了,果不其然,真的有,但是,很奇怪,有是有,但是,...

fly_sky_share的博客 1719

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

ESP8266云端数据加密保护

背景知识视频教程 在云上保护应用程序 使用openSSL的密码学入门指南 SSL完整指南:HTTP到HTTPS 启用mosquitto上加密 要在mosquitto上启用加密,您首先需要拥有证书。 您可以从发行证书的公司购买它们,也可以将它们自己生成为自签名证书。 安装OpenSSL包 首先,确认您已安装openssl软件包,并且它具有较新的版本(1.0.2g),如以下屏幕截图所示: 如果您尚未安装openssl,则需要先使用以下命令进行安装: sudo apt install openssl on U

跨学科知识视角展现 937

Esp8266 进阶之路20 【高级篇】深入学习esp8266的esp now模式组网,仿机智云做一个小网关,实现无需网络下轻松彼此连接通讯交互数据。(附带Demo)

本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。 1、 Esp8266之 搭建开发环境,开始一个“hellow world”串口打印。 2、 Esp8266之 利用GPIO开始使用按钮点亮你的“第一盏灯”。 3、 Esp8266之 利用 “软件定时器 ” 定时0.5秒闪烁点亮一盏LED。 4 、Es...

徐宏的博客 | 修身齐家治国平天下 1万+

乐鑫Esp32学习之旅 22 讨论下程序员 “青春饭” 那些事,分享在esp32实现多种加密算法md5 |AES CBC-ECB| Sha1 | Sha256 等,附带Demo;

本系列博客学习由非官方人员 半颗心脏 潜心所力所写,仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。 1、 爬坑学习新旅程,虚拟机搭建esp32开发环境,打印 “Hellow World”。 2、 巧用eclipes编辑器,官方教程在在Windows下搭建esp32开发环境,打印 “Hellow World”。 3、 认识基本esp32的GPIO接口,开...

徐宏的博客 | 修身齐家治国平天下 5835
上一篇: 从零构建:CD4094驱动设计与STM32实战避坑指南
下一篇: IIC协议实战解析:从理论到嵌入式应用
devops8pract
博客等级 码龄4年 533粉丝 849原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值