news 2026/5/16 16:34:05

基于WipperSnapper与ESP32-S2的3D打印耗材IoT检测报警系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于WipperSnapper与ESP32-S2的3D打印耗材IoT检测报警系统

1. 项目概述与核心价值

作为一名长期泡在工作室里,与3D打印机、CNC和各种自动化设备打交道的创客,我深知一个看似微小的问题——打印耗材用尽——能带来多大的麻烦。你可能正专注于另一个项目,或者在另一个房间,甚至已经下班回家,而打印机却在无声无息地空转,最终产出一个失败的模型,浪费了数小时的电力和时间。传统的解决方案,比如加装一个物理限位开关或者依赖打印机固件自带的检测功能,要么改造复杂,要么不够灵活,特别是当你需要远程、集中管理多台设备时。

最近,我利用Adafruit的WipperSnapper平台和TCRT1000红外传感器,搭建了一套完全独立于打印机主控的IoT耗材检测报警系统。这套系统的核心魅力在于它的“无代码”特性。你不需要编写任何Arduino或MicroPython程序,只需通过网页界面进行图形化配置,就能让传感器数据上云,并触发跨设备的联动报警。这意味着,报警器可以放在你的办公桌、客厅,甚至通过手机推送通知,彻底摆脱了物理空间的限制。

这个项目完美诠释了物联网(IoT)在小型工坊和创客空间中的实用价值:将物理状态(有无耗材)转化为可远程访问的网络数据流,并基于此数据自动触发预设的响应动作(声光报警)。它由两个主要部分组成:一个安装在打印机进料口附近的检测终端(基于QT Py ESP32-S2和TCRT1000传感器),以及一个可独立放置的报警终端(基于Feather ESP32-S2和旋转警示灯)。两者通过Adafruit IO云平台进行通信,实现了检测与报警的物理分离和逻辑联动。接下来,我将从设计思路、硬件搭建、软件配置到实际安装调试,完整拆解这个项目的每一个细节。

2. 系统架构与核心组件选型解析

在动手之前,理清整个系统的信号流和组件职责至关重要。这能帮助你在搭建时心中有数,在调试时快速定位问题。

2.1 整体工作流程与信号链路

整个系统的运行可以概括为“感知-上传-判断-执行”四个步骤,形成了一个完整的物联网控制回路。

  1. 感知:安装在打印机耗材路径上的TCRT1000红外反射式传感器,持续检测其前方是否有物体(即耗材)。当有耗材时,红外光被反射,传感器输出高电平(约3.3V);无耗材时,输出低电平(约0V)。
  2. 上传:QT Py ESP32-S2读取传感器输出引脚(A1)的模拟或数字值(本项目配置为数字输入),并通过Wi-Fi将状态变化实时发送到Adafruit IO云平台,并存储在一个专用的数据流(Feed)中。
  3. 判断:在Adafruit IO平台上,我们创建两条“反应式”规则(Reactive Action)。规则一:当传感器Feed的数据小于0.5(代表无耗材)时,向报警器Feed发送指令“1”(开启)。规则二:当数据大于0.5(代表有耗材)时,发送指令“0”(关闭)。
  4. 执行:独立的Feather ESP32-S2报警终端订阅了自身的控制Feed。当收到“1”指令时,其D10引脚输出高电平,驱动晶体管电路,从而接通旋转警示灯的电源,发出声光报警。收到“0”指令时,D10输出低电平,关闭报警。

这种架构的优势非常明显:检测端和报警端完全解耦。你可以随时移动报警器的位置,而无需改动打印机的布线。所有逻辑均在云端配置,修改触发条件或增加通知渠道(如邮件、短信)都非常灵活。

2.2 核心硬件组件深度解析

为什么选择这些特定组件?每个选择背后都有其工程考量。

1. 主控微控制器:Adafruit QT Py ESP32-S2 & Feather ESP32-S2选择ESP32-S2系列芯片是项目的基石。它集成了Wi-Fi功能,这是连接Adafruit IO的必备条件。QT Py和Feather是Adafruit推出的两种不同封装形态的开发板,但核心芯片类似。

  • QT Py ESP32-S2:体积小巧,非常适合作为嵌入式传感器节点。它自带一个STEMMA QT连接器,可以通过配套的PH2.0-3P线缆与TCRT1000传感器即插即用,极大简化了接线,提高了可靠性,避免了焊接错误。我选择它作为检测端主控,正是看中了其紧凑和易连接的特性。
  • Feather ESP32-S2:具有标准的Feather引脚布局,生态丰富,有大量的扩展板(FeatherWing)可供选择。本项目使用FeatherWing Proto原型板来搭建晶体管驱动电路,Feather的形态使其更容易与原型板结合并获取5V电源。因此,它被用作报警端主控。

