本文简单介绍BLE IPSP,并示例在Zephyr下两个BLE device通过IPSP连接并互ping。
IPSP简介
Internet Protocol Service Profile, 支持IPSP的设备彼此发现和通信,该Profile在BLE Stack中的定于如下:
角色
IPSP有两个角色:
- Node: 用于组织和消费ipv6包,提供IPSS (Internet Protocol Support Service),才能被router发现。
- Router: 用于router ipv6包
Node一般作为传感器节点。Router角色一般作为设备接入点,例如边界路由器,收集各个Node的数据。
一个device可以同时拥有Node和Router两个角色。
Node角色需求
- IPSS: IP Support Service(属于GATT service)用于服务发现。UUID 0x1820
- L2CAP: 用于传输6LoWPAN数据包(MTU>=1280)
Router角色需求
- L2CAP: 用于传输6LoWPAN数据包(MTU>=1280)
IETF RFC7668
IPSP规范发布之后,IETF(Internet Engineering Task Force,互联网工程任务组)发布“IPv6 over BLUETOOTH(R) Low Energy”的RFC7668标准,该详细规定了基于蓝牙BLE的IPv6组网方式。
协议栈
下图说明ipv6 stack和ble l2cap之上的gatt stack如何并行工作。gatt提供支持网络互联节点的发现服务(IPSP),在L2CAP之上,依次是6LoWPAN、IPv6、UDP、TCP等网络协议栈用于网络传输。
BLE网络
下图说明BLE网络为星型网, 6LoWPAN Node(6LN)节点都直接和6LoWPAN Border router(6LBR)相连.
BLE网络连接到互联网
下图说明BLE网络如何连接到互联网,BLE网络通过6LBR边界路由接入到互联网,让BLE可以通过ipv6直接访问互联网
Zephyr示例
硬件
软件编译
node
使用sample/net/echo_server进行编译,并烧写到CoreBoard#11
2
3
4
5cd ~/work/project/nrf52_moderate/apps/echo_server
mkdir build
cd build
cmake -DBOARD=nrf52_moderate -DBOARD_ROOT=/home/frank/work/project/nrf52_moderate -DCONF_FILE="prj.conf overlay-bt.prj" ..
make flash
router
使用sample/net/echo_server进行编译,并烧写到CoreBoard#21
2
3
4
5cd ~/work/project/nrf52_moderate/apps/echo_client
mkdir build
cd build
cmake -DBOARD=nrf52_moderate -DBOARD_ROOT=/home/frank/work/project/nrf52_moderate -DCONF_FILE="prj.conf overlay-bt.prj" ..
make flash
如果有兴趣可以去关注一下echo_server和echo_client的overlay-bt.prj, server(node)只会比client(router)多一项CONFIG_NET_CONFIG_BT_NODE=y, 这里也可以应证前面角色需求的内容
运行
如下图
说明: Router是CoreBoard#2连接的是ttyCAM0, Node是CoreBoard#1连接的是ttyCAM1
- 启动Router和Node,在ttyCAM0中找到Router的BLE地址为[e9:45:ec:29:65:db]
- 使用Node连接Router, 在ttyCAM1中执行net_bt connect e9:45:ec:29:65:db
- 连接完成后使用net iface命令查看Node的ipv6地址为[2001:db8::3], Router地址[2001:db8::1]
- 相互ping,执行命令net ping 2001:db8::3 可以看到对方都有回复信息Received echo reply from 2001:db8::3 to 2001:db8::1
关于zephyr ipsp
目前在zephyr上将两个device都配置为node+router,无法进行net_bt connect。尚未调查到是zephyr不支持node+router双角色,还是配置有问题。
参考
https://tools.ietf.org/html/rfc7668
https://www.bluetooth.com/specifications/gatt