news 2026/8/2 12:07:46

基于ESP32-C3与7.5寸电子纸打造低功耗智能信息显示终端

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于ESP32-C3与7.5寸电子纸打造低功耗智能信息显示终端

1. 项目概述:为什么选择“XIAO 7.5”电子纸面板?

如果你正在寻找一个低功耗、高可视性、并且能无缝融入智能家居或桌面信息终端的显示方案,那么电子纸(E-Paper)技术绝对值得你花时间研究。而“XIAO 7.5”这个组合,在我看来,是进入这个领域一个非常理想的起点。它不是一个现成的产品,而是一个由两块核心组件构成的DIY方案:一块是来自Seeed Studio的、以小巧和性价比著称的“XIAO ESP32-C3”开发板,另一块则是市面上常见的7.5英寸三色(黑、白、红)电子纸屏幕。

这个组合的魅力在于,它巧妙地平衡了能力、成本和开发难度。ESP32-C3提供了可靠的Wi-Fi和蓝牙连接能力,这对于需要从网络获取信息(如天气、新闻、待办事项)或与智能家居中枢(如Home Assistant)通信的场景至关重要。同时,它的功耗控制得相当不错,配合电子纸仅在刷新时才耗电的特性,可以让你的设备用一颗小电池或USB供电运行数周甚至数月。7.5英寸的屏幕尺寸,对于显示日历、待办清单、实时数据仪表盘来说,信息密度刚刚好,既不会太小看不清,也不会大到显得笨重。

我最初接触这个组合,就是想做一个放在书桌上的“智能日历/信息板”。我不想让它一直亮着屏幕打扰我,但又希望一抬头就能看到关键信息。电子纸那种类似纸张的观感和极低的静态功耗完美契合了这个需求。通过这篇指南,我将带你从零开始,完成硬件连接、环境搭建、驱动编写到最终实现一个基础信息显示功能的全过程。无论你是想做一个家庭信息中心、一个低功耗的传感器数据显示屏,还是单纯想体验一下电子纸编程,这篇指南都会提供清晰的路径。

2. 硬件准备与核心原理剖析

在动手焊接或插线之前,我们有必要搞清楚手头这两块板子到底是怎么工作的,以及它们如何协同。这能帮你避开很多后续的坑。

2.1 认识你的核心部件:XIAO ESP32-C3

XIAO ESP32-C3是Seeed Studio“XIAO”系列中的一款,其核心是一颗乐鑫的ESP32-C3芯片。这颗芯片是基于RISC-V架构的单核处理器,主频160MHz,集成了Wi-Fi 4和蓝牙5.0。对于我们的电子纸项目来说,它的关键特性包括:

  • 足够的GPIO引脚:虽然XIAO板型小巧,但它依然引出了足够的数字IO口,足以驱动7.5寸电子纸所需的SPI接口和几个控制引脚。
  • 低功耗模式:ESP32-C3支持深度睡眠(Deep Sleep),在这种模式下,电流消耗可以低至10μA左右。我们可以让它在大部分时间深度睡眠,定时唤醒(比如每10分钟)去联网更新一次屏幕内容,从而实现超长续航。
  • 丰富的开发生态:它完美支持Arduino框架和ESP-IDF。对于大多数爱好者来说,使用Arduino IDE进行开发是最快上手的路径,有海量的库和示例可以参考。

你需要留意的是,XIAO ESP32-C3有多个版本(例如是否带电池管理芯片)。对于本项目,基础版就足够了,但如果你计划最终用电池供电,那么选择带“充电管理”功能的版本会更方便。

2.2 理解电子纸(E-Paper)的驱动逻辑

电子纸屏幕本身是被动的,它需要一块驱动板(通常与屏幕绑定销售)来提供高压电信号,以控制屏幕内带正负电的微胶囊(里面是黑白粒子)或微杯(用于三色屏)的排列。7.5英寸的三色屏(黑、白、红)通常使用SPI接口与主控通信。

