将BLE外围设备配置为中心

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support..我们将在未来几天修复错误/优化搜索和标记。
26个帖子/ 0新
最后发表
前腿帕特尔
离线
最后看到:2年7个月前
加入:2017-03-29专机
将BLE外围设备配置为中心

亲爱的Dialog_Support,

我正在使用BLE外设作为我项目的参考代码。BLE外围代码正在作为广告设备工作,但我想将其配置为扫描设备(中央)。现在我在现有示例中完成了以下更改。
1.在user_config.h.
static const结构gapm_configuration user_gapm_conf = {
///设备角色:中央,外设,观察者或广播公司
.role = GAP_CENTRAL_MST,
struct scan_configuration {
///操作代码。
uint8_t代码;
///设备自带BD地址源
uint8_t addr_src;
/ / /扫描间隔
uint16_t间隔;
///扫描窗口大小
uint16_t窗口;
///扫描模式
UINT8_T模式;
///扫描过滤策略
uint8_t filt_policy;
///扫描重复过滤策略
uint8_t filter_duplic;
};

static const struct scan_configuration user_scan_conf = {
///操作代码。
.code = GAPM_SCAN_PASSIVE,
///设备自带BD地址源
.ddr_src = gapm_public_addr,
/ / /扫描间隔
.interval = 10,
///扫描窗口大小
.window = 5,
///扫描模式
.mode = gap_gen_discovery,
///扫描过滤策略
.filt_policy = scan_allow_adv_all,
///扫描重复过滤策略
.filter_duplic = scan_filt_duplic_en.
};

2.在user_callback_config.h.中
static const struct app_callbacks user_app_callbacks = {
.app_on_connection = user_app_connection,
.app_on_disconnect = user_app_disconnect,
.app_on_update_params_rejected =零,
.app_on_update_params_complete = null,
.app_on_set_dev_config_complete = default_app_on_set_dev_config_complete,
.app_on_adv_nonconn_complete = null,
.app_on_adv_undirect_complete = user_app_add_undirect_complete,
.app_on_adv_direct_complete = null,
.app_on_db_init_complete = default_app_on_db_init_complete,
.app_on_scanning_completed = user_on_scanning_completed,
.app_on_adv_report_ind = user_on_adv_report_ind,
#如果(BLE_APP_SEC)
.app_on_pairing_request =零,
.app_on_tk_exch_nomitm =零,
.app_on_irk_exch = null,
.app_on_csrk_exch = null,
.app_on_ltk_exch = null,
.app_on_pairing_succeded = null,
.app_on_encrypt_ind = null,
.app_on_mitm_passcode_req = null,
.app_on_encrypt_req_ind =零,
.app_on_security_req_ind =零,
# endif / / (BLE_APP_SEC)
};

3.我在User_PeripherAl.c文件中添加了这些函数
void user_on_scanning_Completed(UINT8_T状态)

如果状态= = GAP_ERR_CANCELED)

app_easy_gap_start_connection_to ();
connection_timer = app_easy_timer(user_con_timeout,user_gapm_cancel);

别的

user_scan_start ();

返回;

静态void user_scan_start(void)

struct gapm_start_scan_cmd * cmd = ke_msg_alloc(gapm_start_scan_cmd,
TASK_GAPM TASK_APP,
gapm_start_scan_cmd);

cmd - > op。代码= user_scan_conf.code;
cmd-> op.addr_src = user_scan_conf.addr_src;
cmd - >间隔= user_scan_conf.interval;
cmd-> window = user_scan_conf.window;
cmd-> mode = user_scan_conf.mode;
cmd-> filt_policy = user_scan_conf.filt_policy;
cmd-> filter_duplic = user_scan_conf.filter_duplic;

//发送消息
ke_msg_send(cmd);

//我们现在是可连接的
ke_state_set (TASK_APP APP_CONNECTABLE);

我已经尝试过上面的备受尊重文件的更改,但随着我运行程序,它进入NMI_Handler.c。
我遗漏了什么吗?或者我做了任何错误的配置?请指导我正确的步骤配置BLE外设作为一个中心。

