物联网开发进阶:从AT指令到完整技术栈的实战指南
很多刚接触物联网开发的同学往往停留在买模块-发AT指令-收数据的初级阶段认为物联网开发就是串口调试助手的简单操作。实际上这只是物联网技术栈的冰山一角。本文将带你从AT指令的基础使用出发深入探讨物联网开发的完整技术体系包括硬件选型、通信协议、云端对接、数据安全等关键环节。1. AT指令与串口通信基础1.1 AT指令的本质与作用AT指令Attention Command最初由贺氏公司Hayes为调制解调器设计现已成为各种通信模块的通用控制协议。其核心作用是让主控MCU通过简单的文本命令控制通信模块实现网络连接、数据传输等功能。AT指令的基本格式为AT命令[参数]\r\n例如查询模块版本的指令ATCGMR\r\n模块响应格式通常为响应数据\r\nOK\r\n1.2 串口通信参数配置串口通信是AT指令传输的物理基础正确配置串口参数至关重要// 典型的串口配置参数 波特率115200 数据位8位 停止位1位 校验位无 流控制无在实际项目中串口配置错误是导致AT指令通信失败的最常见原因。建议在代码中实现串口参数的可配置性typedef struct { uint32_t baud_rate; uint8_t data_bits; uint8_t stop_bits; uint8_t parity; uint8_t flow_control; } uart_config_t; // 初始化串口配置 uart_config_t config { .baud_rate 115200, .data_bits 8, .stop_bits 1, .parity 0, // 0:无校验, 1:奇校验, 2:偶校验 .flow_control 0 // 0:无流控, 1:RTS/CTS };2. 物联网通信模块的深度使用2.1 模块初始化流程详解单纯的AT指令测试只是开始完整的模块初始化包含多个关键步骤// 模块初始化状态机 typedef enum { MODULE_STATE_POWER_ON, MODULE_STATE_AT_TEST, MODULE_STATE_ECHO_OFF, MODULE_STATE_SIM_CHECK, MODULE_STATE_SIGNAL_CHECK, MODULE_STATE_NETWORK_REG, MODULE_STATE_GPRS_ACT, MODULE_STATE_READY } module_state_t; int module_init_sequence(void) { // 1. 发送AT测试指令 if (at_send_command(AT, OK, 3000) ! 0) { return -1; // 模块无响应 } // 2. 关闭回显 if (at_send_command(ATE0, OK, 1000) ! 0) { return -2; // 回显设置失败 } // 3. 检查SIM卡状态 if (at_send_command(ATCPIN?, CPIN: READY, 5000) ! 0) { return -3; // SIM卡异常 } // 4. 检查信号强度 if (at_send_command(ATCSQ, CSQ:, 3000) ! 0) { return -4; // 信号查询失败 } // 5. 网络注册检查 if (at_send_command(ATCREG?, CREG: 0,1, 10000) ! 0) { return -5; // 网络注册失败 } return 0; // 初始化成功 }2.2 网络连接与数据通信以MQTT协议为例展示如何通过AT指令建立安全的云端连接// MQTT连接配置流程 int mqtt_connect_sequence(const char *host, uint16_t port, const char *client_id, const char *username, const char *password) { // 1. 配置SSL/TLS参数 at_send_command(ATQSSLCFG\sslversion\,1,1, OK, 2000); at_send_command(ATQSSLCFG\ciphersuite\,1,0X0035, OK, 2000); // 2. 打开MQTT连接 char cmd[256]; snprintf(cmd, sizeof(cmd), ATQMTOPEN0,\%s\,%d, host, port); if (at_send_command(cmd, QMTOPEN: 0,0, 30000) ! 0) { return -1; // 连接超时 } // 3. MQTT连接认证 snprintf(cmd, sizeof(cmd), ATQMTCONN0,\%s\,\%s\,\%s\, client_id, username, password); if (at_send_command(cmd, QMTCONN: 0,0,0, 15000) ! 0) { return -2; // 认证失败 } return 0; }3. 物联网协议栈深度解析3.1 MQTT协议在物联网中的应用MQTTMessage Queuing Telemetry Transport是物联网领域最流行的轻量级消息协议其优势在于低带宽消耗头部最小仅2字节支持QoS等级确保消息可靠传输遗嘱消息设备异常离线时通知服务器主题订阅灵活的发布-订阅模式// MQTT消息发布示例 int mqtt_publish_message(const char *topic, const char *payload, int qos) { char cmd[512]; int payload_len strlen(payload); // 发送发布指令 snprintf(cmd, sizeof(cmd), ATQMTPUBEX0,0,%d,0,\%s\,%d, qos, topic, payload_len); if (at_send_command(cmd, , 5000) ! 0) { return -1; } // 发送消息内容 if (at_send_data(payload, payload_len, QMTPUBEX: 0,0,0, 10000) ! 0) { return -2; } return 0; }3.2 CoAP协议与HTTP协议的对比除了MQTTCoAPConstrained Application Protocol也是物联网常用协议特性MQTTCoAPHTTP传输层TCPUDPTCP消息大小可变小大功耗中等低高适用场景设备到云设备到设备浏览器到服务器4. 硬件设计与电源管理4.1 物联网硬件架构设计完整的物联网设备包含多个核心组件┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ 传感器模块 │ │ 主控MCU │ │ 通信模块 │ │ (温湿度等) │◄──►│ (STM32等) │◄──►│ (4G/NB-IoT) │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ └──────────────────────┼──────────────────────┘ │ ┌──────▼──────┐ │ 电源管理 │ │ 电路 │ └─────────────┘4.2 低功耗设计策略物联网设备往往需要长时间电池供电低功耗设计至关重要// 电源状态管理 typedef enum { POWER_MODE_ACTIVE, // 全功率运行 POWER_MODE_IDLE, // 空闲状态 POWER_MODE_SLEEP, // 浅睡眠 POWER_MODE_DEEP_SLEEP, // 深睡眠 POWER_MODE_OFF // 关机 } power_mode_t; void enter_low_power_mode(power_mode_t mode) { switch (mode) { case POWER_MODE_IDLE: // 关闭外设时钟保持CPU运行 __HAL_RCC_GPIOA_CLK_DISABLE(); HAL_SuspendTick(); HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI); break; case POWER_MODE_DEEP_SLEEP: // 保存关键数据到RTC备份寄存器 save_context_to_rtc(); // 配置唤醒源 HAL_RTCEx_SetWakeUpTimer_IT(hrtc, 0xFFFF, RTC_WAKEUPCLOCK_RTCCLK_DIV16); // 进入停机模式 HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); // 唤醒后系统复位从RTC恢复上下文 restore_context_from_rtc(); break; } }5. 云端平台对接实战5.1 阿里云物联网平台接入基于搜索内容中的阿里云示例我们实现完整的设备接入流程// 设备认证信息配置 typedef struct { char product_key[32]; char device_name[32]; char device_secret[64]; char instance_id[32]; } device_auth_t; // MQTT连接字符串生成 int generate_mqtt_connect_str(device_auth_t *auth, char *output, int max_len) { // 生成时间戳和签名 uint64_t timestamp get_timestamp_ms(); char client_id[128]; char username[256]; char password[128]; // 生成客户端ID snprintf(client_id, sizeof(client_id), %s.%s|timestamp%llu,_vsdk-c-1.0.0, auth-device_name, auth-product_key, timestamp); // 生成用户名 snprintf(username, sizeof(username), %s%s, auth-device_name, auth-product_key); // 使用device_secret生成密码HMAC-SHA256 generate_password(auth, timestamp, password, sizeof(password)); // 生成完整的MQTT连接指令 return snprintf(output, max_len, ATQMTCONN0,\%s\,\%s\,\%s\, client_id, username, password); }5.2 物模型数据上传物联网平台通常使用物模型Thing Model来定义设备能力// 物模型数据格式示例 { id: 123, version: 1.0, params: { Temperature: 25.6, Humidity: 60.2, LightSwitch: 1, BatteryLevel: 85 }, method: thing.event.property.post }对应的C语言数据结构typedef struct { float temperature; float humidity; uint8_t light_switch; uint8_t battery_level; } device_properties_t; int upload_property_data(device_properties_t *props) { cJSON *root cJSON_CreateObject(); cJSON_AddStringToObject(root, id, 1); cJSON_AddStringToObject(root, version, 1.0); cJSON *params cJSON_CreateObject(); cJSON_AddNumberToObject(params, Temperature, props-temperature); cJSON_AddNumberToObject(params, Humidity, props-humidity); cJSON_AddNumberToObject(params, LightSwitch, props-light_switch); cJSON_AddNumberToObject(params, BatteryLevel, props-battery_level); cJSON_AddItemToObject(root, params, params); cJSON_AddStringToObject(root, method, thing.event.property.post); char *json_str cJSON_PrintUnformatted(root); int result mqtt_publish_message(/sys/xxx/xxx/thing/event/property/post, json_str, 0); cJSON_free(json_str); cJSON_Delete(root); return result; }6. 固件升级与版本管理6.1 OTA固件升级实现OTAOver-The-Air升级是物联网设备的核心功能// OTA升级状态机 typedef enum { OTA_STATE_IDLE, OTA_STATE_CHECK_VERSION, OTA_STATE_DOWNLOADING, OTA_STATE_VERIFYING, OTA_STATE_READY_TO_UPDATE, OTA_STATE_UPDATING, OTA_STATE_SUCCESS, OTA_STATE_FAILED } ota_state_t; // 固件下载处理 int firmware_download_handler(const char *firmware_url, uint32_t expected_size, const char *md5_checksum) { // 1. 检查存储空间 if (get_free_flash_space() expected_size) { return -1; // 空间不足 } // 2. 分块下载固件 uint32_t downloaded_size 0; uint32_t block_size 4096; // 4KB块大小 while (downloaded_size expected_size) { uint32_t current_block downloaded_size / block_size; uint32_t offset current_block * block_size; uint32_t size_to_download (expected_size - downloaded_size) block_size ? block_size : (expected_size - downloaded_size); // 下载数据块 if (download_firmware_block(firmware_url, offset, size_to_download, current_block) ! 0) { return -2; // 下载失败 } downloaded_size size_to_download; update_download_progress(downloaded_size * 100 / expected_size); } // 3. 验证固件完整性 if (verify_firmware_md5(md5_checksum) ! 0) { return -3; // 校验失败 } return 0; }6.2 版本回滚机制安全的OTA升级必须包含回滚机制// 双系统备份设计 typedef struct { uint32_t magic_number; uint32_t version; uint32_t size; uint32_t crc32; uint8_t reserved[16]; } firmware_header_t; // 系统启动选择 int select_boot_partition(void) { firmware_header_t *active_header (firmware_header_t*)ACTIVE_PARTITION_ADDR; firmware_header_t *backup_header (firmware_header_t*)BACKUP_PARTITION_ADDR; // 检查主分区有效性 if (active_header-magic_number FIRMWARE_MAGIC calculate_crc32(active_header, active_header-size) active_header-crc32) { return 0; // 使用主分区 } // 主分区无效使用备份分区 if (backup_header-magic_number FIRMWARE_MAGIC calculate_crc32(backup_header, backup_header-size) backup_header-crc32) { copy_firmware(BACKUP_PARTITION_ADDR, ACTIVE_PARTITION_ADDR, backup_header-size); return 0; } return -1; // 两个分区都无效 }7. 数据安全与通信加密7.1 TLS/SSL安全通信物联网设备通信必须保证安全性// TLS证书管理 int setup_tls_connection(void) { // 1. 加载根证书 if (load_ca_certificate(UFS:cacert.pem) ! 0) { return -1; } // 2. 配置SSL版本和密码套件 at_send_command(ATQSSLCFG\sslversion\,1,1, OK, 2000); at_send_command(ATQSSLCFG\ciphersuite\,1,0x0035, OK, 2000); at_send_command(ATQSSLCFG\seclevel\,1,1, OK, 2000); // 3. 启用SSL/TLS at_send_command(ATQMTCFG\SSL\,0,1,1, OK, 2000); return 0; } // 证书存储实现 int store_ca_certificate(const char *cert_data, uint32_t cert_len) { // 创建证书文件 if (at_send_command(ATQFOPEN\cacert.pem\,1,1, QFOPEN: 1, 3000) ! 0) { return -1; } // 分块写入证书数据 uint32_t written 0; while (written cert_len) { uint32_t chunk_size (cert_len - written) 1280 ? 1280 : (cert_len - written); char cmd[64]; snprintf(cmd, sizeof(cmd), ATQFWRITE1,%d, chunk_size); if (at_send_command(cmd, CONNECT, 3000) ! 0) { return -2; } // 发送证书数据块 if (at_send_data(cert_data written, chunk_size, QFWRITE:, 5000) ! 0) { return -3; } written chunk_size; } // 关闭文件 at_send_command(ATQFCLOSE1, OK, 2000); return 0; }7.2 数据加密与签名敏感数据在传输前应进行加密// AES加密实现 int aes_encrypt_data(const uint8_t *plaintext, uint32_t plaintext_len, const uint8_t *key, const uint8_t *iv, uint8_t *ciphertext, uint32_t *ciphertext_len) { mbedtls_aes_context aes; mbedtls_aes_init(aes); // 设置加密密钥 if (mbedtls_aes_setkey_enc(aes, key, 256) ! 0) { return -1; } // CBC模式加密 uint8_t iv_copy[16]; memcpy(iv_copy, iv, 16); if (mbedtls_aes_crypt_cbc(aes, MBEDTLS_AES_ENCRYPT, plaintext_len, iv_copy, plaintext, ciphertext) ! 0) { return -2; } *ciphertext_len plaintext_len; mbedtls_aes_free(aes); return 0; } // HMAC-SHA256签名 int generate_hmac_sha256(const uint8_t *data, uint32_t data_len, const uint8_t *key, uint32_t key_len, uint8_t *digest) { mbedtls_md_context_t ctx; mbedtls_md_init(ctx); // 设置HMAC-SHA256 if (mbedtls_md_setup(ctx, mbedtls_md_info_from_type(MBEDTLS_MD_SHA256), 1) ! 0) { return -1; } // 计算HMAC if (mbedtls_md_hmac_starts(ctx, key, key_len) ! 0 || mbedtls_md_hmac_update(ctx, data, data_len) ! 0 || mbedtls_md_hmac_finish(ctx, digest) ! 0) { return -2; } mbedtls_md_free(ctx); return 0; }8. 设备管理与远程调试8.1 设备状态监控完善的设备管理需要实时状态监控// 设备健康状态上报 typedef struct { uint32_t timestamp; int8_t signal_strength; uint8_t battery_level; float cpu_usage; uint32_t free_heap; uint32_t uptime; uint32_t reset_reason; } device_status_t; int report_device_status(device_status_t *status) { cJSON *root cJSON_CreateObject(); cJSON_AddNumberToObject(root, timestamp, status-timestamp); cJSON_AddNumberToObject(root, signalStrength, status-signal_strength); cJSON_AddNumberToObject(root, batteryLevel, status-battery_level); cJSON_AddNumberToObject(root, cpuUsage, status-cpu_usage); cJSON_AddNumberToObject(root, freeHeap, status-free_heap); cJSON_AddNumberToObject(root, uptime, status-uptime); cJSON_AddNumberToObject(root, resetReason, status-reset_reason); char *json_str cJSON_PrintUnformatted(root); int result mqtt_publish_message(/sys/xxx/xxx/thing/event/status/post, json_str, 1); // QoS 1确保送达 cJSON_free(json_str); cJSON_Delete(root); return result; }8.2 远程日志收集远程调试能力对问题排查至关重要// 分级日志系统 typedef enum { LOG_LEVEL_ERROR, LOG_LEVEL_WARNING, LOG_LEVEL_INFO, LOG_LEVEL_DEBUG, LOG_LEVEL_VERBOSE } log_level_t; void remote_log(log_level_t level, const char *tag, const char *format, ...) { // 本地存储日志 va_list args; va_start(args, format); vprintf(format, args); va_end(args); // 根据级别决定是否远程上报 if (level LOG_LEVEL_WARNING) { char log_buffer[512]; va_start(args, format); vsnprintf(log_buffer, sizeof(log_buffer), format, args); va_end(args); // 异步发送到云端 send_log_to_cloud(level, tag, log_buffer); } } // 日志上传实现 int send_log_to_cloud(log_level_t level, const char *tag, const char *message) { cJSON *log_entry cJSON_CreateObject(); cJSON_AddNumberToObject(log_entry, level, level); cJSON_AddStringToObject(log_entry, tag, tag); cJSON_AddStringToObject(log_entry, message, message); cJSON_AddNumberToObject(log_entry, timestamp, get_timestamp_ms()); char *json_str cJSON_PrintUnformatted(log_entry); int result mqtt_publish_message(/sys/xxx/xxx/thing/event/log/post, json_str, 0); cJSON_free(json_str); cJSON_Delete(log_entry); return result; }9. 实战案例智能环境监测系统9.1 系统架构设计综合运用上述技术构建完整的物联网应用// 主应用状态机 typedef enum { APP_STATE_INIT, APP_STATE_CONNECTING, APP_STATE_MEASURING, APP_STATE_REPORTING, APP_STATE_IDLE, APP_STATE_ERROR } app_state_t; // 主循环处理 void application_main_loop(void) { static app_state_t current_state APP_STATE_INIT; static uint32_t last_report_time 0; static uint32_t last_measure_time 0; while (1) { switch (current_state) { case APP_STATE_INIT: if (hardware_init() 0 communication_module_init() 0) { current_state APP_STATE_CONNECTING; } else { current_state APP_STATE_ERROR; } break; case APP_STATE_CONNECTING: if (connect_to_cloud() 0) { current_state APP_STATE_MEASURING; } else { HAL_Delay(5000); // 5秒后重试 } break; case APP_STATE_MEASURING: if (get_timestamp_ms() - last_measure_time MEASURE_INTERVAL) { read_sensor_data(); last_measure_time get_timestamp_ms(); current_state APP_STATE_REPORTING; } break; case APP_STATE_REPORTING: if (report_sensor_data() 0) { current_state APP_STATE_IDLE; last_report_time get_timestamp_ms(); } break; case APP_STATE_IDLE: if (get_timestamp_ms() - last_report_time REPORT_INTERVAL) { current_state APP_STATE_MEASURING; } else { enter_low_power_mode(POWER_MODE_IDLE); } break; case APP_STATE_ERROR: handle_error_state(); break; } HAL_Delay(100); // 主循环延迟 } }9.2 传感器数据采集与处理多传感器数据融合处理// 传感器数据结构 typedef struct { float temperature; float humidity; float pressure; float light_intensity; uint16_t air_quality; uint32_t timestamp; } sensor_data_t; // 数据滤波算法 void filter_sensor_data(sensor_data_t *raw_data, sensor_data_t *filtered_data) { static sensor_data_t history[FILTER_WINDOW_SIZE]; static uint8_t index 0; // 保存当前数据到历史窗口 history[index] *raw_data; index (index 1) % FILTER_WINDOW_SIZE; // 移动平均滤波 float temp_sum 0, hum_sum 0, press_sum 0, light_sum 0; uint32_t aq_sum 0; uint8_t valid_count 0; for (int i 0; i FILTER_WINDOW_SIZE; i) { if (history[i].timestamp ! 0) { // 有效数据 temp_sum history[i].temperature; hum_sum history[i].humidity; press_sum history[i].pressure; light_sum history[i].light_intensity; aq_sum history[i].air_quality; valid_count; } } if (valid_count 0) { filtered_data-temperature temp_sum / valid_count; filtered_data-humidity hum_sum / valid_count; filtered_data-pressure press_sum / valid_count; filtered_data-light_intensity light_sum / valid_count; filtered_data-air_quality aq_sum / valid_count; filtered_data-timestamp raw_data-timestamp; } } // 异常数据检测 int detect_sensor_anomaly(sensor_data_t *data) { // 温度范围检查 if (data-temperature -40.0 ||>// 内存池管理 #define MEMORY_POOL_SIZE 4096 static uint8_t memory_pool[MEMORY_POOL_SIZE]; static uint32_t memory_used 0; void* iot_malloc(uint32_t size) { if (memory_used size MEMORY_POOL_SIZE) { return NULL; // 内存不足 } void *ptr memory_pool[memory_used]; memory_used size; return ptr; } void iot_free_all(void) { memory_used 0; // 简单实现实际项目需要更复杂的管理 } // 字符串处理优化 char* iot_strdup(const char *str) { if (str NULL) return NULL; uint32_t len strlen(str) 1; char *new_str iot_malloc(len); if (new_str) { memcpy(new_str, str, len); } return new_str; }10.2 通信可靠性保障确保数据在不可靠网络环境下的可靠传输// 重传机制实现 typedef struct { uint16_t message_id; uint32_t timestamp; uint8_t retry_count; char *topic; char *payload; uint8_t qos; } pending_message_t; #define MAX_PENDING_MESSAGES 10 static pending_message_t pending_queue[MAX_PENDING_MESSAGES]; static uint8_t queue_head 0, queue_tail 0; int enqueue_message(const char *topic, const char *payload, uint8_t qos) { if ((queue_tail 1) % MAX_PENDING_MESSAGES queue_head) { return -1; // 队列满 } pending_message_t *msg pending_queue[queue_tail]; msg-message_id generate_message_id(); msg-timestamp get_timestamp_ms(); msg-retry_count 0; msg-topic iot_strdup(topic); msg-payload iot_strdup(payload); msg-qos qos; queue_tail (queue_tail 1) % MAX_PENDING_MESSAGES; return 0; } // 重传处理线程 void retry_handler_thread(void *argument) { while (1) { if (queue_head ! queue_tail) { pending_message_t *msg pending_queue[queue_head]; uint32_t current_time get_timestamp_ms(); if (current_time - msg-timestamp RETRY_INTERVAL) { if (msg-retry_count MAX_RETRY_COUNT) { // 重新发送消息 if (mqtt_publish_message(msg-topic, msg-payload, msg-qos) 0) { msg-timestamp current_time; msg-retry_count; } } else { // 重试次数超限丢弃消息 iot_free(msg-topic); iot_free(msg-payload); queue_head (queue_head 1) % MAX_PENDING_MESSAGES; } } } HAL_Delay(1000); // 每秒检查一次 } }物联网开发远不止简单的AT指令操作而是涉及硬件设计、通信协议、云端对接、安全加密、固件管理等多个技术领域的综合工程。通过本文的完整技术体系介绍希望能帮助开发者建立全面的物联网开发视角从模块操作员成长为真正的物联网系统架构师。在实际项目开发中建议根据具体需求选择合适的技术方案平衡性能、成本和开发复杂度。同时要重视代码的可维护性和系统的可靠性为产品的长期稳定运行打下坚实基础。

