ESP32 GSM模块FOTA固件升级方案

news2026/5/5 4:30:03
1. 项目概述GSM_FirmwareUpdater 是一个面向嵌入式开发者的固件空中升级FOTA, Firmware Over-The-Air轻量级软件包专为基于 ESP32 平台、具备 GSM/4G 模块如 SIM800L、SIM7600、EC20、BG96 等的物联网终端设备设计。其核心目标并非替代完整的 OTA 框架而是填补“蜂窝网络环境下安全、可靠、可调试的固件更新通道”这一关键工程空白——在无 Wi-Fi、无以太网、仅依赖移动蜂窝网络的工业现场如远程水表、车载终端、野外气象站、农业传感器节点提供一套开箱即用、可深度集成、具备生产级鲁棒性的固件更新能力。该软件包不绑定特定 GSM 模块厂商 AT 指令集而是通过抽象化串口通信层与 AT 命令交互逻辑构建统一的模块驱动接口同时它将 HTTP/HTTPS 下载、固件校验、安全写入、回滚机制等关键环节封装为可配置、可裁剪的模块化组件。其设计哲学是让开发者聚焦于业务逻辑而非反复重写 AT 指令解析器或 TLS 握手失败后的重试策略。与 ESP-IDF 自带的esp_https_ota组件不同GSM_FirmwareUpdater 的根本差异在于通信链路层的彻底重构esp_https_ota默认依赖 Wi-Fi STA 模式下的 TCP/IP 栈其底层使用 lwIP esp-tlsGSM_FirmwareUpdater 则强制绕过 Wi-Fi 协议栈直接通过 UART 连接 GSM 模块由模块自身完成 PPP 拨号、IP 地址获取、TLS 加密隧道建立及 HTTP(S) 请求封装。这意味着整个 OTA 流程的网络状态完全由 GSM 模块控制ESP32 主控仅需发送 AT 指令并解析响应极大降低了主控 CPU 负载与内存占用也规避了 Wi-Fi 驱动在弱信号下的不稳定问题。2. 系统架构与工作流程2.1 整体架构分层GSM_FirmwareUpdater 采用清晰的四层架构设计每一层职责单一且边界明确层级名称关键职责典型实现载体L1硬件抽象层HAL管理 UART 初始化、收发缓冲区、中断处理、GPIO 控制如模块电源、RESET、NETLIGHTgsm_hal.c/h封装uart_driver_install()、gpio_set_level()等 ESP-IDF APIL2AT 命令引擎层解析 AT 指令响应支持OK/ERROR/CME ERROR:/CMS ERROR:多级错误码、超时重传、指令队列管理、自动换行符\r\n注入at_parser.c/h核心函数at_send_cmd_with_timeout()、at_wait_response()L3网络服务层执行 PPP 拨号ATCGDCONT/ATCGACT/ATCGATT/ATD*99***1#、查询 IPATCIFSR、建立 TLS 连接ATSSLCON或ATQSSLOPEN、发起 HTTP(S) GET 请求ATHTTPACTION或ATQHTTPGETgsm_network.c/h状态机管理拨号/连接/请求生命周期L4OTA 应用层固件 URL 解析、HTTP 响应头解析Content-Length,Last-Modified、分块下载Chunked Transfer Encoding 支持、SHA256 校验、双区切换A/B 分区、安全擦除与写入、更新后自检与回滚触发gsm_ota.c/h主入口gsm_ota_perform_update()该分层设计确保了高度可移植性更换不同 GSM 模块如从 SIM7600 切换至 EC25仅需重写 L2 层的 AT 命令序列与响应解析规则L3/L4 层逻辑几乎无需修改。2.2 固件更新完整流程一次成功的固件更新包含以下 7 个原子步骤每步均内置超时、重试与错误恢复机制模块初始化与状态自检拉高模块电源引脚延时 1s 后拉低 RESET 引脚等待RDY字符出现发送AT指令确认串口连通性ATE0关闭回显ATCMEE2开启详细错误报告查询模块型号ATCGMM固件版本ATCGMRIMEIATCGSN网络注册与附着设置 APNATCGDCONT1,IP,cmnet中国移动或hologramHologram启用 PDP 上下文ATCGACT1,1查询附着状态ATCGATT?直至返回CGATT: 1PPP 拨号与 IP 获取发起拨号ATD*99***1#部分模块需ATCGDATAPPP,1等待CONNECT响应启动 PPP 协议栈查询分配 IPATCIFSR验证非0.0.0.0TLS 安全连接建立若使用 HTTPSATSSLINIT初始化 SSLATSSLCFGsslversion,1,4TLS 1.2ATSSLCON0,update.example.com,443建立加密隧道检查证书验证结果部分模块支持ATSSLCCONFIG配置 CA 证书HTTP(S) 固件请求与流式下载设置请求头ATHTTPPARAURL,https://update.example.com/firmware.binATHTTPPARATIMEOUT,60ATHTTPACTION0发起 GET解析响应头提取Content-Length: 123456确认HTTP/1.1 200 OK进入流式接收模式循环执行ATHTTPREAD0,1024每次读取 1KB写入 SPI Flash 用户分区如nvs或自定义ota_data分区完整性校验与安全写入下载完成后计算 SHA256 哈希值使用 ESP-IDFmbedtls_sha256_context对比服务器提供的X-Firmware-SHA256响应头或独立校验文件firmware.bin.sha256校验通过后调用esp_ota_begin()获取固件写入句柄esp_ota_write()分块写入esp_ota_end()提交更新生效与回滚保障调用esp_ota_set_boot_partition()指向新固件分区写入ota_data分区标记ota_state OTA_STATE_PENDING_COMMIT系统重启后新固件首次运行时执行自检如外设初始化、关键寄存器读取成功则esp_ota_mark_app_valid_cancel_rollback()失败则自动回滚至旧分区关键工程考量步骤 5 中的ATHTTPREAD必须配合精确的 UART 接收超时建议 500ms避免因网络抖动导致整块数据丢失步骤 6 的 SHA256 计算必须在下载流中实时进行边下边算而非全部下载完再计算以节省 RAMESP32 PSRAM 可选但非必需。3. 核心 API 接口详解3.1 初始化与配置 API// 初始化 GSM 模块硬件接口与默认参数 esp_err_t gsm_init(const gsm_config_t *config); typedef struct { uart_port_t uart_num; // UART 端口号如 UART_NUM_1 int tx_io_num; // TX GPIO 编号 int rx_io_num; // RX GPIO 编号 int rst_io_num; // RESET GPIO 编号可选 int pwr_ctrl_io_num; // 电源控制 GPIO可选用于硬复位 uint32_t baud_rate; // 默认波特率通常 115200 const char *apn; // APN 字符串如 cmnet const char *username; // APN 认证用户名若需要 const char *password; // APN 认证密码若需要 } gsm_config_t;参数说明rst_io_num和pwr_ctrl_io_num为可选若为-1则跳过对应硬件控制apn必须准确匹配运营商要求错误 APN 将导致ATCGACT1,1返回CME ERROR: 100网络拒绝baud_rate需与模块出厂设置一致部分模块如 SIM800L默认 9600需先发ATIPR115200切换。3.2 网络连接 API// 执行完整网络附着与拨号流程 esp_err_t gsm_connect_network(void); // 断开当前 PPP 连接并去附着 esp_err_t gsm_disconnect_network(void); // 查询当前 IP 地址字符串形式 esp_err_t gsm_get_ip_address(char *ip_str, size_t str_size);典型调用序列ESP_ERROR_CHECK(gsm_init(gsm_cfg)); ESP_ERROR_CHECK(gsm_connect_network()); char ip[16]; ESP_ERROR_CHECK(gsm_get_ip_address(ip, sizeof(ip))); ESP_LOGI(TAG, GSM IP: %s, ip); // 输出类似 10.123.45.673.3 OTA 更新主 API// 执行固件更新阻塞式调用 esp_err_t gsm_ota_perform_update(const char *firmware_url); // 非阻塞式更新通过回调通知进度与状态 typedef void (*gsm_ota_callback_t)(gsm_ota_event_t event, void *data); esp_err_t gsm_ota_perform_update_async(const char *firmware_url, gsm_ota_callback_t callback); typedef enum { GSM_OTA_EVENT_START, // 更新开始 GSM_OTA_EVENT_DOWNLOADING, // 下载中data 指向 gsm_ota_progress_t GSM_OTA_EVENT_VERIFYING, // 校验中 GSM_OTA_EVENT_WRITING, // 写入 Flash 中 GSM_OTA_EVENT_SUCCESS, // 更新成功即将重启 GSM_OTA_EVENT_FAILED, // 更新失败data 指向 error_code } gsm_ota_event_t; typedef struct { uint32_t current_size; // 当前已下载字节数 uint32_t total_size; // 总大小来自 Content-Length uint8_t progress_percent; // 0-100 } gsm_ota_progress_t;关键约束firmware_url必须为绝对路径支持http://和https://HTTPS 场景下模块需预先烧录根证书如DigiCert Global Root CA否则ATSSLCON返回SSLCON: 0,1连接失败gsm_ota_perform_update_async()适用于 FreeRTOS 环境回调在专用 OTA 任务上下文中执行避免阻塞主任务。3.4 低层 AT 指令工具 API// 发送 AT 指令并等待指定关键字响应 esp_err_t at_send_cmd_with_timeout(const char *cmd, const char *expected_response, int timeout_ms); // 发送 AT 指令并获取完整响应缓冲区 esp_err_t at_send_cmd_get_response(const char *cmd, char *response_buf, size_t buf_size, int timeout_ms); // 清空 UART 接收缓冲区用于错误恢复 void at_flush_uart_buffer(void);工程实践建议在gsm_connect_network()内部对每个关键 AT 指令如ATCGACT?执行 3 次重试每次间隔 1sat_send_cmd_get_response()的response_buf建议分配 ≥ 512 字节以容纳长响应如证书信息at_flush_uart_buffer()应在每次ATHTTPACTION后调用防止上一次响应残留干扰下一次解析。4. 关键配置选项与工程调优4.1 编译时配置KconfigGSM_FirmwareUpdater 通过 ESP-IDF Kconfig 系统提供精细化配置主要选项如下配置项默认值说明工程影响CONFIG_GSM_OTA_MAX_URL_LENGTH128固件 URL 最大长度URL 过长导致栈溢出建议根据实际域名调整CONFIG_GSM_OTA_HTTP_TIMEOUT_MS30000单次 HTTP 请求超时毫秒弱信号下需增大至 60000避免误判失败CONFIG_GSM_OTA_RETRY_COUNT3网络操作失败重试次数过高增加耗时过低降低成功率推荐 2~5CONFIG_GSM_OTA_USE_SSLy启用 HTTPS 支持关闭后禁用ATSSL*相关指令减小代码体积CONFIG_GSM_OTA_VERIFY_SHA256y启用固件 SHA256 校验生产环境必须开启开发阶段可关闭加速测试CONFIG_GSM_OTA_FLASH_WRITE_SIZE4096每次写入 Flash 的字节数匹配 ESP32 Flash 页大小4KB不可更改4.2 运行时动态配置通过gsm_config_t结构体传递的参数可在运行时动态变更例如// 根据 SIM 卡运营商自动切换 APN const char* get_apn_by_imsi(const char* imsi) { if (strncmp(imsi, 46000, 5) 0) return cmnet; // 中国移动 if (strncmp(imsi, 46001, 5) 0) return 3gnet; // 中国联通 if (strncmp(imsi, 46003, 5) 0) return uninet; // 中国电信 return hologram; } // 获取 IMSI char imsi[16]; at_send_cmd_get_response(ATCIMI, imsi, sizeof(imsi), 5000); gsm_cfg.apn get_apn_by_imsi(imsi);4.3 内存与性能调优UART 接收缓冲区在gsm_hal.c中uart_driver_install()的queue_size建议设为 20rx_buffer_size设为 1024确保能缓存完整 HTTP 响应头AT 响应解析栈at_parser.c中的临时解析缓冲区at_response_buf建议静态分配 512 字节避免频繁 malloc/freeHTTPS 证书存储若模块不支持外部证书烧录可将 PEM 格式 CA 证书编译进固件通过ATSSLSETCERT指令注入需模块固件支持功耗优化更新完成后调用gsm_disconnect_network()并进入esp_light_sleep_start()大幅降低待机电流。5. 实际应用示例与集成5.1 FreeRTOS 任务中执行 OTAstatic void ota_task(void *pvParameters) { while(1) { // 每 24 小时检查一次更新 vTaskDelay(24 * 60 * 60 * 1000 / portTICK_PERIOD_MS); ESP_LOGI(TAG, Starting GSM OTA check...); esp_err_t err gsm_ota_perform_update(https://myserver.com/v1.2.0.bin); if (err ESP_OK) { ESP_LOGI(TAG, OTA success! Restarting...); esp_restart(); } else { ESP_LOGE(TAG, OTA failed: %s, esp_err_to_name(err)); // 记录错误到 NVS供后续诊断 } } } // 创建 OTA 任务 xTaskCreate(ota_task, gsm_ota, 4096, NULL, 5, NULL);5.2 与传感器数据上报协同在工业场景中常需“先上报状态再决定是否更新”typedef struct { uint32_t firmware_version; // 当前固件版本号编码为 0x010200 表示 v1.2.0 uint32_t battery_mv; uint8_t signal_rssi; } device_status_t; void report_status_and_check_ota() { device_status_t status { .firmware_version APP_VERSION, .battery_mv read_battery(), .signal_rssi get_gsm_rssi() }; // 构造 JSON 上报 char json[256]; snprintf(json, sizeof(json), {\ver\:%u,\bat\:%u,\rssi\:%d}, status.firmware_version, status.battery_mv, status.signal_rssi); // 通过 GSM HTTP POST 上报 http_post(https://api.example.com/status, json, application/json); // 解析服务器响应中的 update_url 字段 char update_url[128]; if (parse_json_response_for_update_url(json_response, update_url)) { gsm_ota_perform_update(update_url); } }5.3 错误码映射与诊断GSM 模块返回的错误码需映射为可读的 ESP-IDF 错误码便于日志追踪AT 错误码含义映射 ESP_ERR排查建议CME ERROR: 100网络拒绝APN 错误ESP_ERR_GSM_APN_FAIL检查 APN、用户名、密码用ATCGDCONT?确认配置CME ERROR: 103网络超时ESP_ERR_GSM_NET_TIMEOUT增加ATCGACT超时检查 SIM 卡是否欠费CME ERROR: 115TLS 握手失败ESP_ERR_GSM_TLS_HANDSHAKE验证服务器证书链检查模块时间是否同步ATCCLK?HTTPACTION: 0,404,0HTTP 404 Not FoundESP_ERR_GSM_HTTP_404确认固件 URL 路径正确检查 Web 服务器权限HTTPACTION: 0,0,0HTTP 连接失败ESP_ERR_GSM_HTTP_CONN_FAIL检查 DNS 解析ATCDNSGIP确认服务器可达6. 安全性与生产就绪特性6.1 安全启动链Secure Boot ChainGSM_FirmwareUpdater 本身不实现 Secure Boot但与 ESP32 安全特性深度协同签名验证在gsm_ota_perform_update()写入前调用esp_image_verify()验证固件镜像签名需启用CONFIG_SECURE_SIGNED_APPSFlash 加密若启用CONFIG_SECURE_FLASH_ENC_ENABLEDOTA 写入自动走加密通道无需额外代码防降级攻击固件头部嵌入单调递增的version字段esp_ota_begin()内部校验新版本号 当前版本号否则拒绝写入。6.2 回滚与自愈机制双区 A/B 分区强制使用 ESP-IDF 的otadata分区确保更新失败时自动回滚状态持久化在ota_data分区中记录last_update_attempt_time、last_update_result、current_firmware_hash供远程诊断看门狗协同OTA 任务中定期喂狗esp_task_wdt_reset()若卡死在 AT 指令等待则硬件看门狗复位从旧固件启动。6.3 日志与远程诊断所有关键事件AT 指令、HTTP 状态码、错误码均通过 ESP-IDFESP_LOGI/E输出并可重定向至 UART、SD 卡或通过 GSM 以短信形式发送// 短信告警示例 void send_sms_alert(const char* msg) { char cmd[128]; snprintf(cmd, sizeof(cmd), ATCMGF1); at_send_cmd_with_timeout(cmd, OK, 1000); snprintf(cmd, sizeof(cmd), ATCMGS\8613800138000\); at_send_cmd_with_timeout(cmd, , 1000); uart_write_bytes(UART_NUM_1, msg, strlen(msg)); uart_write_bytes(UART_NUM_1, \x1A, 1); // CtrlZ }当连续 3 次 OTA 失败时自动触发send_sms_alert(OTA FAILED 3x: APNcmnet)运维人员可立即介入。7. 典型问题排查指南7.1 模块无响应AT 指令无返回现象AT指令发送后at_wait_response()超时UART 接收缓冲区为空排查步骤用万用表测量 TX/RX 电压确认电平匹配GSM 模块多为 3.3V TTL非 RS232检查uart_config_t中parity是否为UART_PARITY_DISABLE多数模块不支持校验硬件复位模块拉低RST引脚 100ms观察NETLIGHTLED 是否闪烁使用 USB-TTL 适配器直连模块用串口助手发送AT确认模块本身正常。7.2 拨号成功但无法获取 IPATCIFSR返回空现象ATD*99***1#返回CONNECT但ATCIFSR无输出或返回0.0.0.0原因与解决APN 错误ATCGDCONT?显示 APN 为空或错误重新发送ATCGDCONT1,IP,correct_apnPDP 上下文未激活ATCGACT?返回CGACT: 1,0执行ATCGACT1,1模块固件 Bug升级模块固件至最新版如 SIM7600 用ATCGMR查看官网下载升级工具。7.3 HTTPS 连接失败ATSSLCON返回SSLCON: 0,1现象TLS 连接建立失败常见于自签名证书或过期证书解决方案用openssl s_client -connect update.example.com:443 -servername update.example.com检查服务器证书链若为 Lets Encrypt 证书确保模块固件支持 ISRG Root X12021 年后签发临时方案改用 HTTP仅限内网测试或在服务器端配置兼容旧根证书的中间证书。7.4 下载固件后校验失败现象SHA256(firmware.bin)与响应头X-Firmware-SHA256不匹配根因分析HTTP 分块传输干扰服务器启用Transfer-Encoding: chunked但模块ATHTTPREAD未正确处理 chunk 头解决方案在服务器端禁用 chunkedNginx 加chunked_transfer_encoding off;或强制ATHTTPPARACHUNKED,0部分模块支持固件被篡改检查 Web 服务器文件权限确认下载过程中无 CDN 缓存污染。工程实践中某风电场远程监控终端曾因 SIM 卡运营商变更从移动转为电信APN 未同步更新导致连续 7 天 OTA 失败。通过ATCGDCONT?日志快速定位并在服务器端下发 APN 切换指令10 分钟内恢复更新能力。这印证了将网络配置参数化、可远程推送的设计价值。

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…