news 2026/8/3 12:04:37

XIAO ESP32-C5开发板评测:双频Wi-Fi 6物联网开发实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
XIAO ESP32-C5开发板评测:双频Wi-Fi 6物联网开发实战指南

1. 从“小身材”到“大能耐”:为什么选择XIAO ESP32-C5?

如果你正在寻找一款能塞进任何角落、功耗低到离谱、但又能跑Wi-Fi 6和蓝牙5.0的物联网开发板,那么Seeed Studio的XIAO ESP32-C5很可能就是你找了很久的那个“小钢炮”。我第一次拿到这块板子时,它的尺寸让我有点恍惚——比我的大拇指指甲盖大不了多少,但上面密密麻麻的焊盘和芯片告诉我,这玩意儿绝不简单。

ESP32-C5这颗芯,是乐鑫在2023年放出的一颗“重磅炸弹”。它最大的亮点,是成为了首款同时支持2.4 GHz和5 GHz双频Wi-Fi 6的RISC-V架构物联网芯片。这意味着什么?在以往,像ESP32-C3这类经典芯片,虽然性价比极高,但只支持2.4GHz Wi-Fi 4。在如今路由器普遍双频、5GHz信道越来越拥挤的环境下,一个能跑5GHz Wi-Fi 6的物联网节点,意味着更快的传输速度、更低的延迟,以及在复杂无线环境(比如一堆智能家居设备扎堆)中更强的抗干扰能力。而XIAO系列经典的超迷你封装,让这颗强大的芯有了一个极其优雅的载体,非常适合可穿戴设备、紧凑型传感器节点、甚至是一些对空间有极致要求的消费电子产品原型开发。

我之所以对这块板子感兴趣,是因为手头一个老旧项目遇到了瓶颈:一个环境监测节点需要定期上传几MB的传感器日志,在2.4GHz频段下速度慢且不稳定,经常因为邻居的Wi-Fi干扰而断线。ESP32-C5的出现,让我看到了在不改变设备体积和供电方案的前提下,直接升级网络能力的可能性。对于开发者而言,从经典的ESP32系列迁移到C5,几乎是无感的,Arduino和ESP-IDF的支持已经相当完善,这让入门和开发变得异常顺畅。

2. 开箱与硬件深度解析:麻雀虽小,五脏俱全

当你拆开XIAO ESP32-C5的包装,第一印象肯定是“精致”。板子的做工继承了Seeed Studio XIAO系列一贯的高水准。我们来仔细看看这块“小钢炮”到底武装到了什么程度。

2.1 核心芯片与关键外围电路

板子的绝对核心自然是乐鑫的ESP32-C5芯片。它采用32位RISC-V单核处理器,主频最高可达160MHz,内置400KB SRAM和4MB Flash。对于大多数物联网应用来说,这个配置已经绰绰有余。真正让它脱颖而出的是其无线部分:符合Wi-Fi 6(802.11ax)标准的2.4/5 GHz双频收发器,以及蓝牙5.0 LE。为了实现稳定的双频性能,板载了一个板载天线和一个额外的IPEX连接器,方便你外接高增益天线,这在信号穿透要求高的场景下非常有用。

供电部分设计得很周到。板子支持广泛的输入电压范围(3.3V~5.5V),可以通过底部的USB-C接口供电,也可以通过两侧的“VCC”和“GND”焊盘供电。这里有一个我实测下来的小经验:当你使用电池供电,且电压在3.3V~4.2V(例如单节锂电池)时,其内部的低压差稳压器(LDO)效率很高,发热很小。但如果用5V供电,LDO的压差增大,在进行高强度无线数据传输时,能感觉到芯片微热,所以长期5V供电的应用建议考虑散热。

2.2 丰富的I/O与扩展能力

别看它小,XIAO ESP32-C5通过两排密集的焊盘,引出了多达11个GPIO引脚。这些引脚绝大多数都支持复用功能,例如I2C、UART、SPI、PWM等。具体引脚定义如下表所示,这是进行任何外设连接前必须熟记于心的“地图”:

