当前位置: 首页 > article >正文

ESP8266接入AWS IoT Core的SigV4+WebSocket实战指南

1. AWS IoT ESP8266 Arduino Websockets 库深度解析1.1 项目定位与工程价值AWS IoT ESP8266 Arduino Websockets 是一个面向资源受限嵌入式设备的轻量级物联网接入库专为 ESP8266 平台在 Arduino IDE 或 PlatformIO 环境下构建安全、可靠、低开销的云连接能力而设计。其核心价值不在于“功能堆砌”而在于工程落地的闭环性从 TLS 握手、SigV4 签名、WebSocket 封装到 MQTT 协议栈集成全部以可编译、可调试、可量产的 C 类封装形式交付且所有依赖均通过 Arduino Library Manager 或 PlatformIO Library Registry 可直接获取——这直接规避了嵌入式开发者最常遭遇的“依赖地狱”dependency hell。该库并非 AWS 官方 SDK 的简单移植而是对 AWS Labs 原始aws-sdk-arduino的深度重构。原始 SDK 面向更通用的 MCU 平台抽象层级高、内存占用大、对 ESP8266 的 Flash/RAM 资源未做针对性优化而本库基于 Sander van de Graaf 的 fork 进行二次演进关键路径全部重写为 ESP8266 原生适配例如SHA256 计算采用 Stephan Brumme 的极简实现仅 3KB FlashJSON 解析使用 Serge Zaitsev 的 JSMN零动态内存分配WebSocket 通信层替换为 Markus Sattler 的arduinoWebSockets支持异步非阻塞 I/O。这种“去官僚化、重实效”的工程哲学使其成为 ESP8266 接入 AWS IoT Core 的事实标准方案之一。工程启示在物联网固件开发中“能用”和“好用”之间存在巨大鸿沟。本库的价值恰恰体现在将 AWS IoT 复杂的认证链X.509 SigV4、传输层MQTT over WebSocket、应用层Topic 发布/订阅压缩进 80KB Flash / 20KB RAM 的约束内并保持 API 的直观性——这是大量开源项目未能跨越的门槛。1.2 核心架构与数据流该库采用分层解耦架构各层职责清晰、接口明确便于定制与替换--------------------- | Application Layer | ← 用户代码publish(), subscribe(), onMessage() --------------------- | MQTT Client | ← PahoMQTT 实现MQTTClient 类封装 --------------------- | WebSocket Layer | ← arduinoWebSocketsWebSocketClient 封装 --------------------- | TLS / Network | ← ESP8266WiFiClientSecure BearSSL --------------------- | SigV4 Auth Layer | ← AWSIoTWebsockets::sign() 核心签名逻辑 --------------------- | JSON Parser | ← ArduinoJson 6.5.0-beta用于解析 AWS 响应 ---------------------关键数据流示例设备上线用户调用mqttClient.connect()→ 触发 SigV4 签名生成构造 WebSocket URLwss://endpoint.iot.region.amazonaws.com/mqtt?X-Amz-Security-Token...X-Amz-AlgorithmAWS4-HMAC-SHA256...arduinoWebSockets建立 TLS 连接完成证书校验需预置 AWS Root CAWebSocket 握手成功后PahoMQTT 启动 MQTT CONNECT 报文发送含 Client ID、Keep AliveAWS IoT Core 返回 CONNACK连接建立完成此流程全程无阻塞等待底层基于 ESP8266 的yield()机制实现事件循环确保 WiFi 重连、TLS 重协商等耗时操作不冻结主程序。2. SigV4 认证机制深度剖析2.1 为什么必须使用 SigV4AWS IoT Core 对 WebSocket 连接强制要求 SigV4 签名认证而非 X.509 证书根本原因在于身份绑定粒度与部署灵活性的平衡X.509 证书需为每个设备烧录唯一私钥量产时密钥管理成本极高SigV4 允许使用 IAM Role通过 Cognito Identity Pool 或临时凭证或 IAM User Access Key使设备可共享同一套凭证策略且支持细粒度 Topic 级权限控制如arn:aws:iot:region:account:topic/${iot:Connection.Thing.ThingName}/data。本库的 SigV4 实现严格遵循 AWS Signature Version 4 规范但针对 ESP8266 做了三项关键裁剪裁剪项原始规范要求本库实现工程依据日期头X-Amz-Date: YYYYMMDDTHHMMSSZ仅使用YYYYMMDD日期部分ESP8266 缺乏高精度 RTCmillis()无法满足秒级精度AWS IoT 允许日期偏差 ±15 分钟足够覆盖 NTP 同步误差Credential ScopeYYYYMMDD/region/service/aws4_request固定为YYYYMMDD/region/iotdevicegateway/aws4_requestiotdevicegateway是 AWS IoT Core WebSocket 服务名硬编码避免运行时字符串拼接开销Canonical Request包含完整 HTTP Header 排序哈希仅哈希host、x-amz-date、x-amz-security-token三个必需 Header省略content-type等非必需字段减少 SHA256 计算轮次实测降低 32% CPU 占用2.2 核心签名函数解析// AWSIoTWebsockets.h 关键接口 class AWSIoTWebsockets { public: // 生成完整 SigV4 签名参数供 WebSocket URL 拼接 bool sign(const char* accessKey, const char* secretKey, const char* sessionToken, // STS 临时凭证必填 const char* region, const char* endpoint, char* signatureBuffer, // 输出base64 编码的签名 size_t bufferSize); private: // 内部哈希工具复用 Stephan Brumme SHA256 void hmacSha256(const uint8_t* key, size_t keyLen, const uint8_t* data, size_t dataLen, uint8_t* output); // 日期字符串生成仅 YYYYMMDD void getAmzDate(char* dateStr, size_t len); };sign()函数执行流程伪代码bool AWSIoTWebsockets::sign(...) { // 步骤1生成日期字符串如 20231015 getAmzDate(amzDate, sizeof(amzDate)); // 步骤2构造 Credential Scope 字符串 snprintf(credScope, sizeof(credScope), %s/%s/iotdevicegateway/aws4_request, amzDate, region); // 步骤3构造 Canonical Request精简版 // GET\n/mqtt\nX-Amz-AlgorithmAWS4-HMAC-SHA256X-Amz-Credential......\n // host:endpoint\nx-amz-date:amzDate\nx-amz-security-token:token\n // host;x-amz-date;x-amz-security-token\nsha256-of-empty-payload buildCanonicalRequest(...); // 步骤4计算 String to Sign // AWS4-HMAC-SHA256\namzDate\ncredScope\nsha256-of-canonical-request calcStringToSign(...); // 步骤5四层 HMAC 计算key secretKey → dateKey → regionKey → serviceKey → signingKey uint8_t kDate[32], kRegion[32], kService[32], kSigning[32]; hmacSha256(secretKey, strlen(secretKey), (uint8_t*)amzDate, 8, kDate); // dateKey hmacSha256(kDate, 32, (uint8_t*)region, strlen(region), kRegion); // regionKey hmacSha256(kRegion, 32, (uint8_t*)iotdevicegateway, 16, kService); // serviceKey hmacSha256(kService, 32, (uint8_t*)aws4_request, 12, kSigning); // signingKey // 步骤6最终签名 Base64 编码 uint8_t signature[32]; hmacSha256(kSigning, 32, (uint8_t*)stringToSign, strlen(stringToSign), signature); base64_encode(signature, 32, signatureBuffer, bufferSize); }关键细节hmacSha256()在 ESP8266 上采用单次迭代模式非硬件加速因 BearSSL 的 HMAC 模块未暴露给用户层。实测在 80MHz 主频下一次完整签名耗时约 85ms完全满足每分钟数次重连的场景需求。3. WebSocket 与 MQTT 协议栈集成3.1 为何选择 arduinoWebSockets 而非原生 ESP8266WebServerESP8266 自带的ESP8266WebServer仅支持 HTTP而 WebSocket 是独立协议。本库选用 Links2004/arduinoWebSockets 的核心原因在于其事件驱动模型与内存零拷贝设计事件回调机制onEvent()回调直接传递WSclient*和WStype_t类型避免轮询开销Payload 直接指针WStype_TEXT事件中*payload指向内部缓冲区用户可直接解析配合 JSMN而无需 memcpy自动 Ping/Pong内置心跳保活防止 NAT 超时断连AWS IoT 要求 WebSocket 连接每 5 分钟至少一次数据帧。// WebSocket 初始化关键代码 #include WebSocketsClient.h WebSocketsClient webSocket; void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) { switch(type) { case WStype_CONNECTED: { Serial.println([WS] Connected to AWS IoT); // 连接成功后立即发送 MQTT CONNECT 报文 mqttClient.connect(); break; } case WStype_TEXT: { // 直接解析 MQTT 报文二进制帧非 JSON mqttClient.handle(payload, length); break; } case WStype_DISCONNECTED: Serial.println([WS] Disconnected); break; } } // 在 setup() 中初始化 webSocket.begin(a1b2c3d4e5f6-ats.iot.us-east-1.amazonaws.com, 443, /mqtt); webSocket.onEvent(webSocketEvent); webSocket.setAuthorization(AWS4-HMAC-SHA256); // 仅为占位实际签名在 URL 中3.2 PahoMQTT 集成与 PubSubClient 替换指南本库默认集成 Eclipse Paho MQTT C 客户端PahoMQTT因其支持 QoS 1/2、遗嘱消息Last Will、会话持久化等工业级特性。但若项目需极致精简如仅需 QoS 0 发布可无缝切换至PubSubClient特性PahoMQTTPubSubClient替换操作Flash 占用~45KB~12KB替换#include PahoMQTT.h→#include PubSubClient.hMQTT CONNECTclient.connect(clientId, username, password)client.connect(clientId, willTopic, willQos, willRetain, willMessage)修改connect()参数移除 SigV4 用户名/密码WebSocket 已认证发布接口client.publish(topic, payload, qos, retain)client.publish(topic, payload, retain)qos参数由 Paho 管理PubSubClient 仅支持 QoS 0订阅接口client.subscribe(topic, qos)client.subscribe(topic)移除qos参数PubSubClient 适配关键代码#include PubSubClient.h #include ESP8266WiFi.h #include ESP8266WiFiMulti.h ESP8266WiFiMulti wifiMulti; PubSubClient mqttClient; // 重写网络客户端适配 WebSocket class WSNetwork : public Stream { public: virtual int available() { return webSocket.available(); } virtual int read() { return webSocket.read(); } virtual size_t write(uint8_t b) { webSocket.sendTXT((char*)b, 1); return 1; } virtual size_t write(const uint8_t *buf, size_t size) { webSocket.sendTXT((char*)buf, size); return size; } }; WSNetwork wsNet; mqttClient.setClient(wsNet); void reconnect() { if (!mqttClient.connected()) { // 无需用户名/密码SigV4 已在 WebSocket 层完成 if (mqttClient.connect(esp8266-device-001)) { mqttClient.subscribe(devices/esp8266/commands); } } }4. 实战配置与典型应用4.1 最小可行配置PlatformIOplatformio.ini关键配置[env:nodemcu] platform espressif8266 board nodemcu framework arduino lib_deps arduinoWebSockets^2.3.6 PahoMQTT^1.2.0 ArduinoJson6.19.4 https://github.com/bblanchon/ArduinoJson.git#6.5.0-beta证书烧录必做 AWS IoT Root CA 必须预置到 ESP8266 Flash// 在 setup() 中加载 const char* aws_root_ca \ -----BEGIN CERTIFICATE-----\n \ MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF\n \ ... \ -----END CERTIFICATE-----; BearSSL::X509List cert(aws_root_ca); wifiClient.setTrustAnchors(cert); // 强制验证服务器证书4.2 温湿度传感器上云完整示例#include AWSIoTWebsockets.h #include PahoMQTT.h #include DHT.h #define DHTPIN 2 #define DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); AWSIoTWebsockets awsIoT; MQTTClient mqttClient; void messageReceived(String topic, String payload) { Serial.printf(Received on %s: %s\n, topic.c_str(), payload.c_str()); // 解析 JSON 命令如 {action:reboot,delay:5} DynamicJsonDocument doc(256); deserializeJson(doc, payload); if (doc[action] reboot) { ESP.restart(); } } void setup() { Serial.begin(115200); dht.begin(); // 1. 初始化 WiFi WiFi.mode(WIFI_STA); WiFi.begin(MySSID, MyPassword); while (WiFi.status() ! WL_CONNECTED) delay(500); // 2. 初始化 AWS IoT 连接 awsIoT.begin(a1b2c3d4e5f6-ats.iot.us-east-1.amazonaws.com, us-east-1, AKIAIOSFODNN7EXAMPLE, wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY, FQoDYXdzEPT//////////wEaD...); // Session Token // 3. 初始化 MQTT mqttClient.begin(esp8266-sensor-001, awsIoT.getWebSocketClient()); mqttClient.onMessage(messageReceived); mqttClient.setWill(devices/esp8266-sensor-001/status, offline, true, 1); // 4. 连接 if (mqttClient.connect()) { mqttClient.subscribe(devices/esp8266-sensor-001/commands); mqttClient.publish(devices/esp8266-sensor-001/status, online, true, 1); } } void loop() { mqttClient.loop(); // 必须周期调用处理收发 static unsigned long lastPublish 0; if (millis() - lastPublish 30000) { // 每30秒上报 float h dht.readHumidity(); float t dht.readTemperature(); DynamicJsonDocument doc(256); doc[timestamp] millis(); doc[temperature] t; doc[humidity] h; doc[battery] analogRead(A0) * 3.3 / 1024; String payload; serializeJson(doc, payload); mqttClient.publish(devices/esp8266-sensor-001/data, payload.c_str(), false, 0); lastPublish millis(); } }4.3 生产环境加固要点凭证安全绝对禁止硬编码AccessKey/SecretKey应通过 OTA 配置或安全元件如 ATECC608A注入Session Token 必须定期刷新建议 30 分钟轮换利用 AWS STSAssumeRole接口生成。内存监控// 在 loop() 中加入内存检查 if (ESP.getFreeHeap() 15000) { Serial.println(Low memory! Triggering GC); system_restart(); // 或进入降频模式 }断线重连策略指数退避重连首次 1s失败后 2s、4s、8s… 最大 60s重连前清除 MQTT 会话状态mqttClient.disconnect()后mqttClient.clearSession()。OTA 安全更新使用AWS IoT Jobs服务下发固件包通过jobs/updateTopic 接收指令校验固件 SHA256 后再执行ESPhttpUpdate。5. 故障诊断与性能调优5.1 常见连接失败原因速查表现象可能原因诊断命令解决方案WebSocket connect failed: -1TLS 握手失败Serial.println(WiFiClientSecure.errorCode())检查 Root CA 是否正确烧录确认系统时间是否偏差 15 分钟configTime(0, 0, pool.ntp.org)MQTT CONNACK rc5未授权Unauthorized抓包分析 WebSocket URL 中的X-Amz-Signature验证accessKey/secretKey权限是否包含iot:Connect、iot:Publish、iot:Subscribe检查 IAM Policy 中ResourceARN 是否匹配设备 Thing NameReceived PONG timeoutWebSocket 心跳超时webSocket.ping()手动触发增加webSocket.setPingInterval(300)单位秒检查路由器 NAT 超时设置建议 ≥600sJSON parsing error响应格式异常Serial.printf(Raw: %s, payload)确认 AWS IoT Core 端未启用 MQTT over HTTP应为 WebSocket检查mqttClient.setBufferSize()是否过小默认 256传感器数据建议设为 5125.2 性能基准测试ESP-12F80MHz操作平均耗时内存峰值说明SigV4 签名生成85ms1.2KB含 Base64 编码可接受WebSocket TLS 握手1200ms8.5KB受 WiFi 信号强度影响大-70dBm 时稳定MQTT PUBLISH (QoS0, 128B)18ms0.3KB从调用到返回trueMQTT SUBSCRIBE22ms0.4KB含 Topic Filter 解析JSON 序列化 (5 个字段)3.2ms0.1KBArduinoJson 6.19.4 优化结果关键结论在 80MHz 主频下该库可稳定支撑每秒 3~5 次 QoS0 发布完全满足温湿度、开关状态等常规传感器上报需求。若需更高吞吐如音频流应改用 MQTT over TCP X.509 认证绕过 SigV4 开销。6. 与同类方案对比及选型建议方案认证方式协议栈Flash 占用适用场景缺陷本库WebSocketsSigV4 IAMMQTT over WS~85KB无证书产线、IAM 集中管理、防火墙限制 443 端口依赖临时凭证需 STS 集成AWS官方 ESP-IDF SDKX.509 KeyMQTT over TCP~120KB高安全要求、设备唯一身份、离线场景需预烧录私钥量产复杂PubSubClient WiFiClientSecure无认证明文MQTT over TCP~35KB内网测试、原型验证无加密AWS IoT 不接受ThingPlug韩国OAuth2CoAP over UDP~60KB低功耗广域网LPWAN不兼容 AWS IoT Core选型决策树若设备需通过企业防火墙仅开放 443/80 端口→ 选本库若设备为消费级产品需百万级量产且无安全芯片 → 选本库SigV4 IAM Role若设备为工业网关需 TLS 双向认证与硬件可信根 → 改用 AWS 官方 X.509 方案若仅做实验室验证追求最快上手 → 直接用PubSubClient连接本地 Mosquitto 测试。本库的不可替代性在于它精准卡位在“企业级安全”与“创客级易用”之间——既不牺牲 AWS IoT Core 的生产环境合规性又让一个电子爱好者能在 2 小时内完成从烧录到云端数据可视化的全流程。这种平衡正是嵌入式物联网开发最稀缺的工程智慧。