注意:务必确认你拿到的是ESP32-S2版本。早期的ESP32(无S2后缀)引脚定义和库支持有所不同,虽然理论上也能运行,但为了与WipperSnapper官方支持列表完美兼容,减少不必要的麻烦,强烈建议使用指定型号。

2. 传感器:Adafruit STEMMA TCRT1000TCRT1000是一个红外反射式光电传感器。它内部集成了一个红外发射管和一个红外接收管。当耗材(通常是白色或浅色的PLA/ABS)靠近时,发射管发出的红外光被反射回接收管,使其导通,输出信号变化。

  • 为何选择反射式而非对射式?对射式需要精确对齐发射器和接收器,安装精度要求高。而反射式只需将传感器对准耗材路径即可,安装容错率大得多,非常适合DIY场景。
  • 数字 vs 模拟输出:TCRT1000模块提供了一个数字输出引脚(当反射光强超过阈值时输出低电平)和一个模拟输出引脚(输出连续的电压值)。在本项目中,我们将其配置为数字输入,只关心“有”或“无”两种状态,逻辑简单可靠。WipperSnapper可以轻松处理这种二进制状态。

3. 执行器:旋转LED警示灯带蜂鸣器这是一个现成的5V驱动模块,集成了旋转灯和可调音量蜂鸣器。它工作电流较大(通常几百毫安),远超ESP32 GPIO引脚可直接驱动的能力(通常限制在40mA以内)。因此,我们不能直接用开发板的引脚去驱动它,否则会损坏开发板。

4. 驱动电路:TIP120达林顿晶体管与FeatherWing Proto板这里是本项目唯一的“硬核”电子部分,但原理并不复杂。我们使用一个TIP120 NPN达林顿晶体管作为电子开关。

  • 电路原理:Feather的D10引脚通过一个2.2KΩ的限流电阻连接到TIP120的基极(B)。当D10输出高电平(3.3V)时,一个微小的基极电流(Ib)流入,经过晶体管内部放大,允许一个较大的电流从集电极(C)流向发射极(E)。我们将警示灯的正极(VCC)接至USB提供的5V,负极(GND)接至TIP120的集电极(C),发射极(E)接开发板的地(GND)。这样,当D10为高,晶体管导通,警示灯的电流回路形成(5V -> 灯 -> C -> E -> GND),灯亮;D10为低,晶体管关闭,回路断开,灯灭。
  • 为何用达林顿管?普通晶体管放大倍数(β)可能不够高,而ESP32的GPIO输出电流有限。TIP120这种达林顿管具有极高的电流放大倍数,可以用很小的基极电流控制很大的负载电流,是驱动电机、灯带等负载的经典选择。
  • 为何加2.2KΩ电阻?这个电阻至关重要,用于限制流入晶体管基极的电流,防止过流损坏GPIO引脚和晶体管。根据欧姆定律计算:Ib = (Vgpio - Vbe) / R。假设GPIO高电平为3.3V,晶体管BE结压降Vbe约为1.2V,则Ib ≈ (3.3-1.2)/2200 ≈ 0.95mA,这是一个安全且足以驱动TIP120的值。

5. 结构件:3D打印支架与连接件3D打印的支架负责将传感器和主控板牢固、精确地固定在打印机的2020铝型材框架上,并引导耗材恰好通过传感器的检测区域。好的机械设计是传感器稳定工作的前提。原设计文件考虑了安装角度、走线空间和螺丝固定位,直接使用能省去大量测量和打样时间。

3. 硬件组装与电路搭建实操

理论清晰后,我们开始动手。请按照顺序操作,并准备好烙铁、焊锡、螺丝刀等工具。

3.1 检测终端(QT Py + TCRT1000)组装

