从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快速开发蓝牙网关相关推荐

  1. 微信小程序低功耗蓝牙BLE快速开发js

    文章目录 1.前言 2.资料 3.BLE连接流程 BLE连接原理 4.index.js页面加载流程详细说明 完整代码: 1.前言 目的: 1.为了能三分钟快速开发BLE模块,特此做一个笔记,按照笔记的 ...

  2. APP Invertor 蓝牙BLE 个人案例分享 快速开发自己的蓝牙APP

    APP Invertor 2 蓝牙BLE 个人案例分享 快速开发自己的蓝牙APP 经过几天的学习,期间查找了许多的文章资料.经过研究和总结加实践,终于做出了一个实现简单的接收和发送的Demo.下面将分 ...

  3. 【安信可PB-01/02模组专题③】ESP32-G WIFI蓝牙网关与PB02模组开发进行组网通讯

    文章目录 前言 工具 ESP32-G 网关介绍 (1)产品概述 (2)产品接口及 LED 指示灯说明 ESP32-G 网关蓝牙模式使用 (1) 恢复出厂设置 (2) 点击网关中的蓝牙选项 (3) 点击 ...

  4. BlueTooth: 嵌入式蓝牙网关中蓝牙驱动层研究与实现

    0.引言 随着智能终端设备的不断增多,用来连接各种笔记本.PDA.台式电脑等设备的电缆布线会越来越复杂,它不 仅影响了美观性,还增加了安装.维护的费用和难度,蓝牙技术是解决上述问题的有效途径之一,家庭 ...

  5. Mac下使用ABTestingGateway快速搭建灰度网关

    Mac下使用ABTestingGateway快速搭建灰度网关 ABTestingGateway简介 ABTestingGateway 是新浪开源的一个可以动态设置分流策略的灰度发布系统,工作在7层,基 ...

  6. 浅析工业级物联网项目的快速开发

    浅析工业级物联网项目的快速开发 发表于2015-11-10 15:01| 1567次阅读| 来源CSDN| 4 条评论| 作者蒲婧 CTO俱乐部CTOCTO讲堂物联网工业级刘洪峰叶帆 width=&q ...

  7. 【阿里云IoT+YF3300】9.快速开发modbus设备驱动

    Modbus是一种串行通信协议,是莫迪康公司为PLC(编程逻辑控制器)通信而设计的协议.Modbus目前已经成为工业领域通信协议的业界标准,大部分的仪器仪表都支持该通信协议.很早以前就开发过基于Mod ...

  8. 开源集锦(五)开源框架和快速开发工具类

    Volley https://github.com/stormzhang/AndroidVolley http://blog.csdn.net/t12x3456/article/details/922 ...

  9. 如何设计一个API快速开发平台?

    点击上方☝码猿技术专栏 轻松关注,设为星标! 及时获取有趣有料的技术 来源:toutiao.com/i6914469326074479108/ 在我之前谈API网关的时候曾经谈到过快速开发平台,即将A ...

最新文章

  1. 2款不同样式的CSS3 Loading加载动画 附源码
  2. Pytorch网络结构可视化
  3. ubuntu 修改hostname
  4. git:config命令
  5. 安装mysql 图_如何在Windows下安装MYSQL,并截图说明
  6. Codeforces Round #547 (Div. 3)
  7. JavaScript高级之ECMASript 7、8 、9 、10 新特性
  8. 苹果手机显示iphone已停用连接itunes_iphone忘记密码怎么办 iphone忘记密码解决方法【详细步骤】...
  9. idea 控制台程序的打包
  10. python 千万级数据处理_Python实现 ! 千万级别数据处理
  11. 直播视频网站源码,登录界面LoginActivity
  12. java swing tooltips_tooltips 提示
  13. 厚积薄发系列(C语言资料)
  14. 安卓 手柄 linux,Linux joystick 游戏手柄编程 (获取输入数据)
  15. 【出差总结】出差0902
  16. 数据库三类完整性规则
  17. 尚雯婕变芭比娃娃 你被雷到了还是被电到?
  18. python之最大公约数
  19. ISCC-2022 部分wp
  20. 全球及中国有机食品市场供需规模与未来竞争态势研究报告2022版

热门文章

  1. [JAVA] java读取Excel文件内容,jxl(Excel 2003)
  2. oracle ORA-01481,ORACLE错误一览表
  3. delphi eof
  4. EasyGBS国标平台新增WebSocket消息推送,可快速定位视频播放故障
  5. 学生管理程序c语言数组,c语言学生管理系统(c语言学生信息管理系统)
  6. 墨菲定律 二八法则 马太效应 手表定理 不值得 定律 彼得原理 零和游戏 华盛顿合作规律 酒与污水定律 水桶定律 蘑菇
  7. USB学习入门(五)------蓦然回首,那人却在灯火阑珊处
  8. c语言关系模式定义,c语言、数据库部分
  9. Js实现数字动态滚动效果
  10. ”张荣华边用毛巾给她拭去毛上的雨水