esp-iot-solution 的 USB Device 解决方案全景:从 UAC/UVC 到 HID、MSC 与扩展屏
esp-iot-solution 的 USB Device 解决方案全景从 UAC/UVC 到 HID、MSC 与扩展屏【免费下载链接】esp-iot-solutionEspressif IoT Library. IoT Device Drivers, Documentations and Solutions.项目地址: https://gitcode.com/GitHub_Trending/es/esp-iot-solutionESP32-S2/S3/P4 等芯片内置 USB-OTG 外设可运行 USB Device 模式配合 TinyUSB 协议栈与各类设备类驱动将乐鑫 SoC 变身为音频设备、摄像头、U 盘、键鼠、虚拟显示器等标准 USB 外设。本文基于 docs/en/usb/usb_overview/usb_device_solutions.rst 展开逐一解析 UAC、UVC、MSC、HID、UF2 拖拽 OTA 与 USB 扩展屏六大方案的特性、硬件前提与仓库内对应的可运行示例并结合组件源码esp_device_uac、usb_device_uvc、esp_tinyuf2等说明底层原理与配置要点。读完本文你将能够在 esp-iot-solution 中按场景选择并落地你自己的 USB 设备应用。USB-OTG 外设与设备模式基础USB-OTG 是上述所有 USB Device 解决方案的共同硬件底座。ESP32-S2/S3/P4 等芯片内置 USB 控制器与 USB PHY通过一根 USB 线连接 PC 即可同时支持 USB Host 与 USB Device 功能详见 usb_otg.rst。ESP32-S2/S3 的 USB-OTG 为Full Speed12 Mbps而 ESP32-P4 支持High Speed480 Mbps。由于校验与同步机制的开销实际有效速率低于总线速率且随传输类型不同而不同。Full Speed 下各传输类型的理论有效速率如下表摘自 usb_otg.rst传输类型ControlInterruptBulkIsochronous典型应用场景设备初始化与管理鼠标、键盘打印机、批量存储音视频流每毫秒传输包数*1191最大传输大小64 Bytes64 Bytes64 Bytes~512 Bytes理论有效速率*64000 Bytes/s1216000 Bytes/s512000 Bytes/sHigh SpeedESP32-P4下速率显著提升Bulk 最大包 512 Bytes、每微帧 13 包理论有效速率约 53248000 Bytes/sIsochronous 最大包 1024 Bytes、每微帧 7 包约 57344000 Bytes/susb_otg.rst。速率公式为Transfer Rate 最大包大小 × 每微帧包数 × 8000。在设备开发层面乐鑫官方适配了开源TinyUSB协议栈开发者可基于 TinyUSB 开发 HID、MSC、CDC、ECM、UAC、UVC 等标准设备或自定义设备。TinyUSB 组件在仓库中有两种形态tinyusb_guide.rstesp_tinyusb对 TinyUSB API 的一层封装通过idf.py add-dependency esp_tinyusb~1.0.0引入适合快速集成 CDC-ACM、MSC、MIDI、HID、DFU、ECM/NCM/RNDIS 等类简单但对底层定制不灵活espressif/tinyusb将上游 TinyUSB 仓库源码直接组件化需要tusb_config.h、usb_descriptor.h、usb_descriptors.c自定义灵活度更高适合复杂 USB 应用要求 ESP-IDF release/v5.0 及以上。esp-iot-solution 中的usb_device_uac、usb_device_uvc等组件即是在 TinyUSB 之上二次封装的设备类驱动对应仓库目录为 components/usb含 esp_msc_ota、esp_tinyuf2、iot_usbh、usb_device_uac、usb_device_uvc、usb_stream 等。USB Audio 设备方案UAC 2.0USB 音频设备方案基于UAC 2.0USB Audio Class协议标准让乐鑫 SoC 充当麦克风或扬声器等音频外设通过 USB 与电脑或其他 USB 音频设备进行音频输入/输出。组件与特性仓库中对应的驱动组件为esp_device_uac使用方式见 usb_device_uac.rst核心特性包括默认支持ISO FeedBack 通信接口根据 UAC FIFO 剩余量自动与主机同步避免时钟漂移可自定义采样率、麦克风声道数与扬声器声道数扬声器数据到达时先缓冲一段数据再发送降低音频数据传输中断的频率。从协议角度UAC 只支持同步Isochronous传输因此没有重传机制、延迟低但主机与设备间时钟异步可能导致短暂静音或爆音需通过同步方法解决tinyusb_guide.rstSYNC 同步将输出时钟与每帧 SOF 包同步Adaptive 自适应根据主机的数据传输速率调整输出采样率ASYNC 异步增加反馈端点Feedback Endpoint设备根据当前速率告知主机后续传输速率完成数据多传/少传。启用CFG_TUD_AUDIO_ENABLE_FEEDBACK_EP宏可启用反馈速率计算TinyUSB 提供多种反馈计算方法其中基于 FIFO 计数的AUDIO_FEEDBACK_METHOD_FIFO_COUNT最简单实用需实现tud_audio_feedback_params_cb回调设置feedback_param-method与feedback_param-sample_freq。其原理是 UAC Class 维护一个大小为CFG_TUD_AUDIO_FUNC_1_EP_OUT_SW_BUF_SZ的软件 FIFO建议设置为 10ms 数据量驱动通过反馈端点将 FIFO 水位维持在容量一半数据缺失时主机多发一个包数据过剩时主机少发。实际应用中建议每次新的音频传输开始时先缓冲半个 FIFO 的数据再开始播放例如超过 100ms 无数据视为新传输保证 I2S 始终有数据可取避免爆音。关键配置与 API组件关键配置宏可在 menuconfig 中调整CONFIG_UAC_MIC_INTERVAL_MS麦克风回调读取的音频数据长度。例如设为 10ms、采样率 48000Hz、16bit、单声道时每次读取长度 10ms × 48000Hz / 1000 × 2 bytes 960 bytesUAC_SPK_INTERVAL_MS扬声器首次写入的数据长度默认 10ms后续写入按约 1ms 数据长度传输以降低传输中断频率UAC_SPK_NEW_PLAY_INTERVAL判断到达音频是否为“新音频”若是则先缓冲一段再传输UAC_SUPPORT_MACOS支持 macOS但启用后可能导致 Windows 无法识别设备。配置回调的 API 形式如下usb_device_uac.rstuac_device_config_t config { .output_cb uac_device_output_cb, // Speaker output callback .input_cb uac_device_input_cb, // Microphone input callback .set_mute_cb uac_device_set_mute_cb, // Set mute callback .set_volume_cb uac_device_set_volume_cb, // Set volume callback .cb_ctx NULL, }; uac_device_init(config);可运行示例仓库示例 examples/usb/device/usb_uac 演示了完整流程入口 usb_uac_main.capp_main中先初始化编解码器并设置采样率bsp_extra_codec_set_fs(CONFIG_UAC_SAMPLE_RATE, CONFIG_UAC_BYTES_PER_SAMPLE * 8, CONFIG_UAC_SPEAKER_CHANNEL_NUM)再注册四个回调并调用uac_device_inituac_device_output_cb将主机发来的音频写入 I2S 播放bsp_extra_i2s_writeuac_device_input_cb从 I2S 读取麦克风数据bsp_extra_i2s_readuac_device_set_mute_cb/uac_device_set_volume_cb将主机设置的静音/音量转发给 codecbsp_extra_codec_mute_set/bsp_extra_codec_volume_set。硬件前提任意带 USB 接口的 ESP32-S2/S3/P4 开发板即可。仓库还提供sdkconfig.defaults.esp32s3与sdkconfig.defaults.esp32p4两套针对不同芯片的默认配置。USB Video 设备方案UVC 1.5USB 视频设备方案基于UVCUSB Video Class1.5协议标准让 SoC 作为视频设备向 USB 主机输出视频流典型应用是 USB 门铃摄像头、USB Wi-Fi 双模网络摄像头见 usb_device_uvc.rst。组件特性与传输方式对应驱动组件usb_device_uvc面向 ESP32-S2/S3/P4特性包括通过 UVC Stream 接口传输视频流同时支持Isochronous与Bulk两种传输模式支持多种分辨率与帧率通过回调函数可将任意摄像头包装成标准 UVC 设备。UVC 可传输的格式由视频描述符中的 Format 与 Frame 定义各格式的描述符取值tinyusb_guide.rst图像类型FormatFrameMJPEGFORMAT_MJPEG: 0x06FRAME_MJPEG: 0x07YUV2 / NV12 / M420 / I420FORMAT_UNCOMPRESSED: 0x04FRAME_UNCOMPRESSED: 0x05H264FORMAT_H264: 0x013FRAME_H264: 0x014H265FORMAT_FRAME_BASED: 0x10FRAME_FRAME_BASED: 0x11其中 Frame-based 格式特殊只要图像逐帧存储如 MJPG、H264、H265即可通过 GUID 字段指示具体格式。视频流接口传输视频时使用等时或批量端点传输静态图片时使用批量端点。针对双摄像头硬件一个物理摄像头对应一个 VCVideo Control描述符其下可挂多个 VSVideo Streaming描述符以支持多种格式双摄像头则需要两个 VC 描述符。使用方式通过组件管理器添加依赖idf.py add-dependency espressif/usb_device_uvc*组件只提供一个配置 API基于 TinyUSB 栈不提供 deinit#include usb_device_uvc.h static esp_err_t camera_start_cb(uvc_format_t format, int width, int height, int rate, void *cb_ctx) { // 在此按 format/width/height/rate 初始化摄像头 return ESP_OK; } static void camera_stop_cb(void *cb_ctx) { /* user code */ } static uvc_fb_t* camera_fb_get_cb(void *cb_ctx) { // 返回一帧图像缓冲摄像头需准备下一帧 return uvc_fb; } static void camera_fb_return_cb(uvc_fb_t *fb, void *cb_ctx) { // 帧缓冲复制到传输缓冲后被归还在此回收 } const size_t buff_size 30 * 1024; uint8_t *uvc_buffer (uint8_t *)heap_caps_malloc(buff_size, MALLOC_CAP_DEFAULT); assert(uvc_buffer ! NULL); uvc_device_config_t config { .uvc_buffer uvc_buffer, .uvc_buffer_size 40 * 1024, .start_cb camera_start_cb, .fb_get_cb camera_fb_get_cb, .fb_return_cb camera_fb_return_cb, .stop_cb camera_stop_cb, .cb_ctx NULL, }; ESP_ERROR_CHECK(uvc_device_config(0, config)); ESP_ERROR_CHECK(uvc_device_init());可运行示例examples/usb/device/usb_webcam 演示将 ESP32-Sx 变成 USB WebCam仅支持 MJPEG 格式支持 UVC 等时/Bulk 双模式。按 README.md 的说明硬件任意带摄像头与 USB 接口的 ESP32-S2/S3 开发板USB 接线为 GPIO19→D-、GPIO20→D通过idf.py menuconfig的USB WebCam config可配置分辨率、帧率与图像质量摄像头引脚可通过Camera Pin Configuration选择默认 ESP32-S3-EYE传输模式选择USB WebCam config → UVC transfer mode可切到 Bulk 模式获得约 2 倍吞吐量。传输模式最大吞吐兼容性Isochronous~512KB/sWindows/Linux/MacOSBulk~1216KB/sWindows/MacOSBulk 模式在部分 Linux 平台可能存在兼容性问题。构建与烧录命令idf.py set-target esp32s3 idf.py build flash monitor运行日志摘自 README.md可看到格式列表MJPEG、帧列表如 1280×72015fps以及Detected OV2640 camera、帧缓冲分配在 PSRAM 等关键信息。仓库还提供 examples/usb/device/usb_dual_uvc_device 演示双 UVC 设备场景。USB 存储设备方案MSC Wi-Fi 无线 U 盘USB 大容量存储方案基于MSCMass Storage Class协议将 SoC 模拟为 U 盘并与 Wi-Fi 结合构建无线共享存储设备如无线 U 盘、读卡器、数字音乐/媒体播放器等。方案特性usb_device_solutions.rstUSB-Wi-Fi 双向访问USB 主机与 Wi-Fi 客户端都可读写同一份存储支持多设备连接可模拟 USB 闪存盘。仓库示例 examples/usb/device/usb_msc_wireless_disk 完整实现了该方案ESP32-Sx 作为 U 盘的同时运行 HTTP 文件服务器支持上传与下载可按 README.md 的步骤体验用 micro USB 线插入主机 USB 口在资源管理器中可见一个1.5MB的磁盘通过 Wi-Fi 连接 ESP32-S2默认 SSIDESP-Wireless-Disk无密码浏览器访问192.168.4.1查看磁盘文件列表拖入磁盘的文件会显示在网页中网页上传的文件也会出现在磁盘中示例中限制文件 20MB。Wi-Fi 配置通过menuconfig → USB MSC Device Demo → Wi-Fi Settings修改 AP/STA 的 SSID 与密码也可在网页的 settings 页面配置。该示例还启用了 FATFS 多代码页支持Component config → FAT Filesystem support → OEM Code Page默认设为Dynamic (all code pages supported)FATFS_CODEPAGE_DYNAMIC编译体积约增加 500kBAPI 编码默认API uses UTF-8 encodingFATFS_API_ENCODING_UTF_8便于网页开发。关于无线传输速率README.md 给出了优化建议强烈推荐带 PSRAM 的芯片特别是 ESP32-S3 配 8MB 及以上 Octal PSRAM。优化手段分三类Wi-Fi 配置优化RAM 影响高增大静态/动态收发缓冲数量、Block ACK 窗口如CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM16、CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM85、CONFIG_ESP_WIFI_TX_BA_WIN32等配置见示例内sdkconfig.defaults.r8TCP/IP 栈优化RAM 影响中-高提高 TCP/IP 任务优先级、启用 LWIP IRAM 优化、增大 TCP 收发窗口与接收邮箱如CONFIG_LWIP_TCP_SND_BUF_DEFAULT65535、CONFIG_LWIP_TCP_WND_DEFAULT65535文件操作缓冲优化RAM 影响高CONFIG_FILE_WRITE_BUFFER_COUNT10、CONFIG_FILE_WRITE_BUFFER_SIZE128、CONFIG_FILE_DMA_BUFFER_SIZE32合计约占用 1312KB RAM。USB HID 设备方案键鼠、Surface Dial 与自定义 HIDUSB HID 方案基于HIDHuman Interface Device协议让 SoC 充当 USB 键盘、鼠标、游戏手柄等人机交互设备结合 Wi-Fi、蓝牙、ESP-Now 等无线能力还可构建无线 HID 设备。特性usb_device_solutions.rst支持多种 HID 设备类型支持自定义 HID 设备同时支持 USB HID 与 BLE HID 两种模式。可运行示例仓库提供三个 HID 相关示例examples/usb/device/usb_hid_deviceHID 键鼠示例。按 README.md支持传统六键键盘模式与全键无冲键盘模式默认按键模拟鼠标通过idf.py menuconfig的USB HID Device Demo → hid class subclass可切换为 keyboard。不同芯片的 USB 引脚接线不同ESP32-S2/S3 为 GPIO20→USB_DP、GPIO19→USB_DMESP32-P4 2.0 为 pin 50/49ESP32-P4 1.1 为 GPIO27/26ESP32-S31 为 pin 44/45。运行日志HID Mouse demo: press button to simulate mouse、Mouse x0 y-8直观展示按键触发鼠标移动examples/usb/device/usb_surface_dialWindows Surface Dial 风格 HID 旋钮设备examples/keyboard自定义键盘完整工程包含 hid_device 组件与主程序 main支持多目标芯片配置见sdkconfig.defaults.esp32h4、sdkconfig.defaults.esp32s3。USB 拖拽式 OTA 升级esp_tinyuf2基于esp_tinyuf2TinyUF2 的乐鑫增强版将设备模拟为虚拟 U 盘支持把 UF2 固件直接拖入 U 盘完成 OTA 升级同时支持将 NVS 数据映射为盘上文件通过修改文件来改写 NVSesp_tinyuf2.rst。核心特性通过虚拟 U 盘进行OTA 升级将 NVS 键值对导出为盘上的ini 文件修改 ini 文件后可写回 NVS。UF2 是微软为 PXT 开发的固件文件格式特别适合通过 MSC 烧录微控制器。硬件前提为 ESP32-S2/S3USB-OTG。在你的项目中启用1. 添加组件依赖idf.py add-dependency esp_tinyuf22. 定制分区表与其它 OTA 方案一致至少保留两个 OTA app 分区# Partition Table Example # Name, Type, SubType, Offset, Size, Flags nvs, data, nvs, , 0x4000, otadata, data, ota, , 0x2000, phy_init, data, phy, , 0x1000, ota_0, app, ota_0, , 1500K, ota_1, app, ota_1, , 1500K,3. menuconfig 配置(Top) → Component config → TinyUF2 Config配置项默认值说明USB Virtual Disk size(MB)8MB资源管理器中虚拟 U 盘大小Max APP size(MB)4MB最大 APP 尺寸Flash cache size(KB)32KB高效写 Flash 的缓存大小USB Device VID0x303A乐鑫 VIDUSB Device PID0x8000乐鑫测试 PIDUSB Disk NameESP32Sx-UF2虚拟盘名称USB Device ManufactureEspressif制造商Product Name / Product IDESP TinyUF2 / 12345678产品信息Product URLhttps://products.espressif.com/盘上 index 文件跳转网页UF2 NVS ini file size-为 NVS 功能预留的 ini 文件大小4. 安装 UF2 OTA / NVS 功能完整示例见 usb_uf2_ota 与 usb_uf2_nvs/* install UF2 OTA */ tinyuf2_ota_config_t ota_config DEFAULT_TINYUF2_OTA_CONFIG(); ota_config.complete_cb uf2_update_complete_cb; ota_config.if_restart false; /* disable auto restart, if false manual restart later */ /* install UF2 NVS */ tinyuf2_nvs_config_t nvs_config DEFAULT_TINYUF2_NVS_CONFIG(); nvs_config.part_name nvs; nvs_config.namespace_name myuf2; nvs_config.modified_cb uf2_nvs_modified_cb; esp_tinyuf2_install(ota_config, nvs_config);5. 生成并拖拽升级首次用idf.py build flash下载此后用idf.py uf2-ota生成新的 UF2 app bin产物为项目目录下的${PROJECT_NAME}.uf2将 UF2 文件拖入虚拟盘即完成升级。NVS 值隐藏与 USB Console启用 menuconfig 中TinyUF2 Config → Enable UF2 ini file hide NVS valueUF2_INI_NVS_VALUE_HIDDEN后ini 文件中的 NVS 值会被加密并替换为****可配合esp_tinyuf2_add_key_hidden(password)对敏感键单独隐藏启用TinyUF2 Config → Enable USB Console For log后日志从 UART 改输出到 USB 串口。将现有 APP 转为 UF2 格式使用uf2conv.py位于 components/usb/esp_tinyuf2/utils/uf2conv.py需指定 family id如ESP32S2、ESP32S3或对应 magic number并用-b 0x00指定地址偏移tinyuf2 会以此作为写入 OTA 分区的偏移uf2conv.py your_firmware.bin -c -b 0x00 -f ESP32S3 # 或 uf2conv.py your_firmware.bin -c -b 0x00 -f 0xc47e5767注意要持续使用 UF2 OTA 功能更新后的 APP 中必须仍然启用 TinyUF2 功能。Bootloader 内嵌 UF2离线升级模式examples/usb/device/bootloader_uf2 演示将带 UF2 功能的专用 APP bin 嵌入 Bootloader可实现factory/test/ota分区无固件时自动进入 UF2 下载模式拉低BOOT_UF2引脚手动进入 UF2 下载模式在用户 APP 中调用esp_restart_from_tinyuf2()进入下载模式。使用要点默认仅支持nvs/phy_init/factory分区拖拽升级默认写入factory分区CONFIG_PARTITION_TABLE_OFFSET默认 0x60000Bootloader 与用户固件须使用相同的 NVS 分区名CONFIG_BOOTLOADER_UF2_NVS_PART_NAME默认 nvs与命名空间CONFIG_BOOTLOADER_UF2_NVS_NAMESPACE_NAME默认 uf2_nvs工作指示 LED 默认 GPIO 为CONFIG_BOOTLOADER_UF2_LED_INDICATOR_GPIO_NUM2。烧录注意bootloader_uf2.bin必须烧录在CONFIG_MMU_PAGE_SIZE整数倍对齐的地址ESP32-S2/S3/P4 默认为 64KB/0x10000需启用CONFIG_ENABLE_BOOTLOADER_UF2与CONFIG_SPI_FLASH_DANGEROUS_WRITE_ALLOWED三个 bin 分别烧到CONFIG_BOOTLOADER_OFFSET_IN_FLASHbootloader.bin、0x10000bootloader_uf2.bin、CONFIG_PARTITION_TABLE_OFFSETpartition-table.bin。也可在项目CMakeLists.txt中添加add_custom_command用esptool merge_bin在编译后自动合并生成merge_uf2.bin参见 esp_tinyuf2.rst。USB 扩展屏方案IDD 虚拟显示器USB 扩展屏方案让设备通过 USB 连接成为一台附加显示器单根 USB 线即可同时承载视频、音频与触摸数据适用于电脑副屏、签名板、扩展显示等场景。硬件前提为 ESP32-S2/S3/P4USB-OTG仓库示例为 examples/usb/device/usb_extend_screen。主机侧驱动与传输机制由于 USB 2.0 不支持 HDMI 传输主机必须把图像数据传输给设备。该方案目前仅支持 Windows 平台利用 Windows 驱动模型IDDIndirect Display Driver驱动从 Windows 捕获桌面图像受 USB 速度限制先压缩为 JPEG 等格式再通过USB vendor interface传输。每帧图像前附加 16 字节头部包含图像宽、高、格式、长度与压缩类型等信息。方案特性支持通过 USB 传输图像支持通过 USB 传输音频支持通过 USB 传输触摸数据。支持的开发板与性能按 README.md 的说明支持 ESP32-S3-LCD-EV-Board、ESP32-P4-Function-EV-Board 与 ESP32-S31-Korvo 开发板刷新率上限如下芯片分辨率/帧率ESP32-P41024×57660FPSESP32-S3800×48013FPSESP32-S31800×48060FPS另支持最多五点触摸输入与音频输入/输出。设备侧构建烧录. ./export.sh idf.py set-target esp32p4 # 或 esp32s3 / esp32s31 idf.py -p PORT flash monitorPC 侧需按示例内 windows_driver 的说明安装 Windows IDD 驱动。常见问题与调优README.md 给出了实用调优手段触摸控制错屏控制面板 → 平板电脑设置 → 设置按提示选择正确的扩展显示器JPEG 质量修改CONFIG_USB_EXTEND_SCREEN_JPEG_QUALITY值越高画质越好但每帧内存占用越大副屏分辨率修改CONFIG_USB_EXTEND_SCREEN_HEIGHT/CONFIG_USB_EXTEND_SCREEN_WIDTH当前驱动不支持竖屏请使用横屏面板输出帧率修改CONFIG_USB_EXTEND_SCREEN_MAX_FPS降低可减少 USB 带宽占用USB 音频卡顿时可考虑调低最大帧大小修改CONFIG_USB_EXTEND_SCREEN_FRAME_LIMIT_B限制 PC 驱动发来的最大图像尺寸禁用触摸/音频分别置CONFIG_HID_TOUCH_ENABLEn、CONFIG_UAC_AUDIO_ENABLEn若仅启用副屏功能将 PID 改为0x2987。方案选型速览综合以上六大 USB Device 方案可按下表快速选型方案协议标准适用芯片仓库示例典型场景USB 音频设备UAC 2.0ESP32-S2/S3/P4usb_uacUSB 麦克风/音箱USB 视频设备UVC 1.5ESP32-S2/S3/P4usb_webcam、usb_dual_uvc_deviceUSB 摄像头、门铃、网络摄像头USB 存储设备MSCESP32-S2/S3/P4usb_msc_wireless_disk无线 U 盘、读卡器、媒体播放器USB HID 设备HIDESP32-S2/S3/P4usb_hid_device、usb_surface_dial、keyboard键盘、鼠标、游戏手柄、旋钮拖拽式 OTAUF2 MSCESP32-S2/S3usb_uf2_ota、usb_uf2_nvs、bootloader_uf2免工具固件升级、NVS 可视化管理USB 扩展屏IDDWindowsESP32-S2/S3/P4usb_extend_screen副屏、签名板、扩展显示如需深入了解各协议在 TinyUSB 中的实现细节可继续阅读仓库文档 tinyusb_guide.rstUAC/UVC 传输机制、反馈端点与双摄像头描述符与 tinyusb_development_guide.rst相关 USB Device 驱动组件的完整 API 参考见 components/usb 下的usb_device_uac、usb_device_uvc、esp_tinyuf2等组件目录。【免费下载链接】esp-iot-solutionEspressif IoT Library. IoT Device Drivers, Documentations and Solutions.项目地址: https://gitcode.com/GitHub_Trending/es/esp-iot-solution创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

