news 2026/5/16 7:58:03

基于CircuitPython与Feather平台打造可编程智能手表:从I2C通信到3D打印全流程实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于CircuitPython与Feather平台打造可编程智能手表:从I2C通信到3D打印全流程实践

1. 项目概述:打造你的第一块可编程智能手表

如果你对嵌入式开发感兴趣,想亲手做点既酷又实用的东西,那么这个基于CircuitPython和3D打印的智能手表项目,绝对是一个完美的起点。它不像商业智能手表那样功能繁杂,而是回归了“手表”最本质的功能——精准显示时间,并赋予了你从硬件到软件、从外观到功能的完全控制权。整个项目围绕Adafruit的Feather生态系统展开,这是一个对初学者极其友好的硬件平台,而CircuitPython则让你能用熟悉的Python语法轻松操控硬件,彻底告别了传统嵌入式开发中令人头疼的编译、刷写流程。

这个项目的核心价值在于,它不仅仅是一个“做出来”的成品,更是一个完整的、可深度定制的学习平台。你将亲手焊接电路板,理解I2C总线如何让微控制器、实时时钟和显示屏协同工作;你将编写代码,学习如何从硬件读取数据并驱动显示;你还会接触到3D打印,为自己的作品设计并制造出独一无二的表壳和表带。最终,你将得到两块“手表”:一块是真正可以佩戴在手腕上的智能手表,另一块则是可以放在桌面的精美电子时钟。整个过程,你会深刻理解一个嵌入式产品从概念到实物的全流程,这种成就感是购买现成产品无法比拟的。无论你是电子爱好者、创客,还是想入门物联网的学生,这个项目都能为你打下坚实的实践基础。

2. 核心硬件选型与设计思路解析

2.1 为什么选择Adafruit Feather生态系统?

在开始动手之前,理解我们为什么选用这一套硬件组合至关重要。市面上有Arduino、树莓派Pico等多种微控制器平台,而Adafruit Feather系列最大的优势在于其高度的模块化和一致性。

Feather是一个定义了统一尺寸和引脚排列标准的开发板家族。这意味着,所有符合Feather标准的板子(主控板或功能扩展板,即FeatherWing)都可以像积木一样堆叠在一起,物理接口和电气连接都是兼容的。对于这个手表项目,我们使用了三块板子:Feather M4 Express作为大脑,DS3231 Precision RTC FeatherWing提供精准计时,128x32 OLED FeatherWing负责显示。它们通过板载的标准化排母/排针直接堆叠,省去了繁琐的飞线,极大提高了项目的可靠性和整洁度。

选择Feather M4 Express的原因是其强大的ATSAMD51 Cortex-M4内核(运行在120MHz)和充足的存储(512KB RAM,2MB Flash),足以流畅运行CircuitPython并处理显示任务。而DS3231 RTC模块是关键,它内置高精度温补晶振和电池备份(我们用的CR1220纽扣电池),即使主系统断电,时间也能持续走时,这是作为一块“表”的尊严所在。128x32 OLED屏则以其高对比度、低功耗和清晰的显示效果胜出。

2.2 核心电路连接原理:I2C总线

这三块板子能协同工作的秘密在于I2C(Inter-Integrated Circuit)总线。这是一种简单、低速、两线制的串行通信总线,广泛用于连接微控制器和传感器、显示器等外设。