这个部分的目标是创建一个坚固、可靠的传感器模块。

  1. 焊接传感器线缆:取一根STEMMA JST PH 2mm 3P转杜邦头线缆。将红色线焊接到QT Py的5V引脚,黑色线焊接到GND引脚,白色线(或信号线)焊接到A1引脚。焊接完成后,用万用表通断档检查一下,确保没有虚焊或短路。然后将JST插头端牢固插入TCRT1000模块的插座。
  2. 安装QT Py到支架:将QT Py开发板从3D打印的支架侧面开口放入。注意方向:让USB-C接口朝向支架边缘,方便后续插线。先将带有STEMMA连接器的一侧卡入卡槽,然后轻轻按压USB接口附近,使其完全卡入支架的固定位中。这是一个紧配合的卡扣设计,安装时需小心用力,避免压坏USB接口。
  3. 固定TCRT1000传感器:将TCRT1000模块的PCB板穿过支架上方的方形开口,使其红外发射/接收窗口朝下,正对耗材将要经过的路径。将模块上的两个安装孔与支架上的对应孔对齐。
  4. 紧固与整合:使用两颗M2.5x5mm的螺丝,将TCRT1000模块紧固在支架上。然后,使用一颗M2x5mm的短螺丝,将传感器模块支架与下方的QT Py支架锁紧在一起,形成一个整体。
  5. 安装导丝轮和2020夹具:使用两颗M2x8mm螺丝将导丝轮部件安装到主体支架上。导丝轮的作用是引导耗材,使其稳定、准确地从传感器检测窗口前通过。最后,使用两颗M2x12mm的长螺丝,将整个组装体固定到2020铝型材的T型槽中。确保传感器窗口位于耗材路径的正上方,距离耗材表面大约2-5mm为宜,这个距离是TCRT1000的最佳检测范围。

3.2 报警终端(Feather + 驱动电路)组装

这个部分需要一点基础的焊接技巧来搭建晶体管驱动电路。

  1. 准备FeatherWing Proto板:首先,将插座式排母焊接到FeatherWing Proto板上。注意,排母的凸起面(引脚较长的一面)应朝上,这样Feather板才能像插槽一样插上去。焊接时确保所有引脚都垂直且焊点饱满。
  2. 焊接驱动电路:参考电路图,在Proto板上进行焊接。这是关键步骤:
    • 2.2KΩ电阻的一端焊接到与FeatherD10引脚相连的焊盘。
    • 将电阻的另一端与TIP120晶体管基极(B,最左边的引脚)焊接在一起。
    • 将TIP120的发射极(E,最右边的引脚)连接到Proto板的地线(GND)区域。你可以用一根短线将其连接到排母的任何一个GND引脚对应的焊盘。
    • 将一个2P端子排焊接到Proto板上。将其中的一个引脚连接到TIP120的集电极(C,中间的引脚),另一个引脚连接到Proto板的5V区域(同样可以连接到排母的5V引脚焊盘)。
    • 检查:完成焊接后,再次仔细检查,确保没有焊锡桥接(短路),特别是TIP120三个引脚之间。
  3. 连接警示灯:将旋转警示灯的两根引线(通常红正黑负)接入刚才焊接的2P端子排。正极(红线)接5V端,负极(黑线)接集电极(C)端。这样,电流路径就明确了:5V -> 灯 -> 晶体管C极 -> 晶体管E极 -> GND。
  4. 整体组装:使用两颗M2x5mm螺丝,将焊接好的FeatherWing Proto板固定到3D打印的报警器底座支柱上。然后将警示灯模块的线从底座的开孔中穿出,并将灯体用自带的螺母固定在底座顶部。最后,将Feather ESP32-S2开发板对齐插座排母,轻轻垂直压下,使其牢固地堆叠在Proto板之上。
  5. 供电:分别用两根USB-C线缆为QT Py检测终端和Feather报警终端供电。检测终端可以连接到3D打印机本身的USB口(如果供电充足)或一个独立的5V适配器。报警终端则可以连接到任何有USB接口的电源上,比如电脑、充电宝或墙插适配器。

实操心得:在焊接晶体管电路时,一个常见的错误是混淆了C和E极。TIP120的引脚顺序(从平面对着自己,从左到右)是B、C、E。如果不确定,务必用万用表的二极管档测量一下:B-E和B-C之间都像一个二极管(有单向导通性),而C-E之间在不通电时是开路的。另外,给Proto板通电前,务必先用肉眼和万用表检查一遍,避免短路烧毁元件。

