虽然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. 接口返回数据Json格式处理

    有这样一个页面 , 用来显示用户的账户记录数据,并且需要显示每个月的 收入 支出合计 ,在分页的时候涉及到一些问题,需要对返回的Json格式做处理,处理起来比较麻烦,后端返回的Json数据格式形式如下 ...

  2. 让git不再跟踪配置文件的变化

    我们经常会在配置文件里留下一些敏感信息 比如数据库链接字符串的用户名和密码 如果不提交配置文件到github或者其他源码管理网站 那么你的粉丝很可能就无法正确运行你的项目,就达不到开源的目的了 那么, ...

  3. 第十六章:Python の Web开发基础(三) jQuery与Ajax

    本課主題 jQuery 介绍 Ajax 介绍 jQuery 介绍 选择器 jQuery 的选择器分不同的种类,主要目的是用来查找目标的 HTML 标签,方便对目标标签进行操作,比如找到 <li& ...

  4. 北漂的IT人

    北京的互联网人,是工作日完全没有个人生活的一类人,也是整个北漂大队伍中,下班时间最晚的那一波人,如果赶上周末还要加班,那毫不夸张地说,你的整个人生都在互联网上奋斗着. 虽说十点上班让多少行内外的人羡慕 ...

  5. 【漏洞分析】dedecms有前提前台任意用户密码修改

     0x00 前言 早上浏览sec-news,发现锦行信息安全发布了一篇文章<[漏洞分析] 织梦前台任意用户密码修改>,看完之后就想着自己复现一下. 该漏洞的精髓是php的弱类型比较,'0. ...

  6. Java学习笔记16(面向对象九:补充内容)

    总是看到四种权限,这里做一个介绍: 最大权限是public,后面依次是protected,default,private private修饰的只在本类可以使用 public是最大权限,可以跨包使用,不 ...

  7. 阿里云服务器Tomcat无法从外部访问

    一.环境 阿里云 Ubuntu 12.04.5 LTS tomcat和java都是阿里云默认的7的版本,如下图 二.问题 部署后./startup.sh启动tomcat 之后外部访问http://ip ...

  8. 入门干货之Grpc的.Net实现-MagicOnion

    此文章简单残暴,学习成本较低,你可以跟着我一起撸代码,一起吐槽,一起砸键盘.以下操作均为 core2.0 环境. 0x01.Grpc 1.介绍  Google主导开发的RPC框架,使用HTTP/2协议 ...

  9. windows第七层负载均衡--基于IIS的ARR负载均衡

    载均衡有很多种方法,有硬件负载均衡,软件负载均衡,还可以从域名解析下手. 不过,今天只讲软件负载均衡 软件负载均衡一般分两种,从网络协议来讲(tcp/ip),主要集中在第四层和第七层进行负载均衡. 第 ...

  10. ARM非对齐操作异常解决过程

    在测试MF固件时,发生一个非常诡异的异常,代码如下: CLR_DBG_Commands::Monitor_EraseMemory* cmd = (CLR_DBG_Commands::Monitor_E ...