在之前博文开源一套uwb 框架,后面几篇博文会基于这个开源框架进行简单开发。 让uwb使用者更清楚了解基于这个basecode 开发工作。

这里所做内容是,采集dwm1000 温度,并发送到另一个节点,另一个节点通过串口打印,也就是这里是一个远程采集温度的工程。当然可以使用主控stm32 采集任何传感器,按照本文思路将数据打包发送到另外一个节点。

1 在tx_main.c增加温度采集函数,并做验证。

温度采集函数

  1. uint16 BPhero_UWB_Get_Temperature(void)
  2. {
  3. uint16 register_result;
  4. uint16 Temperature = 0;
  5. /* Note on Temperature: the temperature value needs to be converted to give the real temperature
  6. * the formula is: 1.13 * reading - 113.0
  7. * Note on Voltage: the voltage value needs to be converted to give the real voltage
  8. * the formula is: 0.0057 * reading + 2.3
  9. * input parameters:
  10. * @param fastSPI - set to 1 if SPI rate > than 3MHz is used
  11. *
  12. * output parameters
  13. *
  14. * returns (temp_raw<<8)|(vbat_raw)
  15. */
  16. register_result = dwt_readtempvbat(1);
  17. //Temperature = (((register_result&0xFF00)>>8)*1.13 - 113)*100;
  18. return (register_result>>8);
  19. }

在tx_main 函数读取温度信息,验证可以正确采集到温度信息。tx_main 验证代码如下:

  1. int tx_main(void)
  2. {
  3. bphero_setcallbacks(Tx_Simple_Rx_Callback);
    char temp_result[5];
  4. int temp = 0 ;
  5. /* Infinite loop */
  6. dwt_enableframefilter(DWT_FF_DATA_EN);
  7. dwt_rxenable(0);
  8. while(1)
  9. {
  10. // BPhero_Distance_Measure_Specail_TAG();
  11.  
  12. Delay_us(10000);//5ms
  13. Delay_us(10000);//5ms
  14.  
  15. temp = (BPhero_UWB_Get_Temperature()*1.13 - 113);
  16. temp_result[0] = (temp/100)+0x30;
  17. temp_result[1] = (temp%100/10)+0x30;
  18. temp_result[2] = (temp%10)+0x30;
  19.  
  20. temp_result[3]='\n';temp_result[4]='\0';
  21. USART1DispFun(temp_result);
  22. }
  23. }

 主要是读取温度,并将温度百十个位分开并发送到串口显示。 tx_main 函数相对之前basecode,除了读取温度函数以外,在while(1) Enable RX,在while(1)内注释掉发送代码,这样做主要是,rx 功耗较大,可以明显看到温度变化。实际后面会回复原样。

编译下载后,串口收到温度信息:

可以看到使能接收的时候,dwm1000的文档可以稳定在53度左右,使用热风枪加热,温度会更高。

2 以上测试已经完成,开始修改tx_main,将发送的数据放到tx_message中。

A  tx_main函数恢复原样,里面只保留调用发送函数,与basecode一致

  1. int tx_main(void)
  2. {
  3. bphero_setcallbacks(Tx_Simple_Rx_Callback);
  4. while(1)
  5. {
  6. BPhero_Distance_Measure_Specail_TAG();
  7. }
  8. }