整车厂用户运营数据链路:从埋点到CDP的精细化运营实践

整车厂用户运营数据链路:从埋点到CDP的精细化运营实践

简介:《新时代整车厂竞争法则:打造精细化用户运营》是一份面向整车厂管理者、汽车行业市场及用户运营从业者的行业报告式PDF,系统剖析汽车市场增长放缓、疫情冲击、消费者偏好迁移等新时代困境,并结合蔚来、小鹏等新势力实践&…

2026/9/19 21:49:48 阅读更多 →
基于ADuC812的半导体激光器智能温控与恒流驱动电源设计

基于ADuC812的半导体激光器智能温控与恒流驱动电源设计

简介:一份基于ADuC812微控制器的半导体激光器智能温控及驱动电源设计文献,源自《科学技术与工程》期刊,内容涉及光电技术、嵌入式控制及精密电子电路等领域。文献围绕激光器恒流驱动与温度控制两大核心问题展开,介绍了以ADuC812为…

2026/9/19 21:49:48 阅读更多 →
动态调试逆向实战:绕过虚拟机与沙箱检测的逆向调试技巧

动态调试逆向实战:绕过虚拟机与沙箱检测的逆向调试技巧

动态调试逆向实战:绕过虚拟机与沙箱检测的逆向调试技巧一、逆向工程中的“猫鼠游戏” 在恶意代码分析、商业软件反编译与漏洞挖掘中,研究人员通常会在虚拟机(VMware、VirtualBox、KVM/QEMU)或沙箱分析系统中拉起动态调试器&#x…

