树莓派PiPico BadUSB 教程 安装 CircuitPython for Pi Pico 过程省略
添加adafruit_hid库到Lib文件夹 过程省略
核心模块说明
模块
用途
usb_hid.devices
获取已连接的 HID 设备列表(通常只有 1 个)
adafruit_hid.keyboard.Keyboard
模拟键盘按键
adafruit_hid.keycode.Keycode
定义按键常量(如 Keycode.A, Keycode.ENTER)
adafruit_hid.mouse.Mouse
模拟鼠标移动/点击
adafruit_hid.consumer_control.ConsumerControl
控制音量、播放等
adafruit_hid.consumer_control_code.ConsumerControlCode
多媒体按键常量
具体操作 模拟键盘 先导入以下库
1 2 3 4 5 6 7 import timeimport usb_hid import digitalio import board from adafruit_hid.keyboard import Keyboard from adafruit_hid.keycode import Keycode from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS
可以先time.sleep(2)来等待系统识别设备
接下来,定义主程序函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 def main (): keyboard = Keyboard(usb_hid.devices) layout = KeyboardLayoutUS(keyboard) keyboard.send(Keycode.GUI, Keycode.R) time.sleep(0.3 ) layout.write("notepad\n" ) time.sleep(1 ) layout.write("This is a safe demo from Raspberry Pi Pico!\n" ) layout.write("Time: " + str (time.monotonic()) + "\n" )
配置紧急停止引脚(使用 GP1)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 emergency_stop = digitalio.DigitalInOut(board.GP1) emergency_stop.direction = digitalio.Direction.INPUT emergency_stop.pull = digitalio.Pull.UP def wait_with_abort (seconds, abort_pin ): """倒计时,期间检测是否触发紧急停止""" print (f"倒计时 {seconds} 秒... (短接 GP1 到 GND 可取消)" ) for i in range (seconds, 0 , -1 ): if not abort_pin.value: print ("⚠️ 检测到紧急停止!程序终止。" ) return False print (f"{i} ..." ) time.sleep(1 ) return True
然后就是主程序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 print ("程序启动!" )if not wait_with_abort(2 , emergency_stop): print ("已安全退出,未执行任何操作。" ) else : print ("开始执行自动化任务..." ) try : main() print ("✅ 任务完成!" ) except Exception as e: print ("❌ 执行出错:" , e)
演示代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 import timeimport usb_hidimport digitalioimport boardfrom adafruit_hid.keyboard import Keyboardfrom adafruit_hid.keycode import Keycodefrom adafruit_hid.keyboard_layout_us import KeyboardLayoutUSemergency_stop = digitalio.DigitalInOut(board.GP1) emergency_stop.direction = digitalio.Direction.INPUT emergency_stop.pull = digitalio.Pull.UP def wait_with_abort (seconds, abort_pin ): """倒计时,期间检测是否触发紧急停止""" print (f"倒计时 {seconds} 秒... (短接 GP1 到 GND 可取消)" ) for i in range (seconds, 0 , -1 ): if not abort_pin.value: print ("⚠️ 检测到紧急停止!程序终止。" ) return False print (f"{i} ..." ) time.sleep(1 ) return True def main (): keyboard = Keyboard(usb_hid.devices) layout = KeyboardLayoutUS(keyboard) keyboard.send(Keycode.GUI, Keycode.R) time.sleep(0.3 ) layout.write("notepad\n" ) time.sleep(1 ) layout.write("This is a safe demo from Raspberry Pi Pico!\n" ) layout.write("Time: " + str (time.monotonic()) + "\n" ) print ("程序启动!" )if not wait_with_abort(2 , emergency_stop): print ("已安全退出,未执行任何操作。" ) else : print ("开始执行自动化任务..." ) try : main() print ("✅ 任务完成!" ) except Exception as e: print ("❌ 执行出错:" , e) print ("程序结束。" )