DA14531-蓝牙传感器固件开发

这里写目录标题

  • 1.DA14531简介
  • 2.蓝牙传感器开发
  • 3.主要用户应用代码
    • 3.1.传感器数据结构体
    • 3.2.配置广播间隔
    • 3.3.主要用户代码说明
      • 3.3.1.主要函数接口
      • 3.3.2.打印MAC地址
      • 3.3.3.低功耗模式
      • 3.3.4.广播数据底层配置
      • 3.3.5.刷新传感器数据

1.DA14531简介

DA14531是基于全球尺寸最小、功耗最低的蓝牙5.1系统级芯片(SOC),最小尺寸1.7X2.05x0.5mm,功耗23.75uA/MHz且TX发射电流3.5 mA,所属行业最低,它应用范围广泛,特别是在功耗和封装都要求比较高的场合。

2.蓝牙传感器开发

工程路径:\Source\DA14531\projects\target_apps\ble_examples\ble_app_peripheral
固件输出路径:Source\DA14531\projects\target_apps\ble_examples\ble_app_peripheral\Keil_5\out_DA14531\Output\ DA14531_Sensor.bin
传感器特性:

名称范围 默认参数
系统①低功耗系统 ②非低功耗系统
功耗不广播状态 1uA
广播状态200ms0.14mA
广播间隔时间:间隔广播(20ms-2000ms)
广播数据:设备名称 “Sensor”
制造商数据:FF
前两字节公司IDFFC1
A数据(uint16_t)1001
B数据(uint16_t)2001
C数据(uint16_t)3001
D数据(uint16_t)4001
E数据(uint16_t)5001
F数据(uint16_t)6001
G数据(uint16_t)7001

3.主要用户应用代码

3.1.传感器数据结构体

typedef struct
{
uint16_t SensorA;
uint16_t SensorB;
uint16_t SensorC;
uint16_t SensorD;
uint16_t SensorE;
uint16_t SensorF;
uint16_t SensorG;
}Sensor_Data_t;

3.2.配置广播间隔

1)#include “user_config.h” 中
/// Minimum interval for advertising
.intv_min = MS_TO_BLESLOTS(200), // 200ms

/// Maximum interval for advertising
.intv_max = MS_TO_BLESLOTS(200),                    // 200ms

2)配置设备名称:#define USER_DEVICE_NAME “Sensor”
配置公司ID #define USER_COMPANY_ID 0xFFC1

3.3.主要用户代码说明

3.3.1.主要函数接口

函数接口 说明
user_app_adv_undirect_complete() 广播完成回调函数
user_app_on_db_init_complete() BLE数据库初始化完成回调函数
user_app_adv_start() 开启广播函数
user_app_adv_stop() 关闭广播函数
app_easy_gap_undirected_advertise_start_create_msg 广播数据接口
user_RsfreshSensorData() 传感器数据刷新
user_app_before_sleep() 睡眠前回调函数
user_app_resume_from_sleep() 唤醒时回调函数

3.3.2.打印MAC地址

#if defined (DA14531)
extern struct bd_addr dev_bdaddr;
uint8_t bd_address[6] = CFG_NVDS_TAG_BD_ADDRESS;

arch_printf("OTP addr: %02x %02x %02x %02x %02x %02x\r\n",dev_bdaddr.addr[0],dev_bdaddr.addr[1],dev_bdaddr.addr[2],dev_bdaddr.addr[3],dev_bdaddr.addr[4],dev_bdaddr.addr[5]);arch_printf("nvds addr: %02x %02x %02x %02x %02x %02x\r\n",bd_address[0],bd_address[1],bd_address[2],bd_address[3],bd_address[4],bd_address[5]);

#endif
arch_printf(“main_loop\r\n”);

3.3.3.低功耗模式

设置为低功耗模式:
arch_set_sleep_mode(ARCH_EXT_SLEEP_ON);
设置为正常模式:
arch_set_sleep_mode(ARCH_SLEEP_OFF);