2026/9/19 21:49:48 阅读更多 →

最新新闻

PTO TPARTMIN 指令全解析:CANN pto-isa 中基于有效区域(valid region)的逐元素最小值选择

PTO TPARTMIN 指令全解析:CANN pto-isa 中基于有效区域(valid region)的逐元素最小值选择

PTO TPARTMIN 指令全解析:CANN pto-isa 中基于有效区域(valid region)的逐元素最小值选择 【免费下载链接】pto-isa Parallel Tile Operation (PTO) is a virtual instruction set architecture designed by Ascend CANN, focusing on tile-l…

2026/9/19 22:40:13 阅读更多 →
Python爬虫入门:Requests库HTTP请求与响应处理详解

Python爬虫入门:Requests库HTTP请求与响应处理详解

简介:这份完整版Python网络爬虫系列课程的第一讲,聚焦Requests库入门,面向零基础开发者,适合系统学习数据采集与信息提取技术。课件从HTTP请求动作切入,逐一说明构造请求、获取网页、提交表单等常见操作的区别&#xf…

2026/9/19 22:40:13 阅读更多 →
QMK Clueboard 66% 66_ansi 默认键位解析:QK_GESC 特殊键与三层按键布局设计

QMK Clueboard 66% 66_ansi 默认键位解析:QK_GESC 特殊键与三层按键布局设计

