要让 Digispark ATtiny85 跑起来:从 ArminJo 的 GitHub 开发板网址安装 Digistump AVR Boards(旧的 digistump.com 链接已经失效),选择 Digispark 并把时钟设为 16.5 MHz,先在板子没插上的情况下点 Upload,等 IDE 提示时才插上。整个过程都不会出现 COM 口,这是正常的。你放弃了引脚和内存——只有 6 个 I/O 引脚、约 6KB 闪存——换来一样 Arduino Nano 做不到的本事:当一个真正的 USB 键盘。
我们的 Digispark ATtiny85 开发板只有拇指指甲大小,USB 插头直接用 PCB 板边做成。本文先装好环境、让 LED 闪起来,再做这块板子天生就适合的作品:给电脑用的单键宏按键。开始前先留一点时间焊接——附带的公排针是散装的,还没焊上。
Digispark 能做什么 Arduino Nano 做不到的事?
和 Arduino Nano V3 相比,Digispark 在引脚、内存和调试方便程度上都输,赢的是体积,外加一项真本事。这项本事来自两块板子跟 USB 打交道的方式:Nano 上的 CH340 芯片是功能固定的 USB 转串口桥,电脑永远只看到一个串口。ATtiny85 本身完全没有 USB 硬件——Digispark 是在其中两个引脚上用软件逐位模拟(bit-bang)USB 协议,也就是 V-USB 技术,所以要向电脑自称什么设备,由芯片自己决定。让它自称键盘,它就能在任何电脑上打字,电脑那边什么都不用装。
| Digispark ATtiny85 | Arduino Nano V3 | |
|---|---|---|
| I/O 引脚 | 6 个(放心用的只有 3 个——见下文引脚分配) | 14 个数字 + 8 个模拟 |
| 程序可用闪存 | 约 6KB | 32KB 中约 30KB |
| SRAM | 512 字节 | 2KB |
| 串口监视器 | USB 插头不提供 | 有,经由 CH340 |
| 当 USB 键盘 | 可以(软件 USB) | 不行(固定的串口桥) |
| 上传方式 | 提示时再插上,没有 COM 口 | 正常的 COM 口上传 |
| 板子尺寸 | 约 25 × 19mm | 约 45 × 18mm |
零件清单:Digispark USB 宏按键
Parts list
焊一次排针要用的焊接工具、外接闪灯用的 LED 和电阻包,以及项目超出六个引脚时可以换用的 Nano V3。
Arduino IDE 怎样安装 Digispark 开发板包?
旧的 Digispark 教程第一步就会卡住:它们让 IDE 去 digistump.com 找开发板包网址,而这个域名已经失效了。这个包以 ArminJo 的 DigistumpArduino 分支延续下来:它的 README 从 2023 年起就标明不再维护,但在新版 Arduino IDE(2.x)上照样能用,还附带更新过的上传工具和 Windows 驱动。
打开 File → Preferences → Additional boards manager URLs,粘贴:
https://raw.githubusercontent.com/ArminJo/DigistumpArduino/master/package_digistump_index.json
在 Tools → Board → Boards Manager 里搜索 Digistump,安装 Digistump AVR Boards(1.7.5 版可以顺利安装)。选择 Tools → Board → Digistump AVR Boards → Digispark,再把 Tools → Clock 从默认的 16 MHz – No USB 改成 16.5 MHz – For V-USB。低速 USB 每秒传送 150 万个位,16.5 MHz 正好让每个位对应 11 个时钟周期——V-USB 那段逐个周期手工算好的代码,就是建立在这个时序上的。时钟选 No USB 也照样能上传,因为 bootloader 总是以它自己的 16.5 MHz 运行;但这样编译出来的键盘程序虽然编译毫无报错,却永远不会以键盘的身份出现。
Windows 需要装一次驱动,因为 bootloader 向电脑报的是厂商自定义的 USB 设备,而不是 Windows 本来就会驱动的键盘或串口这类标准设备。驱动就在开发板包里:到 %LOCALAPPDATA%\Arduino15\packages\digistump\tools\micronucleus\2.6\ 下的 Digistump_Drivers 文件夹(把这个路径粘贴到文件资源管理器的地址栏),运行 post_install.bat(它会启动附带的 DPinst64.exe 驱动安装程序,32 位 Windows 则是 DPinst.exe)。macOS 什么都不用装;Linux 则要加上 micronucleus 的 udev 规则,上传时才不用 sudo。
为什么没有 COM 口?
Digispark 所有奇怪的地方,都源自一个事实:只有芯片上的代码正在用软件模拟 USB 时,USB 才存在;而在上电那一刻——也就是每次上传发生的时候——跑的那段代码是 bootloader。这个 bootloader 叫 micronucleus,上电后只运行大约头五到六秒,期间把板子报成一个小小的 USB 设备——不是串口——然后把芯片交给你的程序。除非你的程序自己带 USB 库,否则之后就再也没有代码回应电脑;可板上 1–1.5kΩ 的上拉电阻仍在向电脑宣告“这里有设备”,所以 Windows 可能会弹出 USB device not recognized(无法识别的 USB 设备)——跑闪灯程序时这是意料之中的,完全无害。
上传工具就是围绕这段时间窗设计的,所以顺序是反过来的:先不插板子,点 Upload;IDE 编译完后会显示 “Please plug in the device (will time out in 60 seconds) …”(请插入设备,60 秒后超时);这时才插上;bootloader 接收程序、写进闪存,然后跳过去运行。

