3180|7

1297

帖子

2

TA的资源

纯净的硅(中级)

楼主
 

【linknode评测】08 BLE小气象站 [复制链接]

今天尝试在手机上接收温度和气压值,测量值来自板载的bmp180。其实用mbed开发,就算从空白项目开始也很简单,就是添加bmp180,nRF51822和BLE_API和mbed 4个lib而已。注意include的时候,文件名是大小写敏感滴!!
然后是BLE的一般流程,包括:
定义characteristic,包括UUID,数据承载变量,数据长度和权限(读,写,通知等)等
定义service,其实就是构造所有characteristic组成的列表
  1. GattCharacteristic  weatherCharacteristic (BLE_UUID_WEATHER_CHARACTERISTIC, weatherdata, 1, WEATHER_BUF_LEN, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
  2. GattCharacteristic *weatherChars[] = {&weatherCharacteristic};
  3. GattService         weatherService(BLE_UUID_WEATHER_CHARACTERISTIC, weatherChars, 1);
复制代码

然后在主函数中添加service就可以了。
以上这是属于GATT部分,和数据有关。而连接则是由GAP搞定,全部在主函数里面,如果考虑不多,只需要修改我们看到的设备名称就好了,下面代码中,只要修改第五行的字符串就可以了。
  1.     // setup advertising
  2.     ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
  3.     ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
  4.     ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
  5.                                     (const uint8_t *)"BLEweather", sizeof("BLEweather") - 1);   
  6.     ble.setAdvertisingInterval(160);
  7.     ble.startAdvertising();
复制代码

然后就是BMP180的流程了,首先在main函数里面初始化。这个是比较保险的初始化,其实测试完毕以后,只要bmp.init()这一句就够了。
  1.    while(1)    {
  2.        if (bmp180.init() != 0)        {
  3.            printf("Error communicating with BMP180\n");
  4.        }        else        {
  5.            printf("Initialized BMP180\n");
  6.            break;
  7.        }
  8.        wait(1);
  9.    }
复制代码

在m_status_check_handle函数里面调用读温度和气压的函数,然后用ble.updateCharacteristicValue更新。这里用了buf和bff,看起来很浪费,不过人家sprintf和update的参数类型要求不一样(分别是char 和uint8),也只能这么干了
  1. //m_status_check_handle 函数代码
复制代码
测试的时候没有使用redbear的app,所以直接传的是字符串。为了能循环更新数据,m_status_check_handle attach到ticker,2秒执行一次。如果在手机中打开notify,则每2秒会看到温度和气压数据。整个过程还是很顺利的。就是比较奇怪的是,最长只能接收20个字符??这是为啥

具体main.cpp见附件 main.cpp (4.13 KB, 下载次数: 1)

此帖出自RF/无线论坛

最新回复

期待楼主更多原创  详情 回复 发表于 2016-5-30 17:18
点赞 关注
 

回复
举报

1万

帖子

2854

TA的资源

管理员

来自 2楼
 
汇总帖在此:

【linknode评测】—— by johnrey
https://bbs.eeworld.com.cn/forum. ... 0308&fromuid=536508
此帖出自RF/无线论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名

玩板看这里:

https://bbs.eeworld.com.cn/elecplay.html

EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!

 
 

回复

3238

帖子

5

TA的资源

五彩晶圆(中级)

板凳
 
楼主最好介绍下如何获得温度和气压值的
此帖出自RF/无线论坛

点评

其实前面有写过,就是名字起的不好,hoho。https://bbs.eeworld.com.cn/thread-489507-1-1.html  详情 回复 发表于 2016-5-30 16:31
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 
 
 

回复

3238

帖子

5

TA的资源

五彩晶圆(中级)

4
 
刚才看到了,原因是你自己手动发送的?好吧,晚上分享一篇真正的小气象站文章
此帖出自RF/无线论坛

点评

期待分享。我这个是还比较low的  详情 回复 发表于 2016-5-30 16:39
你说只能收到20个字符吗?我吧buf长度写到了25,可是20个字符以后,全部是没有的。所以只好把实际发送的字符串长度改到了20以内(就是把单位给去掉了)。发送是用ticker,每2s notify到手机  详情 回复 发表于 2016-5-30 16:32
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 
 
 

回复

1297

帖子

2

TA的资源

纯净的硅(中级)

5
 
wateras1 发表于 2016-5-30 14:16
楼主最好介绍下如何获得温度和气压值的

其实前面有写过,就是名字起的不好,hoho。https://bbs.eeworld.com.cn/thread-489507-1-1.html
此帖出自RF/无线论坛
 
 
 

回复

1297

帖子

2

TA的资源

纯净的硅(中级)

6
 
wateras1 发表于 2016-5-30 14:17
刚才看到了,原因是你自己手动发送的?好吧,晚上分享一篇真正的小气象站文章

你说只能收到20个字符吗?我吧buf长度写到了25,可是20个字符以后,全部是没有的。所以只好把实际发送的字符串长度改到了20以内(就是把单位给去掉了)。发送是用ticker,每2s notify到手机
此帖出自RF/无线论坛
 
 
 

回复

1297

帖子

2

TA的资源

纯净的硅(中级)

7
 
wateras1 发表于 2016-5-30 14:17
刚才看到了,原因是你自己手动发送的?好吧,晚上分享一篇真正的小气象站文章

期待分享。我这个是还比较low的
此帖出自RF/无线论坛

点评

期待楼主更多原创  详情 回复 发表于 2016-5-30 17:18
 
 
 

回复

3238

帖子

5

TA的资源

五彩晶圆(中级)

8
 
johnrey 发表于 2016-5-30 16:39
期待分享。我这个是还比较low的

期待楼主更多原创
此帖出自RF/无线论坛
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表