4. WipperSnapper无代码平台配置详解

硬件组装完毕,接下来是核心的软件配置部分。得益于WipperSnapper,我们完全不需要接触代码。整个过程在Adafruit IO网页界面完成。

4.1 设备初始化与固件烧录

  1. 注册与登录:访问 io.adafruit.com ,注册一个免费账户。
  2. 添加新设备:登录后,点击页面顶部的“New Device”按钮。在板卡选择页面,利用搜索框找到“QT Py ESP32-S2”,点击选择。网页会引导你进入一个分步安装向导。
  3. 安装WipperSnapper固件:向导会提示你通过USB连接QT Py到电脑,并可能要求你按下板上的特定按钮(如BOOT或RST)进入下载模式。跟随网页上的实时指引操作,浏览器会自动下载并烧录WipperSnapper固件到你的板子。这个过程通常很快,成功后页面会有提示。
  4. 配置Wi-Fi:固件烧录完成后,页面会提示你输入你的Wi-Fi网络名称(SSID)和密码。请确保连接的是2.4GHz网络,因为ESP32-S2不支持5GHz频段。输入后,设备将自动重启并尝试连接网络和Adafruit IO。
  5. 命名设备:连接成功后,为你的设备取一个易记的名字,例如“3D-Printer-Filament-Sensor”,然后点击完成。此时,你的QT Py已经作为一个在线设备出现在你的Adafruit IO设备列表中了。
  6. 重复操作:对Feather ESP32-S2报警终端重复步骤2-5,为其烧录WipperSnapper固件并连接到网络。为其命名为“Filament-Alarm-Light”

4.2 传感器与执行器组件添加

现在,我们需要告诉WipperSnapper,我们的设备上连接了什么。

  1. 为QT Py添加TCRT1000传感器

    • 在设备列表页面,点击进入“3D-Printer-Filament-Sensor”的设备页面。
    • 点击大大的“+”按钮来添加新组件。
    • 在组件选择器中,搜索“TCRT1000”。如果没有直接找到,可以尝试搜索“Reflective”或“Photo Interrupt”。选择它。
    • 在配置页面中,将“Breakout Pin”设置为A1。这对应了我们之前焊接的引脚。
    • “Return Interval”设置为On Change。这意味着只有当传感器状态发生变化时(从有耗材到无,或反之),设备才会向云端发送数据,这能节省电量和网络流量。
    • 点击“Create Component”。创建成功后,你会看到一个新的数据卡片,显示当前传感器的状态(例如“1”代表检测到物体)。
  2. 为Feather添加蜂鸣器/输出组件

    • 进入“Filament-Alarm-Light”的设备页面。
    • 点击“+”添加组件。由于我们要控制的是一个通过晶体管驱动的5V警示灯,我们可以将其视为一个简单的数字输出设备。在组件中搜索“Buzzer 5V”“Switch”。这里选择“Buzzer 5V”组件比较直观。
    • 在配置页面,将“Buzzer 5V Pin”设置为D10。这对应了我们驱动电路中连接TIP120基极的引脚。
    • 点击创建。现在,这个组件代表了我们能通过云端控制开关的报警器。

4.3 创建云端联动逻辑(Actions)

这是实现智能报警的关键。我们将在Adafruit IO的“Actions”板块创建两条反应式规则。

  1. 创建“无耗材-触发报警”动作

    • 在Adafruit IO左侧导航栏,进入“Actions”页面,点击“New Action”
    • 给动作起名,如“Filament Runout - Turn ON Alarm”,描述可写“当传感器检测不到耗材时,打开警示灯”。
    • 在触发器(Trigger)区域,拖入一个“Reactive”块。
    • 在“Reactive”块配置中:
      • Feed: 选择“3D-Printer-Filament-Sensor”设备下的“TCRT1000”数据流。
      • Operator: 选择“<”(小于)。
      • Value: 输入0.5。因为传感器数字输出在有物体时为高电平(~3.3V,WipperSnapper可能映射为1),无物体时为低电平(0V,映射为0)。小于0.5即代表无耗材状态。
    • 在执行(Action)区域,拖入一个“Send to Feed”块。
    • 在“Send to Feed”块配置中:
      • Value: 输入1
      • to feed: 选择“Filament-Alarm-Light”设备下的“Buzzer 5V”数据流。发送“1”即命令报警器打开。
  2. 创建“有耗材-关闭报警”动作

    • 再次点击“New Action”
    • 起名“Filament Detected - Turn OFF Alarm”
    • 触发器配置:
      • Feed: 同样选择TCRT1000数据流。
      • Operator: 选择“>”(大于)。
      • Value: 输入0.5
    • 执行动作配置:
      • Value: 输入0
      • to feed: 同样选择报警器的Buzzer 5V数据流。