相关新闻

知识蒸馏技术解析:从模型压缩原理到工程实践部署

知识蒸馏技术解析:从模型压缩原理到工程实践部署

知识蒸馏作为模型压缩和加速的重要技术,近年来在工业界和学术界都获得了广泛应用。但围绕其技术细节、性能边界和开源实现的讨论,常常因信息不透明而产生争议。本文将从公开技术信息出发,系统梳理知识蒸馏的核心原理、主流框架、硬件部署方案…

2026/7/26 17:19:11 阅读更多 →
如何用25美元DIY智能眼镜?OpenGlass开源项目完全指南

如何用25美元DIY智能眼镜?OpenGlass开源项目完全指南

如何用25美元DIY智能眼镜?OpenGlass开源项目完全指南 【免费下载链接】OpenGlass Turn any glasses into AI-powered smart glasses 项目地址: https://gitcode.com/GitHub_Trending/op/OpenGlass 想象一下,当你走在街上,眼镜不仅能矫…

2026/7/26 17:19:11 阅读更多 →
阿里千问输入法macOS版上线:语音输入与AI润色技术解析

阿里千问输入法macOS版上线:语音输入与AI润色技术解析

阿里千问输入法 macOS 版正式上线,这款由阿里推出的 AI 输入工具主打语音输入和智能润色能力。根据官方信息,它支持最快 300 字/分钟的语音输入速度,能够将口语实时转换为工整文字,并具备 AI 自动润色功能。目前 macOS 版已发布&a…