3.3.4.广播数据底层配置

        uint8_t dev_name_len = 0;uint8_t dev_manu_len = 0;uint8_t adv_data_len = 0;uint8_t scan_rsp_data_len = 0;uint8_t adv_data[31];uint8_t scan_rsp_data[31];// Device Namedev_name_len = strlen(USER_DEVICE_NAME);dev_manu_len = sizeof(device_info.manu);arch_printf("adv_name:%s\r\n",USER_DEVICE_NAME);adv_data_len = 0;if(dev_name_len){adv_data[adv_data_len + 0] = dev_name_len + 1;adv_data[adv_data_len + 1] = GAP_AD_TYPE_COMPLETE_NAME;memcpy(&adv_data[adv_data_len +2],USER_DEVICE_NAME,dev_name_len);adv_data_len += dev_name_len + 2;}if(dev_manu_len){adv_data[adv_data_len + 0] = dev_manu_len + 1;adv_data[adv_data_len + 1] = GAP_AD_TYPE_MANU_SPECIFIC_DATA;memcpy(&adv_data[adv_data_len +2],device_info.manu,dev_manu_len);adv_data_len += dev_manu_len + 2;}adv_cmd->info.host.adv_data_len = adv_data_len;memcpy(&(cmd->info.host.adv_data[0]), adv_data, adv_data_len);arch_printf("adv_data_len:%d\r\n",adv_data_len);show_reg(adv_data,adv_data_len,1);adv_cmd->info.host.scan_rsp_data_len = scan_rsp_data_len;memcpy(&(cmd->info.host.scan_rsp_data[0]), scan_rsp_data, scan_rsp_data_len);//arch_printf("scan_rsp_data_len:%d\r\n",scan_rsp_data_len);//show_reg(scan_rsp_data,scan_rsp_data_len,1);

3.3.5.刷新传感器数据