保存这两个动作。现在,整个物联网逻辑就配置完成了。当QT Py检测到耗材断料,状态值变为0,云端第一条规则被触发,向Feather发送“1”,报警灯亮起。当你换上新的耗材,传感器值变回1,云端第二条规则被触发,发送“0”,报警灯关闭。

5. 系统调试、优化与问题排查实录

即使按照指南操作,在实际部署中也可能遇到各种问题。下面是我在搭建和测试过程中遇到的一些典型情况及解决方法。

5.1 功能测试与校准

在正式安装到打印机之前,先进行桌面测试。

  1. 传感器测试:将组装好的检测终端通电。在Adafruit IO的设备页面,观察TCRT1000组件的数据卡片。用手指或一张白纸在传感器前方划过,你应该能看到数值在0和1之间快速切换。这证明传感器硬件和WipperSnapper配置工作正常。
  2. 报警联动测试:确保两个设备都在线。在TCRT1000数据卡片上,尝试手动输入一个值,比如点击输入框,输入“0”然后保存。几秒钟内,你应该听到旁边的报警器响起,警示灯开始旋转。再手动输入“1”,报警应停止。这验证了云端Actions规则配置正确。
  3. 距离校准:将一段耗材(建议用你常用的白色PLA)放入导丝轮。调整传感器支架在2020型材上的位置,或者轻微弯曲支架,使得耗材能稳定地从传感器窗口前1-3mm处通过。观察设备页面,确保此时传感器值稳定为“1”。移开耗材,值应变为“0”。反复测试几次,确保检测稳定,无抖动(数值在0和1之间频繁跳变)。如果出现抖动,可能是距离太远或太近,或者环境光干扰(TCRT1000对环境光有一定抗干扰能力,但强光直射可能影响),可以尝试稍微调整位置或增加一个简单的遮光罩。

5.2 常见问题排查速查表

问题现象可能原因排查步骤与解决方案
设备无法连接Wi-Fi/Adafruit IO1. Wi-Fi密码错误或含特殊字符。
2. 连接的是5GHz网络。
3. 网络信号太弱。
4. 板载Wi-Fi天线接触不良(罕见)。
1. 检查密码,最好使用纯字母数字组合。
2. 确保连接2.4GHz频段的SSID。
3. 将设备靠近路由器测试。
4. 尝试重新烧录固件,并确保在配置Wi-Fi时设备处于配网模式(按提示操作)。
传感器状态始终为0或始终为11. 接线错误(A1、5V、GND接错)。
2. 传感器与耗材距离不合适。
3. 传感器模块损坏。
4. WipperSnapper中引脚配置错误。
1. 用万用表检查QT Py上A1引脚与传感器信号线是否连通。
2. 调整耗材与传感器的距离,并在设备页面观察实时数据变化。
3. 更换传感器模块测试。
4. 在WipperSnapper设备页面检查TCRT1000组件是否绑定在正确的引脚(A1)。
报警器不响,但云端显示已发送指令1. Feather设备离线。
2. 驱动电路焊接错误(特别是晶体管C/E极接反)。
3. 限流电阻虚焊或阻值错误。
4. 警示灯本身损坏或供电不足。
1. 检查Feather设备页面是否在线,指示灯是否正常。
2. 用万用表测量Feather D10引脚,在触发报警时电压是否从0V跳变到~3.3V。
3. 检查TIP120电路:D10高电平时,测量晶体管C-E极间电压,应接近0V(导通);低电平时应为5V左右(截止)。
4. 直接将警示灯接5V和GND,测试其本身是否工作。
报警器常亮或不听指令1. 晶体管击穿短路(C-E极直通)。
2. Feather的D10引脚模式配置可能有误(但在WipperSnapper中通常已自动处理)。
3. 云端Actions规则配置错误,例如操作符方向弄反。
1. 断电后,用万用表测量TIP120的C-E极间电阻,正常应为高阻态(兆欧级)。如果电阻很小,则晶体管已损坏,需更换。
2. 在WipperSnapper中检查Buzzer 5V组件配置的引脚是否为D10。
3. 仔细复查云端两条Actions的触发条件和发送值是否正确对应。
系统有延迟1. Wi-Fi网络不稳定。
2. Adafruit IO免费账户有数据速率限制。
3. 传感器“Return Interval”设置为固定时间间隔而非“On Change”。
1. 优化设备摆放位置,增强Wi-Fi信号。
2. 免费账户的延迟通常在几秒内,属于正常现象。对于耗材检测场景,延迟几秒完全可以接受。
3. 确保传感器组件设置为“On Change”,这是最省流量和最快响应的模式。