QMK Clueboard 66% 66_ansi 默认键位解析:QK_GESC 特殊键与三层按键布局设计 【免费下载链接】qmk_firmware Open-source keyboard firmware for Atmel AVR and Arm USB families 项目地址: https://gitcode.com/GitHub_Trending/qm/qmk_firmware 本文围绕 Q…

2026/9/19 22:40:13 阅读更多 →
基于Spring Boot与Vue的非遗数字化传承平台设计与开发

基于Spring Boot与Vue的非遗数字化传承平台设计与开发

1. 为什么要做非遗数字化这个选题先说我自己的结论:非遗类系统是计算机毕业设计里少有的“高分潜力股”。为什么?因为它天然具备三层价值——文化层面有社会意义,技术层面能覆盖主流前后端技术栈,应用层面有真实的使用场景。很多同…

2026/9/19 22:40:13 阅读更多 →
为什么blessed渲染这么快?深度解析CSR、BCE与damage buffer的屏幕优化技巧

为什么blessed渲染这么快?深度解析CSR、BCE与damage buffer的屏幕优化技巧

为什么blessed渲染这么快?深度解析CSR、BCE与damage buffer的屏幕优化技巧 【免费下载链接】blessed A high-level terminal interface library for node.js. 项目地址: https://gitcode.com/gh_mirrors/bl/blessed blessed 是一个专为 node.js 打造的高级终…

