/ 物联网

6LoWPAN @ Raspberry Pi 3

前面写过一篇「使用Contiki快速构建IoT设备」,以一个简单的 demo 演示了基本开发环境的搭建,而关于 Contiki 天生支持的 6LoWPAN 只字未提,主要是我没用过 6LoWPAN,不敢乱讲。我对未知的领域始终抱着好奇且开放的心态,闲来无事探索了一下,觉得还是有一些东西可以分享的。

6LoWPAN (全称是:IPv6 over Low Power Wireless Personal Area Network) 是一种将 IPv6 协议引入到无线个域网的网络协议。关于网络通信理论我还真讲不出来,可能大学的时候逃太多课了,下面这张图可能可以提供一个感性的认识:

Simplified OSI model, a WiFi stack example and the 6LoWPAN stack

关于 WSN 的 IP 化

有一个大家都看得到的趋势是 无线传感网络的IP化,IP 协议在互联网普及起到了非常关键的作用,很自然的就会有人想到在物联网中应用 IP 协议,可以看到 ZigBee 3.0、Thread 甚至最新的蓝牙标准都纷纷支持 IP 或 IPv6 协议了。Contiki 也号称实现了世界上体积最小的 6LoWPAN 协议栈:uIPv6,开源并且已经通过了 IPv6 的认证。如果偏要编几个理由,那就是:

  • 采用IP技术能够利用现有的各种基于IP技术的服务、工具、应用等
  • 能够方便的与已经广泛部署的各种IP网络实现无缝连接
  • 可运行在多种物理层上,方便扩展
  • 可以真正实现端到端的控制与通信
  • 采用 IPv6,拥有更大的地址空间,可以为每个设备都分配独立的IP地址
  • IPv6 无需 NAT 技术,具有更通用的网络架构,更适合高密度传感器网络

6LoWPAN Border Router

如何将基于 802.15.4 的无线传感网络过渡到 IP 网络,6LoWPAN 边界路由(6LoWPAN Border Router)解决了这个问题。

6LBR 就是一种基于 Contiki,开源的、可部署的 6LoWPAN 边界路由解决方案,详细的介绍可以参考其官方的 wiki 文档,感性的认识可以看这张图:

6lbr-top-medium-grey

Raspberry Pi 3:Hello 6LBR

这个示例非常简单,可以让你检查 6LoWPAN 网络配置是否能够工作。我手上有 Raspberry Pi 3 和 CC2650 LaunchPad,可以用来演示一下,整个框架如下:

你需要以下硬件

  • Raspberry Pi 3
  • 烧录 Raspbian 的 Micro SD 卡
  • 配置好 Contiki 开发环境的 Linux 或者 Mac OSX 主机,可以参考我之前写的「使用Contiki快速构建IoT设备
  • CC2650 LaunchPad,至少需要两块板子。
  • 一根 USB 转 UART 串口线,Linux 串口终端用到,当然也可以使用 SSH 等方式,取决于你的偏好
  • 一根网线,6LBR 使用 wlan0 时好时坏,暂时还是保留网线吧

节点固件编译下载

需要一块 CC2650 LaunchPad 用来作为 Raspberry Pi 3 的 802.15.4 接口,编译并写入 slip-radio 固件:

cd $CONTIKI_HOME/examples/ipv6/slip-radio
make TARGET=srf06-cc26xx BOARD=launchpad/cc2650 slip-radio.upload PORT=/dev/your-uart-port-name

其他 CC2650 LaunchPad 板子作为远程节点,并运行 cc26xx-web-demo 固件,需要确认所有板子以下配置一样,这样才能加入网络。

/* Change to match your configuration */
#define IEEE802154_CONF_PANID            0xABCD
#define RF_CORE_CONF_CHANNEL                 25

编译并下载 cc26xx-web-demo

cd $CONTIKI_HOME/examples/cc26xx/cc26xx-web-demo/
make TARGET=srf06-cc26xx BOARD=launchpad/cc2650 cc26xx-web-demo.upload PORT=/dev/your-uart-port-name

硬件连接

基本的硬件连接图可以给你参考,你也可以增加更多的节点:

hello_6lbr_hardware

安装 6LBR @ Raspberry Pi 3

$ sudo apt-get install libncurses5-dev bridge-utils
$ git clone https://github.com/cetic/6lbr
$ cd 6lbr
$ git submodule update --init --recursive
$ cd examples/6lbr
$ make all #all_native for version < 1.4
$ make plugins
$ make tools
$ make install
$ make plugins-install

新建 /etc/6lbr/6lbr.conf 配置文件,内容如下:

#This file contains a default configuration for Raspberry PI platform using
#a CC26xx SLIP Radio
#The full list of parameters and their meaning can be found in 6lbr.conf.example

MODE=ROUTER
#MODE=SMART-BRIDGE
#MODE=RPL-RELAY
#MODE=FULL-TRANSPARENT-BRIDGE
#MODE=NDP-ROUTER
#MODE=6LR
#MODE=RPL-ROOT

RAW_ETH=1
BRIDGE=0
DEV_BRIDGE=br0
DEV_TAP=tap0
DEV_ETH=eth0
RAW_ETH_FCS=0

DEV_RADIO=/dev/ttyACM0
BAUDRATE=115200

LOG_LEVEL=3 #INFO and above only
#启动6lbr服务
$ sudo service 6lbr

#查看6lbr是否正常运行
$ sudo service 6lbr status

6lbr 服务运行起来后,可以在同一网段的电脑上查看网络的状态和配置,在浏览器中访问 http://[bbbb::100],可以看到边界路由器的界面:

6lbr_screenshot_1
6lbr_screenshot_2
6lbr_screenshot_3



如无特殊说明,本文版权归本文作者及「创客日记」所有,采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。

转载请注明:来自「创客日记」https://makerdiary.co/6lowpan-at-raspberry-pi-3/