虽然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. 鸟哥的linux私房菜学习-(五)Linux系统的在线求助man page与info page

    1.man page man是manual(操作说明)的简写啦!只要下达:『man date』 马上就会有清楚的说明出现在你面前喔!如下所示: 进入man命令的功能后,你可以按下『空格键』往下翻页,可 ...

  2. HY.Mail:C#简单、易用的邮件工具库

    一.开发HY.Mail的初衷 Nuget或者github上有很多成熟且优秀的邮件库可以使用, 但是目前找到的使用都不够简洁或者不适合我的使用场景 我的场景是开发应用场景(例如系统通知.运维通知),而非 ...

  3. swift内存管理中的引用计数

    在swift中,每一个对象都有生命周期,当生命周期结束会调用deinit()函数进行释放内存空间. 观察这一段代码: class Person{ var name: String var pet: P ...

  4. 每天学一点Docker(3)(制作你的第一个容器)

    今天开始制作第一个容器,其实很简单 首先你要准备这些条件: 1.一个Ubuntu系统 2.这个系统能够联网,最起码ping www.baidu.com是可以的 这些准备条件准备好了,接下来就开始做准备 ...

  5. js设置元素class方法小结及classList相关

        给DOM元素设置class是我们在项目中非常容易遇到的,网上的资料和总结也比较多,下面比较全面的整理一下,希望给到大家一些帮助!并引用两种成熟的classList的兼容方法 一.el.setA ...

  6. tornado返回指定的http code

    最近做web api,需要在接口返回异常时,返回对应的http code. 查了下tornado的文档,是通过set_status方法来设置返回的http code,做个记录. self.set_st ...

  7. 进程管理工具Supervisor(一)简介与使用

    Supervisor是用Python开发的一套client/server架构的进程管理程序,能做到开机启动,以daemon进程的方式运行程序,并可以监控进程状态等等. linux进程管理方式有传统的r ...

  8. ThreadPool.QueueUserWorkItem引发的血案,线程池异步非正确姿势导致程序闪退的问题

    ThreadPool是.net System.Threading命名空间下的线程池对象.使用QueueUserWorkItem实现对异步委托的先进先出有序的回调.如果在回调的方法里面发生异常则应用程序 ...

  9. 《高性能javascript》学习总结

    本文是学习<高性能javascript>(Nichols C. Zakes著)的一些总结,虽然书比较过时,里面的知识点也有很多用不上了,但是毕竟是前人一步步探索过来的,记录着javascr ...

  10. 【转1】Appium 1.6.3 在Xcode 8, iOS 10.2(模拟器)测试环境搭建 经验总结

    Appium 1.6.3 在Xcode 8, iOS 10.2(模拟器)测试环境搭建 经验总结 关于 Appium 1.6.3 在Xcode 8, 10.2 的iOS模拟器上的问题很多,本人也差点放弃 ...