先感谢您。

与问候,
前腿帕特尔

关键词:
设备:
mt_dialog.
离线
最后看到:三个月三个星期前
职员
加入:2015-06-08 11:34
嗨,前腿帕特尔

嗨,前腿帕特尔

当设备准备启动(配置、设置和准备启动)时,广告或扫描命令从.default_operation_adv中获取,因此在该钩子中,您应该在准备启动时放置您希望设备做的任何事情。因此,我假设如果您在钩子中放置user_start_scan()函数,而不是user_app_adv_start(),您的设备将启动扫描过程。

由于MT_dialog

前腿帕特尔
离线
最后看到:2年7个月前
加入:2017-03-29专机
谢谢你的建议

谢谢你的建议。

我已经尝试了上述解决方案,但我仍然得到相同的问题。当我运行程序时,它进入nmi_handler.h。我在user_config.h, user_callback_config.h和user_peripheral.c文件中所做的上述配置是正确的吗?请提供一个详细的解决方案或演示中心功能的示例代码。

与问候,
前腿帕特尔

mt_dialog.
离线
最后看到:三个月三个星期前
职员
加入:2015-06-08 11:34
嗨,前腿帕特尔

嗨,前腿帕特尔

如果触发user_scan_start()函数,请检查调试器,如果触发完成,请检查完成回调,如果它是拨打的错误代码是什么,如果它是一个GAP_ERROR_TIMEOUT,则在大约8秒的活动之后得到它您正在扫描,并且当您到达扫描过程的完成回调时触发NMI。关于您粘贴的文件和代码,我没有看到它们的任何问题,你得到的nmi意味着代码保持相当于困境的时间(如果有的话可以是主循环中的wfi()休眠禁用,没有BLE活动超过2.6秒,这是看门狗可以测量的最长时间)。据一个例子是关注,我想你已经熟悉来自主机侧的DSPS代码。

由于MT_dialog

前腿帕特尔
离线
最后看到:2年7个月前
加入:2017-03-29专机
你好mt_dialog,

你好mt_dialog,

谢谢您的答复。现在我能够使用我的中央设备连接BLE_APP_PERITERAL。下一个任务是将来自中央设备的命令发送到BLE_APP_PERITELAL以切换LED。我可以使用自定义配置文件特征从中央设备发送命令,因为我们正在从BLE Scanner应用程序中进行?

与问候,
前腿帕特尔

mt_dialog.
离线
最后看到:三个月三个星期前
职员
加入:2015-06-08 11:34
嗨,前腿帕特尔

嗨,前腿帕特尔

与来自中心的自定义配置文件进行交互,需要在中心侧实现,因为当设备连接时,中央应开始发现过程,以便发现可用的服务和特性。在中央发现外围侧的特性之后,它可以开始写入和读取数据,因为中央需要知道应在外围侧读取或写入的手柄。简而言之,是的,你可以将数据写入自定义特征,只要特征是可写的,但您必须实现中心侧的发现过程,然后您将能够编写数据。DSP主机侧实现了DSP配置文件的发现过程,您可以将其视为参考。

由于MT_dialog

前腿帕特尔
离线
最后看到:2年7个月前
加入:2017-03-29专机
谢谢你的快速

感谢你的快速回复。

我需要实现自定义服务和特征的发现过程。我没有找到关于发现过程的明确步骤。我也经历了DSP榜样,但由于其复杂性,我无法妥善理解它。

1.你能详细列出开示程序的步骤吗?
2.参考DSP,提到哪些文件发现相关信息?
3.哪些功能可用于发现定制服务和特征?

与问候,
前腿帕特尔

mt_dialog.
离线
最后看到:三个月三个星期前
职员
加入:2015-06-08 11:34
嗨,前腿帕特尔

嗨,前腿帕特尔