5.3 进阶优化与扩展思路

基础系统运行稳定后,你可以考虑以下优化:

  • 增加冗余通知:除了本地声光报警,你可以在Adafruit IO中创建更多的Action,当耗材用尽时,同时向你的手机发送Telegram消息、电子邮件,甚至触发IFTTT Webhook来控制智能插座关闭打印机电源。
  • 状态面板:在Adafruit IO上创建一个专属的仪表盘(Dashboard),将传感器状态和报警器状态以开关、指示灯等控件形式展示,实现一个集中的监控界面。
  • 数据记录与分析:虽然本项目只用了状态变化,但Adafruit IO会默默记录所有数据。你可以查看TCRT1000数据流的历史图表,分析耗材的使用时长,为预估耗材剩余量提供粗略参考。
  • 功耗优化:如果希望检测终端使用电池供电,可以将QT Py的传感器读取间隔设置为一个较长的固定值(如30秒),并启用ESP32的深度睡眠功能。但这需要在WipperSnapper中配置更复杂的组件,或者退回到编写Arduino代码实现。

这个基于WipperSnapper的IoT耗材检测项目,从一个具体的痛点出发,展示了无代码物联网开发的便捷与强大。它不仅仅是一个解决打印缺料的小工具,更是一个理解物联网数据流、云端逻辑触发和硬件联动的绝佳范例。你可以将这套模式轻松迁移到其他场景,比如仓库门磁报警、植物土壤湿度监控、宠物喂食器状态检测等等。硬件是骨架,WipperSnapper和Adafruit IO赋予了它感知和反应的神经与大脑,而你的创意,才是让它真正活起来的灵魂。

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

终极Citra 3DS模拟器完整指南:在电脑上免费畅玩任天堂3DS游戏

终极Citra 3DS模拟器完整指南&#xff1a;在电脑上免费畅玩任天堂3DS游戏 【免费下载链接】citra A Nintendo 3DS Emulator 项目地址: https://gitcode.com/GitHub_Trending/ci/citra 想要在电脑上重温《精灵宝可梦》系列、《塞尔达传说》等经典3DS游戏吗&#xff1f;Ci…

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

别光看狼吃羊了!用NetLogo 6.3.0从零搭建一个病毒传播模型(附完整代码)

用NetLogo构建病毒传播模型&#xff1a;从理论到实践的完整指南 在数字时代&#xff0c;流行病学研究正经历着一场革命性的变革。传统的数学方程和统计方法虽然精确&#xff0c;但往往难以捕捉人群互动中的复杂动态。这正是多主体建模工具如NetLogo大显身手的领域——它让我们能…

作者头像 李华
网站建设 2026/5/16 16:15:47

使用Taotoken后Nodejs项目的大模型API延迟与用量观测体验

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用Taotoken后Nodejs项目的大模型API延迟与用量观测体验 1. 项目背景与接入动机 在Node.js项目中集成大模型能力时&#xff0c;开…

作者头像 李华
网站建设 2026/5/16 16:14:31

Whisky完整指南:在macOS上运行Windows应用的终极解决方案

Whisky完整指南&#xff1a;在macOS上运行Windows应用的终极解决方案 【免费下载链接】Whisky A modern Wine wrapper for macOS built with SwiftUI 项目地址: https://gitcode.com/gh_mirrors/wh/Whisky 想要在Apple Silicon Mac上流畅运行Windows专属软件和游戏&…

作者头像 李华