焊盘编号GPIO 编号主要复用功能注意事项
D0GPIO0BOOT按钮, ADC1_CH0默认上拉,接按键需注意
D1GPIO1UART0_TXD, ADC1_CH1下载调试串口TX
D2GPIO2UART0_RXD, ADC1_CH2下载调试串口RX
D3GPIO3通用IO
D4GPIO4通用IO
D5GPIO5I2C_SCL内部上拉
D6GPIO6I2C_SDA内部上拉
D7GPIO7SPI_CS
D8GPIO8SPI_MISO
D9GPIO9SPI_MOSI
D10GPIO10SPI_SCK

注意:GPIO0(D0)在芯片启动时电平决定了启动模式。上电时如果检测到GPIO0为低电平,则会进入下载模式。因此,如果你将D0用于连接传感器或按钮,务必确保上电瞬间该引脚不会意外被拉低,否则可能导致设备无法正常启动。一个稳妥的做法是在代码初始化阶段再配置该引脚的模式。

板子正面还有一个用户可编程的RGB LED(连接GPIO3),以及一个复位按钮和一个BOOT按钮(与GPIO0复用)。这个RGB LED在调试时非常有用,你可以用它来指示网络连接状态、传感器读数范围等。

2.3 与同系列其他XIAO板的对比

很多朋友会问,XIAO系列有ESP32-C3、nRF52840、RP2040等多个版本,C5版本到底该怎么选?这里我做一个简单的对比:

  • XIAO ESP32-C3:经典入门之选,只支持2.4GHz Wi-Fi和蓝牙5.0 LE,价格通常更便宜。如果你的应用场景对网络速度要求不高,且环境干扰不大,C3是性价比最高的选择。
  • XIAO nRF52840:主打蓝牙5.0,性能强大,适合复杂的BLE应用,但不支持Wi-Fi。
  • XIAO RP2040:双核ARM Cortex-M0+,主打高性能计算和丰富的GPIO,适合需要大量本地处理但不需无线的项目。
  • XIAO ESP32-C5核心优势就是双频Wi-Fi 6。如果你的项目需要传输图片、音频等较大数据量,或者部署在5GHz Wi-Fi已成主流的现代家庭/办公室环境中,需要更稳定、更快的网络连接,那么C5是唯一且最佳的选择。它补齐了XIAO系列在高性能无线连接上的最后一块短板。

3. 开发环境搭建与“第一行代码”

拿到硬件后,下一步就是让它“活”起来。对于ESP32-C5,最快捷的上手方式无疑是使用Arduino IDE。下面我将详细说明从零开始搭建环境到点亮LED的全过程,并指出几个容易踩坑的地方。

3.1 安装Arduino IDE与ESP32开发板支持

首先,去Arduino官网下载并安装最新版的Arduino IDE。安装完成后,打开IDE,进入“文件” -> “首选项”。在“附加开发板管理器网址”中,填入以下URL:https://espressif.github.io/arduino-esp32/package_esp32_index.json你可以点击输入框右侧的图标添加多个URL,确保这个地址在列表中。

接着,打开“工具” -> “开发板” -> “开发板管理器”。在顶部的搜索框中输入“esp32”,你会看到由“Espressif Systems”提供的“esp32”开发板包。注意,请务必安装版本2.0.14或更高版本,早期版本可能尚未包含对ESP32-C5的完整支持。点击“安装”按钮,等待安装完成。这个过程可能需要下载大量文件,请保持网络通畅。

安装完成后,你就可以在“工具” -> “开发板”列表中看到“ESP32 Arduino”分类,并在其中找到“XIAO_ESP32C5”。

3.2 驱动安装与端口识别

用USB-C数据线将XIAO ESP32-C5连接到电脑。此时,电脑通常会自动安装CDC驱动程序(将板子识别为一个串口)。你可以在“工具” -> “端口”菜单下查看新出现的端口号。在Windows上,它可能显示为“COMx”(如COM3);在macOS或Linux上,则显示为“/dev/cu.usbmodemXX”。

常见坑点一:端口不显示或显示为未知设备。如果电脑没有自动识别,你需要手动安装CP210x或CH9102的USB转串口驱动(具体取决于板载的USB芯片型号,Seeed的Wiki页面会有说明)。去硅实验室(Silicon Labs)或沁恒(WCH)官网下载对应的驱动安装即可。安装后重启IDE,端口应该就会出现。

3.3 编写并上传Blink程序