2026/9/19 22:40:13 阅读更多 →
ESP32 USB Host 方案全解析:Camera/Audio/4G 网络/存储/Hub 五大应用实战指南

ESP32 USB Host 方案全解析:Camera/Audio/4G 网络/存储/Hub 五大应用实战指南

ESP32 USB Host 方案全解析:Camera/Audio/4G 网络/存储/Hub 五大应用实战指南 【免费下载链接】esp-iot-solution Espressif IoT Library. IoT Device Drivers, Documentations and Solutions. 项目地址: https://gitcode.com/GitHub_Trending/es/esp-iot-solutio…

2026/9/19 22:39:12 阅读更多 →

日新闻

BP神经网络时序预测:滑窗长度与多窗口平均策略

BP神经网络时序预测:滑窗长度与多窗口平均策略

简介:面向机器学习、深度学习与数据建模学习者的一份完整研究文献,聚焦BP神经网络在农业产量预测中的应用。文档以1980—2018年全国棉花产量为样本,系统讲解数据归一化处理、激活函数原理、多层神经网络结构搭建及训练流程,展示敏…

2026/9/19 0:00:30 阅读更多 →
Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

上个月调一个Deformable DETR模型,在单卡上要跑将近两天。第二天早上我下意识打开终端翻日志,发现loss从凌晨两点就开始往上爬,一路从0.8涨到1.35,整整六个小时没人发现。那六个小时的训练不仅白跑,还霸占着卡——等于…

2026/9/19 0:00:30 阅读更多 →
OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南 【免费下载链接】opencloud 🌤️ OpenCloud is the open source platform for file management, sharing and collaboration. Simple and sovereign. 项目地址: htt…

2026/9/19 0:00:30 阅读更多 →

周新闻

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/19 3:59:36 阅读更多 →
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/19 3:53:08 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

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

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

2026/9/19 4:02:43 阅读更多 →

月新闻

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

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

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

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

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

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

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

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

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

2026/9/16 22:32:59 阅读更多 →