在Feather标准中,I2C的时钟线(SCL)和数据线(SDA)被固定在了特定的引脚上(通常是引脚#20和#21)。当你将三块Feather板子堆叠起来时,它们的SCL和SDA引脚在物理上就被连接在了一起。在CircuitPython代码中,我们通过board.I2C()初始化I2C总线对象,然后分别用这个总线对象去初始化RTC (adafruit_ds3231.DS3231(i2c))和OLED显示屏 (adafruit_displayio_ssd1306.SSD1306(...))。由于每个I2C设备都有一个唯一的地址(例如,我们这个OLED屏的地址是0x3C),主控(Feather M4)就可以通过同一条总线,与多个设备进行对话而互不干扰。

这种设计的美妙之处在于其简洁性。你不需要为每个外设单独分配通信引脚,所有设备共享两条线,极大地节省了宝贵的GPIO资源,也让硬件连接变得傻瓜化。理解I2C是理解本项目乃至大多数传感器项目通信基础的关键。

注意:在堆叠多块FeatherWing时,务必确保所有板子的供电电压一致。Feather M4 Express是3.3V逻辑电平,我们使用的RTC和OLED FeatherWing也都兼容3.3V,所以直接堆叠没有问题。如果你混用5V逻辑的板子,可能需要电平转换模块,否则可能损坏设备。

3. 软件开发环境搭建与代码深度剖析

3.1 CircuitPython入门:比Arduino更友好的微控制器编程

CircuitPython是Adafruit主导开发的一个开源Python变体,专为微控制器设计。它与我们熟知的CPython(电脑上运行的Python)语法几乎完全一致,但针对资源受限的嵌入式环境做了优化。最大的特点是“所见即所得”的开发体验:当你用USB线将Feather M4连接到电脑时,它会以一个名为CIRCUITPY的U盘形式出现。你只需将编辑好的Python代码文件(必须命名为code.py)拖入这个U盘,板子就会自动重启并运行新代码,无需任何编译、烧录工具。

首先,你需要为Feather M4 Express刷入CircuitPython固件。访问 circuitpython.org ,下载最新的.uf2文件。按住板子上的Reset按钮,然后快速双击,直到BOOT盘符出现。将下载的.uf2文件拖入BOOT盘,完成后板子会自动重启,电脑上就会出现CIRCUITPY盘符。

接下来是库文件的安装。CircuitPython通过“库”来驱动特定的硬件或实现复杂功能。我们需要为OLED屏和RTC时钟安装对应的驱动库。最方便的方法是使用“项目包”(Project Bundle)。在Adafruit的项目页面,通常会有“Download Project Bundle”按钮,点击后会下载一个包含所有必需库和code.py示例代码的ZIP文件。解压后,找到lib文件夹,将其中的所有.mpy文件复制到你的CIRCUITPY盘里的lib文件夹中即可。如果CIRCUITPY盘里没有lib文件夹,就新建一个。

3.2 主程序代码逐行解读与自定义

让我们深入看看核心的code.py文件,理解每一行代码在做什么,以及你可以在哪里进行个性化修改。

# SPDX-FileCopyrightText: 2019 Kattni Rembor for Adafruit Industries # SPDX-License-Identifier: MIT import board import displayio import adafruit_displayio_ssd1306 import terminalio import adafruit_ds3231 from adafruit_display_text import label

导入模块:这是程序的起点。board模块提供了对硬件引脚的定义;displayio是CircuitPython中管理图形显示的核心框架;adafruit_displayio_ssd1306adafruit_ds3231则是我们刚才安装的、针对特定硬件的驱动库;terminalio提供了一个内置的等宽字体;adafruit_display_text中的label类用于在屏幕上创建文本标签。

font = terminalio.FONT displayio.release_displays() i2c = board.I2C() display_bus = displayio.I2CDisplay(i2c, device_address=0x3c) oled = adafruit_displayio_ssd1306.SSD1306(display_bus, width=128, height=32) rtc = adafruit_ds3231.DS3231(i2c)

硬件初始化:这里设置了字体,释放了显示资源(防止重复初始化出错),然后创建了I2C总线对象。紧接着,用这个总线对象和OLED的I2C地址(0x3c)创建了显示总线,并最终初始化了OLED显示对象(指定分辨率为128x32)和RTC实时时钟对象。至此,硬件就准备就绪了。

# 第一次运行时必须设置时间! # 必须设置年、月、日、小时、分钟、秒和星期几。 # struct_time 顺序: 年,月,日(日期),小时,分钟,秒,星期几,一年中的第几天,是否夏令时 # 不支持一年中的第几天,是否夏令时可以设置但我们目前不做处理 # 第一次运行代码时,取消注释以下四行来设置时间! # import time # set_time = time.struct_time((2019, 8, 16, 23, 59, 45, 4, -1, -1)) # print("Setting time到:", set_time) # rtc.datetime = set_time # 设置时间后,再次注释掉以上四行!

时间初始化(关键步骤):DS3231 RTC模块出厂时没有正确的时间,所以第一次使用必须通过代码手动设置。你需要取消注释这四行代码,将time.struct_time元组里的参数修改为当前的准确时间。其中“星期几”的取值是0-6,0代表周一,6代表周日(示例中的4代表周五)。设置完成后,务必记得重新注释掉这四行,否则每次重启手表,时间都会被重置为你代码里写死的那个时间。

while True: current = rtc.datetime hour = current.tm_hour % 12 if hour == 0: hour = 12 am_pm = "AM" if current.tm_hour / 12 >= 1: am_pm = "PM"

主循环与时间处理:程序进入一个无限循环。首先从RTC读取当前的时间结构体。接着,将24小时制的小时数转换为12小时制(% 12取余)。这里有个细节:当hour % 12结果为0时(即12点、0点或24点),在12小时制中应显示为12,所以有if hour == 0: hour = 12的判断。然后根据原始的小时数判断是上午(AM)还是下午(PM)。

time_display = "{:d}:{:02d}:{:02d} {}".format(hour, current.tm_min, current.tm_sec, am_pm) date_display = "{:d}/{:d}/{:d}".format(current.tm_mon, current.tm_mday, current.tm_year) text_display = "CircuitPython Time"

格式化显示字符串:这里创建了三个将要显示的字符串。{:02d}这样的格式控制确保了分钟和秒数在小于10时,会以“01”、“02”这样的两位数字显示,更美观。这是第一个重要的自定义点:你可以随意修改text_display的内容,比如改成你的名字“Leo‘s Watch”,或者一句格言。你也可以修改date_display的格式,比如改成更符合习惯的“年-月-日”(“{:d}-{:02d}-{:02d}”.format(current.tm_year, current.tm_mon, current.tm_mday))。

clock = label.Label(font, text=time_display) date = label.Label(font, text=date_display) text = label.Label(font, text=text_display) (_, _, width, _) = clock.bounding_box clock.x = oled.width // 2 - width // 2 clock.y = 5 ... # 类似的,设置date和text的x, y坐标

创建文本标签并定位:用label.Label创建三个文本对象。接下来是最核心的居中显示算法label.bounding_box属性返回一个元组(x, y, width, height),代表这个标签的边界框。我们只需要width(文本的像素宽度)。为了让文本在128像素宽的屏幕上居中,我们计算:屏幕中心点(oled.width // 2)减去文本宽度的一半(width // 2),结果赋值给标签的x坐标。y坐标则直接指定行高(5, 15, 25像素),让三行文字纵向排列。

watch_group = displayio.Group() watch_group.append(clock) watch_group.append(date) watch_group.append(text) oled.root_group = watch_group

组合与显示displayio.Group就像一个容器或画布,我们把三个文本标签append(添加)到这个组里。最后,将这个组设置为OLED显示的根组,内容就立刻呈现在屏幕上了。整个while True循环会以CircuitPython内部的速度不断重复执行,从而实现时间的动态更新。

实操心得:调试时,可以善用print()函数。例如,在设置时间后打印rtc.datetime,或者在主循环里打印格式化后的字符串,通过串口监视器(如Mu编辑器、Thonny或VS Code的CircuitPython串口插件)查看输出,这能帮你快速定位是时间读取问题,还是字符串格式化问题。

4. 硬件组装与焊接实操指南

4.1 焊接前的准备与安全须知

焊接是连接硬件世界与数字世界的桥梁。对于这个项目,你需要焊接排针(Header)到每一块Feather和FeatherWing上。首先,确保工作区域通风良好,准备好焊台(或烙铁)、焊锡丝、助焊剂、吸锡带(备用)、镊子和一副放大镜或台灯。安全第一,烙铁头温度很高,切勿触碰,使用后务必放入烙铁架。

关于焊锡,建议使用含铅的63/37锡铅焊锡丝(熔点低,流动性好)或者无铅焊锡丝。对于细小的排针焊接,直径0.6mm-0.8mm的焊锡丝比较合适。助焊剂能帮助焊锡更好地流动和附着。

在焊接任何元件之前,务必先进行“试装配”。将排针插入PCB板,然后将其插在面包板或专门的焊接夹具上,确保所有排针都与板子垂直,并且高度一致。对于Feather M4,我们需要焊接母座(Female Header),并且是朝上焊接(即插座口朝向远离PCB板的方向),这样其他板子才能插在上面。而对于RTC和OLED FeatherWing,我们需要焊接排针(Male Header),并且是朝下焊接(即针脚朝向PCB板),这样才能插入到底板的母座中。这个方向性千万不能搞错,否则所有板子无法堆叠。

4.2 分步焊接教程与技巧

第一步:焊接Feather M4 Express的母座

  1. 取出一排12针和一排16针的直角母座(通常Feather板会附带)。
  2. 将母座短针的那一面(即插座口背对的那一面)从PCB板的正面(有芯片和元件的一面)插入,让母座的插座口朝向天空
  3. 将板子反过来,放在焊接夹具上,使排针稳定。
  4. 烙铁头同时接触排针的金属针脚和PCB板上的焊盘,约1-2秒后,送入焊锡丝。看到焊锡熔化并自然流满焊盘,形成一个光滑的圆锥形焊点后,移开焊锡丝,再移开烙铁。
  5. 技巧:先焊接一排头尾的两个针脚固定位置,检查是否垂直,然后再焊接中间的针脚。焊点应光亮、饱满,呈金字塔形,不要过多形成锡球,也不要过少导致虚焊。

第二步:焊接RTC和OLED FeatherWing的排针

  1. 取出一排12针和一排16针的直排针
  2. 将排针长针的那一端从PCB板的背面(通常是丝印层,没有主要元件的一面)插入,让长针朝向PCB板外(即未来会插入母座的方向)。
  3. 同样,将板子正面朝下放在夹具上,使排针长针稳稳立在桌面上。
  4. 从PCB板正面进行焊接。这次焊接的是排针与PCB板接触的“根部”。
  5. 特别注意:对于RTC FeatherWing,其12针一侧有一个位置被大的电池座占用了,标准的12针排针无法全部插入。你需要用剪钳将一排12针的排针剪成两段:一段是10针,另一段是2针(或根据板子布局调整),分别焊接在对应的位置。务必对照实物图片或PCB丝印进行操作。

第三步:堆叠与总装

  1. 按照顺序堆叠:最底层是Feather M4(带有朝上的母座),中间是RTC FeatherWing(针脚朝下,插入M4的母座),最上层是OLED FeatherWing(针脚朝下,插入RTC的母座)。
  2. 检查堆叠是否平整,各板子之间有无明显倾斜或未插到底的情况。
  3. 插入CR1220纽扣电池到RTC板上的电池座,注意正极(+)朝上。这个电池用于在主电源断开时保持时钟运行。
  4. 将400mAh的锂电池的JST插头插入Feather M4底部的电池接口。由于空间有限,需要小心地将电池线缆卷曲,妥善安放在Feather M4和RTC板之间的缝隙中。

避坑指南:焊接中最常见的问题是“虚焊”和“桥接”。虚焊指焊锡没有真正润湿焊盘和引脚,导致电气连接不可靠,轻轻一拨元件就掉。解决方法是确保烙铁头足够热,并先在焊盘上镀一点锡。桥接是指焊锡不小心连接了两个相邻的引脚,会导致短路。解决方法是使用吸锡带或焊锡吸枪清理,或者用烙铁头快速划过桥接处,利用表面张力将多余的焊锡带走。焊接完成后,强烈建议用万用表的“通断档”检查电源(VUSB, 3V, GND)之间有无短路,以及每个信号引脚与相邻引脚有无短路,确认无误后再通电。

5. 3D打印外壳与表带制作详解

5.1 模型准备与切片参数优化

本项目的外壳和表带均为3D打印件,设计上充分考虑了佩戴舒适性和电子元件的容纳空间。你需要下载STL文件(通常来自Thingiverse或Adafruit的GitHub仓库),然后用切片软件(如Cura, PrusaSlicer, Simplify3D)将其转换为打印机可执行的G-code。

表带材料选择:官方推荐使用NinjaFlex或类似的高柔性TPU材料。这种材料打印出的表带柔软、有弹性,佩戴舒适且耐用。切勿使用PLA或ABS等刚性材料打印表带,否则根本无法弯曲佩戴。对于手表主体(case),可以使用柔性材料以保证整体韧性,也可以使用PLA以获得更坚硬的外壳和保护。

关键切片参数(针对柔性材料)

  • 打印速度慢是关键。建议设置在20-40mm/s。速度过快极易导致挤出不均、层间粘合差,甚至堵头。
  • 挤出机温度:对于NinjaFlex,建议240°C。温度不足会导致流动性差,过高可能使材料降解。
  • 热床温度:柔性材料通常不需要加热床,或者设置为40-60°C辅助 adhesion。有些打印机甚至可以在冷床上打印TPU。
  • 回抽(Retraction)建议关闭或设置极小的值(如0.5mm)。柔性材料在回抽时容易被拉伸或堵塞在喉管中,导致打印失败。关闭回抽可能会在表面留下一些拉丝,但后期易于清理。
  • 层高:0.2mm或0.16mm可以获得不错的表面质量。
  • 填充率:10%-15%的网格填充即可,既能保证强度,又节省材料和时间。
  • 附着:由于模型较薄,建议使用裙边(Skirt)或 ** brim(边缘)** 来增加第一层与热床的接触面积,防止翘边。

5.2 双色打印与后期处理技巧

如果你想实现官方图中那种双色表带(例如,底部一种颜色,上部及卡扣另一种颜色),而你的打印机是单喷头,可以采用“暂停换料”法。

  1. 在切片软件中设置:以PrusaSlicer为例,在右侧的图层滑块旁边,点击“+”号,可以在特定图层高度插入一个“颜色变化”指令。例如,表带总高6mm,你可以在0.8mm高度插入一个变更。这样打印机打完0.8mm后会自动暂停,并喷头移动到一旁。
  2. 手动换料:打印机暂停后,手动将当前耗材挤出一定长度(为了清除旧颜色),然后剪断。接着装入新颜色的耗材,手动挤出直到新颜色完全替代旧颜色从喷嘴流出。在打印机界面确认换料完成,继续打印。
  3. 后期清理:由于关闭了回抽,打印件表面,尤其是表带的调节孔和卡扣舌部位,可能会有一些拉丝或多余的塑料。使用尖头镊子精密剪钳仔细地清理这些毛刺。对于卡扣舌和表带孔,需要确保它们活动顺畅,没有阻碍,否则佩戴和调节时会非常困难。
  4. 组装:将焊接好的电路板堆叠对准外壳内部的卡槽,轻轻推入。然后将两条表带从侧面滑入外壳的插槽,听到“咔哒”一声说明末端的限位块已经卡到位。根据你的手腕粗细,选择合适的表带孔进行扣合。

实操心得:打印柔性材料是对打印机的一次考验。确保你的送料路径尽可能顺畅,避免急弯。使用“直接驱动”挤出机的打印机比“远程驱动”(Bowden)的打印机更适合打印柔性材料。如果打印时出现挤出不稳定,可以尝试进一步降低速度,并检查送料齿轮是否对耗材压得太紧或太松。第一次打印建议先打一个小测试件(如一个校准方块),成功后再进行正式部件的长时间打印。

6. 桌面时钟支架的扩展搭建

这个项目的另一个妙处是,你可以用几乎相同的硬件,轻松搭建一个桌面电子时钟。这主要得益于FeatherWing Tripler这块扩展板。它本质上是一块带有三组Feather母座和额外 prototyping区域的底板。

组装步骤

  1. 焊接Tripler:将三组(12针+16针)的直角母座焊接到Tripler板上对应的位置。注意方向,确保焊好后母座开口朝上。
  2. 准备支架:使用PLA等刚性材料3D打印时钟支架。这个支架设计有四个立柱,用于固定Tripler板。
  3. 安装支柱:使用4套M2.5的螺丝、尼龙支柱和螺母。将螺丝从支架底部穿入,套上支柱,然后用螺母在支架内部锁紧。
  4. 固定Tripler板:将Tripler板对准四个支柱,放在顶部,然后用另外四颗M2.5螺丝从上方拧入支柱,将Tripler板固定。
  5. 插入核心模块:最后,将已经焊好的Feather M4、RTC和OLED FeatherWing堆叠起来,作为一个整体,插入到Tripler板的任意一组母座中。接通USB电源,一个桌面时钟就诞生了。

这个桌面时钟版本的优势是供电稳定(可一直插着USB),并且因为Tripler板提供了额外的扩展空间和GPIO引脚,你完全可以在此基础上添加新功能,比如一个光敏传感器实现自动亮度调节,或一个温湿度传感器显示环境信息。

7. 常见问题排查与进阶优化

即使按照指南操作,你也可能会遇到一些问题。这里列出一些常见故障及其解决方法:

问题现象可能原因排查与解决步骤
连接电脑后无CIRCUITPY盘符1. CircuitPython未正确刷入。
2. USB线仅供电无数据功能。
3. 板子损坏。
1. 重新执行双机Reset进入BOOT模式,刷入UF2文件。
2. 换一根已知良好的数据线
3. 尝试另一台电脑。
代码已保存,但屏幕无显示1. 硬件连接错误。
2. I2C地址不对。
3. 库文件缺失或错误。
4. 屏幕对比度问题(全白或全黑)。
1. 检查板子堆叠顺序和方向,确认已插紧。
2. 确认代码中OLED地址是0x3c(常见)。有些屏是0x3d,需查阅手册。
3. 检查CIRCUITPY/lib文件夹下是否有adafruit_displayio_ssd1306.mpyadafruit_ds3231.mpy等库文件。
4. 有些OLED模块需要手动调节板载电位器来设置对比度。
时间显示不正确或重置1. 首次未设置时间。
2. 设置时间的代码未注释掉。
3. RTC纽扣电池没电或未安装。
4. I2C通信不稳定。
1. 按指南取消注释设置时间的代码,设置后重新注释。
2. 确认设置时间的四行代码已被注释。
3. 检查CR1220电池是否安装正确(+极朝上)且有电。
4. 检查焊接有无虚焊,尝试降低I2C总线速度(在board.I2C()中加频率参数,但库可能不支持)。
手表耗电极快1. OLED屏幕常亮。
2. 程序中有死循环或高功耗操作。
3. 锂电池老化。
1. 这是正常现象,本项目未做低功耗优化。如需长时间续航,需在代码中实现屏幕定时关闭(通过displayio.release_displays())和Feather M4的睡眠模式。
2. 检查代码逻辑。
3. 更换电池。
3D打印表带太硬或卡扣不紧1. 使用了刚性材料打印。
2. 打印温度或速度不当。
3. 模型尺寸与手腕不匹配。
1.必须使用柔性TPU材料
2. 严格按照推荐的慢速(20-40mm/s)和高温(~240°C)打印。
3. 可以使用CAD软件(如Fusion 360)打开源文件,调整表带的长度和卡扣孔的间距参数,重新生成STL文件打印。

进阶优化思路

  1. 增加功能:利用Feather M4上未使用的GPIO,可以添加按钮来实现切换显示模式(时间/日期/温度)、调整亮度,甚至添加一个振动电机实现闹钟功能。
  2. 美化显示:CircuitPython的displayio库支持位图(BMP)显示。你可以设计一个简单的图标或动画,在启动时显示。也可以使用非等宽字体库,让时间显示更具个性。
  3. 低功耗优化:这是将手表从“玩具”升级为“实用品”的关键。研究CircuitPython的alarmsleep模块,让微控制器在两次更新时间间隔内进入深度睡眠,可以轻易将续航从小时级提升到天甚至周级。
  4. 网络功能:Feather M4 Express本身没有Wi-Fi,但你可以堆叠一块Adafruit AirLift FeatherWing(ESP32协处理器)来增加Wi-Fi功能。这样就能通过网络同步精确时间(NTP),甚至从互联网获取天气等信息显示在表盘上。

这个项目就像一颗种子,基本的硬件和软件框架已经为你搭建好。剩下的,就取决于你的想象力和动手能力,去让它生根发芽,成长为你专属的、功能独特的智能可穿戴设备。从点亮第一个像素,到戴着自己制作的手表出门,这个过程所收获的,远不止一块表那么简单。

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

基于BLE与CircuitPython的远程服务器重启开关设计与实现

1. 项目概述与核心思路手头有几台电脑分散在家里各个角落,有时候它们死机了需要重启,但偏偏其中一台作为监控录像存储的服务器,被我塞进了一个带锁的柜子里。每次都得找钥匙、开门、按按钮,实在麻烦。这个需求催生了我动手做一个无…

作者头像 李华
网站建设 2026/5/16 7:55:05

构建统一AI服务网关:OpenAI兼容门面模式实践指南

1. 项目概述:一个兼容OpenAI API的轻量级门面最近在折腾大模型应用开发,发现一个挺普遍的需求:很多团队或个人开发者,手里可能握着不止一个AI服务提供商的API密钥,比如既有官方的OpenAI,也有国内的一些合规…

作者头像 李华
网站建设 2026/5/16 7:51:17

基于LLM的AI新闻智能体:自动化信息采集与周报生成实战

1. 项目概述:一个能自动追踪AI新闻的智能体 最近在GitHub上看到一个挺有意思的项目,叫 ai-news-weekly-agent 。光看名字,你大概能猜到它是个和AI新闻相关的自动化工具。没错,它的核心目标就是扮演一个“AI新闻周刊编辑”的角色…

作者头像 李华
网站建设 2026/5/16 7:49:39

阴阳师百鬼夜行AI自动化脚本:智能式神碎片收集的革命性解决方案

阴阳师百鬼夜行AI自动化脚本:智能式神碎片收集的革命性解决方案 【免费下载链接】OnmyojiAutoScript Onmyoji Auto Script | 阴阳师脚本 项目地址: https://gitcode.com/gh_mirrors/on/OnmyojiAutoScript 阴阳师百鬼夜行AI自动化脚本是一款基于先进计算机视觉…

作者头像 李华
网站建设 2026/5/16 7:49:38

FakeLocation:安卓应用级位置伪装技术详解与实践指南

FakeLocation:安卓应用级位置伪装技术详解与实践指南 【免费下载链接】FakeLocation Xposed module to mock locations per app. 项目地址: https://gitcode.com/gh_mirrors/fak/FakeLocation 你是否曾想过在不同的应用中展示不同的位置信息?比如…

作者头像 李华
网站建设 2026/5/16 7:49:38

ComfyUI-Manager终极指南:高效管理AI工作流扩展的完整解决方案

ComfyUI-Manager终极指南:高效管理AI工作流扩展的完整解决方案 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable vario…

作者头像 李华