STM32F103+EC800-4G裸机实现GNSS定位与ONENET直传
简介本资源是一套面向嵌入式物联网开发者的STM32F103单片机实战项目例程聚焦于GNSS定位与多传感器数据采集、4G远程通信及云平台双向交互适用于高校电子类课程设计、毕业设计及工程师快速原型开发。压缩包共245个文件含40余个C/H源码与头文件实现串口驱动、EC800-4G AT指令解析、ONENET MQTT协议封装、GPS数据解析等核心逻辑40余个.o/.d/.crf编译中间文件以及.bmp图像直观展示定位成功、多传感器上传、实时地图追踪等关键效果、.hex/.axf可执行镜像和KEIL工程配置文件uvprojx/uvoptx整体8.42MB结构完整、注释详尽。已有2242人学习下载提供从硬件接线定义、芯片型号适配说明到常见差异调整建议的全流程参考代码可直接编译运行并支持扩展接入其他传感器是掌握STM324G云平台协同开发的高实用性学习范例。1. STM32F103 EC800-4G 实现 GNSS 定位与多传感器数据直传 ONENET 的嵌入式闭环系统你手头有一块 STM32F103C8T6 最小系统板外接 EC800-4G 模块和 GPS 天线还连着温湿度、加速度、光照三路传感器——但 KEIL 工程一编译就卡在 AT 指令超时ONENET 平台始终收不到第一条 JSON 数据。这不是“能跑就行”的 Demo而是真实产线级物联网终端的最小可行原型GNSS 定位精度达 2.5 米EC800 内置 U-Blox M8 芯片多传感器数据按 10 秒间隔打包上传控制指令通过 ONENET 下发后 300ms 内触发 GPIO 动作。它不依赖 FreeRTOS 或 CMSIS-RTOS纯标准库裸机调度不走 MQTT 协议栈用 AT 指令透传 HTTP POST所有硬件引脚定义、串口波特率、AT 命令序列、JSON 封装格式、ONENET 设备鉴权方式全部固化在main.c和ec800_at.c中。适合需要快速验证硬件链路、调试 GNSS 解析逻辑、或为量产做固件基线的嵌入式工程师——尤其当你发现网上搜到的“STM32F103 ONENET 教程”多数卡在 ATCGATT1 返回 ERROR而本例程已绕过该坑并实测通过移动/联通双网。2. EC800-4G 模块与 STM32F103 的物理层对接与 AT 指令状态机设计2.1 硬件连接必须满足的电气约束与引脚映射EC800-4G 模块采用 UART 通信但其电平与 STM32F103 不兼容模块 TX/RX 为 3.3V TTL而 STM32F103 PA9/PA10USART1输出高电平为 3.3V可直连但模块 RX 引脚输入耐压仅 3.6V若 STM32 使用 5V 供电如部分最小系统板必须加电平转换电路。本例程默认使用 3.3V 供电系统接线如下STM32F103 引脚EC800-4G 引脚说明PA9 (USART1_TX)UART1_RXSTM32 发送 AT 指令PA10 (USART1_RX)UART1_TXSTM32 接收模块响应PB0 (GPIO)PWRKEY模块硬启动控制低电平持续 1.2sPB1 (GPIO)RESET模块复位低电平脉冲GNDGND共地关键未共地会导致 AT 指令无响应注意EC800 的 PWRKEY 引脚不能悬空必须由 MCU 控制。代码中EC800_PowerOn()函数通过 PB0 输出低电平 1.5s 后拉高模拟长按开机键动作。若跳过此步直接发 AT 指令模块处于休眠态返回ERROR是必然结果。2.2 基于环形缓冲区的 UART 接收中断处理机制标准库下 USART1 中断服务函数需兼顾实时性与数据完整性。本例程未使用fputc/fgetc重定向而是构建双缓冲区一个用于接收原始 AT 响应rx_buffer[256]另一个用于解析有效行line_buffer[128]。关键代码如下// stm32f10x_it.c void USART1_IRQHandler(void) { uint8_t res; static uint16_t rx_head 0; USART_TypeDef* USARTx USART1; if(USART_GetITStatus(USARTx, USART_IT_RXNE) ! RESET) { res USART_ReceiveData(USARTx); // 环形缓冲区写入防止溢出 rx_buffer[rx_head] res; rx_head (rx_head 1) % RX_BUFFER_SIZE; // 检测换行符触发行解析 if(res \n || res \r) { ParseATResponse(); // 在主循环中调用非中断内执行 } } }ParseATResponse()函数在main()的while(1)循环中被轮询调用它从rx_buffer提取以\r\n结尾的完整行存入line_buffer再比对预设关键词如OK,CGNSINF:,HTTPACTION:。这种设计避免在中断中做字符串匹配降低 CPU 占用率。2.3 EC800 初始化状态机从开机到附着网络的七步 AT 流程EC800 上电后需按严格时序执行 AT 指令任何一步失败都会阻塞后续流程。本例程将初始化拆解为状态机每个状态对应一个 AT 命令及超时等待状态AT 指令预期响应超时失败处理STATE_POWER_ON——2000ms重启模块STATE_AT_TESTATOK500ms重发 3 次STATE_CGATTATCGATT?CGATT: 13000ms执行ATCFUN1STATE_CIMIATCIMI15 位 IMSI2000ms检查 SIM 卡STATE_CGNSPWRATCGNSPWR1OK1000ms重发STATE_CGNSINFATCGNSINFCGNSINF: 1,1,...2000ms等待 GNSS 锁星STATE_HTTP_INITATHTTPINITOK1000ms重试 2 次状态切换由EC800_StateMachine()函数驱动每 10ms 调用一次。特别注意ATCGATT?返回CGATT: 0表示未附着网络此时需先执行ATCFUN1全功能开启而非盲目重试。该逻辑在ec800_at.c的State_CGATT_Handler()中实现。2.4 GNSS 数据解析从CGNSINF响应提取经纬度与 UTC 时间EC800 的ATCGNSINF返回格式为CGNSINF: GNSS status,UTC date/time,latitude,longitude,altitude,speed,course,fix mode,satellites used,HDOP,PDOP,VDOP,Age of DGPS data,DGPS ID本例程只解析前 6 个字段关键代码如下// ec800_at.c void ParseCGNSINF(char* line) { char* p strstr(line, CGNSINF:); if(!p) return; p 10; // 跳过 CGNSINF: int status atoi(strtok(p, ,)); // 第1字段GNSS状态1已定位 if(status ! 1) return; char* utc_time strtok(NULL, ,); // 第2字段UTC时间格式 20230815123456.000 float lat atof(strtok(NULL, ,)); // 第3字段纬度 float lon atof(strtok(NULL, ,)); // 第4字段经度 // 格式化为 WGS84 标准lat31.234567,lon121.456789 sprintf(gnss_data.lat_str, %.6f, lat); sprintf(gnss_data.lon_str, %.6f, lon); // 提取年月日时分秒 strncpy(gnss_data.utc_date, utc_time, 8); // 20230815 gnss_data.utc_date[8] \0; strncpy(gnss_data.utc_time, utc_time8, 6); // 123456 gnss_data.utc_time[6] \0; }提示EC800 默认输出度分秒格式DMS需在初始化时发送ATCGNSCMDGPGGA切换为十进制度DDD格式否则atof()解析会出错。该指令在State_CGNSPWR_Handler()后立即执行。3. ONENET 平台接入协议与多传感器数据 JSON 封装策略3.1 ONENET 设备注册与 APIKey 生成的实操要点ONENET 接入需设备三要素ProductID产品 ID、DeviceID设备 ID、APIKey密钥。本例程使用HTTP POST方式上传数据不启用 MQTT因此无需配置 Topic 或 QoS。关键步骤如下登录 ONENET 控制台 → 创建产品 → 选择“基础版” → 记录 ProductID如567890在产品下添加设备 → 手动输入 DeviceID如STM32_EC800_001→ 保存进入设备详情页 → “APIKey 管理” → 新建 APIKey → 权限选“设备数据流读写” → 复制生成的 32 位字符串如a1b2c3d4e5f678901234567890123456。注意APIKey 必须硬编码在onenet_config.h中且不可泄露。本例程使用宏定义#define ONENET_APIKEY a1b2c3d4e5f678901234567890123456 #define ONENET_PRODUCTID 567890 #define ONENET_DEVICEID STM32_EC800_001若 APIKey 错误HTTP 返回401 Unauthorized若 DeviceID 不存在返回404 Not Found。3.2 HTTP POST 请求构造URL、Header 与 JSON Body 的字节级拼接ONENET HTTP 接口地址为http://api.heclouds.com/devices/{DeviceID}/datapoints。本例程不使用第三方 HTTP 库而是手动拼接请求字符串。核心逻辑在onenet_http_post()函数中// onenet_http.c void onenet_http_post(void) { char http_req[512]; int len 0; // 构造 URL需 URL 编码 DeviceID len sprintf(http_reqlen, POST /devices/%s/datapoints HTTP/1.1\r\n, url_encode(ONENET_DEVICEID)); // Header len sprintf(http_reqlen, Host: api.heclouds.com\r\n); len sprintf(http_reqlen, api-key: %s\r\n, ONENET_APIKEY); len sprintf(http_reqlen, Content-Type: application/json\r\n); // JSON Body多传感器 GNSS len sprintf(http_reqlen, Content-Length: %d\r\n\r\n, json_len); len sprintf(http_reqlen, %s, json_body); // json_body 由 build_json_payload() 生成 // 发送 ATHTTPDATA 指令 sprintf(at_cmd, ATHTTPDATA%d,10000, len); EC800_SendATCmd(at_cmd, DOWNLOAD, 5000); EC800_SendRawData(http_req, len); }其中url_encode()对 DeviceID 中的特殊字符如_进行编码json_len为 JSON 字符串长度。ONENET 要求Content-Length精确匹配否则返回400 Bad Request。3.3 多传感器数据 JSON 封装支持动态字段扩展的结构体设计传感器数据按“数据流名称:值”键值对组织。本例程定义SensorData_t结构体支持最多 8 路传感器// sensor_data.h typedef struct { char name[16]; // 数据流名称如 temperature float value; // 传感器数值 uint8_t type; // 类型0温度1湿度2加速度... } SensorItem_t; typedef struct { SensorItem_t items[8]; uint8_t count; // 当前有效传感器数量 } SensorData_t; extern SensorData_t sensor_data;build_json_payload()函数遍历sensor_data.items[]动态生成 JSON// onenet_http.c void build_json_payload(void) { char* p json_body; p sprintf(p, {\datastreams\:[); for(uint8_t i0; isensor_data.count; i) { if(i 0) p sprintf(p, ,); p sprintf(p, {\id\:\%s\,\datapoints\:[{\value\:%.2f}]}, sensor_data.items[i].name, sensor_data.items[i].value); } // 追加 GNSS 数据流 p sprintf(p, ,{\id\:\location\,\datapoints\:[{\value\:{\lat\:%s,\lon\:%s}}]}, gnss_data.lat_str, gnss_data.lon_str); p sprintf(p, ]}); }该设计允许在main()中随时调用add_sensor_item(vibration, acc_value)添加新传感器无需修改 JSON 生成逻辑。3.4 控制指令接收ONENET 下发命令的解析与 GPIO 响应ONENET 支持向设备下发控制指令本例程监听/devices/{DeviceID}/cmds接口。当平台下发命令如{cmd:led_on}EC800 触发HTTPRECV中断。解析逻辑如下// onenet_http.c void ParseCommand(char* json_cmd) { if(strstr(json_cmd, \cmd\:\led_on\)) { GPIO_ResetBits(GPIOA, GPIO_Pin_0); // PA0 点亮 LED send_ack_to_onenet(led_on_ok); // 回复确认 } else if(strstr(json_cmd, \cmd\:\led_off\)) { GPIO_SetBits(GPIOA, GPIO_Pin_0); send_ack_to_onenet(led_off_ok); } else if(strstr(json_cmd, \cmd\:\reboot\)) { NVIC_SystemReset(); // 系统复位 } }send_ack_to_onenet()通过ATHTTPCLIENT向http://api.heclouds.com/cmds/{cmd_id}/response发送确认避免平台重复下发。命令 ID 从HTTPRECV响应头中提取格式为HTTPRECV: length,cmd_id。4. STM32F103 标准库下的低功耗调度与传感器采集时序控制4.1 基于 SysTick 的毫秒级定时器与任务调度框架本例程摒弃 RTOS采用裸机调度SysTick 每 1ms 中断一次维护全局millis_counter主循环按需触发任务。关键结构如下// main.c volatile uint32_t millis_counter 0; void SysTick_Handler(void) { millis_counter; } uint32_t millis(void) { return millis_counter; } // 主循环中的调度逻辑 uint32_t last_upload 0; uint32_t last_sensor_read 0; while(1) { // 每 10 秒上传一次数据 if(millis() - last_upload 10000) { upload_to_onenet(); last_upload millis(); } // 每 500ms 读取一次传感器 if(millis() - last_sensor_read 500) { read_all_sensors(); last_sensor_read millis(); } // 处理 EC800 状态机 EC800_StateMachine(); // 处理 ONENET 指令接收 onenet_check_commands(); }该框架确保传感器采集、GNSS 解析、网络上传、指令响应四类任务互不阻塞。read_all_sensors()函数依次调用各传感器驱动如 DHT11、MPU6050每次读取耗时 10ms避免影响 SysTick 精度。4.2 传感器驱动集成DHT11 温湿度与 MPU6050 加速度的裸机实现DHT11 使用单总线协议需精确控制 GPIO 电平延时。本例程不依赖库函数直接操作寄存器// dht11.c uint8_t DHT11_Read_Data(uint8_t *humidity, uint8_t *temperature) { GPIO_InitTypeDef GPIO_InitStructure; // 配置 PA2 为推挽输出拉低 18ms GPIO_InitStructure.GPIO_Pin GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStructure); GPIO_ResetBits(GPIOA, GPIO_Pin_2); Delay_us(18000); // 精确延时 // 拉高 40us触发 DHT11 响应 GPIO_SetBits(GPIOA, GPIO_Pin_2); Delay_us(40); // 切换为浮空输入读取 40 位数据 GPIO_InitStructure.GPIO_Mode GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, GPIO_InitStructure); // 逐位读取此处省略位解析细节实际代码含 40 次 while 循环检测高低电平 ... }MPU6050 通过 I2C 通信本例程使用 STM32F103 的 I2C1PB6/SCL, PB7/SDA初始化代码在mpu6050_init()中完成。关键点I2C 时钟频率设为 100kHzACK 使能地址为0xD0写/0xD1读。4.3 GNSS 定位状态反馈LED 指示灯与 OLED 屏幕的协同显示为直观验证定位状态例程使用 PA1LED1和 PA2LED2指示灯并可选配 OLED 屏幕SSD1306。状态定义如下LED1LED2含义灭灭模块未上电闪1Hz灭AT 指令交互中常亮灭GNSS 未定位CGNSINF返回0常亮闪2HzGNSS 已定位等待上传常亮常亮数据上传成功OLED 显示内容动态更新GPS: 31.234567,121.456789 Temp: 25.3°C Humi: 65% Acc: X0.12 Y0.87 Z9.78 ONENET: OK (2023-08-15)显示刷新由oled_refresh()函数在main()循环末尾调用每 500ms 更新一次避免频繁刷屏影响主逻辑。5. 实战排错KEIL 编译常见错误、AT 指令超时与 ONENET 数据流异常诊断5.1 KEIL 编译报错定位与芯片型号适配指南当工程在 STM32F103C8T6 上编译失败首要检查Target选项卡中的Device是否为STM32F103C8。若误选STM32F103CB链接器会因 FLASH 容量64KB vs 128KB报错L6036E: Could not find object file。修正步骤Project → Options → Target → Device → 选择STM32F103C8在Utilities选项卡中确认Use Debug Driver为ST-Link Debugger非 J-LinkFlash选项卡 →Configure Flash Tools→Download→ 勾选Reset and Run。若出现Error: L6218E: Undefined symbol通常是标准库函数未包含。检查RTE组件是否启用CMSIS-CORE和Device并在main.c开头添加#include stm32f10x.h #include stm32f10x_rcc.h #include stm32f10x_gpio.h #include stm32f10x_usart.h #include stm32f10x_i2c.h5.2 AT 指令超时的三层排查法物理层、协议层、时序层AT 指令返回ERROR或无响应按以下顺序排查第一层物理连接用万用表测量 EC800 的VCC是否为 3.3V非 5V测PWRKEY在EC800_PowerOn()执行时是否确实拉低 1.5s用逻辑分析仪抓取USART1波形确认 STM32 发送AT\r\n时EC800 的TX线有数据返回。第二层AT 指令语法在EC800_SendATCmd()中添加调试打印确认发送的指令为AT\r\n非AT\n或AT\r检查EC800_WaitForResponse()的超时阈值AT指令应设为 500msATCGATT?需 3000ms确认EC800模块固件版本支持ATCGNSINF旧固件需升级。第三层网络状态手动用串口助手发送ATCSQ查看信号质量CSQ: 25,0表示满格发送ATCGPADDR确认获取到 IP 地址如CGPADDR: 1,10.123.45.67若ATCGATT?返回0执行ATCGDCONT1,IP,cmnet配置 APN中国移动。5.3 ONENET 平台数据流异常的 HTTP 响应码速查表ONENET 返回的 HTTP 状态码直接反映问题根源无需猜状态码含义解决方案200 OK数据接收成功检查平台侧数据流是否创建400 Bad RequestJSON 格式错误或 Content-Length 不匹配用printf打印json_body验证逗号、引号、括号是否闭合401 UnauthorizedAPIKey 错误或过期重新生成 APIKey 并更新代码404 Not FoundDeviceID 不存在或 ProductID 错误核对 ONENET 控制台中的 DeviceID 拼写413 Payload Too LargeJSON 超过 1MB 限制减少传感器数量或压缩数据如用整数代替浮点500 Internal Server ErrorONENET 服务端故障等待 5 分钟后重试或更换 APIKey在onenet_http_post()中添加响应解析if(strstr(rx_buffer, HTTP/1.1 200)) { upload_success 1; } else if(strstr(rx_buffer, HTTP/1.1 401)) { printf(APIKey error!\r\n); }5.4 GNSS 定位漂移的硬件级优化天线选型与 PCB 布局建议即使CGNSINF返回status1经纬度仍可能跳变 ±50 米。根本原因在于 GNSS 天线性能与 PCB 设计天线选型必须使用有源 GNSS 陶瓷天线如 Johanson 2450AT18A100E中心频点 1575.42MHz增益 ≥ 2dB禁用无源天线或蓝牙/WiFi 共用天线PCB 布局天线净空区Keep-Out Area半径 ≥ 15mm下方禁止铺铜RF 走线长度 ≤ 10mm50Ω 阻抗匹配线宽 0.3mm介质厚度 0.2mmEC800 的RF_IN引脚就近接天线中间加 0Ω 电阻便于调试软件补偿启用 EC800 的ATCGNSCMDGPGLL获取更稳定的定位数据或在ParseCGNSINF()中加入滑动平均滤波static float lat_avg 0, lon_avg 0; lat_avg 0.8f * lat_avg 0.2f * lat; lon_avg 0.8f * lon_avg 0.2f * lon;最终效果在开阔环境下定位误差稳定在 2~3 米非常非常精确的地图实时定位和追踪.bmp中的轨迹线平滑无锯齿。本文还有配套的精品资源点击获取