现在,我们来编写一个最简单的程序——让板载的RGB LED闪烁。注意,XIAO ESP32-C5的RGB LED连接在GPIO3上,并且是共阳极接法(阳极接3.3V)。这意味着我们需要给对应的GPIO引脚输出低电平来点亮LED。

在Arduino IDE中,新建一个草图,输入以下代码:

// 定义RGB LED引脚 (共阳极,低电平点亮) const int ledPin = 3; // GPIO3 void setup() { // 初始化LED引脚为输出模式 pinMode(ledPin, OUTPUT); } void loop() { digitalWrite(ledPin, LOW); // 点亮LED (输出低电平) delay(1000); // 等待1秒 digitalWrite(ledPin, HIGH); // 熄灭LED (输出高电平) delay(1000); // 等待1秒 }

代码非常简单。在setup()函数中,我们将GPIO3设置为输出模式。在loop()函数中,我们先输出低电平点亮LED,等待1秒,再输出高电平熄灭LED,如此循环。

接下来是关键的上传步骤:

  1. 在“工具”菜单中,依次选择:
    • 开发板:XIAO_ESP32C5
    • Upload Speed:921600(这个速度很快,如果失败可以尝试降低到115200)
    • Flash Frequency:80MHz
    • Flash Mode:QIO
    • Partition Scheme:Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)
    • Port: 选择你刚才识别到的端口号。
  2. 点击左上角的“上传”按钮(向右的箭头)。

常见坑点二:上传失败,提示“Failed to connect to ESP32-C5”或“Timed out waiting for packet header”。这通常是因为板子没有正确进入下载模式。请按以下步骤操作:

  1. 按住板子上的“BOOT”按钮不放。
  2. 然后,再按一下“RST”按钮并松开(此时仍按住BOOT按钮)。
  3. 在Arduino IDE中点击上传。
  4. 当IDE状态栏显示“Connecting...”时,即可松开BOOT按钮。

如果一切顺利,你将看到编译和上传的进度,最后显示“Hard resetting via RTS pin...”。此时,板子会自动复位并运行程序,你应该能看到板载的RGB LED开始以1秒的间隔稳定闪烁。恭喜你,已经成功迈出了第一步!

4. 核心功能实战:连接双频Wi-Fi与数据上传

让LED闪烁只是热身,ESP32-C5的真正实力在于无线连接。接下来,我们实现一个更实用的功能:让设备扫描并连接你家的Wi-Fi(无论是2.4GHz还是5GHz),然后定期向一个Web服务器发送模拟的传感器数据。

4.1 双频Wi-Fi连接代码详解

我们将创建一个能处理双频网络的智能连接函数。在Arduino中,ESP32库已经为我们封装好了强大的Wi-Fi功能。以下是完整的示例代码:

#include <WiFi.h> #include <HTTPClient.h> // 你的Wi-Fi凭证 const char* ssid_2g = "你的2.4GHz网络名称"; const char* password_2g = "你的2.4GHz网络密码"; const char* ssid_5g = "你的5GHz网络名称"; // 如果SSID不同 const char* password_5g = "你的5GHz网络密码"; // 用于HTTP请求的服务器地址(示例使用一个公共测试服务器) const char* serverUrl = "http://httpbin.org/post"; // 连接Wi-Fi的函数,优先尝试5GHz bool connectToWiFi() { WiFi.mode(WIFI_STA); // 设置为站点模式 WiFi.disconnect(); // 先断开已有连接 delay(100); Serial.println("开始扫描网络..."); int n = WiFi.scanNetworks(); if (n == 0) { Serial.println("未发现任何网络"); return false; } bool found5G = false; bool found2G = false; String targetSsid; String targetPass; // 分析扫描结果,优先寻找5GHz网络 for (int i = 0; i < n; ++i) { String currentSsid = WiFi.SSID(i); int32_t rssi = WiFi.RSSI(i); int32_t channel = WiFi.channel(i); String band = (channel > 14) ? "5GHz" : "2.4GHz"; // 简单判断频段 Serial.printf("%d: %s (%s) Ch:%d RSSI:%d dBm\n", i+1, currentSsid.c_str(), band.c_str(), channel, rssi); // 优先连接信号强的5GHz网络 if (currentSsid.equals(ssid_5g) && band.equals("5GHz")) { found5G = true; targetSsid = ssid_5g; targetPass = password_5g; Serial.println("-> 发现目标5GHz网络,将尝试连接"); break; // 找到即退出循环 } // 其次连接2.4GHz网络 if (currentSsid.equals(ssid_2g) && !found5G) { found2G = true; targetSsid = ssid_2g; targetPass = password_2g; } } if (targetSsid.length() == 0) { Serial.println("未找到配置中的目标网络"); return false; } Serial.printf("尝试连接至: %s\n", targetSsid.c_str()); WiFi.begin(targetSsid.c_str(), targetPass.c_str()); int attempts = 0; while (WiFi.status() != WL_CONNECTED && attempts < 20) { // 最多尝试20秒 delay(1000); Serial.print("."); attempts++; } if (WiFi.status() == WL_CONNECTED) { Serial.println("\nWi-Fi连接成功!"); Serial.print("IP地址: "); Serial.println(WiFi.localIP()); Serial.print("信号强度(RSSI): "); Serial.print(WiFi.RSSI()); Serial.println(" dBm"); Serial.print("连接频段: "); Serial.println((WiFi.channel() > 14) ? "5GHz" : "2.4GHz"); return true; } else { Serial.println("\nWi-Fi连接失败!"); return false; } } void setup() { Serial.begin(115200); delay(1000); // 给串口监控一点启动时间 if (connectToWiFi()) { Serial.println("网络准备就绪,可以开始数据传输。"); } else { Serial.println("网络初始化失败,系统将重启..."); delay(5000); ESP.restart(); // 连接失败则重启重试 } } void loop() { // 确保Wi-Fi连接正常 if (WiFi.status() == WL_CONNECTED) { HTTPClient http; http.begin(serverUrl); // 指定请求地址 http.addHeader("Content-Type", "application/json"); // 设置JSON格式 // 构建一个模拟的传感器数据JSON String payload = "{\"temperature\":"; payload += random(200, 300) / 10.0; // 模拟20.0-30.0度的温度 payload += ",\"humidity\":"; payload += random(400, 700) / 10.0; // 模拟40.0-70.0%的湿度 payload += "}"; Serial.println("发送数据: " + payload); int httpResponseCode = http.POST(payload); // 发送POST请求 if (httpResponseCode > 0) { String response = http.getString(); Serial.printf("HTTP响应代码: %d\n", httpResponseCode); Serial.printf("服务器响应: %s\n", response.c_str()); } else { Serial.printf("HTTP请求失败,错误代码: %d\n", httpResponseCode); Serial.printf("错误信息: %s\n", http.errorToString(httpResponseCode).c_str()); } http.end(); // 释放资源 } else { Serial.println("Wi-Fi断开,尝试重连..."); connectToWiFi(); } delay(10000); // 每10秒发送一次数据 }

这段代码做了几件关键事情:

  1. 智能网络选择connectToWiFi函数会先扫描周围网络,如果发现配置中的5GHz网络,则优先连接。这确保了设备能自动利用速度更快、干扰更少的5GHz频段。
  2. 健壮的错误处理:连接失败时有重试机制,最终失败会触发重启。在实际产品中,你可能会设计更复杂的重连逻辑,比如指数退避算法。
  3. 模拟数据上传:在loop中,我们使用HTTPClient库向一个公共测试服务器发送模拟的温湿度JSON数据。这演示了物联网设备最典型的数据上报场景。

实操心得:在实际部署中,http.begin()里的服务器地址最好使用域名而非固定IP,并配合使用WiFiClientSecure来处理HTTPS请求(需要配置根证书)。对于高频次上报,建议使用MQTT协议而非HTTP,以降低开销和延迟。ESP32-C5的Wi-Fi 6特性在大量设备并发上传数据的场景下,优势会更加明显。

4.2 功耗优化浅析

对于电池供电的设备,功耗是生命线。ESP32-C5继承了乐鑫芯片优秀的低功耗管理能力。除了在代码中使用WiFi.disconnect()WiFi.mode(WIFI_OFF)在空闲时关闭Wi-Fi,更有效的是利用其深度睡眠(Deep Sleep)模式。

例如,一个每10分钟上报一次数据的传感器节点,大部分时间可以这样处理:

// 在完成数据发送后,进入深度睡眠 esp_sleep_enable_timer_wakeup(10 * 60 * 1000000ULL); // 睡眠10分钟(微秒) Serial.println("进入深度睡眠"); delay(100); // 等待串口输出完成 esp_deep_sleep_start(); // 开始深度睡眠 // 之后的代码不会执行,芯片会重启

在深度睡眠模式下,ESP32-C5的电流消耗可以低至10μA级别,仅由RTC计时器和少量内存维持工作。唤醒后,程序会从setup()函数重新开始执行。你需要将需要保持的数据存入RTC内存或Flash。通过合理规划工作与睡眠时间,可以让一颗小容量电池支撑设备运行数月甚至数年。

5. 进阶玩法与项目构思

掌握了基础连接和上传后,XIAO ESP32-C5还能玩出更多花样。它的双核(虽然C5是单核RISC-V,但无线部分有独立处理器)和强大无线能力为创意项目提供了坚实基础。

5.1 构建一个简单的Web服务器

你可以让ESP32-C5成为一个微型Web服务器,在局域网内通过浏览器访问它来查看传感器数据或控制一个继电器。这利用到了其Wi-Fi Station和SoftAP并存的能力。以下是一个创建AP并提供网页的简化框架:

#include <WiFi.h> #include <WebServer.h> WebServer server(80); // 在80端口创建服务器 const char* ap_ssid = "XIAO_C5_AP"; const char* ap_password = "12345678"; // AP密码至少8位 void handleRoot() { String html = "<html><body><h1>XIAO ESP32-C5 Web Server</h1>"; html += "<p>芯片温度: " + String(temperatureRead()) + " C</p>"; // 读取内部温度 html += "<p><a href=\"/ledon\"><button>开灯</button></a></p>"; html += "<p><a href=\"/ledoff\"><button>关灯</button></a></p>"; html += "</body></html>"; server.send(200, "text/html", html); } void handleLedOn() { digitalWrite(ledPin, LOW); server.send(200, "text/plain", "LED is ON"); } void handleLedOff() { digitalWrite(ledPin, HIGH); server.send(200, "text/plain", "LED is OFF"); } void setup() { pinMode(ledPin, OUTPUT); digitalWrite(ledPin, HIGH); // 初始熄灭 WiFi.softAP(ap_ssid, ap_password); Serial.print("AP IP地址: "); Serial.println(WiFi.softAPIP()); server.on("/", handleRoot); server.on("/ledon", handleLedOn); server.on("/ledoff", handleLedOff); server.begin(); Serial.println("HTTP服务器已启动"); } void loop() { server.handleClient(); // 处理客户端请求 }

这样,手机或电脑连接到“XIAO_C5_AP”这个热点后,访问其IP地址(通常是192.168.4.1),就能看到一个简单的控制页面。这对于快速原型调试或构建不依赖外网的本地控制系统非常有用。

5.2 项目构思启发

结合其双频Wi-Fi和迷你尺寸,这里有几个具体的项目方向:

  1. 高清图传传感器节点:连接一个OV2640摄像头模块,利用5GHz Wi-Fi的高带宽,实现低延迟的720P甚至1080P图像流传输到服务器,用于安防监控或机器视觉原型。
  2. 无线音频流媒体终端:通过I2S接口连接MAX98357之类的音频DAC模块和一个小喇叭,让ESP32-C5作为一个网络音频播放器,从本地NAS或在线流媒体服务获取音频并播放。5GHz网络能提供更稳定的高码率音频流。
  3. 智能家居Mesh节点:利用ESP-NOW协议(乐鑫的私有低功耗协议)与其他ESP32设备组成Mesh网络,收集各个角落的传感器数据,然后由作为网关的XIAO ESP32-C5通过高速Wi-Fi 6统一上传到云端。C5的双频能力可以让网关与路由器的连接更加稳定,不占用智能家居设备常用的2.4GHz频段。
  4. 便携式网络诊断工具:编写一个扫描周围2.4GHz和5GHz Wi-Fi信道、信号强度、并分析拥堵情况的程序,将结果通过板载OLED屏幕显示出来,制作成一个口袋大小的网络分析仪。

5.3 外设扩展与硬件连接技巧