1.我无法提及在这个论坛上提及发现程序的每一个细节,你应该检查这个规范,以便获得广泛的发现程序,我可以提到关于这个过程的一些关键步骤,还可以提到一些关键步骤在DSPS源代码中为您提供几个代码片段,以便遵循。此外,一个非常有用的文档将是RW-BLE-GATT-IS.PDF文档包括应向堆栈和从堆栈发出的所有命令/响应,以便完成发现过程。

  • 因此,关于发现过程的一些简短发言,它从发现的发现开始,在找到所有服务之后,设备必须开始寻找每个服务中的可用特性,然后开始描述符。
  • 关于DSPS代码及其实施:
    • 整个过程在设备连接时开始,因此发生连接的回调并启用DSPS主机配置文件,因此user_sps_enable()函数是启动整个过程的函数。
    • user_sps_enable()函数触发sps_client_enable_req消息,因此处理程序sps_client_enable_req_handler()被触发。
    • 如果启用了发现标志,则主机将发送(通过prf_disc_svc_send_128())使用gattc_disc_by_uuuid_svc参数的gattc_disc_cmd,此命令将发现与uuid相对应的服务,它将其作为对消息的参数传递,并将回复使用gattc_disc_svc_ind(一旦找到服务),并且只要命令结束,就会使用gattc_cmp_evt。
    • 因此,服务发现的关键功能是上述消息的相应处理程序(Gattc_disc_svc_ind_handler()和gattc_cmp_evt_handler())
    • gattc_cmp_evt_handler()是一个非常关键的函数,因为这是通过每个状态推动服务发现的实现(服务 - 特性 - 描述符)。
    • 当设备使用相应的消息从服务转到特征发现时,遵循类似的过程。
    • 上面的所有消息都包含在RW-BLE-GATT-IS.PDF中,因此请花一些时间来研究该文件。

由于MT_dialog

前腿帕特尔
离线
最后看到:2年7个月前
加入:2017-03-29专机
hello dialog_support,

hello dialog_support,

感谢您的客户端配置步骤。我追随了你的脚步,但我正在出错。
1 ... \ src \ custom_profile \ user_custs_config.c(47):错误:#29:预期表达式
struct attm_desc_128 custs1_att_db[CUST1_IDX_NB] = {};

const struct cust_prf_func_callbacks cust_prf_funcs [] =

#if(ble_custom1_server)
{task_custs1,
custs1_att_db,
cust1_idx_nb,
#if(ble_app_present)
app_custs1_create_db,app_custs1_enable,
#别的
null,null,
#万一
custs1_init,null.
},
#万一
#如果(BLE_CUSTOM2_SERVER)
{task_custs2,
空值,
0,
#if(ble_app_present)
app_custs2_create_db,app_custs2_enable,
#别的
null,null,
#万一
Custs2_init,null.
},
#万一
{task_none,null,0,null,null,null,null},//不要移动。必须始终持久
};
上面的函数我已经在user_custs_config.c中声明
在user_custs1_def.h中
extern struct attm_desc_128 custs1_att_db [cust1_idx_nb];

2.我应该写什么而不是#if(ble_sps_client)

与问候,
前腿帕特尔

mt_dialog.
离线
最后看到:三个月三个星期前
职员
加入:2015-06-08 11:34
嗨,前腿帕特尔

嗨,前腿帕特尔

1.显然您已将DSP主机放在DSPS中,Custs1.h包括为包括自定义配置文件,并且您尚未将任何内容声明为数据库,请检查例如BLE_APP_PERITIVELAL示例并检查该数组中的内部内部。

2.我没有得到第二个问题,这只是一个定义,以便包括SPS客户端功能。

由于MT_dialog

前腿帕特尔
离线
最后看到:2年7个月前
加入:2017-03-29专机
非常感谢

非常感谢你的步骤。它有助于我们很多。经过长时间,我能够发现服务和特征。现在我的下一个任务是客户端和服务器之间的数据传输。您能告诉我哪个自定义函数启动数据传输程序?

感谢致敬,
前腿帕特尔