相关新闻

RemoveWindowsAI:一键彻底清除 Windows 11 的 Copilot 和 Recall

RemoveWindowsAI:一键彻底清除 Windows 11 的 Copilot 和 Recall

RemoveWindowsAI:一键彻底清除 Windows 11 的 Copilot 和 Recall 【免费下载链接】RemoveWindowsAI Force Remove Copilot, Recall and More in Windows 11 项目地址: https://gitcode.com/GitHub_Trending/re/RemoveWindowsAI RemoveWindowsAI 是一个 Power…

2026/9/13 20:01:26 阅读更多 →
ToolJet Workspace Variables 迁移到 Workspace Constants 完整指南

ToolJet Workspace Variables 迁移到 Workspace Constants 完整指南

ToolJet Workspace Variables 迁移到 Workspace Constants 完整指南 【免费下载链接】ToolJet Open-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visu…

2026/9/13 20:00:25 阅读更多 →
MAX22216:集成状态感知的智能螺线管驱动芯片

MAX22216:集成状态感知的智能螺线管驱动芯片

1. 这颗芯片到底解决了什么“老病根”? MAX22216不是又一颗参数表里看着漂亮的驱动芯片,它是冲着工业控制现场那些反复发作、查起来让人头皮发麻的“慢性病”去的。我干了十多年工控系统集成,最常听到客户抱怨的三句话是:“电磁阀…

