主题中讨论的其他器件:ENERGYTRACE
您好!
我正在使用简单网状网络节点示例、我想实现一项任务、即在不使用 UART 接口的情况下配置器件并在器件之间实现通信。 回调函数执行、但当我尝试通过按下按钮来打开另一个器件的 LED 时、它会切换其自己的 LED、因此我认为我正在使用的两个器件之间没有通信、并且每个器件位于不同的网络上。 我如何才能继续,以便只有一个网络,以便设备能够进行通信?
非常感谢、
Alexandra Goloubkove2e.ti.com/.../start_5F00_provisioning-_2800_1_2900_.c
#include <stdio.h> #include <stdint.h> #include <stddef.h> #include <string.h> #include <math.h> #include <ti/sysbios/knl/Task.h> #include <ti/sysbios/knl/Clock.h> #include <ti/sysbios/knl/Event.h> #include <ti/sysbios/knl/Queue.h> #include <ti/sysbios/knl/Semaphore.h> #include <ti/sysbios/BIOS.h> #include <bluetooth/bluetooth.h> #include <bluetooth/mesh.h> #include <bt_le_porting_layer.h> #include <start_provisioning.h> #include <ti/drivers/GPIO.h> #include "ti_drivers_config.h" #include <simple_mesh_node.h> #include "ti_ble_mesh_config.h" #include "simple_mesh_node_menu.h" #include <net/buf.h> #include <include/bluetooth/mesh/access.h> #include "static_prov.h" #define START_PROV_TASK_PRIORITY 3 #ifndef START_PROV_STACK_SIZE #define START_PROV_STACK_SIZE 2248 #endif #define GROUP_ADDR 0xc000 extern void start_prov_init(void); uint8_t button_state = 0; uint16_t addr; uint8_t led_state; uint16_t mesh_device_own_addr = DEVICE_OWN_ADDRESS; //static const uint16_t app_idx; Task_Struct start_prov_Task; uint8_t start_prov_Stack[START_PROV_STACK_SIZE]; Semaphore_Struct semstart_prov_Task_Struct; Semaphore_Handle semstart_prov_Task_Handle; struct bt_mesh_model *model; struct bt_mesh_msg_ctx *ctx; struct net_buf_simple *buf; void provision_done_cbk() { GPIO_write(CONFIG_GPIO_LED_0,1); } void btn1Fxn_cbk(uint_least8_t index) { Semaphore_post(semstart_prov_Task_Handle); } void turnLed(uint8_t on_off) { if (on_off) { GPIO_write(CONFIG_GPIO_LED_1,1); } else { GPIO_write(CONFIG_GPIO_LED_1,0); } } void button_pressed_cb(struct bt_mesh_model *model, struct bt_mesh_msg_ctx *ctx, struct net_buf_simple *buf) { // check own address /*(ctx->addr == mesh_device_own_addr)*/ if (ctx->addr == mesh_device_own_addr) { return; } led_state = net_buf_simple_pull_u8(buf); turnLed(led_state); } void start_prov_init(void) { GPIO_init(); GPIO_setConfig(CONFIG_GPIO_BTN1, GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_FALLING); GPIO_setCallback(CONFIG_GPIO_BTN1,btn1Fxn_cbk ); GPIO_enableInt(CONFIG_GPIO_BTN1); GPIO_setConfig(CONFIG_GPIO_LED_0, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW); } static void start_prov_taskFxn(UArg a0, UArg a1) { start_prov_init(); bleApp_stackInit(); MeshApp_init(DEVICE_OWN_ADDRESS, UNPROVISIONED_BEACON); /* MeshApp_static_provisioning(DEVICE_OWN_ADDRESS, BT_MESH_KEY_UNUSED);*/ for (;;) { Semaphore_pend(semstart_prov_Task_Handle, BIOS_WAIT_FOREVER); button_state = 1; MeshApp_button_pressed(button_state); } } void start_prov_CreateTask(void) { bleStack_createTasks(); k_sys_work_q_init(NULL); Semaphore_Params semParams; Task_Params taskParams; Task_Params_init(&taskParams); taskParams.stack = start_prov_Stack; taskParams.stackSize = START_PROV_STACK_SIZE; taskParams.priority = START_PROV_TASK_PRIORITY; Task_construct(&start_prov_Task, start_prov_taskFxn, &taskParams, NULL); Semaphore_Params_init(&semParams); Semaphore_construct(&semstart_prov_Task_Struct, 0, &semParams); semstart_prov_Task_Handle = Semaphore_handle( &semstart_prov_Task_Struct); }