文中以TPYBoard单片机开发板为例子解读了利用micropython开展HID机器设备测试的关键方式,应用mt7681控制模块开展了一个简单的实验,完成了手机上无线遥控数字键盘的测试。
0×01前言
Micropython即运作在微处理器上的Python,只需你懂得python3.x,就可以给你像应用arduino那般开展硬件设计。伴随着micropython的公布,早已有愈来愈多的人科学研究和利用其开展新项目开发设计。自己也开展了一些科学研究,发觉利用python开展实际操作的确很便捷,非常简单。现阶段适用micropython的单片机开发板有很多,如pyboard、pyMagic、TPYBoard等。
PYmagic
pyboard 1.0
tpyboard V102
近期从在网上搞了一块TPYBoardV101(官方网站开展了一下科学研究,尤其是对其本身的USB-HID作用开展了测试,让人意外惊喜的是,你能在仅懂python的状况下,开展HID触摸键盘的测试。
0×02 TPYBoardV101模拟键盘
该木板的操作方法新手入门,文中中忽略,有兴趣爱好的能够查询其网址中,在开展电脑键盘仿真模拟时,每一次推送了八个标识符,只需弄清楚了这八个标识符的含意,就可以开展HID仿真模拟了。
电脑键盘仿真模拟时,每一次要推送的八个标识符,实际为BYTE1、BYTE2、 BYTE3、 BYTE4、 BYTE5 、BYTE6、 BYTE7、 BYTE8。在其中BYTE1用于完成按键:
BYTE1–|–bit0:Left Control按下时为1
|–bit1:Left Shift按下时为1
|–bit2:Left Alt按下时为1
|–bit3:Left GUI按下时为1
|–bit4:Right Control按下时为1
|–bit5:Right Shift按下时为1
|–bit6:Right Alt按下时为1
|–bit7:Right GUI按下时为1
BYTE3到BYTE8是实际功能键。
如:按下leftshift a,则推送0×02,0×00,0×04,0×00,0×00,0×00,0×00,0×00。
这儿以按下leftGUI R来实际解读完成全过程。
第一步:修改boot.py文件,编码以下:
import machine
import pyb
#pyb.main('main.py')
# main script to run after this one
#pyb.usb_mode('CDC MSC')
# act as a serial and a storage device
pyb.usb_mode('CDC HID',hid=pyb.hid_keyboard)
第二步,修改main.py文件,编码以下:
# main.py -- put your code here!
hid=pyb.USB_HID()
def release_key_once():
buf=bytearray(8) # report is 8 bytes long
buf[2]=0
hid.send(buf) # key released
pyb.delay(10)
def press_key_once(key):
buf=bytearray(8) # report is 8 bytes long
buf[2]=key
hid.send(buf) # key released
pyb.delay(10)
def press_2mey(key1,key2):
buf=bytearray(8) # report is 8 bytes long
buf[0]=key1
buf[2]=key2
hid.send(buf) # key released
pyb.delay(10)
def release_2mey():
buf=bytearray(8) # report is 8 bytes long
buf[0]=0
buf[2]=0
hid.send(buf) # key released
pyb.delay(10)
pyb.delay(1000) #逐渐添加一秒廷时
press_2mey(0x08,0x15)#实际键值见附则一部分
release_2mey()
第三步,安全性撤出TPYBoardv101,随后按一下RST键,能够见到一秒后“运作”对话框弹出来。
0×03 简易的HID测试
测试开启“运作”对话框,键入cmd,随后弹出来cmd后,键入shutdown-s -t 60 ,即60秒后自动开关机。假如前边早已干了boot.py的修改,这儿就不用再开展修改了,立即修改main.py就可以了。
# main.py -- put your code here!
hid=pyb.USB_HID()
def release_key_once():
buf=bytearray(8) # report is 8 bytes long
buf[2]=0
hid.send(buf) # key released
pyb.delay(10)
def press_key_once(key):
buf=bytearray(8) # report is 8 bytes long
buf[2]=key
hid.send(buf) # key released
pyb.delay(10)
def press_2mey(key1,key2):
buf=bytearray(8) # report is 8 bytes long
buf[0]=key1
buf[2]=key2
hid.send(buf) # key released
pyb.delay(10)
def release_2mey():
buf=bytearray(8) # report is 8 bytes long
buf[0]=0
buf[2]=0
hid.send(buf) # key released
pyb.delay(10)
pyb.delay(1000) #逐渐添加一秒廷时
press_2mey(0x08,0x15)#实际键值见附则一部分