2026/7/26 17:19:11 阅读更多 →

最新新闻

jmeter CSV 数据文件设置

jmeter CSV 数据文件设置

创建一个CSV数据文件:使用任何文本编辑器创建一个CSV文件,将测试数据按照逗号分隔的格式写入文件中。例如: room_id,arrival_date,depature_date,bussiness_date,order_status,order_child_room_id,guest_name,room_price 20032,2023-8-9 14:…

2026/7/26 17:38:22 阅读更多 →
MySQL学习笔记(八)—— 锁

MySQL学习笔记(八)—— 锁

首先要说明,有的锁是我们自己想加的时候加的,比如全局锁要靠我们自己用命令去加。而有的锁是mysql默认就给你加上了,因为mysql要保证自己最起码的安全性。 一篇完美的文章:滴滴面试:明明 mysql 加的是 行锁&#xff0…

2026/7/26 17:38:22 阅读更多 →
如何用5分钟拯救你即将消失的珍藏小说?novel-downloader终极解决方案

如何用5分钟拯救你即将消失的珍藏小说?novel-downloader终极解决方案

如何用5分钟拯救你即将消失的珍藏小说?novel-downloader终极解决方案 【免费下载链接】novel-downloader 一个可扩展的通用型小说下载器。 项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader 在这个数字内容瞬息万变的时代,你是否曾…