有三件事,第一次遇到时看起来都像故障。Tools → Port 一直是灰色的——根本没有端口可选,以后也永远不会有。USB 插头也给不了普通的串口监视器:ATtiny85 没有硬件 UART,插头只承载当前运行的代码所模拟的那个 USB 设备,而开发板包附带的 USB 虚拟串口库(DigiCDC)自己就警告,在 XP 之后的 Windows 和较新的 Linux 内核上很可能用不了。还有,每次上电,你的程序都会晚大约五秒才开始,因为 bootloader 总是先占用它那段时间窗。
怎样让板载 LED 闪起来?
Digispark 的第一个测试不需要任何零件。板上两颗小 LED 中,一颗是常亮的电源灯;另一颗在 rev3 “model A” 款(就是这一款)上接在 P1——开发板包本身就把 LED_BUILTIN 定义为 P1。其他来源的仿制板还有第二种版本,LED 接在 P0,所以程序把引脚号放在一个常量里;如果只有电源灯亮,第一个标准检查就是把它改成 0。
// Digispark 第一个闪灯程序 - 板载 LED 在 P1(rev3 "model A" 款)。
// 如果没有闪,把 LED_PIN 改成 0:少数仿制板把 LED 接到 P0。
const uint8_t LED_PIN = 1;
void setup() {
pinMode(LED_PIN, OUTPUT);
}
void loop() {
digitalWrite(LED_PIN, HIGH);
delay(500);
digitalWrite(LED_PIN, LOW);
delay(500);
}
先不插板子点 Upload,提示时插上,上传一结束 LED 就开始闪,因为新程序会立刻启动。在 16.5 MHz 下它编译出来只有 582 字节,不到可用空间的十分之一。
六个引脚里真正能用的是哪几个?
Digispark 有“六个 I/O 引脚”没错,但其中三个都有本职工作。P3 和 P4 是 USB 数据线,接在上面的东西会和 USB 通信打架——即使 USB 闲着,1–1.5kΩ 的上拉电阻也会把 P3 往 5V 拉,而起保护作用的齐纳二极管会把两条线都钳在 USB 3.3V 信号电平附近。P5 在大多数板子上被熔丝设成复位脚:一拉低,芯片就重启。剩下的 P0、P1 和 P2,才是放心用的主力:
| 引脚 | 好用程度 | 说明 |
|---|---|---|
| P0 | 随便用 | PWM;以后加传感器时可做 I2C SDA |
| P1 | 随便用 | PWM;接着板载 LED,最适合做输出 |
| P2 | 随便用 | 模拟输入(ADC1);I2C SCL |
| P3 | 避免使用 | USB D−,板上带 1–1.5kΩ 上拉电阻 |
| P4 | 避免使用 | USB D+;只有完全不用 USB 的项目才能当模拟 ADC2 |
| P5 | 当作不可用 | 大多数板子上是复位脚 |
想外接一颗 LED:用一颗 5mm 红色 LED,长脚朝 P0,经过电阻包里的一颗 330Ω 电阻接到 GND,闪灯程序的引脚改成 0。LED 压降约 2V,所以 3V ÷ 330Ω ≈ 9mA,够亮,也远在引脚的电流上限之内;这种蓝色五环电阻的 330Ω 色环是橙-橙-黑-黑-棕。电源来自 USB 口的 5V;离开电脑使用时,从 VIN 输入 7–12V,由那颗银色、带散热片的 78M05 稳压器产生 5V——如果两边同时接上,板上 USB 供电线路里的一颗二极管会挡住稳压器的 5V,不让它倒灌进你的电脑。
怎样做单键宏按键?
现在来做 Nano 模仿不了的作品:一个会打字的按键。按一下,就把你每天都要重打一遍的一句话——客服回复、邮件落款、会议链接——打进你自己电脑上当前激活的窗口,因为电脑看到的只是一个普通键盘。
先到焊台:把散装排针掰成一段六针和一段三针,分别焊进 P5–P0 那一列和 5V/GND/VIN 那一排(工具是烙铁和焊锡丝,技巧见我们的排针焊接教程)。先把还没焊的板子插进 USB 口试一下,记住哪一面朝上,然后让排针从那一面朝上焊:笔记本 USB 口下方只剩大约一厘米空间,排针朝下再加上杜邦线的胶壳,根本放不下。每焊完一个点,就把烫手的烙铁放回烙铁架。