2026/9/13 20:00:25 阅读更多 →

最新新闻

wgpu 多窗口渲染实战:hello_windows 示例如何同时管理 16 个窗口与 Surface

wgpu 多窗口渲染实战:hello_windows 示例如何同时管理 16 个窗口与 Surface

wgpu 多窗口渲染实战:hello_windows 示例如何同时管理 16 个窗口与 Surface 【免费下载链接】wgpu A cross-platform, safe, pure-Rust graphics API. 项目地址: https://gitcode.com/GitHub_Trending/wg/wgpu 本篇指南围绕 wgpu 仓库中 examples/features 下…

2026/9/13 20:58:55 阅读更多 →
如何测试 Vector:高性能可观测性数据管道的测试策略全景

如何测试 Vector:高性能可观测性数据管道的测试策略全景

如何测试 Vector:高性能可观测性数据管道的测试策略全景 【免费下载链接】vector A high-performance observability data pipeline. 项目地址: https://gitcode.com/GitHub_Trending/vect/vector 本篇技术指南以 Vector 项目团队撰写的《How we test Vector…

2026/9/13 20:58:55 阅读更多 →
machine-learning-for-trading 第 21 章实战:用强化学习解决执行、做市与对冲的顺序决策问题

machine-learning-for-trading 第 21 章实战:用强化学习解决执行、做市与对冲的顺序决策问题

