Skip to main content

在 Wio Terminal 上使用 USB 鼠标

本教程介绍如何在 Wio Terminal 上使用 USB 鼠标。您可以通过这个示例实现从鼠标向 Wio Terminal 输入数据!

要求

要使用此示例,您需要一个 USB OTG 适配器 和一个 USB 转串口模块,其中 OTG 适配器用于连接鼠标,USB 转串口模块用于读取 Wio Terminal 的输出。

步骤

  1. 使用 Arduino IDE 将代码上传到 Wio Terminal。

  2. 拔掉用于上传代码的 USB Type-C 线缆。

  3. 将您的 鼠标 连接到 OTG 适配器,然后连接到 Wio Terminal 的 USB-C 端口。

    • 鼠标 -> OTG 适配器 -> Wio Terminal(Type-C 端口)
  4. 按以下方式将 USB 转串口模块 连接到 Wio Terminal:

    • TXD(USB 转串口模块) -> RXD(Wio Terminal 的引脚 10)
    • RXD(USB 转串口模块) -> TXD(Wio Terminal 的引脚 8)
    • 3.3V(USB 转串口模块) -> 3.3V(Wio Terminal 的引脚 1)
    • GND(USB 转串口模块) -> GND(Wio Terminal 的引脚 6)
  5. 将 USB 转串口模块连接到您的计算机。根据所使用的 USB 转串口模块,下载相应的 USB 驱动程序,以便您的计算机能够识别它。

  6. 对于 Windows 用户,您可以打开设备管理器检查是否被识别。应该会出现一个新的 COM 端口。

    • 对于 Mac 用户,在终端中使用 ls /dev/cu.* 来检查模块的可用性。
  7. 查看串口数据:

    • Windows: 下载并安装 PuTTY。选择 Serial,将串行线路中的 COM 更改为设备管理器中出现的 COM 端口,同时将速度更改为 115200 并按 Open。应该会出现一个终端。现在,如果您开始按下并移动鼠标,您应该能看到串口输出!

    • Mac: 打开终端并使用 brew install screen 安装 screen。安装完成后,使用命令 screen /dev/cu.usbserial 115200,其中 /dev/cu.usbserial 应与上面的匹配。您应该能看到来自 Wio Terminal 的串口输出!

重要提示: 由于 Wio Terminal 的 USB 端口正在用于 USB 功能,要向 Wio Terminal 上传另一个程序需要通过按两次电源按钮进入引导加载程序模式(LED 会变暗),然后您应该能再次看到端口。

USB 主机配置

要在 Wio Terminal 上启用 USB 主机功能,您必须配置两个引脚。需要将 PIN_USB_HOST_ENABLE 设置为 LOW,将 OUTPUT_CTR_5V 设置为 HIGH

您可以通过在 void setup() 中添加以下代码来简单实现:

digitalWrite(PIN_USB_HOST_ENABLE, LOW);
digitalWrite(OUTPUT_CTR_5V, HIGH);

完整代码

#include <MouseController.h>
#define SerialDebug Serial1

uint32_t lastUSBstate = 0;

// 初始化USB控制器
USBHost usb;

// 将鼠标控制器连接到USB
MouseController mouse(usb);

// 鼠标按钮状态变量
bool leftButton = false;
bool middleButton = false;
bool rightButton = false;

// 此函数拦截鼠标移动
void mouseMoved() {
SerialDebug.print("移动: ");
SerialDebug.print(mouse.getXChange());
SerialDebug.print(", ");
SerialDebug.println(mouse.getYChange());
}

// 此函数拦截按下按钮时的鼠标移动
void mouseDragged() {
SerialDebug.print("拖拽: ");
SerialDebug.print(mouse.getXChange());
SerialDebug.print(", ");
SerialDebug.println(mouse.getYChange());
}

// 此函数拦截鼠标按钮按下
void mousePressed() {
SerialDebug.print("按下: ");
if (mouse.getButton(LEFT_BUTTON)) {
SerialDebug.print("L");
leftButton = true;
}
if (mouse.getButton(MIDDLE_BUTTON)) {
SerialDebug.print("M");
middleButton = true;
}
if (mouse.getButton(RIGHT_BUTTON)) {
SerialDebug.print("R");
rightButton = true;
}
SerialDebug.println();
}

// 此函数拦截鼠标按钮释放
void mouseReleased() {
SerialDebug.print("释放: ");
if (!mouse.getButton(LEFT_BUTTON) && leftButton == true) {
SerialDebug.print("L");
leftButton = false;
}
if (!mouse.getButton(MIDDLE_BUTTON) && middleButton == true) {
SerialDebug.print("M");
middleButton = false;
}
if (!mouse.getButton(RIGHT_BUTTON) && rightButton == true) {
SerialDebug.print("R");
rightButton = false;
}
SerialDebug.println();
}

void setup()
{
SerialDebug.begin( 115200 );
SerialDebug.println("鼠标控制器程序已启动");

if (usb.Init())
SerialDebug.println("USB主机未启动。");

delay( 20 );

//配置引脚以在Wio Terminal上启用USB主机
digitalWrite(PIN_USB_HOST_ENABLE, LOW);
digitalWrite(OUTPUT_CTR_5V, HIGH);

}

void loop()
{
// 处理USB任务
usb.Task();

uint32_t currentUSBstate = usb.getUsbTaskState();
if (lastUSBstate != currentUSBstate) {
SerialDebug.print("USB状态已更改: 0x");
SerialDebug.print(lastUSBstate, HEX);
SerialDebug.print(" -> 0x");
SerialDebug.println(currentUSBstate, HEX);
switch (currentUSBstate) {
case USB_ATTACHED_SUBSTATE_SETTLE: SerialDebug.println("设备已连接"); break;
case USB_DETACHED_SUBSTATE_WAIT_FOR_DEVICE: SerialDebug.println("已断开连接,等待设备"); break;
case USB_ATTACHED_SUBSTATE_RESET_DEVICE: SerialDebug.println("正在重置设备"); break;
case USB_ATTACHED_SUBSTATE_WAIT_RESET_COMPLETE: SerialDebug.println("重置完成"); break;
case USB_STATE_CONFIGURING: SerialDebug.println("USB配置中"); break;
case USB_STATE_RUNNING: SerialDebug.println("USB运行中"); break;
}
lastUSBstate = currentUSBstate;
}
}
Loading Comments...