【雕爷学编程】MicroPython手册之 pyboard 特定端口库 pyb.hid((buttons, x, y, z))

在这里插入图片描述

MicroPython是为了在嵌入式系统中运行Python 3编程语言而设计的轻量级版本解释器。与常规Python相比,MicroPython解释器体积小(仅100KB左右),通过编译成二进制Executable文件运行,执行效率较高。它使用了轻量级的垃圾回收机制并移除了大部分Python标准库,以适应资源限制的微控制器。

MicroPython主要特点包括:
1、语法和功能与标准Python兼容,易学易用。支持Python大多数核心语法。
2、对硬件直接访问和控制,像Arduino一样控制GPIO、I2C、SPI等。
3、强大的模块系统,提供文件系统、网络、图形界面等功能。
4、支持交叉编译生成高效的原生代码,速度比解释器快10-100倍。
5、代码量少,内存占用小,适合运行在MCU和内存小的开发板上。
6、开源许可,免费使用。Shell交互环境为开发测试提供便利。
7、内置I/O驱动支持大量微控制器平台,如ESP8266、ESP32、STM32、micro:bit、掌控板和PyBoard等。有活跃的社区。

MicroPython的应用场景包括:
1、为嵌入式产品快速构建原型和用户交互。
2、制作一些小型的可 programmable 硬件项目。
3、作为教育工具,帮助初学者学习Python和物联网编程。
4、构建智能设备固件,实现高级控制和云连接。
5、各种微控制器应用如物联网、嵌入式智能、机器人等。

使用MicroPython需要注意:
1、内存和Flash空间有限。
2、解释执行效率不如C语言。
3、部分库函数与标准版有差异。
4、针对平台优化语法,订正与标准Python的差异。
5、合理使用内存资源,避免频繁分配大内存块。
6、利用原生代码提升速度关键部位的性能。
7、适当使用抽象来封装底层硬件操作。

总体来说,MicroPython让Python进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。

在这里插入图片描述

pyboard是一个紧凑而强大的电子开发板,运行MicroPython。它通过USB连接到您的PC,为您提供一个USB闪存驱动器来保存Python脚本,以及用于即时编程的串行Python提示符(REPL)。需要微型 USB 电缆。适用于 Windows、Mac 和 Linux。

MicroPython是对Python(版本3.4)编程语言的完全重写,因此它适合并在微控制器上运行。它包括许多优化,因此它可以高效运行并使用很少的 RAM。

MicroPython在pyboard上运行裸机,本质上是一个Python操作系统。内置 pyb 模块包含用于控制板上可用外设的函数和类,例如 UART、I2C、SPI、ADC 和 DAC。观看此视频,了解 pyboard 的概述。

在这里插入图片描述

MicroPython的pyb.hid((buttons, x, y, z))是一个用于控制USB HID(人机接口设备)的函数。HID设备是指可以通过USB接口进行数据传输的设备,例如鼠标,键盘,游戏手柄等。

pyb.hid((buttons, x, y, z))的主要特点是:

它接受一个四元素的元组作为参数,分别表示按键状态,x轴移动量,y轴移动量和z轴移动量。
它可以在任何MicroPython程序中使用,只要在boot.py文件中设置了pyb.usb_mode(‘CDC+HID’)或者pyb.usb_mode(‘CDC+HID’, hid=pyb.hid_mouse)或者pyb.usb_mode(‘CDC+HID’, hid=pyb.hid_keyboard)。
它可以实现模拟鼠标或键盘的功能,根据不同的参数值发送不同的HID报告给USB主机。

pyb.hid((buttons, x, y, z))的应用场景有:

案例1:在需要使用鼠标控制电脑的场合,可以通过pyb.hid((buttons, x, y, z))发送鼠标移动或点击的信号。例如::

# main.py
import pyb
switch = pyb.Switch() # 创建开关对象
accel = pyb.Accel() # 创建加速度传感器对象
while not switch(): # 当开关没有按下时
    pyb.hid((0, accel.x(), accel.y(), 0)) # 根据加速度传感器的x和y轴值发送鼠标移动信号
    pyb.delay(20) # 延时20毫秒

案例2:在需要使用键盘输入文本或命令的场合,可以通过pyb.hid((buttons, x, y, z))发送键盘按键的信号。例如:

# main.py
import pyb
hid = pyb.USB_HID() # 创建HID对象
def press_key_once(key):
    buf = bytearray(8) # 报告是8字节长
    buf[2] = key # 设置按键值
    hid.send(buf) # 发送报告
    pyb.delay(10) # 延时10毫秒

def release_key_once():
    buf = bytearray(8) # 报告是8字节长
    buf[2] = 0 # 设置按键值为0
    hid.send(buf) # 发送报告
    pyb.delay(10) # 延时10毫秒

press_key_once(4) # 按下A键
release_key_once() # 松开A键
press_key_once(5) # 按下B键
release_key_once() # 松开B键
press_key_once(6) # 按下C键
release_key_once() # 松开C键

案例3:在需要使用游戏手柄玩游戏的场合,可以通过pyb.hid((buttons, x, y, z))发送游戏手柄的信:。例如:

# main.py
import pyb
hid = pyb.USB_HID() # 创建HID对象

# 定义游戏手柄按键值
BUTTON_A = 1 << 0 
BUTTON_B = 1 << 1 
BUTTON_X = 1 << 2 
BUTTON_Y = 1 << 3 
BUTTON_LB = 1 << 4 
BUTTON_RB = 1 << 5 
BUTTON_BACK = 1 << 6 
BUTTON_START = 1 << 7 

