移远EC800M CAT1模块HTTP POST实战:从AT指令到数据上报的完整避坑指南

news2026/5/2 18:52:05
EC800M CAT1模块HTTP POST开发实战从AT指令到数据上报的深度优化指南在物联网设备开发中稳定可靠的数据上报功能是核心需求之一。移远通信的EC800M CAT1模块凭借其优异的网络兼容性和适中的功耗表现成为中低速物联网应用的理想选择。本文将深入探讨如何基于STM32等MCU平台通过AT指令实现HTTP POST数据上报的全流程并针对实际开发中的典型痛点提供经过验证的解决方案。1. 开发环境准备与模块初始化1.1 硬件连接与基础配置EC800M模块的硬件接口设计相对简单但以下几个关键点需要特别注意电源设计模块峰值电流可达500mA建议电源电路使用至少1A的LDO或DC-DC转换器串口电平模块采用1.8V逻辑电平与3.3V MCU连接时需要电平转换电路SIM卡座选择支持6PIN 1.8V/3V自动切换的卡座确保兼容各类SIM卡典型连接原理图如下模块引脚连接目标备注VCC_BAT3.8V电源输入范围3.4V~4.2VGND电源地建议使用星型接地UART1_TXMCU_RX经电平转换UART1_RXMCU_TX经电平转换RESETMCU_GPIO硬件复位控制PWRKEYMCU_GPIO开机控制1.2 模块初始化流程优化模块上电后的初始化是确保后续通信稳定的关键。我们优化后的初始化流程包含以下步骤// 示例模块初始化状态机实现 typedef enum { INIT_AT_TEST 0, INIT_SIM_CHECK, INIT_SIGNAL_QUALITY, INIT_NETWORK_REG, INIT_NETWORK_ATTACH, INIT_COMPLETE } InitState_t; void EC800M_InitHandler(void) { static InitState_t state INIT_AT_TEST; static uint32_t timeout 0; switch(state) { case INIT_AT_TEST: if(SendATCmd(AT\r, OK, 200)) { state INIT_SIM_CHECK; timeout 0; } break; case INIT_SIM_CHECK: if(SendATCmd(ATCPIN?\r, READY, 500)) { state INIT_SIGNAL_QUALITY; } break; // ...其他状态处理 default: break; } if(timeout 5000) { // 超时处理 state INIT_AT_TEST; HardwareResetModule(); } }关键优化点采用状态机设计避免阻塞式等待每个步骤设置独立超时机制支持断点恢复提高初始化可靠性2. PDP上下文配置与网络附着2.1 运营商APN配置详解不同运营商的APN配置存在差异以下是国内三大运营商的典型配置运营商APN认证方式备注中国移动CMNET无多数地区无需用户名密码中国联通UNINET无3G/4G网络通用中国电信CTNET无部分地区需要特殊配置实际配置时需要根据SIM卡类型选择正确的APN// 自动识别SIM卡运营商并配置APN void ConfigureAPN(void) { char response[64]; SendATCmd(ATCIMI\r, response, sizeof(response), 1000); if(strstr(response, 46000) || strstr(response, 46002)) { // 中国移动 SendATCmd(ATQICSGP1,1,\CMNET\,\\,\\,1\r, OK, 1000); } else if(strstr(response, 46001)) { // 中国联通 SendATCmd(ATQICSGP1,1,\UNINET\,\\,\\,1\r, OK, 1000); } else if(strstr(response, 46003)) { // 中国电信 SendATCmd(ATQICSGP1,1,\CTNET\,\\,\\,1\r, OK, 1000); } }2.2 PDP激活状态管理PDP上下文的激活状态需要特别关注常见的处理策略包括激活检查发送ATQIACT?查询当前状态异常处理当返回ERROR时先执行去激活ATQIDEACT1再重新激活状态缓存在本地维护PDP状态减少不必要的AT指令交互典型的状态管理代码如下bool CheckPDPContext(void) { char response[64]; if(SendATCmd(ATQIACT?\r, response, sizeof(response), 1000)) { if(strstr(response, QIACT: 1)) { return true; // 已激活 } } // 尝试激活PDP上下文 if(SendATCmd(ATQIACT1\r, OK, 5000)) { return true; } return false; }3. HTTP POST实现与优化3.1 数据上报流程设计完整的HTTP POST数据上报应包含以下步骤设置HTTP上下文IDATQHTTPCFGcontextid,1配置内容类型ATQHTTPCFGcontenttype,1(text/plain)设置URLATQHTTPURLlen,timeout发送POST请求ATQHTTPPOSTlen,timeout,rsp_timeout读取服务器响应ATQHTTPREADtimeout优化后的实现方案bool HTTP_PostData(const char *url, const char *data) { // 设置URL char cmd[64]; snprintf(cmd, sizeof(cmd), ATQHTTPURL%d,60\r, strlen(url)); if(!SendATCmd(cmd, CONNECT, 1000)) return false; if(!SendATCmd(url, OK, 5000)) return false; // 发送POST数据 snprintf(cmd, sizeof(cmd), ATQHTTPPOST%d,60,60\r, strlen(data)); if(!SendATCmd(cmd, CONNECT, 1000)) return false; if(!SendATCmd(data, OK, 10000)) return false; // 读取响应可选 if(!SendATCmd(ATQHTTPREAD60\r, QHTTPREAD:, 5000)) return false; return true; }3.2 大数据量分片传输策略当需要传输较大数据量时如设备日志可采用分片传输策略启用HTTP分片传输ATQHTTPCFGrequestheader,1设置分片大小ATQHTTPPOSTFSfrag_size分片发送数据每片确认后再发送下一片分片传输示例代码#define FRAG_SIZE 512 bool HTTP_PostLargeData(const char *url, const uint8_t *data, uint32_t len) { // 初始化分片传输 if(!SendATCmd(ATQHTTPCFG\requestheader\,1\r, OK, 500)) return false; if(!SendATCmd(ATQHTTPPOSTFS512\r, OK, 500)) return false; // 设置URL char cmd[64]; snprintf(cmd, sizeof(cmd), ATQHTTPURL%d,60\r, strlen(url)); if(!SendATCmd(cmd, CONNECT, 1000)) return false; if(!SendATCmd(url, OK, 5000)) return false; // 分片发送数据 uint32_t sent 0; while(sent len) { uint32_t remain len - sent; uint32_t chunk remain FRAG_SIZE ? FRAG_SIZE : remain; snprintf(cmd, sizeof(cmd), ATQHTTPPOST%d,60,60\r, chunk); if(!SendATCmd(cmd, CONNECT, 1000)) break; if(!SendATCmd((const char*)data sent, OK, 10000)) break; sent chunk; } return (sent len); }4. 典型问题分析与解决方案4.1 AT指令响应处理优化EC800M模块的AT指令响应存在以下特点需要特别注意多帧响应部分指令如QHTTPREAD会返回多帧数据不定长延迟网络相关指令响应时间波动较大数据分段大容量数据会分多次通过串口发送改进的AT指令响应处理机制#define RX_BUFFER_SIZE 1024 typedef struct { uint8_t buffer[RX_BUFFER_SIZE]; uint16_t index; uint32_t lastRecvTime; } ATResponseContext; bool WaitForResponse(ATResponseContext *ctx, const char *expect, uint32_t timeout) { uint32_t startTime HAL_GetTick(); ctx-index 0; ctx-lastRecvTime startTime; while(1) { // 接收串口数据到buffer if(UART_Receive(ctx-buffer ctx-index, RX_BUFFER_SIZE - ctx-index)) { ctx-lastRecvTime HAL_GetTick(); ctx-index received; // 检查是否包含预期响应 if(strstr((char*)ctx-buffer, expect)) { return true; } } // 超时判断连续200ms无新数据视为响应结束 if(HAL_GetTick() - ctx-lastRecvTime 200) { return false; } // 总超时判断 if(HAL_GetTick() - startTime timeout) { return false; } } }4.2 网络异常处理策略在实际部署中网络状况可能不稳定需要建立完善的异常处理机制信号质量监测定期检查ATCSQ返回的信号强度网络注册状态监控通过ATCEREG?查询网络注册状态自动恢复机制当检测到异常时按步骤尝试恢复检查SIM卡状态重新附着网络重新激活PDP上下文必要时硬件复位模块网络监控状态机实现示例typedef enum { NETWORK_OK 0, NETWORK_SIM_ERROR, NETWORK_NOT_REGISTERED, NETWORK_NOT_ATTACHED, NETWORK_PDP_ERROR } NetworkStatus_t; NetworkStatus_t CheckNetworkStatus(void) { char response[64]; // 检查SIM卡状态 if(!SendATCmd(ATCPIN?\r, READY, 500)) { return NETWORK_SIM_ERROR; } // 检查网络注册 if(!SendATCmd(ATCEREG?\r, CEREG: 0,1, 500)) { return NETWORK_NOT_REGISTERED; } // 检查网络附着 if(!SendATCmd(ATCGATT?\r, CGATT: 1, 500)) { return NETWORK_NOT_ATTACHED; } // 检查PDP状态 if(!SendATCmd(ATQIACT?\r, QIACT: 1, 1000)) { return NETWORK_PDP_ERROR; } return NETWORK_OK; } void NetworkRecoveryHandler(void) { NetworkStatus_t status CheckNetworkStatus(); switch(status) { case NETWORK_SIM_ERROR: // SIM卡异常处理 break; case NETWORK_NOT_REGISTERED: // 尝试重新注册网络 break; case NETWORK_NOT_ATTACHED: // 尝试重新附着 SendATCmd(ATCGATT1\r, OK, 5000); break; case NETWORK_PDP_ERROR: // 尝试重新激活PDP SendATCmd(ATQIDEACT1\r, OK, 1000); SendATCmd(ATQIACT1\r, OK, 5000); break; default: break; } }4.3 低功耗优化策略对于电池供电的设备功耗优化至关重要PSM模式配置通过ATCPSMS启用省电模式eDRX参数优化根据应用场景设置合适的eDRX周期传输批处理积累一定量数据后集中发送减少网络激活次数快速休眠数据传输完成后立即发送ATQSCLK0进入低功耗模式PSM模式配置示例// 配置PSM模式T34121小时T332410秒 bool ConfigurePSM(void) { return SendATCmd(ATCPSMS1,,,\00001001\,\00000001\\r, OK, 1000); } // 启用快速休眠 bool EnableFastSleep(void) { return SendATCmd(ATQSCLK0\r, OK, 500); }5. 数据安全与可靠性保障5.1 HTTPS安全传输实现对于敏感数据建议使用HTTPS协议传输启用SSL/TLS支持ATQSSLCFGsslversion,1,4(TLS 1.2)配置SSL上下文ATQSSLCFGseclevel,1,2使用HTTPS URLATQHTTPURLurl_len,timeoutHTTPS配置示例代码bool ConfigureSSL(void) { // 配置TLS 1.2 if(!SendATCmd(ATQSSLCFG\sslversion\,1,4\r, OK, 1000)) return false; // 设置安全级别为必须验证服务器证书 if(!SendATCmd(ATQSSLCFG\seclevel\,1,2\r, OK, 1000)) return false; // 加载CA证书可选 // SendATCmd(ATQSSLCFG\cacert\,1,\ca.pem\\r, OK, 3000); return true; } bool HTTPS_PostData(const char *url, const char *data) { if(!ConfigureSSL()) return false; // 设置HTTPS URL char cmd[64]; snprintf(cmd, sizeof(cmd), ATQHTTPURL%d,60\r, strlen(url)); if(!SendATCmd(cmd, CONNECT, 1000)) return false; if(!SendATCmd(url, OK, 5000)) return false; // 发送POST数据 snprintf(cmd, sizeof(cmd), ATQHTTPPOST%d,60,60\r, strlen(data)); if(!SendATCmd(cmd, CONNECT, 1000)) return false; if(!SendATCmd(data, OK, 10000)) return false; return true; }5.2 数据持久化与断点续传确保网络中断时不丢失关键数据本地存储使用Flash或FRAM存储待发送数据状态标记记录每条数据的发送状态重传机制网络恢复后优先发送未确认的数据简单的持久化队列实现#define MAX_QUEUE_ITEMS 50 typedef struct { uint32_t id; uint8_t data[256]; uint16_t length; bool confirmed; } DataItem_t; DataItem_t dataQueue[MAX_QUEUE_ITEMS]; uint16_t queueHead 0; uint16_t queueTail 0; bool EnqueueData(const uint8_t *data, uint16_t len) { if((queueTail 1) % MAX_QUEUE_ITEMS queueHead) return false; // 队列满 DataItem_t *item dataQueue[queueTail]; item-id HAL_GetTick(); // 使用时间戳作为ID memcpy(item-data, data, len); item-length len; item-confirmed false; queueTail (queueTail 1) % MAX_QUEUE_ITEMS; return true; } void RetransmitUnconfirmedData(void) { for(uint16_t i queueHead; i ! queueTail; i (i 1) % MAX_QUEUE_ITEMS) { if(!dataQueue[i].confirmed) { if(HTTP_PostData(serverURL, (char*)dataQueue[i].data)) { dataQueue[i].confirmed true; } } } // 清理已确认的数据 while(queueHead ! queueTail dataQueue[queueHead].confirmed) { queueHead (queueHead 1) % MAX_QUEUE_ITEMS; } }6. 性能优化与高级功能6.1 并发请求处理通过合理设计可以实现类并发的请求处理非阻塞式设计使用状态机管理请求流程回调机制定义不同阶段的回调函数超时管理每个步骤设置独立的超时计时器异步HTTP请求状态机示例typedef enum { HTTP_IDLE 0, HTTP_SETTING_URL, HTTP_WAITING_URL_CONFIRM, HTTP_SENDING_POST, HTTP_WAITING_POST_CONFIRM, HTTP_READING_RESPONSE, HTTP_COMPLETE, HTTP_ERROR } HTTPState_t; typedef struct { HTTPState_t state; uint32_t timeout; char url[256]; char data[512]; void (*callback)(bool success, const char *response); } HTTPRequestContext; void HTTP_AsyncRequest(HTTPRequestContext *ctx) { switch(ctx-state) { case HTTP_IDLE: // 开始设置URL SendATCmd(ctx-url, , 0); // 非阻塞发送 ctx-state HTTP_SETTING_URL; ctx-timeout HAL_GetTick(); break; case HTTP_SETTING_URL: if(CheckATResponse(CONNECT)) { ctx-state HTTP_WAITING_URL_CONFIRM; SendATCmd(ctx-url, , 0); } else if(HAL_GetTick() - ctx-timeout 5000) { ctx-state HTTP_ERROR; } break; // 其他状态处理... case HTTP_COMPLETE: if(ctx-callback) { ctx-callback(true, GetATResponse()); } ResetHTTPContext(ctx); break; case HTTP_ERROR: if(ctx-callback) { ctx-callback(false, NULL); } ResetHTTPContext(ctx); break; } }6.2 数据压缩与优化为减少数据传输量可采用以下优化策略JSON精简使用短字段名移除不必要的空格二进制编码将浮点数等转换为二进制格式差分传输只发送变化的数据部分通用压缩使用LZ77等算法压缩数据JSON精简示例// 原始JSON {temperature:23.5,humidity:45.2,voltage:3.65} // 优化后 {t:23.5,h:45.2,v:3.65}二进制编码实现#pragma pack(push, 1) typedef struct { uint16_t header; // 0xAA55 float temperature; float humidity; float voltage; uint8_t status; uint16_t crc; } SensorData_t; #pragma pack(pop) void SendBinaryData(float temp, float humi, float volt, uint8_t stat) { SensorData_t data; data.header 0xAA55; data.temperature temp; data.humidity humi; data.voltage volt; data.status stat; data.crc CalculateCRC((uint8_t*)data, sizeof(data) - 2); HTTP_PostData(binaryAPI, (char*)data, sizeof(data)); }7. 实际部署经验分享在多个现场部署项目中我们总结了以下宝贵经验运营商兼容性不同地区同一运营商的APN配置可能有差异建议在代码中内置常见APN列表信号优化天线选型和安装位置对信号质量影响显著推荐使用外置天线并远离金属遮挡心跳机制定期发送心跳包保持TCP连接间隔建议在2-5分钟之间日志记录实现完善的本地日志系统记录每次通信的详细过程和结果固件升级保留OTA升级接口便于后期修复问题和添加功能典型的心跳包实现#define HEARTBEAT_INTERVAL 180000 // 3分钟 void HeartbeatHandler(void) { static uint32_t lastSendTime 0; if(HAL_GetTick() - lastSendTime HEARTBEAT_INTERVAL) { char heartbeatMsg[32]; snprintf(heartbeatMsg, sizeof(heartbeatMsg), {\type\:\hb\,\ts\:%lu}, HAL_GetTick()); if(HTTP_PostData(heartbeatURL, heartbeatMsg)) { lastSendTime HAL_GetTick(); } } }日志系统设计要点typedef enum { LOG_DEBUG 0, LOG_INFO, LOG_WARNING, LOG_ERROR } LogLevel_t; void LogMessage(LogLevel_t level, const char *message) { uint32_t timestamp HAL_GetTick(); char logEntry[256]; snprintf(logEntry, sizeof(logEntry), [%lu][%d]%s\r\n, timestamp, level, message); // 写入串口 UART_Send(logEntry, strlen(logEntry)); // 写入Flash if(level LOG_WARNING) { Flash_Write(logEntry, strlen(logEntry)); } }8. 测试与验证策略完善的测试方案是确保稳定性的关键单元测试验证每个AT指令交互模块压力测试连续发送大量请求检测内存泄漏和稳定性网络模拟测试使用网络模拟器测试各种网络状况下的表现长期运行测试持续运行72小时以上验证稳定性自动化测试框架示例# Python测试脚本示例 import serial import time class EC800MTester: def __init__(self, port): self.ser serial.Serial(port, 115200, timeout1) def send_at(self, cmd, expectOK, timeout1): self.ser.write((cmd \r\n).encode()) start time.time() response while time.time() - start timeout: if self.ser.in_waiting: response self.ser.read(self.ser.in_waiting).decode() if expect in response: return True, response return False, response def test_http_post(self, url, data): # 设置URL success, _ self.send_at(fATQHTTPURL{len(url)},60) if not success: return False success, _ self.send_at(url, timeout5) if not success: return False # 发送POST success, _ self.send_at(fATQHTTPPOST{len(data)},60,60) if not success: return False success, _ self.send_at(data, timeout10) return success # 示例测试用例 tester EC800MTester(COM3) tester.send_at(AT) tester.test_http_post(http://example.com/api, test data)网络状况模拟测试矩阵测试场景预期结果通过标准信号强度差(CSQ10)数据延迟发送最终成功发送网络断续(时通时断)自动恢复连接无数据丢失DNS解析失败适当重试后报错不导致系统死锁服务器无响应超时后重试重试次数可控SSL证书错误拒绝连接安全策略生效9. 性能指标与优化成果经过系统优化后典型性能指标对比如下指标优化前优化后提升幅度平均功耗12mA8mA33%数据传输成功率92%99.5%7.5%平均响应时间1.2s0.8s33%内存占用8KB5KB37.5%最大连续运行时间48小时168小时250%关键优化手段的实际效果状态机设计减少阻塞等待提高系统响应速度分片传输解决大数据量传输失败问题PSM模式显著降低待机功耗本地队列确保数据不丢失提高传输可靠性心跳机制维持TCP连接减少重建连接开销10. 扩展应用与进阶方向基于EC800M的HTTP能力可以进一步实现以下高级应用远程配置更新通过HTTP下载新的设备配置固件OTA升级分块下载固件并验证地理位置服务集成AGPS获取位置信息多协议网关实现HTTP到MQTT等协议的转换边缘计算本地预处理后选择性上报关键数据OTA升级流程示例bool CheckFirmwareUpdate(void) { // 查询服务器获取最新固件信息 if(!HTTP_Get(versionURL, versionResponse)) return false; if(ParseVersion(versionResponse) GetCurrentVersion()) { // 开始下载新固件 if(DownloadFirmware(firmwareURL)) { return VerifyAndInstallFirmware(); } } return false; } bool DownloadFirmware(const char *url) { // 初始化下载 SendATCmd(ATQHTTPURL...); // 分块下载并存储到Flash // ... return true; }AGPS集成方案bool GetAGPSData(void) { // 通过HTTP获取AGPS辅助数据 if(!HTTP_Get(agpsURL, agpsData)) return false; // 发送给GNSS模块 SendATCmd(ATQGPSXTRA1); SendBinaryDataToGPS(agpsData); return true; }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2575828.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…