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 ~ 1023

  • y - 鼠标坐标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
PPT 翻页遥控器
 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