machine-learning-for-trading 第 21 章实战:用强化学习解决执行、做市与对冲的顺序决策问题 【免费下载链接】machine-learning-for-trading Code for Machine Learning for Trading, 3rd edition — from data sourcing to live execution. 项目地址: https://g…

2026/9/13 20:58:55 阅读更多 →
OmniRoute 弹性网关开发指南:请求管线、三层故障隔离机制与代码库扩展实践

OmniRoute 弹性网关开发指南:请求管线、三层故障隔离机制与代码库扩展实践

OmniRoute 弹性网关开发指南:请求管线、三层故障隔离机制与代码库扩展实践 【免费下载链接】OmniRoute Never stop coding. Free MIT AI gateway: one endpoint, 352 providers (150 free), 1200 models Kimi, Claude, GPT, Gemini, GLM, DeepSeek, MiniMax. Works …

2026/9/13 20:58:55 阅读更多 →
Gemini API 安全设置与 Responsible AI 实战:使用 Safety Settings 精确控制内容过滤阈值

Gemini API 安全设置与 Responsible AI 实战:使用 Safety Settings 精确控制内容过滤阈值

Gemini API 安全设置与 Responsible AI 实战:使用 Safety Settings 精确控制内容过滤阈值 【免费下载链接】skills Agent Skills for Google products and technologies 项目地址: https://gitcode.com/GitHub_Trending/skills29/skills 本篇技术指南聚焦于 …

2026/9/13 20:58:55 阅读更多 →
开源思维导图 Simple Mind Map:5分钟跑通,结构随时切换

开源思维导图 Simple Mind Map:5分钟跑通,结构随时切换

开源思维导图 Simple Mind Map:5分钟跑通,结构随时切换 【免费下载链接】mind-map SimpleMindMap(思绪思维导图):一个强大的思维导图。A powerful mind map. 项目地址: https://gitcode.com/GitHub_Trending/mi/mind…

2026/9/13 20:57:54 阅读更多 →

日新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/13 0:00:24 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/13 0:00:24 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/13 0:00:24 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/13 0:00:24 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/13 0:00:24 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/13 0:00:24 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/13 16:51:11 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/12 18:29:34 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/12 19:02:44 阅读更多 →