bluetooth
--- 提供无线蓝牙功能¶
该模块提供ble蓝牙通讯、HID模拟设备功能。
ble类¶
ble类, 支持客户端与主机端的BLE通讯及HID功能。HID功能,遵循BLE HID规范,可实现模拟无线蓝牙HID设备(如鼠标,键盘,游戏手柄等人机交互设备)。
-
class
bluetooth.
ble
¶
BLE 通讯¶
-
ble.
init
(name="mpython")¶ BLE客户端设备初始化。当不带参数时,默认客户端设备名为 mpython 。
name
- 客户端设备名称,字符串类型。
-
ble.
start_advertising
()¶ BLE客户端设备开启广播。开启后,可被BLE主机设置搜索。
-
ble.
board_send
(buf)¶ BLE客户端向BLE主机端发送字节缓存
-
ble.
board_register_output_callback
(f)¶ 接收BLE主机端的数据的回调函数, f 为回调函数,函数定义如下,
f(bytearray)
。
-
ble.
stop_advertising
()¶ BLE客户端设备关闭广播
-
ble.
hidd_send_consumer
(ble.HID_CONSUMER_xxx, True)¶ 模拟HID消费类设备的控制器。如,蓝牙遥控器。
第一参数
- HID Consumer类的常用的按键ID。如你想控制电视机开机,则用 ble.HID_CONSUMER_POWER 。具体的按键常量详见 HID Consumer ID表 。第二参数
- 按键状态, True 为按下, False 为松开。
电视遥控音量加减的示例:
# 导入蓝牙ble类 from bluetooth import ble import time # ble初始化 ble.init() # 等待主机设备连接 time.sleep(2) # 按下音量+ ble.hidd_send_consumer(ble.HID_CONSUMER_VOLUME_UP,True) # 按下保持状态 time.sleep(1) # 释放按键 ble.hidd_send_consumer(ble.HID_CONSUMER_VOLUME_UP,False) # 按下音量- ble.hidd_send_consumer(ble.HID_CONSUMER_VOLUME_DOWN,True) # 按下保持状态 time.sleep(1) # 释放按键 ble.hidd_send_consumer(ble.HID_CONSUMER_VOLUME_DOWN,False)
-
ble.
hidd_send_keyboard
(keys = [key1...], modifier = KEY_MASK_NONE)¶ 模拟HID键盘设备。
keys
- 一个或多个按键的数组类型。当数组内成员表示为按下的按键,如要释放按键只需将数组内对应位置的值赋值为0。具体的按键常量详见 HID Keyboard ID表 。modifier
- 键盘组合按键,默认为 KEY_MASK_NONE 表示为单按键 ,可以为以下值。如要用到2个组合按键,可使用|
或逻辑运算,像 Ctrl + Alt 组合按键时为 KEY_MASK_L_CTRL | KEY_MASK_L_ALT- KEY_MASK_NONE - 0
- KEY_MASK_L_CTRL - 1
- KEY_MASK_L_SHIFT - 2
- KEY_MASK_L_ALT - 4
- KEY_MASK_L_GUI - 8
- KEY_MASK_R_CTRL - 16
- KEY_MASK_R_SHIFT - 32
- KEY_MASK_R_ALT - 64
- KEY_MASK_R_GUI - 128
键盘示例:
# Ctrl + F组合按键 ble.hidd_send_keyboard([ble.HID_KEY_F],ble.KEY_MASK_L_CTRL) # 释放按键 ble.hidd_send_keyboard([0]) # Ctrl + Alt + Del 组合按键 ble.hidd_send_keyboard([ble.HID_KEYPAD_DOT],ble.KEY_MASK_L_CTRL | ble.KEY_MASK_L_ALT ) # 释放按键 ble.hidd_send_keyboard([0]) # 单按键 A ble.hidd_send_keyboard([ble.HID_KEY_A]) # 释放按键 ble.hidd_send_keyboard([0])
-
ble.
hidd_send_mouse
(button = 0, x = 0, y = 0)¶ 模拟HID鼠标设备。
button
- 鼠标按键, 可以为以下值:0
- 释放按键ble.HID_MOUSE_LEFT
- 鼠标左键ble.HID_MOUSE_MIDDLE
- 鼠标中键ble.HID_MOUSE_RIGHT
- 鼠标右键
x
- 鼠标坐标x轴的相对位移,范围-1023 ~ 1023y
- 鼠标坐标y轴的相对位移,范围-1023 ~ 1023
鼠标示例:
# 按下鼠标左键 ble.hidd_send_mouse(ble.HID_MOUSE_LEFT) # 释放鼠标按键 ble.hidd_send_mouse(0) # 坐标x轴位移 ble.hidd_send_mouse(x = 50 )
常量¶
HID Consumer¶
HID Consumer Usage IDs | 数值 | 定义 |
---|---|---|
ble.HID_CONSUMER_POWER |
48 | Power |
ble.HID_CONSUMER_RESET |
49 | Reset |
ble.HID_CONSUMER_SLEEP |
50 | Sleep |
ble.HID_CONSUMER_MENU |
64 | Menu |
ble.HID_CONSUMER_SELECTION |
128 | Selection |
ble.HID_CONSUMER_ASSIGN_SEL |
129 | Assign Selection |
ble.HID_CONSUMER_MODE_STEP |
130 | Mode Step |
ble.HID_CONSUMER_RECALL_LAST |
131 | Recall Last |
ble.HID_CONSUMER_QUIT |
148 | Quit |
ble.HID_CONSUMER_HELP |
149 | Help |
ble.HID_CONSUMER_CHANNEL_UP |
156 | Channel Increment |
ble.HID_CONSUMER_CHANNEL_DOWN |
157 | Channel Decrement |
ble.HID_CONSUMER_PLAY |
176 | Play |
ble.HID_CONSUMER_PAUSE |
177 | Pause |
ble.HID_CONSUMER_RECORD |
178 | Record |
ble.HID_CONSUMER_FAST_FORWARD |
179 | Fast Forward |
ble.HID_CONSUMER_REWIND |
180 | Rewind |
ble.HID_CONSUMER_SCAN_NEXT_TRK |
181 | Scan Next Track |
ble.HID_CONSUMER_SCAN_PREV_TRK |
182 | Scan Previous Track |
ble.HID_CONSUMER_STOP |
183 | Stop |
ble.HID_CONSUMER_EJECT |
184 | Eject |
ble.HID_CONSUMER_RANDOM_PLAY |
185 | Random Play |
ble.HID_CONSUMER_SELECT_DISC |
186 | Select Disk |
ble.HID_CONSUMER_ENTER_DISC |
187 | Enter Disc |
ble.HID_CONSUMER_REPEAT |
188 | Repeat |
ble.HID_CONSUMER_STOP_EJECT |
204 | Stop/Eject |
ble.HID_CONSUMER_PLAY_PAUSE |
205 | Play/Pause |
ble.HID_CONSUMER_PLAY_SKIP |
206 | Play/Skip |
ble.HID_CONSUMER_VOLUME |
224 | Volume |
ble.HID_CONSUMER_BALANCE |
225 | Balance |
ble.HID_CONSUMER_MUTE |
226 | Mute |
ble.HID_CONSUMER_BASS |
227 | Bass |
ble.HID_CONSUMER_VOLUME_UP |
233 | Volume Increment |
ble.HID_CONSUMER_VOLUME_DOWN |
234 | Volume Decrement |
HID Keyboard¶
HID Keyboard Usage IDs | 数值 | 定义 |
---|---|---|
ble.HID_KEY_A |
4 | Keyboard A and a |
ble.HID_KEY_B |
5 | Keyboard B and b |
ble.HID_KEY_C |
6 | Keyboard C and c |
ble.HID_KEY_D |
7 | Keyboard D and d |
ble.HID_KEY_E |
8 | Keyboard E and e |
ble.HID_KEY_F |
9 | Keyboard F and f |
ble.HID_KEY_G |
10 | Keyboard G and g |
ble.HID_KEY_H |
11 | Keyboard H and h |
ble.HID_KEY_I |
12 | Keyboard I and i |
ble.HID_KEY_J |
13 | Keyboard J and j |
ble.HID_KEY_K |
14 | Keyboard K and k |
ble.HID_KEY_L |
15 | Keyboard L and l |
ble.HID_KEY_M |
16 | Keyboard M and m |
ble.HID_KEY_N |
17 | Keyboard N and n |
ble.HID_KEY_O |
18 | Keyboard O and o |
ble.HID_KEY_P |
19 | Keyboard P and p |
ble.HID_KEY_Q |
20 | Keyboard Q and q |
ble.HID_KEY_R |
21 | Keyboard R and r |
ble.HID_KEY_S |
22 | Keyboard S and s |
ble.HID_KEY_T |
23 | Keyboard T and t |
ble.HID_KEY_U |
24 | Keyboard U and u |
ble.HID_KEY_V |
25 | Keyboard V and v |
ble.HID_KEY_W |
26 | Keyboard W and w |
ble.HID_KEY_X |
27 | Keyboard X and x |
ble.HID_KEY_Y |
28 | Keyboard Y and y |
ble.HID_KEY_Z |
29 | Keyboard Z and z |
ble.HID_KEY_1 |
30 | Keyboard 1 |
ble.HID_KEY_2 |
31 | Keyboard 2 |
ble.HID_KEY_3 |
32 | Keyboard 3 |
ble.HID_KEY_4 |
33 | Keyboard 4 |
ble.HID_KEY_5 |
34 | Keyboard 5 |
ble.HID_KEY_6 |
35 | Keyboard 6 |
ble.HID_KEY_7 |
36 | Keyboard 7 |
ble.HID_KEY_8 |
37 | Keyboard 8 |
ble.HID_KEY_9 |
38 | Keyboard 9 |
ble.HID_KEY_0 |
39 | Keyboard 0 |
ble.HID_KEY_RETURN |
40 | Keyboard Return (ENTER) |
ble.HID_KEY_ESCAPE |
41 | Keyboard ESCAPE |
ble.HID_KEY_DELETE |
42 | Keyboard DELETE (Backspace) |
ble.HID_KEY_TAB |
43 | Keyboard Tab |
ble.HID_KEY_SPACEBAR |
44 | Keyboard Spacebar |
ble.HID_KEY_MINUS |
45 | Keyboard - and (underscore) |
ble.HID_KEY_EQUAL |
46 | Keyboard = and + |
ble.HID_KEY_LEFT_BRKT |
47 | Keyboard [ and { |
ble.HID_KEY_RIGHT_BRKT |
48 | Keyboard ] and } |
ble.HID_KEY_BACK_SLASH |
49 | Keyboard and | |
ble.HID_KEY_SEMI_COLON |
51 | Keyboard ; and : |
ble.HID_KEY_SGL_QUOTE |
52 | Keyboard ' and " |
ble.HID_KEY_GRV_ACCENT |
53 | Keyboard Grave Accent and Tilde |
ble.HID_KEY_COMMA |
54 | Keyboard , and < |
ble.HID_KEY_DOT |
55 | Keyboard . and > |
ble.HID_KEY_FWD_SLASH |
56 | Keyboard / and ? |
ble.HID_KEY_CAPS_LOCK |
57 | Keyboard Caps Lock |
ble.HID_KEY_F1 |
58 | Keyboard F1 |
ble.HID_KEY_F2 |
59 | Keyboard F2 |
ble.HID_KEY_F3 |
60 | Keyboard F3 |
ble.HID_KEY_F4 |
61 | Keyboard F4 |
ble.HID_KEY_F5 |
62 | Keyboard F5 |
ble.HID_KEY_F6 |
63 | Keyboard F6 |
ble.HID_KEY_F7 |
64 | Keyboard F7 |
ble.HID_KEY_F8 |
65 | Keyboard F8 |
ble.HID_KEY_F9 |
66 | Keyboard F9 |
ble.HID_KEY_F10 |
67 | Keyboard F10 |
ble.HID_KEY_F11 |
68 | Keyboard F11 |
ble.HID_KEY_F12 |
69 | Keyboard F12 |
ble.HID_KEY_PRNT_SCREEN |
70 | Keyboard Print Screen |
ble.HID_KEY_SCROLL_LOCK |
71 | Keyboard Scroll Lock |
ble.HID_KEY_PAUSE |
72 | Keyboard Pause |
ble.HID_KEY_INSERT |
73 | Keyboard Insert |
ble.HID_KEY_HOME |
74 | Keyboard Home |
ble.HID_KEY_PAGE_UP |
75 | Keyboard PageUp |
ble.HID_KEY_DELETE_FWD |
76 | Keyboard Delete Forward |
ble.HID_KEY_END |
77 | Keyboard End |
ble.HID_KEY_PAGE_DOWN |
78 | Keyboard PageDown |
ble.HID_KEY_RIGHT_ARROW |
79 | Keyboard RightArrow |
ble.HID_KEY_LEFT_ARROW |
80 | Keyboard LeftArrow |
ble.HID_KEY_DOWN_ARROW |
81 | Keyboard DownArrow |
ble.HID_KEY_UP_ARROW |
82 | Keyboard UpArrow |
ble.HID_KEY_NUM_LOCK |
83 | Keypad Num Lock and Clear |
ble.HID_KEY_DIVIDE |
84 | Keypad / |
ble.HID_KEY_MULTIPLY |
85 | Keypad * |
ble.HID_KEY_SUBTRACT |
86 | Keypad - |
ble.HID_KEY_ADD |
87 | Keypad +- |
ble.HID_KEY_ENTER |
88 | Keypad ENTER |
ble.HID_KEYPAD_1 |
89 | Keypad 1 and End |
ble.HID_KEYPAD_2 |
90 | Keypad 2 and Down Arrow |
ble.HID_KEYPAD_3 |
91 | Keypad 3 and PageDn |
ble.HID_KEYPAD_4 |
92 | Keypad 4 and Lfet Arrow |
ble.HID_KEYPAD_5 |
93 | Keypad 5 |
ble.HID_KEYPAD_6 |
94 | Keypad 6 and Right Arrow |
ble.HID_KEYPAD_7 |
95 | Keypad 7 and Home |
ble.HID_KEYPAD_8 |
96 | Keypad 8 and Up Arrow |
ble.HID_KEYPAD_9 |
97 | Keypad 9 and PageUp |
ble.HID_KEYPAD_0 |
98 | Keypad 0 and Insert |
ble.HID_KEYPAD_DOT |
99 | Keypad . and Delete |
ble.HID_KEY_MUTE |
127 | Keyboard Mute |
ble.HID_KEY_VOLUME_UP |
128 | Keyboard Volume up |
ble.HID_KEY_VOLUME_DOWN |
129 | Keyboard Volume down |
HID Mouse¶
HID Mouse Usage IDs | 数值 | 定义 |
---|---|---|
ble.HID_MOUSE_LEFT |
253 | Mouse Left |
ble.HID_MOUSE_MIDDLE |
254 | Mouse Middle |
ble.HID_MOUSE_RIGHT |
255 | Mouse Right |
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 65 66 67 68 69 70 71 72 | # MIT license; Copyright (c) 2019 Labplus & mPython Development
# V1.0 Tangliufeng
# 掌控板PPT翻页遥控器
# 使用方式: 短按键A-上页;短按键B-下页;长按键A-进入放映;长按键B-退出放映
#
from mpython import *
from bluetooth import ble
import time
# 按键状态标志
btn_a_status, btn_b_status = [0, 0]
oled.DispChar('PPT 翻页控制器',20,20)
oled.show()
# ble初始化
ble.init('PPT_Remote')
# 等待蓝牙主机
sleep(2)
while True:
# 当按键A为低电平且标志为0
if button_a.value() == 0 and btn_a_status == 0:
btn_a_time = time.ticks_ms()
# 按键保持标志
a_hold_flag = False
# 当按键一直按下
while not button_a.value():
# 当按下保持2秒
if time.ticks_diff(time.ticks_ms(), btn_a_time) > 2000:
# 发送 F5,放映幻灯片
ble.hidd_send_keyboard([ble.HID_KEY_F5])
print("Pressed F5")
# 按键保持标志置为1
a_hold_flag = True
break
# 如果没有持续按下按键
if a_hold_flag is False:
# 发送 LeftArrow,幻灯片上页
ble.hidd_send_keyboard([ble.HID_KEY_LEFT_ARROW])
print("Pressed LeftArrow")
# 按键状态置为1
btn_a_status = 1
# 当按键A为高电平且标志为1时,释放按键
elif button_a.value() == 1 and btn_a_status == 1:
print("Relesed Button A")
ble.hidd_send_keyboard([0])
btn_a_status = 0
if button_b.value() == 0 and btn_b_status == 0:
btn_b_time = time.ticks_ms()
b_hold_flag = False
while not button_b.value():
if time.ticks_diff(time.ticks_ms(), btn_b_time) > 2000:
# 发送 ESC,退出放映幻灯片
ble.hidd_send_keyboard([ble.HID_KEY_ESCAPE])
print("Pressed ESC")
b_hold_flag = True
break
if b_hold_flag is False:
# 发送 RightArrow,幻灯片翻页
ble.hidd_send_keyboard([ble.HID_KEY_RIGHT_ARROW])
print("Pressed RightArrow")
btn_b_status = 1
elif button_b.value() == 1 and btn_b_status == 1:
print("Relesed Button B")
ble.hidd_send_keyboard([0])
btn_b_status = 0
|