mt_dialog.
离线
最后看到:三个月三个星期前
职员
加入:2015-06-08 11:34
嗨,前腿帕特尔

嗨,前腿帕特尔

你的意思是,你想从核心到外围的特征来表演写字吗?您可以使用DSP示例实现的PRF_Gatt_Write()命令,关闭函数该函数向堆栈发送特定消息,该堆栈是Gattc_Write_cmd,您将能够在RW-BLE-GATT中找到额外的信息.pdf在支撑场上。

由于MT_dialog

前腿帕特尔
离线
最后看到:2年7个月前
加入:2017-03-29专机
是的,我想写数据

嗨mt_dialog,

是的,我想从核心写入外围的特征。
如您建议使用“PRF_Gatt_Write()”命令,我在DSP示例中检查了它。据我所知,有一个名为“sps_client_data_tx_req_handler”的特定处理程序,它使用“prf_gatt_write()”命令处理传输请求。因此,每当中央提升写(数据TX)请求时,应理想地调用处理程序。但是,我不明白如何调用tx_req_handler。我究竟究竟是如何调用内置函数或写自己的函数,这将调用“sps_client_data_tx_req_handler”?

感谢致敬,
前腿帕特尔

mt_dialog.
离线
最后看到:三个月三个星期前
职员
加入:2015-06-08 11:34
嗨,前腿帕特尔

嗨,前腿帕特尔

您看到的处理程序是DSP参考应用程序的实现,如果您想通过不调用直接函数调用,但通过发送消息并通过消息处理事件,您可以实现DSP项目的内容。当DSP希望发送数据时它实现名为SPS_CLIENT_DATA_TX_REQ的消息并将其发送到堆栈,然后将消息处理后,它触发相应的处理程序,SPS_CLIEND_DATA_TX_REQ消息通过user_send_ble_data()函数发送,以及处理程序通过该消息触发在SPS_CLIENT_CONNETed数组中的SPS_CLIENT_TASK.C文件中声明,您可以将其作为参考。

由于MT_dialog

前腿帕特尔
离线
最后看到:2年7个月前
加入:2017-03-29专机


嗨MT_dialog,

最初,我也考虑使用“user_send_ble_data()”功能,用于通过ble发送数据。此函数要求数据和data_length作为参数。然后它将该数据发送到预定的特征。但在我的情况下,我不想始终将我的数据发送到固定的特征。

例如:
假设我有一个名为“Cust_Service_1”的自定义服务。在该服务中,我有一些自定义特征,如“led_1_亮度”,“led_2_亮度”等,它们具有写入无响应属性。
现在,我想向“LED_1_Brightness”的特征发送0x57。
所以我所遇到的是一个简单的功能,接受以下参数:

Uint8_t data[1] = {0x57};
Uint8_t length = 1;
空白my_function_to_send_data (服务名称Cust_Service_1,charecteristic_name.LED_1_BRIGHTS,data_value.*数据,data_length.长度);

由于“user_send_ble_data()”功能仅接受数据和数据长度;如何确保我的数据被发送到我想要的正确特征?我应该附加用于服务名称和特征名称的其他参数,如上面的示例所示?或者在某些变量中首先在外部设置外部的任何其他方法,然后调用“user_send_ble_data()”功能,以便将数据发送到所需的特性?请帮我解决一下这个。

感谢致敬,
前腿帕特尔

mt_dialog.
离线
最后看到:三个月三个星期前
职员
加入:2015-06-08 11:34
嗨,前腿帕特尔

嗨,前腿帕特尔

如上所述,user_send_ble_data()是DSPS使用的函数,它不是用于将数据发送到服务上可用的任何特征的通用函数。实际发送数据的处理程序是sps_client_data_tx_req_handler(),而实际发送数据的函数是prf_gatt_write()。因为这个函数实际上是向另一边发送数据的,所以它也是确定数据将被发送的特征句柄的函数。因此,通过调用带有相应句柄参数的prf_gatt_write()将更新适当的特征值。在DSPS的情况下,在sps_client_data_tx_req_handler中使用的特征句柄总是spsc_env->sp .chars[SPSC_SRV_RX_DATA_CHAR].val_hdl。