def send_gamepad(buttons, x, y):
    buf = bytearray(8) # 报告是8字节长
    buf[0] = buttons & 0xff # 设置低字节按键值
    buf[1] = (buttons >> 8) & 0xff # 设置高字节按键值
    buf[2] = x & 0xff # 设置x轴低字节值
    buf[3] = (x >> 8) & 0xff # 设置x轴高字节值
    buf[4] = y & 0xff # 设置y轴低字节值
    buf[5] = (y >> 8) & 0xff # 设置y轴高字节值
    hid.send(buf) # 发送报告
    pyb.delay(10) # 延时10毫秒

send_gamepad(BUTTON_A, 0, 0) # 按下A键
send_gamepad(0, 0, 0) # 松开所有按键
send_gamepad(BUTTON_B, 0, 0) # 按下B键
send_gamepad(0, 0, 0) # 松开所有按键
send_gamepad(0, 100, 100) # 向右下方移动摇杆
send_gamepad(0, 0, 0) # 恢复摇杆位置

pyb.hid((buttons, x, y, z))的需注意事项有:

在使用pyb.hid((buttons, x, y, z))之前,需要确保MicroPython板已经配置为支持USB HID,并且已经正确连接到USB主机。
在使用pyb.hid((buttons, x, y, z))时,需要注意其参数值的范围和含义,不同的HID设备可能有不同的规范。
在使用pyb.hid((buttons, x, y, z))时,需要注意其发送频率和延时,过快或过慢的发送可能会导致USB主机无法识别或响应HID信号。

案例4:鼠标移动:

import pyb

# 创建HID对象
hid = pyb.hid()

# 模拟鼠标向右移动10个单位
hid.send((0, 10, 0, 0))

在这个例子中,我们使用pyb.hid()函数创建一个HID对象,并使用hid.send()函数模拟鼠标向右移动10个单位。通过这种方式,我们可以控制鼠标的移动。

案例5:鼠标点击::

import pyb

# 创建HID对象
hid = pyb.hid()

# 模拟鼠标左键点击
hid.send((pyb.hid.BUTTON_LEFT, 0, 0, 0))

在这个例子中,我们使用pyb.hid()函数创建一个HID对象,并使用hid.send()函数模拟鼠标的左键点击。通过这种方式,我们可以控制鼠标进行点击操作。

案例6:多功能控制::

import pyb

# 创建HID对象
hid = pyb.hid()

# 同时模拟鼠标向右移动10个单位,并按下鼠标左键
hid.send((pyb.hid.BUTTON_LEFT, 10, 0, 0))

在这个例子中,我们使用pyb.hid()函数创建一个HID对象,并使用hid.send()函数模拟同时进行鼠标向右移动10个单位和按下鼠标左键的操作。通过这种方式,我们可以实现多功能的鼠标控制。

案例7:模拟键盘输入

import pyb

# 发送键盘按键报告
def send_keyboard_report(key):
    report = (0, key, 0, 0, 0, 0, 0, 0)
    pyb.hid(report)

# 模拟按下并释放'A'键
send_keyboard_report(pyb.KEY_A)

# 模拟按下并释放'Enter'键
send_keyboard_report(pyb.KEY_ENTER)

这个示例程序定义了一个send_keyboard_report()函数,用于发送键盘按键报告。通过调用pyb.hid()函数发送HID报告,可以模拟键盘输入。在示例中,通过调用send_keyboard_report()函数模拟按下并释放’A’键和’Enter’键。

案例8:模拟鼠标移动和点击

import pyb

# 发送鼠标报告
def send_mouse_report(dx, dy, button):
    report = (button, 0, dx, dy, 0, 0, 0, 0)
    pyb.hid(report)

# 模拟鼠标向右移动100个单位
send_mouse_report(100, 0, 0)

# 模拟鼠标向下移动50个单位,并同时点击左键
send_mouse_report(0, 50, pyb.BUTTON_LEFT)

这个示例程序定义了一个send_mouse_report()函数,用于发送鼠标报告。通过调用pyb.hid()函数发送HID报告,可以模拟鼠标移动和点击操作。在示例中,通过调用send_mouse_report()函数模拟鼠标向右移动100个单位、向下移动50个单位,并同时点击左键。

案例9:模拟游戏手柄操作

import pyb

# 发送游戏手柄报告
def send_gamepad_report(buttons, x, y, z):
    report = (buttons, x, y, z, 0, 0, 0, 0)
    pyb.hid(report)

# 模拟按下并释放游戏手柄的'A'按钮
send_gamepad_report(pyb.GAMEPAD_BUTTON_A, 0, 0, 0)

# 模拟左摇杆向上移动50个单位
send_gamepad_report(0, 0, -50, 0)

这个示例程序定义了一个send_gamepad_report()函数,用于发送游戏手柄报告。通过调用pyb.hid()函数发送HID报告,可以模拟游戏手柄的按键和摇杆操作。在示例中,通过调用send_gamepad_report()函数模拟按下并释放游戏手柄的’A’按钮,以及左摇杆向上移动50个单位。这些示例程序展示了pyb.hid()函数的用法,可以根据需要发送不同类型的HID报告,模拟各种人机交互设备的操作。具体的应用场景和使用方式会根据实际需求而有所不同。

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值