Nordic52840快速开发蓝牙网关
从0开始
0----下载SDK
nRF5 SDK downloads - nordicsemi.com
1---验证板子SDK \examples\peripheral\blinky\pca10056\blank\arm5_no_packs
错误笔记: Software Pack 'NordicSemiconductor.nRF_DeviceFamilyPack.8.40.3' is not installed
NordicSemiconductor.nRF_DeviceFamilyPack.#.#.#.pack下载方法_竹叶木木的博客-CSDN博客
1、打开
http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/
2、找到自己需要的软件包,下载
3、打开以下路径,将下载好的压缩包保存,如下载了NordicSemiconductor.nRF_DeviceFamilyPack.8.24.1pack.zip,解压,重命名为8.24.1。
4、完成
5、若在工程中还是找不到该软件包,重新打开keil工程即可。
————————————————
版权声明:本文为CSDN博主「竹叶木木」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41430066/article/details/104125524
开发板效果是4个LED流水点亮 没有LOG输出
+++++++++++++++++++++run其他
examples\ble_peripheral\ble_app_blinky\pca10056
不要run center里面的 它是主机 去扫描的 我的话自己有手机 选择板子去广播的案例
+++++++++++++++++++++
2---fanstal的网关的话 修改板子代码
D:\git\DeviceDownload\nRF5_SDK_17.1.0_ddde560\components\boards\pca10056.h
//#define LEDS_NUMBER 4//#define LED_1 NRF_GPIO_PIN_MAP(0,13)
//#define LED_2 NRF_GPIO_PIN_MAP(0,14)
#define LED_3 NRF_GPIO_PIN_MAP(0,15)
#define LED_4 NRF_GPIO_PIN_MAP(0,16)
#define LED_START LED_1
//#define LED_STOP LED_4#define LEDS_ACTIVE_STATE 0//#define LEDS_LIST { LED_1, LED_2, LED_3, LED_4 }#define LEDS_INV_MASK LEDS_MASK#define LEDS_NUMBER 2
#define LED_1 NRF_GPIO_PIN_MAP(1, 0)
#define LED_2 NRF_GPIO_PIN_MAP(0, 11)//11
#define LED_STOP LED_2
#define LEDS_LIST { LED_1, LED_2}
1--原理图
2--烧录
保存固件
+++++++++++++++++++
D:\git\DeviceDownload\nRF5_SDK_17.1.0_ddde560\examples\ble_peripheral\ble_app_uart\pca10056\s140\arm5_no_packs
这就是NUS
先最为从机 我手机APP扫描到它 然后它发消息过来!
#define DEVICE_NAME "Nordic_UART"
届时 它的广播名字
services_init
nus_data_handler
注意一下
发广播的是从机-它是ble_nus.c--它是发送函数 ble_nus_data_send
去扫描的是主机-它是ble_nus_c.c--它是发送函数 ble_nus_c_string_send
我现在不要UART 我是手机APP点击以后 就从机一直不停的应答
它是在
on_write
p_client->is_notification_enabled = true;
evt.type = BLE_NUS_EVT_COMM_STARTED;
注意这个枚举
typedef enum
{
BLE_NUS_EVT_RX_DATA, /**< Data received. */
BLE_NUS_EVT_TX_RDY, /**< Service is ready to accept new data to be transmitted. */
BLE_NUS_EVT_COMM_STARTED, /**< Notification has been enabled. */
BLE_NUS_EVT_COMM_STOPPED, /**< Notification has been disabled. */
} ble_nus_evt_type_t;
主函数只是处理了 从机收到消息以后怎么办
static void nus_data_handler(ble_nus_evt_t * p_evt)
{if (p_evt->type == BLE_NUS_EVT_RX_DATA){uint32_t err_code;NRF_LOG_DEBUG("Received data from BLE NUS. Writing data on UART.");NRF_LOG_HEXDUMP_DEBUG(p_evt->params.rx_data.p_data, p_evt->params.rx_data.length);for (uint32_t i = 0; i < p_evt->params.rx_data.length; i++){do{err_code = app_uart_put(p_evt->params.rx_data.p_data[i]);if ((err_code != NRF_SUCCESS) && (err_code != NRF_ERROR_BUSY)){NRF_LOG_ERROR("Failed receiving NUS message. Error 0x%x. ", err_code);APP_ERROR_CHECK(err_code);}} while (err_code == NRF_ERROR_BUSY);}if (p_evt->params.rx_data.p_data[p_evt->params.rx_data.length - 1] == '\r'){while (app_uart_put('\n') == NRF_ERROR_BUSY);}}}
而前面的 从机收到使能CCCD该怎么办 主函数没有处理 我就在这里写即可
static void nus_data_handler(ble_nus_evt_t * p_evt)
{if (p_evt->type == BLE_NUS_EVT_RX_DATA){uint32_t err_code;NRF_LOG_DEBUG("Received data from BLE NUS. Writing data on UART.");NRF_LOG_HEXDUMP_DEBUG(p_evt->params.rx_data.p_data, p_evt->params.rx_data.length);for (uint32_t i = 0; i < p_evt->params.rx_data.length; i++){do{err_code = app_uart_put(p_evt->params.rx_data.p_data[i]);if ((err_code != NRF_SUCCESS) && (err_code != NRF_ERROR_BUSY)){NRF_LOG_ERROR("Failed receiving NUS message. Error 0x%x. ", err_code);APP_ERROR_CHECK(err_code);}} while (err_code == NRF_ERROR_BUSY);}if (p_evt->params.rx_data.p_data[p_evt->params.rx_data.length - 1] == '\r'){while (app_uart_put('\n') == NRF_ERROR_BUSY);}}else if (p_evt->type == BLE_NUS_EVT_COMM_STARTED){uint32_t err_code;err_code = app_timer_start(tx_timer_id, APP_TIMER_TICKS(1000), NULL);APP_ERROR_CHECK(err_code);NRF_LOG_INFO("BLE_NUS_EVT_COMM_STARTED.");}else if (p_evt->type == BLE_NUS_EVT_COMM_STOPPED){uint32_t err_code;err_code = app_timer_stop(tx_timer_id);APP_ERROR_CHECK(err_code);num='0';NRF_LOG_INFO("BLE_NUS_EVT_COMM_STOPPED.");}}
前面这个就增加定时器
APP_TIMER_DEF(tx_timer_id);
static uint8_t num='0';
static void data_output_timeout_handler(void * p_context)
{UNUSED_PARAMETER(p_context);uint32_t err_code;uint16_t numlen=1;err_code = ble_nus_data_send(&m_nus, &num, &numlen, m_conn_handle);if ((err_code != NRF_ERROR_INVALID_STATE) &&(err_code != NRF_ERROR_RESOURCES) &&(err_code != NRF_ERROR_NOT_FOUND)){APP_ERROR_CHECK(err_code);}num++;
}static void timers_init(void)
{ret_code_t err_code = app_timer_init();APP_ERROR_CHECK(err_code);err_code = app_timer_create(&tx_timer_id,APP_TIMER_MODE_REPEATED,data_output_timeout_handler);
// err_code = app_timer_start(tx_timer_id, APP_TIMER_TICKS(100), NULL);
// APP_ERROR_CHECK(err_code);
}
D:\git\DeviceDownload\nRF5_SDK_17.1.0_ddde560\examples\ble_peripheral\ble_app_uart\pca10056\s140\arm5_no_packs\_build
D:\git\DeviceDownload\nRF5_SDK_17.1.0_ddde560\components\softdevice\s140\hex
测试效果和预计一样
手机点击使能以后手机看到数据在变化!
而且直接可以看LOG的 说明我的修改可以
看一下UUID
D:\git\DeviceDownload\nRF5_SDK_17.1.0_ddde560\components\ble\ble_services\ble_nus\ble_nus.c(64) :
#define NUS_BASE_UUID {{0x9E, 0xCA, 0xDC, 0x24, 0x0E, 0xE5, 0xA9, 0xE0, 0x93, 0xF3, 0xA3, 0xB5, 0x00, 0x00, 0x40, 0x6E}} /**< Used vendor specific UUID. */
ble_nus_init
err_code = sd_ble_uuid_vs_add(&nus_base_uuid, &p_nus->uuid_type);
标准NUS的样子
++++++++++++++++++++
继续看
D:\git\DeviceDownload\nRF5_SDK_17.1.0_ddde560\examples\ble_central\ble_app_uart_c\pca10056\s140\arm5_no_packs
nus的主机 这就是GW
我希望它扫到一个然后连接然后断开
源码
static void scan_init(void)
{ret_code_t err_code;nrf_ble_scan_init_t init_scan;memset(&init_scan, 0, sizeof(init_scan));init_scan.connect_if_match = true;init_scan.conn_cfg_tag = APP_BLE_CONN_CFG_TAG;err_code = nrf_ble_scan_init(&m_scan, &init_scan, scan_evt_handler);APP_ERROR_CHECK(err_code);err_code = nrf_ble_scan_filter_set(&m_scan, SCAN_UUID_FILTER, &m_nus_uuid);APP_ERROR_CHECK(err_code);err_code = nrf_ble_scan_filters_enable(&m_scan, NRF_BLE_SCAN_UUID_FILTER, false);APP_ERROR_CHECK(err_code);
}
它是通过UUID筛选设备的 我通过名字就修改一下
我的从机 的名字是GKOSON
#define NAME_FILTER "GKOSON"
static void scan_init(void)
{ret_code_t err_code;nrf_ble_scan_init_t init_scan;memset(&init_scan, 0, sizeof(init_scan));init_scan.connect_if_match = true;init_scan.conn_cfg_tag = APP_BLE_CONN_CFG_TAG;err_code = nrf_ble_scan_init(&m_scan, &init_scan, scan_evt_handler);APP_ERROR_CHECK(err_code);// err_code = nrf_ble_scan_filter_set(&m_scan, SCAN_UUID_FILTER, &m_nus_uuid);
// APP_ERROR_CHECK(err_code);// err_code = nrf_ble_scan_filters_enable(&m_scan, NRF_BLE_SCAN_UUID_FILTER, false);
// APP_ERROR_CHECK(err_code);err_code = nrf_ble_scan_filter_set(&m_scan, SCAN_NAME_FILTER, NAME_FILTER);APP_ERROR_CHECK(err_code);err_code = nrf_ble_scan_filters_enable(&m_scan, NRF_BLE_SCAN_NAME_FILTER, false);APP_ERROR_CHECK(err_code);
}
那么我主动使能以后 就马上TX一下
然后我收到ACK以后 就马上断开连接-ble_nus_chars_received_uart_print
/**@snippet [Handling events from the ble_nus_c module] */
static void ble_nus_c_evt_handler(ble_nus_c_t * p_ble_nus_c, ble_nus_c_evt_t const * p_ble_nus_evt)
{ret_code_t err_code;switch (p_ble_nus_evt->evt_type){case BLE_NUS_C_EVT_DISCOVERY_COMPLETE:NRF_LOG_INFO("Discovery complete.");err_code = ble_nus_c_handles_assign(p_ble_nus_c, p_ble_nus_evt->conn_handle, &p_ble_nus_evt->handles);APP_ERROR_CHECK(err_code);err_code = ble_nus_c_tx_notif_enable(p_ble_nus_c);APP_ERROR_CHECK(err_code);NRF_LOG_INFO("Connected to device with Nordic UART Service.");//使能以后 马上TX消息出去static uint8_t data_array[4]={"HAHA"};err_code = ble_nus_c_string_send(&m_ble_nus_c, data_array, 4);if ((err_code != NRF_SUCCESS) && (err_code != NRF_ERROR_BUSY)){NRF_LOG_ERROR("Failed sending NUS message. Error 0x%x. ", err_code);APP_ERROR_CHECK(err_code);}break;case BLE_NUS_C_EVT_NUS_TX_EVT:ble_nus_chars_received_uart_print(p_ble_nus_evt->p_data, p_ble_nus_evt->data_len);//收到从机的消息以后 主动断开 sd_ble_gap_disconnect(p_ble_nus_c->conn_handle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);break;case BLE_NUS_C_EVT_DISCONNECTED:NRF_LOG_INFO("Disconnected.");scan_start();break;}
}
D:\git\DeviceDownload\nRF5_SDK_17.1.0_ddde560\examples\ble_central\ble_app_uart_c\pca10056\s140\arm5_no_packs\_build
D:\git\DeviceDownload\nRF5_SDK_17.1.0_ddde560\components\softdevice\s140\hex
死机 调式一次
err_code = nrf_ble_scan_filter_set(&m_scan, SCAN_NAME_FILTER, NAME_FILTER);
这里不走了
和配置有关系
..\..\..\main.c(88): warning: #177-D: variable "m_nus_uuid" was declared but never referenced
放弃UUID过滤的
开始测试
可以找到我的从机 断开一般是0X16 (我自己主机发的)但是也有0X13(从机发起的)
效果还可以 因为我的从机的逻辑是收到主机消息HAHA以后马上ACK 然后主动断开连接了
Nordic52840快速开发蓝牙网关相关推荐
- 微信小程序低功耗蓝牙BLE快速开发js
文章目录 1.前言 2.资料 3.BLE连接流程 BLE连接原理 4.index.js页面加载流程详细说明 完整代码: 1.前言 目的: 1.为了能三分钟快速开发BLE模块,特此做一个笔记,按照笔记的 ...
- APP Invertor 蓝牙BLE 个人案例分享 快速开发自己的蓝牙APP
APP Invertor 2 蓝牙BLE 个人案例分享 快速开发自己的蓝牙APP 经过几天的学习,期间查找了许多的文章资料.经过研究和总结加实践,终于做出了一个实现简单的接收和发送的Demo.下面将分 ...
- 【安信可PB-01/02模组专题③】ESP32-G WIFI蓝牙网关与PB02模组开发进行组网通讯
文章目录 前言 工具 ESP32-G 网关介绍 (1)产品概述 (2)产品接口及 LED 指示灯说明 ESP32-G 网关蓝牙模式使用 (1) 恢复出厂设置 (2) 点击网关中的蓝牙选项 (3) 点击 ...
- BlueTooth: 嵌入式蓝牙网关中蓝牙驱动层研究与实现
0.引言 随着智能终端设备的不断增多,用来连接各种笔记本.PDA.台式电脑等设备的电缆布线会越来越复杂,它不 仅影响了美观性,还增加了安装.维护的费用和难度,蓝牙技术是解决上述问题的有效途径之一,家庭 ...
- Mac下使用ABTestingGateway快速搭建灰度网关
Mac下使用ABTestingGateway快速搭建灰度网关 ABTestingGateway简介 ABTestingGateway 是新浪开源的一个可以动态设置分流策略的灰度发布系统,工作在7层,基 ...
- 浅析工业级物联网项目的快速开发
浅析工业级物联网项目的快速开发 发表于2015-11-10 15:01| 1567次阅读| 来源CSDN| 4 条评论| 作者蒲婧 CTO俱乐部CTOCTO讲堂物联网工业级刘洪峰叶帆 width=&q ...
- 【阿里云IoT+YF3300】9.快速开发modbus设备驱动
Modbus是一种串行通信协议,是莫迪康公司为PLC(编程逻辑控制器)通信而设计的协议.Modbus目前已经成为工业领域通信协议的业界标准,大部分的仪器仪表都支持该通信协议.很早以前就开发过基于Mod ...
- 开源集锦(五)开源框架和快速开发工具类
Volley https://github.com/stormzhang/AndroidVolley http://blog.csdn.net/t12x3456/article/details/922 ...
- 如何设计一个API快速开发平台?
点击上方☝码猿技术专栏 轻松关注,设为星标! 及时获取有趣有料的技术 来源:toutiao.com/i6914469326074479108/ 在我之前谈API网关的时候曾经谈到过快速开发平台,即将A ...
最新文章
- 2款不同样式的CSS3 Loading加载动画 附源码
- Pytorch网络结构可视化
- ubuntu 修改hostname
- git:config命令
- 安装mysql 图_如何在Windows下安装MYSQL,并截图说明
- Codeforces Round #547 (Div. 3)
- JavaScript高级之ECMASript 7、8 、9 、10 新特性
- 苹果手机显示iphone已停用连接itunes_iphone忘记密码怎么办 iphone忘记密码解决方法【详细步骤】...
- idea 控制台程序的打包
- python 千万级数据处理_Python实现 ! 千万级别数据处理
- 直播视频网站源码,登录界面LoginActivity
- java swing tooltips_tooltips 提示
- 厚积薄发系列(C语言资料)
- 安卓 手柄 linux,Linux joystick 游戏手柄编程 (获取输入数据)
- 【出差总结】出差0902
- 数据库三类完整性规则
- 尚雯婕变芭比娃娃 你被雷到了还是被电到?
- python之最大公约数
- ISCC-2022 部分wp
- 全球及中国有机食品市场供需规模与未来竞争态势研究报告2022版
热门文章
- [JAVA] java读取Excel文件内容,jxl(Excel 2003)
- oracle ORA-01481,ORACLE错误一览表
- delphi eof
- EasyGBS国标平台新增WebSocket消息推送,可快速定位视频播放故障
- 学生管理程序c语言数组,c语言学生管理系统(c语言学生信息管理系统)
- 墨菲定律 二八法则 马太效应 手表定理 不值得 定律 彼得原理 零和游戏 华盛顿合作规律 酒与污水定律 水桶定律 蘑菇
- USB学习入门(五)------蓦然回首,那人却在灯火阑珊处
- c语言关系模式定义,c语言、数据库部分
- Js实现数字动态滚动效果
- ”张荣华边用毛巾给她拭去毛上的雨水