static void user_RsfreshSensorData(void)
{
///arch_printf(“Rsf\r\n”);

// 获取传感器信息
Sensor.SensorA++;
Sensor.SensorB++;
Sensor.SensorC++;
Sensor.SensorD++;
Sensor.SensorE++;
Sensor.SensorF++;
Sensor.SensorG++;// 更新数据
User_data.CycleTime++;
if(User_data.CycleTime>=5)
{User_data.CycleTime = 0;if(memcmp(&Sensor,&bacSensor,sizeof(Sensor))){device_info.manu[0] =(uint8_t)USER_COMPANY_ID;device_info.manu[1] =(uint8_t)(USER_COMPANY_ID>>8);device_info.manu[2] =Sensor.SensorA;device_info.manu[3] =Sensor.SensorA;device_info.manu[4] =Sensor.SensorB;device_info.manu[5] =Sensor.SensorB;device_info.manu[6] =Sensor.SensorC;device_info.manu[7] =Sensor.SensorC;device_info.manu[8] =Sensor.SensorD;device_info.manu[9] =Sensor.SensorD;device_info.manu[10] =Sensor.SensorE;device_info.manu[11] =Sensor.SensorE;device_info.manu[12] =Sensor.SensorF;device_info.manu[13] =Sensor.SensorF;device_info.manu[14] =Sensor.SensorG;device_info.manu[15] =Sensor.SensorG;user_app_adv_stop(); // 停止广播后,会重新开启广播 请看}
}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/827579.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python创建线程和结束线程

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 python创建线程和结束线程 在 Python 中,线程是一种轻量级的执行单元&#xff…

进程概念(进程第1篇)【Linux复习篇】

目录 1、冯诺依曼体系结构怎么画?中央处理器是什么?存储器是什么?每个部分有什么作用? 2、什么是操作系统? 3、什么叫进程?操作系统如何管理进程的? 4、怎么查看进程? 5、C语言…

基于MLP算法实现交通流量预测(Pytorch版)

在海量的城市数据中,交通流量数据无疑是揭示城市运行脉络、洞察出行规律的关键要素之一。实时且精准的交通流量预测不仅能为交通规划者提供科学决策依据,助力提升道路使用效率、缓解交通拥堵,还能为公众出行提供参考,实现个性化导…

指令和界面【Linux】

指令和界面 前言一、指令 vs 界面交互的需求满足需求的第一阶段——指令满足需求的第二阶段-界面时间 二、指令和界面交互区别为什么要学命令行总结 前言 Linux操作系统提供了丰富的命令行界面和图形用户界面工具,用户可以根据自己的需求选择适合的界面进行操作。命…

【好书推荐7】《机器学习平台架构实战》

【好书推荐7】《机器学习平台架构实战》 写在最前面《机器学习平台架构实战》编辑推荐内容简介作者简介目  录前  言本书读者内容介绍充分利用本书下载示例代码文件下载彩色图像本书约定 🌈你好呀!我是 是Yu欸 🌌 2024每日百字篆刻时光&…

论文阅读:BEVBert: Multimodal Map Pre-training for Language-guided Navigation

BEVBert:语言引导导航的多模态地图预训练 摘要 现存的问题:目前大多数现有的预训练方法都采用离散的全景图来学习视觉-文本关联。这要求模型隐式关联全景图中不完整、重复的观察结果,这可能会损害智能体的空间理解。 本文解决方案&#xf…

TikTok账号0播放是限流了吗?想要播放破万,试试这些方法!

前言 账号0播放问题,想必困扰着许多的TikTok运营同学。精心制作的短视频发布在TikTok,不是零播放,就是仅自己可见。那么,TikTok账号0播放是不是真的意味着被限流了呢?本篇总结了账号0播放的原因并附上解决方案&#xf…

[Flutter3] Json转dart模型举例

记录一下 Android studio plugin -> FlutterJsonBeanFactory 处理json转dart 模型 案例 json字符串, 一个 response的data返回数据 {"code":1,"msg":"\u64cd\u4f5c\u6210\u529f","data":{"list":{"id":"8…

SwiftUI 5.0(iOS 17.0)触摸反馈“震荡波”与触发器模式趣谈

概览 要想创作出一款精彩绝伦的 App,绚丽的界面和灵动的动画并不是唯一吸引用户的要素。有时我们还希望让用户真切的感受到操作引发的触觉反馈,直击使用者的灵魂。 所幸的是新版 SwiftUI 原生提供了实现触觉震动反馈的机制。在介绍它之后我们还将进一步…

等保测评之主机测评详解(二级)

等保测评之主机测评详解(二级)服务器——Windows 身份鉴别: 测评项a): a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换; 整改方…

antd中Upload上传图片宽高限制以及上传文件的格式限制

项目中有一个需求,要上传轮播图,且有尺寸要求,所以就需要在上传图片的时候进行尺寸限制,使用了Upload组件,需要在组件的beforeUpload方法中进行限制。 定义一个上传前的方法,并且添加一个图片尺寸获取的方…

【Redis】Zset 数据类型

文章目录 常用命令zaddzcard & zcountzrange & zrevrangezpopmax & bzpopmaxzpopmin & bzpopminzrank & zrevrankzscore & zremzremrangebyrank & zremrangebyscorezincrby 多个集合间的交互命令交集 & zinterstore并集 & sunionstore 内部…

【声呐仿真】学习记录0.5-配置ssh远程连接docker、在docker中使用nvidia显卡

【声呐仿真】学习记录0.5-配置ssh远程连接docker、在docker中使用nvidia显卡 配置ssh远程连接docker1.端口映射2.配置ssh 在docker中使用nvidia显卡配置CUDA 注意:之前已经创建过容器的,需要打包成镜像,重新创建容器,因为要在创建…

【C++庖丁解牛】C++11---右值引用和移动语义

🍁你好,我是 RO-BERRY 📗 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 目录 1 左值引用和右值引用2 左…

第一个Spring Boot程序

目录 一、Spring Boot介绍 二、创建Spring Boot项目 1、插件安装(专业版不需要) 2、创建SpringBoot项目 (1)这里如果插件下载失败,解决方案: (2)项目启动失败,解决…

web测试基础知识

目录 web系统的基础 web概念(worldwideweb) 网络结构 发展 架构 B/S C/S P2P 工作原理 静态页面 动态页面 web客户端技术 浏览器的核心--渲染引擎 web服务器端技术 web服务器 应用服务器 集群环境 数据库 案例-URL 协议类型 主机名 端口 IP地址 分类 …

C#开发的全套成熟的LIS系统源码JavaScript+SQLserver 2012区域云LIS系统源码

C#开发的全套成熟的LIS系统源码JavaScriptSQLserver 2012区域云LIS系统源码 医院云LIS系统是一套成熟的实验室信息管理系统,目前已在多家三级级医院应用,并不断更新。云LIS系统是为病人为中心、以业务处理为基础、以提高检验科室管理水平和工作效率为目标…

贪心算法练习day.1

理论基础 贪心算法是一种常见的解决优化问题的方法,其基本思想就是在问题的每个决策阶段,都选择当前看起来最优的选择,即贪心地做出局部的最优决策,以此得到全局的最优解,例如在十张面额不同的钞票,让我们…

润申信息企业标准化管理系统 AddNewsHandler.ashx 任意用户创建漏洞复现

0x01 产品简介 润申信息科技企业标准化管理系统通过给客户提供各种灵活的标准法规信息化管理解决方案,帮助他们实现了高效的标准法规管理,完成个性化标准法规库的信息化建设。 0x02 漏洞概述 润申信息企业标准化管理系统 AddNewsHandler.ashx 接口处存在任意用户创建漏洞,…

Linux安装部署Tomcat

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ Linux安装部署Tomcat //将tomcat压缩包解压到对…