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.修改蓝牙名称
2.修改发布次数,解决进入两次接收回调
3.在工程中新建文件夹并添加.c/.h文件
添加新.c程序或已经存在的.c
添加.h路径
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行即可.
8.使用内部32.768k RC
图中红色方框内的32.768k晶振是协议栈使用的,实际可以切换为内部晶振从而去掉这部分硬件回路.这就需要软件层面去切换:在sdk_config.h中修改下图中红框内的配置即可.
9. P0.09 P0.10做普通IO使用
由于P0.09 P0.10默认是被用作NFC功能,所以这里需要添加个宏定义将其用作普通IO.在system_nrf52.c文件中增加宏定义:
#define CONFIG_NFCT_PINS_AS_GPIOS 即可