2026/7/26 17:38:22 阅读更多 →
Wordpress博客Argon主题美化

Wordpress博客Argon主题美化

目录 前言 Agron主题 鼠标点击特效 动态背景 看板娘插件 左侧栏头像自动缩放、高亮 / 暗 音乐播放插件 登录页面插件 菜单顶部标题前的图标设置 菜单顶部标题前的图标设置 雪花飘落的特效 背景透明特效 全局字体设置 标题缩放特效 总结 前言 常言道&#xff1a…

2026/7/26 17:38:22 阅读更多 →
如何高效使用Python大麦网自动抢票工具:实战配置与优化指南

如何高效使用Python大麦网自动抢票工具:实战配置与优化指南

如何高效使用Python大麦网自动抢票工具:实战配置与优化指南 【免费下载链接】Automatic_ticket_purchase 大麦网抢票脚本 项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase 大麦网自动抢票工具是一个基于Python开发的自动化购票…

2026/7/26 17:38:22 阅读更多 →
Cursor Free VIP:破解AI编程助手限制的智能解决方案

Cursor Free VIP:破解AI编程助手限制的智能解决方案

Cursor Free VIP:破解AI编程助手限制的智能解决方案 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your trial…

2026/7/26 17:37:18 阅读更多 →

日新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/26 0:00:31 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/26 0:00:31 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/26 0:00:31 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/26 0:00:31 阅读更多 →

月新闻