由于MT_dialog

前腿帕特尔
离线
最后看到:2年7个月前
加入:2017-03-29专机
嗨MT_dialog,

嗨MT_dialog,

正如您之前评论中正确提及的那样,sps_client_data_tx_req_handler ()是实际发送数据的函数。我想要一个简单的应用程序,其中用户按下一个按钮,它触发一个中断例程。在中断例程中,我想调用sps_client_data_tx_req_handler ()函数发送一些数据。该函数需要以下参数:

静态int sps_client_data_tx_req_handler(ke_msg_id_t const msgid,
struct sps_client_data_tx_req const * param,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)

但是,我不太清楚要在每个参数中传递什么,以便将我的数据发送到特定的特征。你能给我更多的解释吗?

感谢致敬,
前腿帕特尔

mt_dialog.
离线
最后看到:三个月三个星期前
职员
加入:2015-06-08 11:34
嗨,前腿帕特尔

嗨,前腿帕特尔

您可以在sps_client_data_tx_req strult中添加额外的成员,并通过该成员来传递您想要的特征,因此当您分配SPS_CLIENT_DATA_TX_REQ消息时,您还应通过您想要执行写入的特性,例如该结构目前具有三个成员(inhdl,长度和数据),在发送消息之前分配消息,因此添加一个额外的成员,该成员将保存您想要编写的特征。当调用SPS_CLIENT_DATA_TX_REQ_HANDLER()而不是PRF_GATT_WRITE()中的固定值时,您可以通过SPS_CLIENT_DATA_TX_REQ结构中添加的额外成员的值。

由于MT_dialog

前腿帕特尔
离线
最后看到:2年7个月前
加入:2017-03-29专机
嗨mt_dialog,

嗨mt_dialog,

谢谢你的帮助。我成功地将数据写入特定的特征。我用略有不同的方法比你建议的方法略有不同,但是因为它做了我不介意的工作。以下是我的程序所做的摘要:

  1. 它连接到一个特定的地址user_advertise_data.(与DSP相同)
  2. 它支持客户端模式
  3. 然后它找到服务,特征及其描述符
  4. 一旦完成此项,程序会等待用户按钮中断
  5. 当用户按下按钮时,我们将亮度值发送到外围设备的特定特性prf_gatt_write功能
  6. 此值已成功收到,LED亮度也相应地变化

因此,我目前可以将数据从1个BLE客户端发送到1个BLE外围设备。请注意,它们都始终在整个会话中连接。

现在,我的项目仍然存在最后一步。有1个客户端(我正在努力),有4个外围设备。我有4个不同的用户输入按钮,并且根据按下的按钮,我想从我的BLE客户端发送数据到特定的BLE外围设备。所以这里是我现在想要实现的示例流程:

  1. 用户按下一个按钮(例如,按钮-2)
  2. 我的BLE客户应该连接到BLE外围号码-2的特定地址
  3. 启用客户端模式(与前面的情况相同)
  4. 找到服务,特征及其描述符(与之前的情况相同)
  5. 然后,它应该将亮度值发送到外围设备的特定特性prf_gatt_write功能
  6. 应接收此值,并且BLE外围-2上的LED亮度应相应地改变
  7. 最后,客户应该断开连接从外围和等待另一个按钮按事件

请注意,我不希望同时连接,我只需要连接到特定的设备,发送数据然后断开连接。

我急需实施这个计划。所以我希望你能给出具体的解决方案。请帮. . ! !

提前致谢,
前腿帕特尔

mt_dialog.
离线
最后看到:三个月三个星期前
职员
加入:2015-06-08 11:34
嗨,前腿帕特尔

嗨,前腿帕特尔

你的用例非常具体,我不能预见或记录在这个论坛上的每一个具体细节,请检查我下面的建议。