B 在发送message 中把温度信息打包进去 

  1. void BPhero_Distance_Measure_Specail_TAG(void)
  2. {
  3. int temp = 0 ;
  4. // dest address = SHORT_ADDR+1,only for test!!
  5. msg_f_send.destAddr[0] =(SHORT_ADDR+1) &0xFF;
  6. msg_f_send.destAddr[1] = ((SHORT_ADDR+1)>>8) &0xFF;
  7.  
  8. /* Write all timestamps in the final message. See NOTE 10 below. */
  9. final_msg_set_ts(&msg_f_send.messageData[FIRST_TX], tx_node[(SHORT_ADDR+1) &0xFF].tx_ts[0] );
  10. final_msg_set_ts(&msg_f_send.messageData[FIRST_RX], tx_node[(SHORT_ADDR+1) &0xFF].rx_ts[0] );
  11.  
  12. msg_f_send.seqNum = distance_seqnum;
  13. msg_f_send.messageData[0]='D';
  14. msg_f_send.messageData[1]=(SHORT_ADDR+1) &0xFF;
  15.  
  16. temp = (BPhero_UWB_Get_Temperature()*1.13 - 113);
  17. msg_f_send.messageData[2]=(temp/100)+0x30;
  18. msg_f_send.messageData[3]=(temp%100/10)+0x30;
  19. msg_f_send.messageData[4]=(temp%10)+0x30;

可以看到与之前basecode 相比,在messageData[2'3'4] 把温度信息打包了,只需要在rx阶段,同样读取messageData[2'3'4] 即可。

注意 psduLength 这个长度,不要小于要发送的数据长度,不然会收不全数据。

  1. dwt_writetxdata(psduLength, (uint8 *)&msg_f_send, 0) ;

C rx_main.c 读取同样读取messageData[2'3'4]

  1. switch(msg_f->messageData[0])
  2. {
  3. case 'D'://distance
  4. msg_f_send.messageData[0]='d';
  5. msg_f_send.messageData[1]=msg_f->messageData[1];
  6.  
  7. temp_result[0] = msg_f->messageData[2];
  8. temp_result[1] = msg_f->messageData[3];
  9. temp_result[2] = msg_f->messageData[4];
  10. temp_result[3] = '\n';
  11. temp_result[4] = '\0';
  12. temp_result[5] = 1;  

其中temp_result[5] 为接收成功标志位,当接收成功后将其置位1,while(1)中根据这个,将temp_result 打印出来

  1. while (1)
  2. {
  3. if(temp_result[5] ==1)
  4. {
  5. USART1DispFun(temp_result);
  6. temp_result[5] = 0;
  7. }
  8. }

到此,本文完

代码开源网址:www.51uwb.cn

UWB DWM1000 开源项目框架 之 温度采集的更多相关文章

  1. UWB DWM1000 开源项目框架

    UWB 目前比较火热,不论国内还是国外目前都掀起一股热潮. 但是实际工程代码很少,开源代码更少. 目前代码主要有 1 DecaWave Release的定位源码,代码基于TWR,一个非常大的状态机. ...

  2. android开源项目框架大全:

    android开源项目框架大全: 1.多页切换TabHost9 高仿网易云音乐客户端的Home页面切换Tabhost 高仿网易云音乐客户端的Home页面切换Tabhost,并且三角形是透明的,实现方式 ...

  3. Android非常实用的开源项目框架

    我将文章中所描述的项目都集成在一个apk中,可以直接运行查看效果,2.2以上的机器都可以运行.因为不让直接上传apk文件,我压缩成了zip包 1. Universal-Image-Loader 实现异 ...

  4. 0_MVC+EF+Autofac(dbfirst)轻型项目框架_基本框架

    前言 原来一直使用他人的开源项目框架,异常的定位会很麻烦,甚至不知道这个异常来自我的代码还是这个框架本身.他人的框架有一定的制约性,也有可能是我对那些框架并没深入了解,因为这些开源框架在网上也很难找到 ...

  5. .NET平台开源项目速览(13)机器学习组件Accord.NET框架功能介绍

    Accord.NET Framework是在AForge.NET项目的基础上封装和进一步开发而来.因为AForge.NET更注重与一些底层和广度,而Accord.NET Framework更注重与机器 ...

  6. android开源项目和框架(转)

    特效: http://www.androidviews.net/ http://www.theultimateandroidlibrary.com/ 常用效果: 1. https://github.c ...

  7. android开源项目和框架

    特效: http://www.androidviews.net/ http://www.theultimateandroidlibrary.com/ 常用效果: 1. https://github.c ...

  8. Facebook开源项目:我们为什么要用Fresco框架?

    (Facebook开源项目)Fresco:一个新的Android图像处理类库 在Facebook的Android客户端上快速高效的显示图片是非常重要的.然而多年来,我们遇到了很多如何高效存储图片的问题 ...

  9. 【转】android开源项目和框架

      特效: http://www.androidviews.net/ http://www.theultimateandroidlibrary.com/ 常用效果: 1. https://github ...

随机推荐

  1. maven工程目录和类加载器ClassLoader的记录

    URL url = this.getClass().getClassLoader().getResource("/" + packageName.replaceAll(" ...

  2. 深度探索MySQL主从复制原理

    深度探索MySQL主从复制原理 一 .概要 MySQL Replication (MySQL 主从复制) 是什么? 为什么要主从复制以及它的实现原理是什么? 1.1 MySQL 主从复制概念 MySQ ...

  3. nginx1.14.0版本location路径,多级文件目录配置,root与alias的配置区别

    1.多级目录配置 多级目录是指像/html/mypage 等等配置: server { listen 80; server_name localhost; location = /page1/ { # ...

  4. 转:深入浅出Java垃圾回收机制

    原文链接:http://www.importnew.com/1993.html 对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解G ...

  5. .net core使用ocelot---第八篇 Consul

    简介 .net core使用ocelot---第一篇 简单使用   .net core使用ocelot---第二篇 身份验证使用  .net core使用ocelot---第三篇 日志记录  .net ...

  6. .net core使用ocelot---第七篇 服务发现

    简介 .net core使用ocelot---第一篇 简单使用   .net core使用ocelot---第二篇 身份验证使用  .net core使用ocelot---第三篇 日志记录  .net ...

  7. DML 操作表中数据

    DML 是对于表中的记录进行增删改操作 一.添加数据   语法格式: insert into 表名[字段名] values[字段值]      表名:表示往那张表中添加数据   (字段名1,字段名2, ...

  8. Fortify漏洞之Portability Flaw: Locale Dependent Comparison

    继续对Fortify的漏洞进行总结,本篇主要针对 Portability Flaw: Locale Dependent Comparison 漏洞进行总结,如下: 1.Portability Flaw ...

  9. ORACLE 清理SYSAUX表空间

    在数据库检查中发现SYSAUX表空间占用过大,SYSAUX是ORACLE10G开始提供的功能,用于数据库为SYSTEM表空间减负. 用以下语句查出相应的表空间值 select a.tablespace ...

  10. redhat6.7 yum网络源配置

    RedHat自带的yum源需要当前系统注册了RHN才可以使用,如果没有注册,当使用yum时,会提示需要注册RHN 如果没有注册RHN,则意味着我们不能使用RedHat自带的yum源.这个时候,我们可以 ...