继电器串口控制设备

基于ATtiny85的USB CDC ACM设备,通过串口断信号控制感应继电器,支持USB设备名称动态修改和Python API控制。

  • by dmikushin
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 dmikushin/attiny_relay2

使用说明

ATtiny85 CDC ACM继电器控制器

DigiSpark ATtiny85上的USB CDC ACM设备(ttyACM),用于通过串行中断信号控制感应继电器。

继电器逻辑

PB0状态 继电器 触发器
LOW ON(导通) 正常状态/断路已清除
HIGH OFF(打开,否) 串行中断已断言

自定义USB设备名称

USB产品名称存储在EEPROM中,可以在运行时更改。 发送命令 0xAA <length> <name bytes> 在ttyACM数据信道上。 设备将名称写入EEPROM,重新加载USB描述符,并重新枚举——不需要重新启动。 新名称在中可见 lsusb.最大长度:64个字符。

默认名称: ATtiny Relay

固件

要求: avr-gcc, micronucleus

make            # build firmware
make flash      # flash via micronucleus (re-plug DigiSpark when prompted)

V-USB库在首次构建时会自动克隆。

Python安装

pip install .          # API library only
pip install .[mcp]     # API + MCP server

Python API

from relay_control import RelayControl

with RelayControl() as r:
    r.relay_off()               # PB0 HIGH, relay OFF (serial break)
    r.relay_on()                # PB0 LOW, relay ON (break cleared)
    r.set_name("My Relay")      # change USB device name (auto-reconnects)
    print(r.name)               # read current USB product name

MCP服务器

该软件包提供了一个MCP服务器,通过以下方式与Claude Code一起使用 mcp-compressor.

设置

添加 ~/.claude.json 在 mcpServers 章节:

{
  "mcpServers": {
    "usb-relay": {
      "command": "mcp-compressor",
      "args": ["-n", "usb-relay", "-c", "max", "usb-relay-mcp"]
    }
  }
}

编辑配置后重新启动Claude Code。

工具

工具 说明
relay_list 列出连接的中继设备(端口、USB地址、名称)
relay_on(device) 打开继电器--接受 /dev/ttyACMx 或USB地址,如 1-2
relay_off(device) 关闭继电器
relay_set_name(device, name) 更改USB设备名称(1–64个ASCII字符)

测试

make test       # runs pytest against real hardware