为了通过中心连接到外设,外设需要进行广告(广告是为了让外设接收连接请求,而不仅仅是为了让中心扫描设备),那么,您是假设您的外围设备将在那里并发出连接请求而不需要扫描过程,还是您也将进行扫描?我认为您将为您的设备使用公共地址,因为规范定义的静态地址应该在每次重启外设时更改,并且随机解析需要与每个单独的设备绑定。假设你使用的是公共地址这些地址是你的中心所知道的据我所知有两种选择:

1)假设设备已全部存在,并且只要按下按钮,就无法从中中心扫描过程即可通过app_easy_gap_start_connection_to_set()和app_easy_gap_start_connection_to()发出连接以启动连接过程,但是再次您必须确保设备是广告,如果不是连接过程没有超时,如果没有人响应您必须通过您的应用程序超出过程。因此,一旦设备连接,发现过程将启动,并且设备将在连接时执行任何操作。当数据交换后,您可以调用app_easy_gap_disconnect()才能断开来自中央的外设和当发生的双连接时禁用并清理配置文件结构(取决于您的自定义配置文件的方式)。可以通过外围设备或中心发出断开连接请求。

2)关于第二个选项,你可以按下按钮并在一个全局变量中存储相应的bd地址,你想要连接到,这样当扫描过程返回特定的地址指示回调,你可以发出连接请求。除此之外,其余的都保持不变。

由于MT_dialog

前腿帕特尔
离线
最后看到:2年7个月前
加入:2017-03-29专机
嗨MT_dialog,

嗨MT_dialog,

我的终极目标是设计一个可编程BLE Remote.用于控制多个调光灯。因此,遥控器最初保持在外设模式,并与android应用程序连接。然后应用程序会告诉哪些按钮应该执行哪些功能。BLE远程仍然处于外设模式。但是一旦用户按下一个按钮,假设是button-1,它就会执行以下操作:

  1. 它会从外围中央
  2. 它将连接使用Dimmer-1(因为按下按钮-1)。Dimmer-1是已经处于广告模式的BLE外围设备。
  3. 现在遥控器会发送Dimmer-1的新亮度值
  4. 它将断开连接来自Dimmer-1
  5. 它会将角色切换回外围

我仍然没有想到如何在运行时进行角色切换。所以目前,我的可编程BLE遥控器始终处于中央模式。

要在按钮上按下我的BLE遥控器上的DIMMER,我写了以下代码:

bool gboolD1Connect = false;
void user_button_pressed(void)

gboold1connect = true;
/ / user_on_adv_report_ind (param - >报告。adv_addr_type: 0 x01);
if(dimmer1_connected == true)//仅在整个连接过程完成后才为真

uint8_t my_data [1];
my_data [0] = 0x14;//亮度值
uint16_t my_length;
my_length = 1;
//此功能将数据从交换机发送到调光器
prf_gatt_write(con_info,val_hdl,(uint8_t *)my_data,sizeof(uint8_t)* my_length,gattc_write);




//这是一个内置函数,我修改了它,使它只有在gboolD1Connect为true时才连接到dimmer-1
Void user_on_adv_report_ind(struct gapm_adv_report_ind const * param) (struct gapm_adv_report_ind const * param)

如果(gboolD1Connect)

如果(! memcmp (param - >报告。数据[3]、USER_ADVERTISE_DATA USER_ADVERTISE_DATA_LEN))

ARCH_PRINTF(“连接%02x%02x%02x%02x%02x%02x”,
param-> eport.adddr.addr [5],
param - > report.adv_addr.addr [4],
param-> eport.adddr.addr [3],
param-> eport.adddr.addr [2],
param-> eport.addr.addr [1],
param - > report.adv_addr.addr [0]);
app_easy_gap_start_connection_to_set (param - >报告。adv_addr_type (uint8_t *)参数- > report.adv_addr。addr, MS_TO_DOUBLESLOTS (12.5));
user_gapm_cancel ();



