BLE IPSP&Zephyr示例

Creative Commons
本作品采用知识共享署名

本文简单介绍BLE IPSP,并示例在Zephyr下两个BLE device通过IPSP连接并互ping。

IPSP简介

Internet Protocol Service Profile, 支持IPSP的设备彼此发现和通信,该Profile在BLE Stack中的定于如下:
ipsp

角色

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等网络协议栈用于网络传输。
stack

BLE网络

下图说明BLE网络为星型网, 6LoWPAN Node(6LN)节点都直接和6LoWPAN Border router(6LBR)相连.
con2

BLE网络连接到互联网

下图说明BLE网络如何连接到互联网,BLE网络通过6LBR边界路由接入到互联网,让BLE可以通过ipv6直接访问互联网
con1

Zephyr示例

硬件

两片nrf52_moderate-CoreBoard

软件编译

node

使用sample/net/echo_server进行编译,并烧写到CoreBoard#1

1
2
3
4
5
cd ~/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#2

1
2
3
4
5
cd ~/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, 这里也可以应证前面角色需求的内容

运行

如下图
sample
说明: Router是CoreBoard#2连接的是ttyCAM0, Node是CoreBoard#1连接的是ttyCAM1

  1. 启动Router和Node,在ttyCAM0中找到Router的BLE地址为[e9:45:ec:29:65:db]
  2. 使用Node连接Router, 在ttyCAM1中执行net_bt connect e9:45:ec:29:65:db
  3. 连接完成后使用net iface命令查看Node的ipv6地址为[2001:db8::3], Router地址[2001:db8::1]
  4. 相互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