驱动过程可以简化为以下几个步骤:

  1. 初始化:主控通过SPI向驱动芯片发送一系列命令,配置其工作模式、电源等。
  2. 发送图像数据:主控将一张代表最终显示画面的位图(Bitmap)数据,通过SPI发送给驱动芯片。对于三色屏,通常需要用1个或2个位(bit)来表示一个像素点的颜色(例如,00=白,01=黑,10=红)。
  3. 刷新显示:发送完所有数据后,主控发送一个“刷新”命令。此时,驱动板会启动内部的高压电路,根据接收到的数据,在屏幕上施加特定的电场,使带电粒子移动到指定位置,形成图像。这个过程通常需要几秒钟,并且你会听到轻微的“滋滋”声,这是高压电路工作的声音。
  4. 进入睡眠:刷新完成后,主控可以命令驱动芯片进入睡眠模式以省电。此时,屏幕会保持最后显示的图像,且几乎不消耗任何电量。

一个关键的注意事项:电子纸有“全刷”和“局刷”的概念。全刷会清空整个屏幕并重新绘制,能获得最好的显示效果,但耗时较长(2-3秒),且频繁全刷会降低屏幕寿命。局刷只更新变化的部分区域,速度更快、更省电、对屏幕更友好,但可能会留下轻微的“残影”。对于信息板这类内容周期性完全变化的应用,使用全刷即可。

2.3. 硬件连接指南

7.5寸电子纸的驱动板引脚定义通常是标准的。你需要用杜邦线将驱动板与XIAO ESP32-C3连接起来。以下是一个典型的连接对照表:

电子纸驱动板引脚XIAO ESP32-C3 GPIO功能说明
VCC3V3电源正极(3.3V)
GNDGND电源地
DIND4 (GPIO6)SPI数据输入(MOSI)
CLKD5 (GPIO7)SPI时钟(SCK)
CSD3 (GPIO5)片选(低电平有效)
DCD2 (GPIO4)数据/命令选择(高=数据,低=命令)
RSTD1 (GPIO3)复位(低电平复位)
BUSYD0 (GPIO2)忙状态指示(高电平=忙)

注意:不同厂家或批次的屏幕,其驱动板引脚顺序或名称可能略有差异。务必以你手中屏幕附带的资料或商家提供的说明书为准。上表是常见情况,如果连接后无法驱动,第一件事就是核对引脚定义。

连接时,建议使用颜色区分的杜邦线,并确保在断电状态下操作。电源(VCC和GND)的连接一定要准确,接反或接错高压可能会永久损坏屏幕或开发板。

3. 软件开发环境搭建与核心库配置

硬件连好后,我们就要让代码跑起来了。这里我们选择最通用的Arduino IDE路径。

3.1 安装Arduino IDE与ESP32板支持

首先,去Arduino官网下载并安装最新版的Arduino IDE。安装完成后,打开IDE,进入“文件” -> “首选项”。

在“附加开发板管理器网址”中,填入以下URL(如果已有其他,用逗号隔开):https://espressif.github.io/arduino-esp32/package_esp32_index.json

然后,打开“工具” -> “开发板” -> “开发板管理器”。在搜索框中输入“esp32”,找到由“Espressif Systems”提供的“esp32”平台,点击安装。这个过程可能需要一些时间,因为它会下载所有ESP32系列芯片(包括C3)的编译工具链和核心库。

安装完成后,在“工具” -> “开发板”选项中,你应该能找到“ESP32C3 Dev Module”。选择它。接下来是关键步骤:由于XIAO ESP32-C3的引脚定义比较特殊,我们需要正确配置开发板参数。

