Arduino与乐高EV3蓝牙通讯 | 您所在的位置:网站首页 › 乐高编程ev3 › Arduino与乐高EV3蓝牙通讯 |
Electronic
Technology
• 电子技术 Arduino 与乐高 EV3 蓝牙通讯 文 / 俞皓熠 表 1 本文主要介绍了
Arduino 与
摘
乐高 EV3 的蓝牙连接 , 详细介绍
要
乐高蓝牙协议 , 通过实例演示
Arduino 给乐高发送信息 。 打破乐
高 EV3 较为封闭的状况 , 让二者
产生交互 , 协同工作 。 【 关键词 】 Arduino 乐高蓝牙协议 Arduino 是一款便捷灵活 、 方便上手的开
源电子平台 , 可以连接上百种模组 , 让普通人
也可以制作出有趣的创意电子制作 。 但在制作
创意作品时 , 如果涉及到机械结构 , 设计制作
机械部件就比较麻烦 , 较为费时费力 。 而乐高
积木中有多种积木结构件 , 能轻松制作出各种
复杂机械结构 , 如果把 Arduino 与乐高结合 ,
能快速地把有创意变为现实作品 。 LEGO
MINDSTORMS
EV3 是第三代乐高
机器人 , 它是丹麦乐高公司在 2013 年上市的 ,
拥有大量的粉丝 。 但乐高 EV3 比较封闭 , 能
与计算机或另一台 EV3 进行通讯 , 与其它设
备难以通讯 。 有人利用一块叫 Bricktronics 的
转接板让 Arduino 连接乐高积木 , Bricktronics
可以直接连接乐高电机与传感器 , 这样
Arduino 就可以代替乐高程序块 , 用 Arduino
直接控制乐高电机与传感器 。 有人也编写了
APP, 让手机也可以通过蓝牙控制乐高 EV3 。
所以我对乐高 EV3 的蓝牙通讯机制进行了研
究 , 让 Arduino 也可以通过蓝牙模块与乐高程
序块进行通讯 , 用这个方法就不需要专用的转
接板 , 只需要一块普通的蓝牙模块 , 就可以让
Arduino 与乐高互相通讯 , 协同工作 。 下面主
要介绍其实现方法 。 1
Arduino 与乐高程序块通讯的原理 用乐高 EV3
Programmer 图形化编程软件
编写过蓝牙通信的人都应该用过叫 “ 消息传递 ”
的指令块 , 就是用它对蓝牙信号进行读或写操
作 。 但它对一般的蓝牙信号是不能识别的 , 因
为 EV3 有专用的蓝牙处理协议 , 要让 Arduino
与乐高 EV3 进行通讯 , 要就认真分析 EV3 的
蓝牙信号处理协议 , 让 Arduino 模拟成乐高设
备 , 发送 EV3 能识别的蓝牙信号 。 如图 1 。 2
Arduino 与乐高的蓝牙连接 用 HC05 或 HC06 蓝牙模块一个 , 把蓝牙
模块的 VCC 连接到 Arduino 的 5V,
GND 连
接到 Arduino 的 GND 。 蓝牙上的 TXD 与 RXD 给消息标题为 ’ abc' 的消息传递指令块发送一个逻辑值为 1
( 真 ) 的写法 ( 以 16
样例
进制表示 ) : 0x0c,
0x00,
0x00,
0x00,
0x81,
0x9e,
0x04,
0x61,
0x62,
0x63,
0x00,
0x0 1 ,
0x00,
0x01 为便于理解 , 上面的样例用十进制来表示如下 : ( 实际发送还是要用 16 进制 ) 样例说明 格式 代号
bb 部分
mm 部分
tt 部分
ss 部分
ff 部分
aa 部分
LL 部分
pp 部分 120
0
0
129
158
4
97
98
99
0
1
0
1 bbbbmmmmttss
fa
aaa
LL
p ( 其中 97
98
99 就是 "abc ” 的 ASCII 码值 )
xxxxxxxx8 1 9Exxxx- •
- x xxxxx ,ee ( XX
表示一个字节长度 )
bbbbmmmmttssffaa
-
-
-
L LLLpp*
•
• 含义 整个包从 mm 到 pp 的数据长度 。
包计数器 , 目前还不知道作用 , 直接填 0 就可以 。 包类型 , 直接填 0x81 就好
命令类型 , 0x9e 代表写 “ 消息传递 ” 。 “ 消息传递 ” 名称字符串的长度 +
1, 比如 "abc ” 的长度为 4 任个字节
' ‘ 消息传递 ” 名称 +0, 内容为字符的 ASCII 码 +
0x00 2 字节
包有效数据长度 。 LL 个字节
包有效数据 , 我们要发送给 EV3
“ 消息传递 ” 的内容 。 ^ R R 2
2
1 1 1 图 1 分别连接到 Arduino 的数字端口
0 和 1 端口 ( 即
RXD 与 TXD ) 。 检査无误后连接 USB 上电会看到蓝牙模
块有红色指示灯快速闪烁 。 打开乐高程序块 ,
进入设置菜单的 Bluetooth 选项 , 将 Visibility
和 Bluetooth 勾选 , 然后进入 Connections 选
项搜索蓝牙设备 , 找到对应的蓝牙模块 。 连
接时一般会要求输入配对密码 , 密码一般为
1234 。 连接成功后 , 蓝牙模块上红色指示灯慢
速闪烁 , 在乐高 EV3 显示幕左上角也会显示
已连接图标农 , 而还未连接时显示的是
此时, 已完成 Arduino 与乐高的底层连接 , 但
还不能互相通讯 。 如图 2 、 图 3 所示 。 3 理解乐高 EV3 的蓝牙通讯协议 在乐高 EV3 中 , 可以无需编写用户程序
通过直接运行命令对 EV3 进行下载 、 上传 、
读取输入值等各种操作 。 官方学名为 direct
commands
( 直接命令 ), 这类似于 Windows
里面的命令控制台中的命令 。 “ 消息传递 ” 指
令块的实质就是通过 " 直接命令 ” 进行蓝牙的
接收与发送 。 我们用 Arduino 向 EV3 发信息时 ,
也只要按照 EV3 蓝牙的协议格式发送出去 ,
EV3 就能顺利解包 , 接收到信息 。 接收 EV3
发来的信息时 , 也只要根据蓝牙的协议格式来
提取所需信息就行了 。 表 1 是蓝牙协议格式的
写法 。 “ 消息传递 ” 指令块支持接收或发送文
本 、 数字或逻辑三种类型的值 , 如果要发送
“ 1234 ” 这个字符串的话 。 LL 部分内容为
0x05,
0x00,
pp
部分的内容就是
0x31,
0x32, 0x33,
0x34
, 如果要发送数值 , EV3 协议是用
32 位浮点数表示的 。 4 用 Arduino 发送 EV3 蓝牙直接命令的实
例 Electronic
Technology
&
Software
Engineering
电子技术与软件工程 •
|
CopyRight 2018-2019 实验室设备网 版权所有 |