dirty 发表于 2023-11-13 23:55

【nF7002-DK Wi-Fi® 6开发套件】蓝牙串口服务

<div class='showpostmsg'> 本帖最后由 dirty 于 2023-11-14 00:02 编辑

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nRF7002-DK主控nRF5340是具有蓝牙功能,SDK也集成了蓝牙协议栈。在此熟悉了解蓝牙方面开发并使用.<br />
一.代码准备<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这里以SDKPATH\nrf\samples\bluetooth\peripheral_uart为蓝本。通过理解及实践做些修改应用。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.prj.conf对使用到的宏做了使能或者定义参数。可通过CONFIG_BT_DEVICE_NAME修改蓝牙广播名称,再就是日志习惯用串口,做一些修改如下图1</p>

<div style="text-align: center;"></div>

<div style="text-align: center;">图1:关于宏配置</div>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.main.c里是主要的蓝牙串口服务主要功能。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1)在mian函数里初始化了串口、蓝牙等。下面做下代码解读:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uart_init();//串口初始化<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bt_enable(NULL);蓝牙初始化<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k_sem_give(&amp;ble_init_ok);//释放蓝牙协议栈初始化OK信号量<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bt_nus_init(&amp;nus_cb);//串口服务初始化并注册回调<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bt_le_adv_start(BT_LE_ADV_CONN, ad, ARRAY_SIZE(ad), sd,ARRAY_SIZE(sd));//蓝牙广播&nbsp; &nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2)关键事件函数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connected(struct bt_conn *conn, uint8_t err)//蓝牙连接事件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disconnected(struct bt_conn *conn, uint8_t reason)//蓝牙断开事件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bt_receive_cb(struct bt_conn *conn, const uint8_t *const data,uint16_t len)//蓝牙串口服务接收数据<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uart_cb(const struct device *dev, struct uart_event *evt, void *user_data)//串口(收、发事件)回调函数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我们可以在一些自己关注点地方加些日志,一遍更清晰了解整个流程。</p>

<div style="text-align: center;"></div>

<div style="text-align: center;">图2:加测试日志&nbsp; &nbsp;&nbsp;</div>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.编译烧录</p>

<p>&nbsp;</p>

<p>二测验<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.按下nRF7002-DK复位键,手机打开蓝牙,打开nRF Connect &nbsp;APP,搜索nordic,可以看到nRF7002-DK的蓝牙广播。如下图3</p>

<div style="text-align: center;"></div>

<div style="text-align: center;">图3:蓝牙广播</div>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.点击CONNECT,连接蓝牙,在串口日志上可以看到蓝牙连接事件,图7</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.打开Nordic UART Service,在Tx Characteristic点击使能NOTIFY属性。如图4</p>

<div style="text-align: center;"></div>

<div style="text-align: center;">图4.使能Tx服务属性</div>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4.点击RX Characteristic,其有可写属性。在Write value输入数据,比如Hello,点击Send发送。如图5</p>

<div style="text-align: center;"></div>

<div style="text-align: center;">图5:RX Characteristic写数据发送</div>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我们可以看到串口日志里有串口接收服务收到数据,并转到串口发送.图7<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5.我们在串口助手上发送如66,在APP 的Tx Characteristic可以看到通知。如下图6</p>

<div style="text-align: center;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;图6:TX Characteristic通知<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6.断开蓝牙,可以看到蓝牙断开事件。如下图7</p>

<div style="text-align: center;"></div>

<div style="text-align: center;">&nbsp;图7:串口日志</div>

<p>&nbsp;</p>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通过实践,理解修改代码并测验,能更了解关于蓝牙方面的使用,有利于从中收获经验,做蓝牙方面开发。</p>

<p>&nbsp;</p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

lugl4313820 发表于 2023-11-14 07:20

<p>通过实践,理解修改代码并测验,能更了解关于蓝牙方面的使用,有利于从中收获经验,做蓝牙方面开发</p>

<p>系统有蓝牙库,使用起来还算是方便。</p>

dirty 发表于 2023-11-14 10:15

lugl4313820 发表于 2023-11-14 07:20
通过实践,理解修改代码并测验,能更了解关于蓝牙方面的使用,有利于从中收获经验,做蓝牙方面开发

系统 ...

<p>是的,孰能生巧,再就是熟悉习惯这套用法</p>

lugl4313820 发表于 2023-11-14 10:24

dirty 发表于 2023-11-14 10:15
是的,孰能生巧,再就是熟悉习惯这套用法

<p>这个库,好象stm32的开发板也可以用,要熟悉起来,楼主可以实现一个小目标了呀。</p>
页: [1]
查看完整版本: 【nF7002-DK Wi-Fi® 6开发套件】蓝牙串口服务