相关文章:

ESP8266接入AWS IoT Core的SigV4+WebSocket实战指南

1. AWS IoT ESP8266 Arduino Websockets 库深度解析 1.1 项目定位与工程价值 AWS IoT ESP8266 Arduino Websockets 是一个面向资源受限嵌入式设备的轻量级物联网接入库,专为 ESP8266 平台在 Arduino IDE 或 PlatformIO 环境下构建安全、可靠、低开销的云连接能力而…...

【大模型可观测性生死线】:为什么你的Prometheus告警总在凌晨爆炸?7步阈值校准工作流曝光

第一章:大模型可观测性生死线:阈值设定的战略意义 2026奇点智能技术大会(https://ml-summit.org) 在大模型生产化落地过程中,可观测性并非仅关乎“能否看到指标”,而本质是“能否在失效前精准干预”。阈值设定正是这条生死线的锚…...

向量检索准确率从82%跃升至99.4%——2026奇点大会闭门报告(仅限首批技术决策者解密)

第一章:向量检索准确率从82%跃升至99.4%——2026奇点大会闭门报告(仅限首批技术决策者解密) 2026奇点智能技术大会(https://ml-summit.org) 这一跃升并非源于单一模型升级,而是由三层协同优化构成的系统性突破:语义对…...

营销自动化数据驱动 - 多源数据 OLAP 架构演进躺

1. 流图:数据的河流 如果把传统的堆叠面积图想象成一块块整齐堆叠的积木,那么流图就像一条蜿蜒流淌的河流,河道的宽窄变化自然流畅,波峰波谷过渡平滑。 它特别适合展示多个类别数据随时间的变化趋势,尤其是当你想强调整…...

Burpsuite之暴力破解+验证码识别 | 添柴不加火欣

springboot自动配置 自动配置了大量组件,配置信息可以在application.properties文件中修改。 当添加了特定的Starter POM后,springboot会根据类路径上的jar包来自动配置bean(比如:springboot发现类路径上的MyBatis相关类&#xff…...

深入解析 vsock 框架:从基础原理到嵌套虚拟机通信实践

1. 认识vsock:虚拟机通信的高速通道 第一次听说vsock这个概念时,我正在调试一个KVM虚拟机的性能问题。当时传统TCP/IP通信的延迟让我头疼不已,直到发现这个名为"VM Sockets"的黑科技。简单来说,vsock就像是给虚拟机专门…...

CW大鹏无人机地面站智能航线规划实战指南

1. 认识CW大鹏无人机地面站 第一次接触CW大鹏无人机地面站时,我被它强大的功能震撼到了。这不仅仅是一个简单的遥控软件,而是一个完整的飞行任务指挥中心。通过地面站,我们可以完成从航线规划到飞行监控的全流程操作,特别适合农业…...

Andee101库详解:Arduino 101低功耗BLE人机交互开发指南

1. Andee101 库概述:面向 Arduino 101 的低功耗蓝牙人机交互框架Andee101 是专为 Intel Arduino 101(即 Curie-based 开发板)设计的嵌入式通信库,其核心目标是实现 Arduino 101 硬件与 iOS/Android 平台上的 Annikken Andee 移动应…...

【车辆控制】线性参数变化LPV方法的角度研究多车辆系统合作控制在合作自适应巡航控制(CACC)系统【含Matlab源码 15317期】

💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab领域博客之家💞&…...

TinyTemplateEngine:嵌入式行级模板引擎深度解析

1. TinyTemplateEngine:面向资源受限嵌入式平台的行级模板引擎深度解析在嵌入式Web服务、动态HTML生成、设备状态报告等场景中,开发者常需将运行时变量注入静态文本模板。传统方案(如String拼接、sprintf全量缓存)在Arduino Uno&a…...

3步轻松优化Windows系统:Winhance中文版让你的电脑飞起来!

3步轻松优化Windows系统:Winhance中文版让你的电脑飞起来! 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors…...

gitru:一个由 Rust 打造的零依赖 Git 提交信息校验工具雅

一、项目背景与核心价值 1. 解决的核心痛点 Navicat的数据库连接密码并非明文存储,而是通过AES算法加密后写入.ncx格式的XML配置文件中。一旦用户忘记密码,常规方式只能重新配置连接,效率极低。本项目只作为学习研究使用,不做其他…...

5分钟掌握MouseJiggler:告别系统休眠的智能鼠标模拟解决方案

5分钟掌握MouseJiggler:告别系统休眠的智能鼠标模拟解决方案 【免费下载链接】mousejiggler Mouse Jiggler is a very simple piece of software whose sole function is to "fake" mouse input to Windows, and jiggle the mouse pointer back and forth…...

HTML怎么搜索关键词_HTML search类型input特点【说明】

HTML原生search输入框语义明确、自带清空按钮、支持系统级搜索行为及专用软键盘&#xff1b;需用<form>包裹并监听submit/search事件&#xff0c;禁用默认行为&#xff0c;且清空操作仅触发search事件。HTML原生有啥特别的它和普通text输入框渲染几乎一样&#xff0c;但语…...

SQL视图能否存储计算结果_引入虚拟列与计算字段应用

SQL视图无法存储计算结果&#xff0c;每次查询都会实时执行底层SELECT语句中的所有计算&#xff1b;如需固化计算结果&#xff0c;应使用虚拟列&#xff08;MySQL/PostgreSQL支持&#xff09;或物化视图&#xff08;PostgreSQL需手动刷新&#xff0c;Oracle等支持自动刷新&…...

5分钟搭建通义千问3-VL-Reranker:多模态重排序Web UI教程

5分钟搭建通义千问3-VL-Reranker&#xff1a;多模态重排序Web UI教程 1. 什么是多模态重排序&#xff1f;它能帮你解决什么问题&#xff1f; 想象一下这个场景&#xff1a;你在一个电商平台搜索“带花园的白色小房子”&#xff0c;搜索结果里蹦出来一堆东西——有商品描述文字…...

Cogito 3B镜像免配置教程:预置中文Prompt Engineering最佳实践库

Cogito 3B镜像免配置教程&#xff1a;预置中文Prompt Engineering最佳实践库 1. 快速了解Cogito 3B模型 Cogito v1预览版是Deep Cogito推出的混合推理模型系列&#xff0c;这个3B版本在大多数标准基准测试中都表现出色&#xff0c;超越了同等规模下最优的开源模型。这意味着即…...

SpringCloud进阶--Seata与分布式事务庇

起因是我想在搞一些操作windows进程的事情时&#xff0c;老是需要右键以管理员身份运行&#xff0c;感觉很麻烦。就研究了一下怎么提权&#xff0c;顺手瞄了一眼Windows下用户态权限分配&#xff0c;然后也是感谢《深入解析Windows操作系统》这本书给我偷令牌的灵感吧&#xff…...

前端使用AI试水报告蒲

1 实用案例 1.1 表格样式生成 本示例用于生成包含富文本样式与单元格背景色的Word表格文档。 模板内容&#xff1a; 渲染代码&#xff1a; # python-docx-template/blob/master/tests/comments.py from docxtpl import DocxTemplate, RichText # data: python-docx-temp…...

别再数据线了!用FastAPI 分钟搭个局域网文件+剪贴板神器罕

为 HagiCode 添加 GitHub Pages 自动部署支持 本项目早期代号为 PCode&#xff0c;现已正式更名为 HagiCode。本文记录了如何为项目引入自动化静态站点部署能力&#xff0c;让内容发布像喝水一样简单。 背景/引言 在 HagiCode 的开发过程中&#xff0c;我们遇到了一个很现实的问…...

macos简单配置openclaw又

1 实用案例 1.1 表格样式生成 本示例用于生成包含富文本样式与单元格背景色的Word表格文档。 模板内容&#xff1a; 渲染代码&#xff1a; # python-docx-template/blob/master/tests/comments.py from docxtpl import DocxTemplate, RichText # data: python-docx-template/bl…...

c++ ffmpeg之提取视频数据保存到本地yuv文件(亲测好用)

#ifndef VIDEO_TO_YUV_H #define VIDEO_TO_YUV_H#include<QDebug> #include<QObject> #include<QThread> #include<QMutex> #include<QWaitCondition> #include<QImage>...

AI NLP核心技术指南

AI NLP核心技术指南...

AI神经网络基础概念技术指南

AI神经网络基础概念技术指南...

别再被照片骗了!从手机到单反,5分钟搞懂镜头畸变(附常见场景对比图)

别再被照片骗了&#xff01;从手机到单反&#xff0c;5分钟搞懂镜头畸变&#xff08;附常见场景对比图&#xff09; 每次拍完照片回看时&#xff0c;总觉得哪里不对劲——明明站得笔直的闺蜜在画面边缘变成了"香蕉人"&#xff0c;精心构图的城市天际线像被哈哈镜扭曲…...

3步打造纯净Windows 11:用Win11Debloat告别系统臃肿

3步打造纯净Windows 11&#xff1a;用Win11Debloat告别系统臃肿 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and cust…...

为什么你的大模型上线后总出幻觉?:从血缘断链到推理失控的5层归因与实时修复指南

第一章&#xff1a;大模型工程化中的模型血缘追踪 2026奇点智能技术大会(https://ml-summit.org) 模型血缘追踪是保障大模型全生命周期可审计、可复现与可治理的核心能力。在持续训练、微调、量化、蒸馏与部署的多阶段工程实践中&#xff0c;同一基础模型可能衍生出数十个变体…...

专家 VS镜像视界:镜像视界算不算AI公司?

&#x1f3af; 标准反杀答案如果按传统分类&#xff0c;我们当然使用AI技术&#xff1b;但如果从系统本质来看—— 我们不属于“AI公司”&#xff0c;而属于“空间智能基础设施公司”。AI只是我们系统中的一个模块&#xff0c; 而不是系统的核心。&#x1f9e0; 进阶拆解① 承认…...

【最后72小时解锁】SITS2026联邦学习工作坊原始代码包+训练轨迹可视化Dashboard(含PyTorch/FedNLP/SecureAgg三框架适配版),错过再无官方授权分发

第一章&#xff1a;SITS2026演讲&#xff1a;大模型联邦学习应用 2026奇点智能技术大会(https://ml-summit.org) 在SITS2026主会场&#xff0c;来自MIT与华为诺亚方舟实验室的联合团队展示了基于LLaMA-3架构的大模型联邦学习新范式——FedLLM。该方案突破传统参数平均&#x…...

镜像视界空间智能体系统的核心原理是否涉及人工智能技术?

一句话结论涉及人工智能&#xff0c;但本质不是AI系统。我们的核心是空间计算系统&#xff0c;AI只是其中一个工具层。&#x1f9e0; 分层拆解1️⃣ 底层&#xff1a;不是AI ——是空间几何计算系统最核心的能力是&#xff1a;空间反演&#xff08;Pixel → World&#xff09;多…...