Digispark 在布局上有个特别之处:它运行时从不放在面包板上,因为整块板子就住在 USB 口里。只有按键放在 170 孔迷你面包板上,中间靠两条公对母杜邦线连接——母头套在板子新焊好的排针上,公头插进面包板。把 6×6mm 轻触按键跨插在面包板中间的凹槽上,接对角的两只脚:四只脚在开关内部两两相连,而对角的两只脚一定分属不同的两对,所以只有按下时才会接通(两对脚的更多说明见我们的按键开关教程):
| 从 | 到 | 杜邦线 |
|---|---|---|
| 按键的一只脚(一个角) | Digispark P2 | 公对母杜邦线,母头套在 P2 的排针上 |
| 按键对角的那只脚 | Digispark GND | 公对母杜邦线,母头套在 GND 排针上 |
不需要电阻:程序会打开 ATtiny85 的内部上拉电阻——芯片内建、阻值几十 kΩ 的电阻,把 P2 保持在 5V——所以引脚平时读到 HIGH,直到按键把它短接到 GND。键盘这一边用的是 DigiKeyboard 库,开发板包里已经自带:
// Digispark 单键宏按键:按一下,就把预存的一句话打进当前窗口。
// 按键接在 P2 和 GND 之间。P2 用芯片的内部上拉,所以不用电阻。
#include "DigiKeyboard.h"
const uint8_t BUTTON_PIN = 2; // P2 - 避开 USB 引脚 P3/P4
bool wasPressed = false;
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP); // 平时读 HIGH,按下读 LOW
}
void loop() {
bool isPressed = (digitalRead(BUTTON_PIN) == LOW);
if (isPressed && !wasPressed) { // 每按一次只触发一次,不是每轮 loop 都触发
DigiKeyboard.sendKeyStroke(0); // 空白报告:有些旧电脑会漏掉第一个字符
// 只能打出键盘上有的英文字母、数字和符号,打不出中文
DigiKeyboard.print(F("Thank you for your order. We will share the tracking number shortly."));
}
wasPressed = isPressed;
DigiKeyboard.delay(20); // 既是消抖,也让程序继续回应电脑的 USB 轮询
}
关键机制就在三行代码里。边沿检测(isPressed && !wasPressed)让每按一次只触发一次,而不是每跑一轮 loop 就触发一次——否则按住不放时,这句话会一直重复打下去,直到你松手。sendKeyStroke(0) 先送出一个不含任何按键的空白报告;库自带的示例提到,有些旧电脑在闲置一段时间后会漏掉第一个字符。最后,loop 结尾用的是 DigiKeyboard.delay(20) 而不是普通的 delay(),因为 V-USB 必须在大约 50ms 内处理电脑发来的每个请求,否则电脑就会放弃这个键盘——库里的 delay 在等待期间会继续回应,这 20ms 同时也起到消抖作用。整个程序在 16.5 MHz 下编译出来是 2,860 字节,占可用空间的 43%。
关于字符集,有一点要说明:USB 键盘送出的是按键位置,不是字母,每个位置打出什么字,由电脑的键盘布局设置决定。DigiKeyboard 库默认假设是美式(US)布局,所以设成其他布局的电脑会打出错误的符号。马来西亚的电脑大多用 US 布局;如果你的不是,在 include 那一行上方加上对应的 #define LAYOUT_...——库里自带二十几种布局。
反过来说:这个按键之所以管用,是因为电脑完全信任键盘,所以任何被识别成键盘的设备,都能以你的完整用户权限打字。这正是为什么要给自己做的小装置贴上标签,也绝不要把来历不明的 USB 设备插进自己的电脑——这不是一种可以拿去对付别人电脑的技巧。

