nRF52832+Mesh 3.2.0 学习笔记 - 记录贴

时间:2024-05-21 12:09:19

nRF52832+Mesh 3.2.0 学习笔记

                                                                              张婷婷  2019.12.21       

 

0 参考资料

API参考手册等入口:http://www.viper1983.com/nrf_mesh/html/

创建新模型:http://www.viper1983.com/nrf_mesh/html/md_doc_libraries_how_to_models.html

简单的onoff模型解析:http://www.viper1983.com/nrf_mesh/html/md_models_vendor_simple_on_off_README.html

Mesh通用模型/ 规格:http://www.viper1983.com/MshMDLv1.0.1/MshMDLv1.0.1-201-317.pdf.html

模型/操作码/状态码消息流/序列

 

 

SDK下载:https://www.nordicsemi.com/Software-and-tools/Software/nRF5-SDK/Download#infotabs

mesh下载:https://www.nordicsemi.com/Software-and-tools/Software/nRF5-SDK-for-Mesh/Download

mesh3.2.0介绍:https://infocenter.nordicsemi.com/index.jsp?topic=%2Fstruct_sdk%2Fstruct%2Fsdk_mesh_latest.html

 

mesh APP:艾克姆资料盘

 

mesh APP源码:https://github.com/NordicSemiconductor/Android-nRF-Mesh-Library

 

nRF52832中文手册: https://www.docin.com/p-2197883124.html

 

 

 

1.修改蓝牙名称

nRF52832+Mesh 3.2.0 学习笔记 - 记录贴

 

 

2.修改发布次数,解决进入两次接收回调

nRF52832+Mesh 3.2.0 学习笔记 - 记录贴

 

 

3.在工程中新建文件夹并添加.c/.h文件

nRF52832+Mesh 3.2.0 学习笔记 - 记录贴

添加新.c程序或已经存在的.c

nRF52832+Mesh 3.2.0 学习笔记 - 记录贴

添加.h路径

nRF52832+Mesh 3.2.0 学习笔记 - 记录贴

 

 

4.关于RSSI

负数级别,越接近0,表示功率越大,信号越好

-80以后信号比较弱了,不能说不保证正常通讯,只是信号比较弱,更容易受到干扰

 

5.蓝牙名称

SD_BLE_GAP_DEVICE_NAME_SET       = BLE_GAP_SVC_BASE + 16,  /**< Set Device Name. */

命了31个字符,32个就不行了

 

 

 

6.cjson创建与解析

创建cjson:  

cJSON * root =  cJSON_CreateObject();

    cJSON * item =  cJSON_CreateObject();

 

    cJSON_AddItemToObject(root, "operation", cJSON_CreateString("CALL"));

    cJSON_AddItemToObject(root, "service", cJSON_CreateString("telephone"));

    cJSON_AddItemToObject(root, "text", cJSON_CreateString("XXXX"));

    cJSON_AddItemToObject(root, "semantic", item);//root节点下添加     semantic节点

    cJSON_AddItemToObject(item, "name", cJSON_CreateString("san"));//semantic节点下添加     item节点

    cJSON_AddItemToObject(item, "number", cJSON_CreateString("1234"));//添加   name节点

 

    __LOG(LOG_SRC_APP, LOG_LEVEL_INFO, "--first json:\n%s\n", cJSON_PrintUnformatted(root));

    cJSON_Delete(root);

 

解析cjson:

    strcpy(Rx_buf,"{\"operation\":\"CALL\",\"semantic\":{\"name\":\"san\",\"number\":\"1234\"}}");

    cJSON * root1 =  cJSON_Parse(Rx_buf); 

    cJSON * item1;

    cJSON * item2;

 

    item1  = cJSON_GetObjectItem(root1, "operation");

    if(item1 != NULL)

    {

    __LOG(LOG_SRC_APP, LOG_LEVEL_INFO, "--operation:%s\n", item1->valuestring);

    }

    item1  = cJSON_GetObjectItem(root1, "semantic");

    if(item1 != NULL)

    {

        //char *str = cJSON_PrintUnformatted(item1);

        __LOG(LOG_SRC_APP, LOG_LEVEL_INFO, "--semantic:%s\n",cJSON_PrintUnformatted(item1));

        cJSON * root2 =  cJSON_Parse(cJSON_PrintUnformatted(item1));  

        cJSON * item2;

        item2  = cJSON_GetObjectItem(root2, "name");

        if(item2 != NULL)

        {

        __LOG(LOG_SRC_APP, LOG_LEVEL_INFO, "--name:%s\n",item2->valuestring);

        }

        item2  = cJSON_GetObjectItem(root2, "number");

        if(item2 != NULL)

        {

        __LOG(LOG_SRC_APP, LOG_LEVEL_INFO, "--number:%s\n",item2->valuestring);

        }

    }

cJSON_Delete(root1);

 

7.sdk_config中添加配置选项

这需要从其他的包含这个选项的例子里面拷贝过来,在包含这个选项的sdk_config的Configuration Wizard界面选中这个配置项,然后切换回Text Editor,这时光标位置是这个配置项的起始行,选中这个配置项的下一个配置项切回Text Editor再往上退一行就得到结束行 ,然后拷贝起始行-结束行到自己的sdk_config.

例如下图,想要增加NRFX_PRS_ENABLED - nrfx_prs - Peripheral Resource Sharing module这个选项,选中这个配置后切回Text Editor得到起始行52,再返回Configuration Wizard选中这个配置的下一个项NRFX_UARTE_ENABLED - nrfx_uarte - UARTE peripheral driver然后切回Text Editor得到这个项的起始行为145,则我们想要添加的项结束行为144.所以我们复制52-144行即可.

nRF52832+Mesh 3.2.0 学习笔记 - 记录贴  nRF52832+Mesh 3.2.0 学习笔记 - 记录贴  

 

nRF52832+Mesh 3.2.0 学习笔记 - 记录贴  nRF52832+Mesh 3.2.0 学习笔记 - 记录贴

 

8.使用内部32.768k RC

图中红色方框内的32.768k晶振是协议栈使用的,实际可以切换为内部晶振从而去掉这部分硬件回路.这就需要软件层面去切换:在sdk_config.h中修改下图中红框内的配置即可.

nRF52832+Mesh 3.2.0 学习笔记 - 记录贴   nRF52832+Mesh 3.2.0 学习笔记 - 记录贴

nRF52832+Mesh 3.2.0 学习笔记 - 记录贴

 

 

9. P0.09 P0.10做普通IO使用

由于P0.09 P0.10默认是被用作NFC功能,所以这里需要添加个宏定义将其用作普通IO.在system_nrf52.c文件中增加宏定义:

#define CONFIG_NFCT_PINS_AS_GPIOS  即可

nRF52832+Mesh 3.2.0 学习笔记 - 记录贴