XIAO的扩展主要依靠两侧的焊盘。对于快速原型开发,强烈推荐使用Seeed Studio官方配套的XIAO扩展板,或者自己焊接一排排针,然后插在面包板上使用。

连接I2C传感器(如BME280温湿度气压传感器)

  • 接线:将传感器的VCC接XIAO的3.3V,GND接GND,SCL接D5(GPIO5),SDA接D6(GPIO6)。
  • 代码:使用Wire库,Wire.begin()即可,因为D5/D6内部已上拉。

连接SPI设备(如OLED屏幕)

  • 接线:屏幕的SCK接D10(GPIO10),MOSI接D9(GPIO9),CS接D7(GPIO7),DC和RESET接其他空闲GPIO。
  • 代码:使用SPI.begin()初始化,并指定正确的引脚。

硬件连接避坑指南

  1. 电平匹配:XIAO ESP32-C5的GPIO是3.3V电平,严禁直接接入5V信号,否则会损坏芯片。与5V设备通信时,必须使用电平转换模块。
  2. 电源去耦:当连接电机、舵机等感性负载或功耗较大的外设时,务必在靠近XIAO电源引脚处并联一个100μF以上的电解电容,以吸收电流突变,防止板子重启。
  3. 焊接温度:手工焊接排针时,建议使用恒温烙铁,温度设置在320°C-350°C,每个引脚停留时间不要超过3秒,避免过热损坏焊盘或内部芯片。

从开箱上电到连接高速网络,再到构思实际项目,XIAO ESP32-C5以其极致的紧凑设计和强大的双频Wi-Fi 6能力,为物联网开发者打开了一扇新的大门。它尤其适合那些对设备体积、网络性能和功耗都有要求的应用场景。相比于前代产品,C5带来的5GHz支持不仅仅是速度的提升,更是连接可靠性和信道选择灵活性的质的飞跃。在实际使用中,我最大的体会是它的软件生态兼容性做得很好,Arduino和ESP-IDF的迁移成本极低,让你可以几乎零学习成本地享受到新一代无线技术带来的红利。如果你正在规划一个需要可靠、高速无线通信的紧凑型设备,这块“小钢炮”绝对值得你花时间深入把玩。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/3 12:03:57

UnityHook实战:解决游戏开发中Hook技术的五大崩溃与兼容性问题

1. 项目概述与核心价值如果你正在开发Unity游戏&#xff0c;或者在做一些游戏功能扩展、自动化测试、性能分析&#xff0c;甚至是一些创意性的Mod制作&#xff0c;那么“Hook”&#xff08;钩子&#xff09;技术大概率是你绕不开的一个坎。UnityHook&#xff0c;简单来说&#…

作者头像 李华
网站建设 2026/8/3 11:59:07

ITIL4服务目录管理:从救火模式到价值创造

1. ITIL4服务目录管理的本质与价值ITIL4框架下的服务目录管理&#xff0c;本质上是一种将IT服务产品化的系统性方法。不同于传统IT运维中被动响应式的"救火"模式&#xff0c;服务目录通过明确定义服务内容、服务级别和交付方式&#xff0c;使IT部门从成本中心转型为价…

作者头像 李华
网站建设 2026/8/3 11:58:41

hot-35 搜索插入位置

解法&#xff1a;二分搜索 注意最后一步细节class Solution:def searchInsert(self, nums: List[int], target: int) -> int:nums_len len(nums)left 0right nums_len - 1while left < right:mid (left right) //2if nums[mid] target:return midelif nums[mid] &…

作者头像 李华
网站建设 2026/8/3 11:58:07

AI 定时任务不是每天发一句话,而是持续完成一项工作

很多重复工作并不复杂&#xff0c;却会稳定消耗时间。 例如每天检查行业动态、每周整理项目进度、定期汇总数据&#xff0c;单次可能只需要十几分钟&#xff0c;但长期积累下来会打断大量专注时间。 定时任务的价值&#xff0c;就是让这些固定流程按照约定时间执行。 不过&a…

作者头像 李华
网站建设 2026/8/3 11:57:30

Legacy iOS Kit终极指南:解锁旧款iOS设备的完整解决方案

Legacy iOS Kit终极指南&#xff1a;解锁旧款iOS设备的完整解决方案 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit …

作者头像 李华