我们常见的错误
点 Upload 时板子已经插着。Digispark 的 bootloader 只在上电后的头几秒里自报身份,所以一块早就插在 USB 口上的板子对电脑来说是隐形的,IDE 只会一路倒数到超时。拔掉,点 Upload,提示时再插上——用机箱前面板的 USB 口或 USB 延长线,这套动作就轻松多了。
时钟保留默认值。闪灯程序在 16 MHz – No USB 下也能跑,但宏按键就永远不会以键盘身份出现。改选 16.5 MHz,重新上传。
按提示插上了,还是超时。在 Windows 上,先确认附带的驱动已经装好。然后换一个 USB 口试试:V-USB 用软件产生的信号贴着 USB 时序要求的边缘,有些 USB 3 口不认它,换成 USB 2.0 口或经过 USB 集线器反而能用。
把项目接在 P3、P4 或 P5 上。症状让人摸不着头脑——上传失败、键盘消失、输入一变化芯片就重启——因为这几个引脚是 USB 数据线和复位脚。按键和传感器都接在 P0–P2。
常见问题
为什么 Arduino IDE 的端口列表里找不到我的 Digispark?
因为它不是串口设备。插上后大约五秒内,bootloader 用软件模拟 USB,把自己报成一个小小的非串口设备——上传工具等的就是这段时间窗。没有 COM 口、Port 菜单是灰色的,都很正常。
Digispark 能取代 Arduino Nano 吗?
做一件小事的话,可以——一个按键、一种 LED 效果、一个传感器、一个 USB 键盘小装置。要靠串口打印调试、需要三个以上放心用的引脚,或要用比较大的库,就该用 Nano V3;要做 Wi-Fi 项目,则从我们的 ESP32-C3 Super Mini 入门教程开始。
没有串口监视器,怎么调试?
粗略的状态,用 P1 LED 的闪烁模式来表示;另外还有这块板子独有的办法——先打开一个文本编辑器并让它处于焦点,再用 DigiKeyboard.print() 把变量打出来,让板子自己打出调试记录。需要持续串口输出的逻辑,先在 Nano 上开发好再移植过来,会容易得多。
Digispark 的程序实际能用多少闪存?
ATtiny85 的 8,192 字节闪存要和 bootloader 共用,所以程序能用的是 micronucleus 剩下的部分:用当前开发板包的 bootloader 是 6,650 字节,仍带着旧版出厂 bootloader 的板子约 6,012 字节——这就是为什么偶尔会出现 IDE 接受了的程序,上传时却被报“太大”的情况。
宏按键需要在电脑上安装软件吗?
不需要——这正是 USB HID 的意义。每个桌面操作系统都自带通用键盘支持,所以 Digispark 一完成枚举,电脑就把它当作标准键盘接受;前面的驱动步骤只是为了在你自己的 Windows 开发电脑上上传程序。插上后大约五秒,bootloader 交出控制权,按键就开始工作。
最后更新:2026年11月。有问题?WhatsApp 联系我们。



Digispark Attiny85 USB Development Board Arduino Compatible Black Board ATTINY 85 Development
MB102 Breadboard 170 400 830 Holes Breadboard Donut Board Arduino Prototype Multi Color - MINI BREADBOARD 170 HOLES (WHITE)
40pcs Dupont Wire 10cm 20cm 30cm for Breadboard DIY Experiment Jumper Wire Breadboard wire - DUPONT WIRE M-F 30CM
Tactile Button Momentary Switch 6mm x 6mm x 5mm Push Button 4 Pin
Arduino NANO Compatible NANO V3 - ATMEGA328P with C340G - Mini USB - Microcontroller Project
Round Head LED 3mm / 5mm / 8mm - Red/Yellow/Blue/Green/White - 5mm LED (RED)
400 pcs 1/4W Resistor Pack Resistor Kit 20 Common Value with 20 each
80W Electronics Soldering Iron with LCD Display Ajustable Temperature Microconstroller Electronic Project
50g Soldering Wire Lead with Flux Core 1mm Diameter