在“工具”菜单中,进行如下设置:

  • Upload Speed: 921600 (为了提高上传速度)
  • Flash Mode:DIO(默认)
  • Flash Size: “4MB (32Mb)”
  • Partition Scheme: “Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)”
  • **Core Debug Level`: “无”
  • Port: 选择你的XIAO开发板对应的串口(插入USB后会出现)
  • JTAG Adapter: “Disabled”

最重要的是,你需要找到并设置“USB CDC On Boot” 为 “Enabled”。这样,XIAO才能通过USB模拟一个串口,让你在Arduino IDE的串口监视器中看到打印信息。如果找不到这个选项,你可能需要选择“XIAO_ESP32C3”这个专门的开发板定义(可能需要通过开发板管理器额外安装Seeed的板支持包)。

3.2 安装电子纸驱动库

Arduino IDE本身不包含电子纸的驱动。我们需要安装第三方库。对于市面上常见的7.5寸三色屏,GxEPD2库是一个功能强大且维护活跃的选择。

在Arduino IDE中,点击“项目” -> “加载库” -> “管理库…”。在库管理器中搜索“GxEPD2”,找到由ZinggJM开发的版本进行安装。这个库支持非常多的电子纸型号。

安装完成后,你还需要安装它的依赖库。通常它会自动提示,如果没有,你可以在库管理中搜索并安装“Adafruit GFX Library”。这是图形库的基础。

3.3 编写第一个测试程序:显示一张图片

现在,我们来创建一个最简单的程序,验证硬件连接和库是否正常工作。这个程序的目标是在屏幕上显示一张位图。

首先,你需要准备一张图片。由于屏幕是7.5英寸,分辨率通常是640x384(黑白)或类似。你需要将图片处理成这个分辨率,并转换为黑白(和三色)的位图格式。一个简单的方法是使用Windows自带的“画图”软件调整大小,然后另存为“单色位图(.bmp)”。对于三色,可能需要更专业的工具或在线转换器,生成包含黑、白、红三色的位图。

将处理好的图片文件(例如test.bmp)放入Arduino项目文件夹下。

然后,编写如下代码:

#include <GxEPD2_BW.h> // 如果是黑白屏用这个 #include <GxEPD2_3C.h> // 如果是三色(黑、白、红)屏用这个 #include <GxEPD2_7C.h> // 如果是七色屏用这个 #include <Fonts/FreeMonoBold9pt7b.h> // 可选,用于显示文字 // 根据你的屏幕型号定义驱动对象,这里以7.5寸三色屏常见型号为例 // GxEPD2_3C<GxEPD2_750c, GxEPD2_750c::HEIGHT> display; // 更通用的方式是使用GxEPD2_BW或GxEPD2_3C的构造函数,指定具体参数。 // 如果你不确定型号,可以尝试使用GxEPD2_750c_Z08这个定义,它对应很多7.5寸屏。 // 最准确的方法是查看屏幕驱动板上的芯片型号,并在GxEPD2库的示例中寻找匹配的型号定义。 // 这里我们假设一个常见情况: GxEPD2_3C<GxEPD2_750c_Z08, GxEPD2_750c_Z08::HEIGHT> display; void setup() { Serial.begin(115200); delay(1000); // 给串口一点启动时间 Serial.println("Setup Start"); display.init(115200); // 初始化显示屏,参数是调试输出波特率,可以不要 display.setRotation(1); // 设置旋转方向,0-3,根据你的安装方向调整 display.setFullWindow(); // 设置全窗口刷新 display.firstPage(); do { display.fillScreen(GxEPD_WHITE); // 背景设为白色 // 在这里绘制内容 display.setTextColor(GxEPD_BLACK); display.setFont(&FreeMonoBold9pt7b); display.setCursor(10, 30); display.println("Hello, E-Paper!"); } while (display.nextPage()); // 执行刷新 Serial.println("Setup Done"); display.hibernate(); // 让屏幕进入休眠状态以省电 } void loop() { // 空循环,我们只显示一次 delay(1000); }

重要提示:上面代码中的GxEPD2_750c_Z08只是一个示例。这是最容易出错的地方!你必须根据你的具体屏幕型号来修改这行代码。如何查找?打开你安装的GxEPD2库的“examples”文件夹,里面有很多针对不同屏幕的示例程序。找一个看起来尺寸匹配的(比如GxEPD2_750c_test),打开它,复制第一行对于display对象的定义。这是最稳妥的方法。

将代码上传到XIAO开发板。上传成功后,屏幕应该会进行刷新,并显示“Hello, E-Paper!”的文字。如果屏幕没有反应,请按以下步骤排查:

  1. 检查电源:确保VCC和GND连接正确且牢固。
  2. 检查引脚:再次核对SPI引脚(DIN, CLK, CS, DC, RST, BUSY)是否一一对应。
  3. 检查库和型号定义:确认GxEPD2_3C后的模板参数是否正确。尝试库中其他的7.5寸示例。
  4. 查看串口监视器:打开串口监视器(波特率115200),看是否有错误信息输出。

4. 实现核心功能:从网络获取信息并显示

当测试程序成功运行后,我们就可以开始实现项目的核心价值:让这块屏幕成为一个能自动更新信息的智能终端。这里我们以实现一个显示天气和时间的简单信息板为例。

4.1 连接Wi-Fi与获取网络时间

一个信息板必须知道当前时间。我们可以通过连接Wi-Fi,然后使用NTP(网络时间协议)来同步时间。

首先,在你的代码中引入必要的库,并设置Wi-Fi凭证:

#include <WiFi.h> #include <time.h> const char* ssid = "你的Wi-Fi名称"; const char* password = "你的Wi-Fi密码"; // NTP服务器配置 const char* ntpServer = "pool.ntp.org"; const long gmtOffset_sec = 8 * 3600; // 东八区(北京时间)偏移,单位秒 const int daylightOffset_sec = 0; // 夏令时偏移 void setupWiFi() { Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("\nWiFi connected."); Serial.print("IP address: "); Serial.println(WiFi.localIP()); } void setupTime() { configTime(gmtOffset_sec, daylightOffset_sec, ntpServer); // 等待时间同步 struct tm timeinfo; if(!getLocalTime(&timeinfo)){ Serial.println("Failed to obtain time"); return; } Serial.println(&timeinfo, "Time synchronized: %A, %B %d %Y %H:%M:%S"); }

setup()函数中,先调用setupWiFi()setupTime()。这样,设备启动后就能获得准确的本地时间。

4.2 调用天气API获取数据

获取天气数据需要调用一个免费的天气API服务。这里以和风天气(HeWeather)的免费版为例,你需要先去其官网注册账号,获取一个API Key。

我们将使用HTTP GET请求来获取数据。Arduino ESP32核心库提供了HTTPClientWiFiClient来方便地完成这个任务。

#include <HTTPClient.h> #include <ArduinoJson.h> // 需要安装ArduinoJson库,用于解析JSON数据 const String apiKey = "你的和风天气API_Key"; const String cityLocationId = "101010100"; // 城市ID,北京是101010100 String getWeatherData() { if (WiFi.status() != WL_CONNECTED) { return "WiFi Not Connected"; } HTTPClient http; // 构建请求URL(请根据和风天气最新API文档调整) String url = "https://devapi.qweather.com/v7/weather/now?location=" + cityLocationId + "&key=" + apiKey; http.begin(url); int httpCode = http.GET(); String payload = ""; if (httpCode == HTTP_CODE_OK) { payload = http.getString(); // 这里payload是JSON字符串,例如:{"code":"200", "now":{"temp":"22", "text":"晴"}} } else { payload = "HTTP Error: " + String(httpCode); } http.end(); return payload; } // 解析JSON,提取温度和天气描述 void parseWeather(String jsonString, String &temp, String &weatherText) { StaticJsonDocument<1024> doc; // 根据返回的JSON大小调整缓冲区 DeserializationError error = deserializeJson(doc, jsonString); if (error) { temp = "Parse Err"; weatherText = error.c_str(); return; } // 解析结构,具体路径需参考API返回的实际JSON格式 if (doc["code"] == "200") { temp = doc["now"]["temp"].as<String>(); weatherText = doc["now"]["text"].as<String>(); } else { temp = "API Err"; weatherText = doc["code"].as<String>(); } }

注意:免费API通常有调用频率限制(如每天1000次)。我们的信息板每10分钟或30分钟更新一次,完全在限制范围内。请务必遵守服务商的条款。

4.3 设计显示界面与整合刷新逻辑

现在,我们将时间、天气信息整合起来,在屏幕上绘制一个简单的界面。同时,我们需要设计一个主循环逻辑,让设备定期唤醒、获取数据、刷新屏幕、然后进入深度睡眠。

// 在全局定义变量 String currentTimeStr = ""; String currentTemp = "N/A"; String currentWeather = "N/A"; void updateDisplay() { display.setFullWindow(); display.firstPage(); do { display.fillScreen(GxEPD_WHITE); // 绘制标题 display.setTextColor(GxEPD_BLACK); display.setFont(&FreeMonoBold12pt7b); display.setCursor(10, 30); display.println("Smart Dashboard"); // 绘制时间 display.setFont(&FreeMonoBold9pt7b); display.setCursor(10, 70); display.print("Time: "); display.println(currentTimeStr); // 绘制天气 display.setCursor(10, 110); display.print("Temp: "); display.print(currentTemp); display.println(" C"); display.setCursor(10, 140); display.print("Weather: "); display.println(currentWeather); // 可以画一条分割线 display.drawLine(10, 160, display.width() - 10, 160, GxEPD_BLACK); // 底部显示最后更新时间 display.setFont(&FreeMono9pt7b); display.setCursor(10, display.height() - 10); display.println("Updated just now"); } while (display.nextPage()); display.hibernate(); // 刷新完成后立即休眠屏幕 } void updateData() { // 1. 获取并格式化时间 struct tm timeinfo; if(getLocalTime(&timeinfo)){ char buffer[30]; strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M", &timeinfo); currentTimeStr = String(buffer); } else { currentTimeStr = "Time Sync Failed"; } // 2. 获取天气 String weatherJson = getWeatherData(); parseWeather(weatherJson, currentTemp, currentWeather); } void setup() { Serial.begin(115200); delay(1000); // 等待串口稳定 // 初始化屏幕 display.init(115200); display.setRotation(1); // 连接Wi-Fi setupWiFi(); // 同步时间 setupTime(); // 更新数据 updateData(); // 更新显示 updateDisplay(); Serial.println("All done. Preparing to sleep."); // 进入深度睡眠 (例如,10分钟) // 注意:深度睡眠后,只有RTC存储器和少数引脚保持状态,程序从setup()重新开始。 // 对于ESP32-C3,使用以下方法。GPIO8(即D8)需要连接到RST引脚以实现定时唤醒。 // 这里我们为了简化,先使用延迟,在实际部署时改为深度睡眠。 // esp_sleep_enable_timer_wakeup(10 * 60 * 1000000); // 微秒 // esp_deep_sleep_start(); } void loop() { // 如果使用深度睡眠,loop()永远不会执行到这里。 // 如果暂时用延迟模拟,可以在这里写循环逻辑。 delay(10 * 60 * 1000); // 延迟10分钟 // 注意:实际应用中,延迟会阻止CPU进入低功耗模式,仅用于测试。 // 重启后重新执行setup() ESP.restart(); }

重要提示:上面的loop()函数中的delay方式仅用于测试,因为它无法让ESP32-C3进入低功耗模式。要实现真正的低功耗,必须使用深度睡眠。这需要将XIAO ESP32-C3的一个特定GPIO(通常是D8,即GPIO8)通过一个10kΩ电阻上拉到3.3V,并连接到RST引脚。当深度睡眠定时器到期后,这个GPIO会触发一个信号来复位芯片,从而实现唤醒。这是一个关键的硬件修改步骤,如果你追求超低功耗,必须完成它。代码中注释掉的esp_deep_sleep_start()就是启动深度睡眠的函数。

5. 进阶优化与Home Assistant集成

基础功能跑通后,我们可以考虑更高级的应用,比如让这个信息板成为Home Assistant家庭自动化系统的一个前端显示设备。

5.1 将XIAO ESP32-C3配置为Home Assistant传感器

Home Assistant可以通过MQTT协议轻松集成ESP32设备。我们可以在XIAO上运行一个MQTT客户端,定期将传感器数据(比如你未来可以接上的温湿度传感器读数)发布到MQTT服务器(Broker),Home Assistant就能订阅这些数据并展示。

首先,你需要安装PubSubClient库(用于MQTT通信)。然后,修改代码,在连接Wi-Fi后,连接到你的MQTT服务器(例如,运行在Home Assistant同一主机上的Mosquitto)。

#include <PubSubClient.h> WiFiClient espClient; PubSubClient mqttClient(espClient); const char* mqttServer = "你的HA服务器IP"; const int mqttPort = 1883; const char* mqttUser = "用户名"; // 如果MQTT服务器需要认证 const char* mqttPassword = "密码"; const char* clientId = "xiao_epaper_dashboard"; void reconnectMQTT() { while (!mqttClient.connected()) { if (mqttClient.connect(clientId, mqttUser, mqttPassword)) { Serial.println("MQTT connected"); // 可以在这里订阅主题 } else { Serial.print("MQTT connection failed, rc="); Serial.print(mqttClient.state()); Serial.println(" try again in 5 seconds"); delay(5000); } } } void publishSensorData() { // 假设我们读取了一个虚拟的传感器值 float sensorValue = 25.5; String topic = "home/sensor/xiao/temperature"; String payload = String(sensorValue); mqttClient.publish(topic.c_str(), payload.c_str()); }

updateData()函数中,加入publishSensorData()的调用。这样,每次更新屏幕数据时,也会向Home Assistant发送一次数据。

5.2 从Home Assistant获取数据并显示

反过来,我们也可以让信息板显示Home Assistant里的实体状态。例如,显示客厅的当前温度、灯光开关状态等。这需要XIAO作为MQTT客户端去订阅Home Assistant相关主题。

首先,在Home Assistant中,确保“MQTT集成”已启用并正确配置。然后,你需要知道实体状态发布的主题。通常格式是homeassistant/sensor/<entity_id>/state。你也可以在Home Assistant中配置一个MQTT传感器,主动向特定主题发布数据。

在XIAO的代码中,添加MQTT订阅回调:

void mqttCallback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); String message; for (int i = 0; i < length; i++) { message += (char)payload[i]; } Serial.println(message); // 根据主题解析消息,更新对应的显示变量 if (String(topic) == "homeassistant/sensor/livingroom_temperature/state") { currentHATemp = message; } else if (String(topic) == "homeassistant/light/kitchen_light/state") { currentHALightState = message; } // 触发一次屏幕刷新(注意:需要合理设计刷新逻辑,避免过于频繁) dataUpdated = true; } void setup() { // ... 其他初始化 ... mqttClient.setServer(mqttServer, mqttPort); mqttClient.setCallback(mqttCallback); } void loop() { if (!mqttClient.connected()) { reconnectMQTT(); } mqttClient.loop(); // 保持MQTT连接并处理接收到的消息 if (dataUpdated) { updateDisplay(); // 刷新屏幕 dataUpdated = false; } // ... 其他逻辑 ... }

这样,当Home Assistant中实体状态发生变化时,MQTT消息会推送到XIAO,触发屏幕更新,实现近乎实时的信息同步。

5.3 功耗优化与长期运行建议

要让这个设备真正成为一个“摆设”在墙上或桌面的终端,功耗和稳定性是关键。

  1. 启用深度睡眠:如前所述,将ESP.restart()替换为真正的深度睡眠代码,并完成硬件连接(GPIO8接RST)。这是降低功耗最有效的手段。计算一下:假设每次唤醒、联网、获取数据、刷新屏幕耗时30秒,工作电流约100mA;深度睡眠电流约10μA。如果每10分钟唤醒一次,平均电流约为 (0.1A * 30s + 0.00001A * 570s) / 600s ≈ 5mA。一个2000mAh的电池理论上可以运行400小时,约16天。如果降低更新频率到每小时一次,续航将大幅延长。

  2. 优化Wi-Fi连接:在setupWiFi()中,可以配置静态IP,避免每次DHCP。连接超时时间不要设得太长。连接成功后,可以调用WiFi.setSleep(true)启用Wi-Fi的节能模式。

  3. 屏幕刷新策略

    • 定期全刷:像天气、时间这种信息,可以每1-2小时进行一次全刷,保证显示清晰。
    • 事件触发局刷:对于从Home Assistant接收的快速变化状态(如灯光开关),可以使用局刷(display.setPartialWindow())来更新屏幕的一小部分,速度更快、功耗更低、对屏幕更友好。但需注意,局刷多次后仍需一次全刷来清除残影。
  4. 异常处理与看门狗:在网络请求或屏幕刷新时加入超时判断。启用硬件看门狗(esp_task_wdt_init()),防止程序跑飞导致设备死机。确保在任何异常情况下,设备都能最终安全地进入深度睡眠或重启。

  5. 供电选择:对于长期摆放的设备,建议使用Micro USB接口供电,最稳定。如果必须使用电池,推荐使用3.7V的锂聚合物电池(Li-Po)配合XIAO的电池管理电路(如果板子支持)。对于不带充电管理的版本,需要外接充电模块,并注意电池过放保护。

通过以上步骤,你应该已经能够将一个简单的“XIAO 7.5”电子纸面板,打造成一个功能丰富、低功耗的智能信息显示终端。这个项目就像一块乐高积木,你可以在此基础上添加传感器(温湿度、光照)、按钮进行交互,或者设计更复杂的UI界面。

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

一键搜索23个磁力站:magnetW聚合搜索工具完整指南

一键搜索23个磁力站&#xff1a;magnetW聚合搜索工具完整指南 【免费下载链接】magnetW [已失效&#xff0c;不再维护] 项目地址: https://gitcode.com/gh_mirrors/ma/magnetW 还在为寻找资源而奔波于多个磁力网站之间吗&#xff1f;磁力链接聚合搜索工具magnetW正是解决…

作者头像 李华
网站建设 2026/8/2 12:07:22

iOS海外工具类应用上架苹果商店全流程指南

苹果 iOS应用上架和马甲包开发业务&#xff0c;承接各类商城、工具、生活服务类 APP 上架需求&#xff0c;服务覆盖全流程&#xff1a; 1.上架资料整理、资质核对&#xff0c;规避基础审核风险 2. 应用介绍、副标题、关键词、截图配文专业英文翻译&#xff08;适配海外地区上架…

作者头像 李华
网站建设 2026/8/2 12:05:41

九大平台网盘直链解析技术:浏览器脚本如何重塑文件下载体验

九大平台网盘直链解析技术&#xff1a;浏览器脚本如何重塑文件下载体验 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 /…

作者头像 李华
网站建设 2026/8/2 12:05:13

5分钟掌握本地视频字幕提取:从繁琐到高效的全新体验

5分钟掌握本地视频字幕提取&#xff1a;从繁琐到高效的全新体验 【免费下载链接】video-subtitle-extractor 视频硬字幕提取&#xff0c;生成srt文件。无需申请第三方API&#xff0c;本地实现文本识别。基于深度学习的视频字幕提取框架&#xff0c;包含字幕区域检测、字幕内容提…

作者头像 李华
网站建设 2026/8/2 12:04:19

【限时解密】景区私有化AI语音导游部署包:支持离线运行的轻量化模型(含方言适配模块),仅开放至本月底

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;景区私有化AI语音导游部署包全景概览 景区私有化AI语音导游部署包是一套面向文旅场景的轻量级、可离线运行的端侧AI解决方案&#xff0c;专为无公网或弱网环境下的景区定制设计。该部署包整合了语音识别&#…

作者头像 李华