上述实施方式,但它有问题。当我第一次按遥控器按钮的时候,它将设置gboold1connect.为true然后退出功能,因为dimmer1_connected还没有真。之后,在背景中,何时user_on_adv_report_ind()运行,它将与Dimmer-1连接。连接完成后,将发现所有服务,ChareCertics和描述符。最后,就在描述符发现完成后,我在内置函数中插入了一行以制作dimmer1_connected = true.整个过程需要2-3秒。3秒后,当我再次按下按钮时,它最终会进入dimmer1_connected == true分段并发送亮度值。如你所见,我必须按两次按钮(第一个连接,2nd用于发送数据),以便能够发送数据。每当我提供连接到调光器设备的命令时,会出现此问题(通过制作gboold1connect.使真实,或通过使用app_easy_gap_start_connection_to_set ()函数),我必须退出中断例程,并允许主程序运行,以便实际连接可以发生。但是,既然我已经退出了中断程序,我将如何重新进入它并在连接外围设备时发送数据呢?

所以我有两个问题需要帮助:

  1. 我可以在这个代码示例中做什么更改,以便能够通过只按一次按钮来操作调光器?
  2. 从中心到外围的角色转换和反过来的角色转换的过程是什么?

在此先感谢您的帮助,
前腿帕特尔

mhv_dialog
离线
最后看到:三个月两个星期前
职员
加入:15 2013-12-06
嗨Ruchi,

嗨Ruchi,

我可以建议你看看无附庸的样本应用程序(https://support.dialog-seminiondionder.com/connectivity/reference-design/smartbond-codeless-serial-link.)。

此应用程序演示中央和外围设备的各个方面以及如何在角色之间切换。

/ mhv.

前腿帕特尔
离线
最后看到:2年7个月前
加入:2017-03-29专机
嗨mhv,

嗨mhv,

你给出的建议真的很棒,我很高兴能够继续实现。但是看文档,我明白它的实施需要两个主要的东西:

(1)DA1458x BLE模块,用于命令固件
(2)第三方单片机控制BLE模块

但在我的情况下,我在单个芯片上只有一个DA1458x BLE模块。我没有权限在同一个芯片上添加另一个第三方控制器来控制BLE模块。

我希望我的DA1458x BLE模块有一个AT固件,然后逻辑地调用AT命令序列本身以独立的方式操作。

所以,是否可以在不需要终端,Android应用程序或第三方控制器等外部控制机制的情况下实现AT命令方法?

谢谢,
前腿帕特尔

mhv_dialog
离线
最后看到:三个月两个星期前
职员
加入:15 2013-12-06
嗨Ruchi,

嗨Ruchi,

实施应该只用于如何完成不同的东西的指导。通过运行代码,使用调试器,通过各种命令汇总,您将能够遵循似理的复杂任务。这里有一些例子:

  • 角色转换(中心和外围)
  • 启动,停止和改变广告数据和间隔
  • 配置,设置和读取GPIO的状态
  • 作为一个中心连接到特定的外围设备,发现服务并交换数据
  • 通过I2C与外部传感器接口

无附加的实现是在命令触发不同动作的命令,但应该可以编写自己的逻辑来驱动相同的功能(您可能只将应用程序的代码复制到您的项目中的无附带部分)

/ mhv.

陈鹏莱
离线
最后看到:2个月3周前
加入:2018-12-24 02:24
我无法发现

我不能发现特征,但我可以发现服务,我的项目基于ble_app_peripheral

你能告诉我如何发现特征?

非常感谢你!

PM_DIALOG.
离线
最后看到:13小时39分钟前
职员
加入:2018-02-08 11:03
嗨chenpenglai,

嗨chenpenglai,

这个论坛的帖子很旧了,所以我建议你创建一个新的。如果你不知道你应该遵循的程序,以创建一个新的论坛线程,请让我知道,我将提供您所需的所有步骤。所以,请创建一个新的论坛帖子和复制粘贴你的问题。

关于您的问题,您使用的是哪个版本的SDK?您是否在SDK的BLE_APP_PHERIALLAL示例中进行了任何修改?

谢谢,PM_DIALOG.