
【ART-Pi】蓝牙网关
简介
基于ART-Pi和Nrf52832实现的蓝牙mesh网关。
简介:基于ART-Pi和Nrf52832实现的蓝牙mesh网关。开源协议
:GPL 3.0
描述
简介
这是一个蓝牙mesh的ART-Pi扩展板,由于ART-Pi板载的AP6212网络适配器不能进行蓝牙mesh操作,所以这个扩展板包含了一个nrf52832模块通过串口协议和主控芯片连接用来连接mesh设备。
扩展板搭载了LAN8720A芯片用来连接以太网,也可以使用主板的Wi-Fi模块进行联网。
此外我还加入了LD3320语音识别模块和JR6001语音播报模块,用来实现语音交互。
扩展板完全按照ART-Pi引脚布局引出所有引脚,扩展板未使用到的引脚可以继续供其它外部模块使用。
关于蓝牙mesh,这里有我学习过程中翻译的一些资料:蓝牙mesh简介
特点
- 蓝牙mesh网络支持在同一网络中存在32767个mesh设备,也就是说该蓝牙网关理论上最多可以控制附近mesh组网中32766个设备。
- 蓝牙mesh设备可以和经典低功耗蓝牙设备通信,这将有利于提高外围设备的使用时间。
- 语音播报和蓝牙mesh使用模块化可插拔设计,理由如下:
- 语音播报功能不是系统核心功能,只是一种反馈的方式,开发板可使用长脚排母方式引出所有核心板引脚,可利用这些引脚继续接入如显示器、继电器、舵机等外围设备,拓展性能更强。
- 蓝牙mesh也使用模块方式提供,原因是蓝牙mesh是一个多设备的网络,一个通用可插拔的蓝牙模块既可以当作网络代理也可以当作传感器或控制器的接入点甚至是主控,这样做可以方便复用,也可以提高mesh传感器和控制器的开发效率,降低开发难度。
用途
- 物联网网关,可以供蓝牙mesh设备上网和从外网访问蓝牙mesh设备。
- 语音助手,可以通过语音交互实现设备控制和网络信息的获取。
- nrf52832不仅支持蓝牙mesh,还支持低功耗蓝牙和NAT等协议,可根据需要自行diy。
程序设计
程序方案架构:
通信时序图:
程序开发中遇到的问题:
- JR6001播放时影响LD3320
- 解决方法:利用信号量互斥
- 因为开发板使用了12MHz频率的晶振,所以需要把packages里面对应的LD3320_CLK_IN宏修改为12,也可以考虑将LD3320晶振替换为22MHz。
演示视频
注:使用nRF Mesh app进行mesh配网。
WEB接口:
查找Mesh节点:
POST /cgi-bin/board_control HTTP/1.1
Host: 192.168.1.211
cache-control: no-cache
{
"opcode": 193
}
获取节点列表:
GET /cgi-bin/basic_info HTTP/1.1
Host: 192.168.1.211
cache-control: no-cache
设置节点:
POST /cgi-bin/board_control HTTP/1.1
Host: 192.168.1.211
Content-Type: application/json
cache-control: no-cache
{"address": 79, "opcode": 195, "data":"01"}
读取节点数据:
POST /cgi-bin/board_control HTTP/1.1
Host: 192.168.1.211
Content-Type: application/json
cache-control: no-cache
{"address": 57, "opcode": 195}
注:
- address:设备单播地址
- opcode:操作码
- data:数据(1~8byte)
软件源码
改进空间
- Mesh协议中使用了8byte空间来传输数据,在开关灯的demo中实际只使用了1个byte,可以考虑改成动态长度以实现在兼容多种设备的同时节约内存、提高传输效率。
- WebApi部分使用异步方式进行数据返回,有必要可以使用信号量、消息队列等工具做成同步。
参考资料
设计图
BOM
ID | Name | Designator | Footprint | Quantity |
---|---|---|---|---|
1 | LAN8720A | U5 | QFN24-4*4MM | 1 |
2 | 22pF | C18,C17 | C0603 | 2 |
3 | 100nf | C15,C14,C13,C12,C11 | C0603 | 5 |
4 | 12.1K | R21 | R0603 | 1 |
5 | 10K | R20,R14,R10 | R0603 | 3 |

评论