返回列表 发新帖我要提问本帖赏金: 30.00元(功能说明)

Python挺酷的 | 识别蓝牙MIDI(基于ESP32开发板)

[复制链接]
1912|2
 楼主| 单片小菜 发表于 2022-11-2 10:04 | 显示全部楼层 |阅读模式
本帖最后由 单片小菜 于 2022-11-2 10:20 编辑

#申请原创# @21小跑堂 @21小跑堂

引:
        可以使用上次的文章进行环境的搭建,文章的地址Python 然后我们进行代码的编写,我们要实现的是蓝牙midi的效果,就要用到ESP32的蓝牙功能,当然别的蓝牙模块也可以实现midi的效果,毕竟midi只是传输协议层的问题,就很好理解了。

一、代码部分
1. 注册蓝牙服务
  1. def register(self):  # 注册MIDI蓝牙服务

  2.         MIDI_SERVER_UUID = ubluetooth.UUID('03B80E5A-EDE8-4B33-A751-6CE34EC4C700')
  3.         MIDI_CHAR_UUID = (ubluetooth.UUID('7772E5DB-3868-4112-A1A9-F2669D106BF3'),
  4.                           ubluetooth.FLAG_READ | ubluetooth.FLAG_WRITE | ubluetooth.FLAG_NOTIFY,)

  5.         BLE_MIDI_SERVER = (MIDI_SERVER_UUID, (MIDI_CHAR_UUID,),)
  6.         SERVICES = (BLE_MIDI_SERVER,)

  7.         ((self.midi,),) = self.ble.gatts_register_services(SERVICES)

2. 蓝牙被发现模式设置

  1. def advertiser(self):  # 设置广播及扫描响应数据
  2.     name = bytes(self.name, 'UTF-8')
  3.     self.ble.gap_advertise(100, adv_data=b'\x02\x01\x05' + bytearray((len(name) + 1, 0x09)) + name,
  4.                                resp_data=b'\x11\x07\x00\xC7\xC4\x4E\xE3\x6C\x51\xA7\x33\x4B\xE8\xEd\x5A\x0E\xB8\x03')

3. MIDI发送部分

  1. def send(self, data):
  2.     if self.isConnected:
  3.        self.ble.gatts_notify(0, self.midi, data)

4. 中断部分
        这部分根据自己的需求进行编写即可。
        以上为主要的几部分代码,应用部分,可以自行添加。
二、测试软件列表
1. loopMIDI
        这里我们使用的是loopMIDI软件进行电脑端的测试,我们需要用电脑连接到蓝牙模块,我们先把软件下载了。进入官网地址进行下载,这款软件是免费的软件,可以很容易上手的。        MIDIloop是一个用于录制和播放MIDI信息的应用程序。与普通的 MIDI 音序器不同,MIDIloop 旨在实时记录自动化数据的短循环,并将它们发送到与音乐或外部 MIDI 时钟同步的主机应用程序。它专为 VJ 而设计,他们越来越需要控制多个屏幕和比一双手可以处理的更多参数。它也可能对实时音乐表演有用。
        MIDIloop目前仅适用于Windows。

        点击进去之后,就是如下的界面,我们进行下载即可。

        下载完成之后,是如下的压缩包,解压缩、安装。

        解压之后,勾选我同意,按照步骤进行安装。


        至此,安装成功。
2. Bluetooth LE Explorer
        这个在微软商店进行下载,同样是免费的软件。这款软件是专为BLE蓝牙设计的,电脑可以通过蓝牙连接BLE设备。

        后面进行说明使用方法;
3. MIDIberry
        这个在微软商店进行下载,同样是免费的软件。这款软件给我的理解就是类似于虚拟串口的形式,将输入输出重新进行划分和定义,重新指向某一个设备。



4. 下载宿主软件Cakewalk
        官网下载,这个是免费软件,下载并安装即可。这类软件一般用于音乐的后期编辑及制作使用,而对于专业的音乐制作人而言是必不可少的。

        在这里,老刘不是做音乐的,对于这些软件不是很明白,只是随便上网找了一个软件,看似专业的样子,只是为了演示midi硬件的需要。
三、联动操作
        将开发板上电,然后打开电脑的蓝牙,进行搜索。
1. 电脑蓝牙搜索操作

        寻找到ESP32的名称,进行连接

2.打开Bluetooth LE  Explorer

        搜索设备,找到ESP32,进行搜索,点击pair

        返回后点击下面的按钮。

        这个软件不要关闭,然后打开另外一个软件
3. 打开midiloop
        新建一个port,SDJ midi

4. 打开MIDIberry软件

        我们发现软件中ESP32后面的标识为(Bluetooth MIDI IN)
        输入选择ESP32,输出选择SDJmidi
        最后,
5.打开Cakewalk
        我们打开DW软件,设置输入为SDJmidi即可。我们以Cakewalk为例

        确定即可。
        至此,设置完成。
结:
        可以识别出蓝牙midi,后续的工作需要对协议栈充分了解,补充具体的工作。
延续阅读
最快曲线 | 后面有Python彩蛋
小技巧 | 如何搭建Python环境
Python挺酷的 | 读取ini配置文件
小技巧 | Python简单的界面交互程序(CRC校验离线版本)
Python挺酷的 | PyCharm MicroPython ESP32 开发环境搭建



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

打赏榜单

21小跑堂 打赏了 30.00 元 2022-11-03
理由:恭喜通过原创审核!期待您更多的原创文章~

评论

蓝牙MIDI协议是智能乐器与计算机之间数据通信的协议格式,本文章主要介绍了通过低功耗蓝牙实现MIDI协议的相关软件安装步奏。过程较为详细,作者若是可以将后续协议的具体实现与该文整个,可得到更高打赏。  发表于 2022-11-3 18:24
xu@xupt 发表于 2022-12-8 23:46 | 显示全部楼层
学习了,感谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:资深专家
简介:丰富的嵌入式软硬件开发管理经验; 丰富的项目管理经验并具备敏锐的市场嗅觉; 丰富的产品的供应链资源及工厂管控能力; 具备很强的产品落地经验(从产品企划到产品量产);

107

主题

2354

帖子

10

粉丝
快速回复 在线客服 返回列表 返回顶部