当前位置:   article > 正文

RT-Thread 软件包-软件包分类-IoT-rw007①

RT-Thread 软件包-软件包分类-IoT-rw007①

RT-Thread 软件包-软件包分类-IoT-rw007①

在这里插入图片描述

rw007

中文页 | English

1. 简介

RW007是由上海睿赛德电子科技有限公司开发基于 WIFI SOC的SPI/UART 高速wifi模块。该仓库为rw007的SPI驱动

RW007硬件设计简单,SPI模式下用户只需要预留1组SPI信号,一个中断输入,一个IO输出即可,包含电源和地总共8个引脚。

1.1. 文件结构

文件夹说明
src核心驱动源码,主要实现通信逻辑
inc头文件目录
example平台移植示例

1.2 许可证

rw007 package 遵循 Apache 2.0 许可,详见 LICENSE 文件。

1.3 依赖

  • RT-Thread 3.0+
  • RT-Thread LWIP 组件
  • RT-Thread SPI 驱动框架
  • RT-Thread PIN 驱动框架(示例平台代码依赖)

1.4 配置宏说明

自动配置时相关配置宏将在env中被配置 手动配置参考如下

类型说明

  • bool: 定义生效 未定义 不生效
  • string: 字符串
  • int: 数值
类型功能
PKG_USING_RW007bool开启rw007驱动,使用该软件包则需要定义该宏
RW007_USING_STM32_DRIVERSbool使能STM32平台移植示例
RW007_USING_IMXRT_DRIVERSbool使能IMXRT平台移植示例
RW007_USING_BLEbool使能开启BLE功能(仅在V2.1.0以上版本生效)
RW007_USING_POWERSWITCH_EXAMPLEbool使能开启STM32平台下的开关省电示例(仅在V2.1.0以上版本生效)
RW007_USING_SPI_TESTbool使能开启SPI 吞吐量测试功能(仅在V2.1.0以上版本生效)
RW007_SPI_BUS_NAMEstringexample中使用的SPI总线设备名称
RW007_CS_PINintexample中使用的SPI 片选引脚在pin驱动中的序号
RW007_BOOT0_PINintexample中使用的BOOT0引脚在pin驱动中的序号(与SPI的CLK是同一引脚复用)
RW007_BOOT1_PINintexample中使用的BOOT1引脚在pin驱动中的序号(与SPI的CS是同一引脚复用)
RW007_INT_BUSY_PINintexample中使用的INT/BUSY引脚在pin驱动中的序号
RW007_RST_PINintexample中使用的RST引脚在pin驱动中的序号

1.5 BLE 功能说明

在 V2.1.0 以上的版本支持开启蓝牙 BLE 功能,使用方法如下。
env命令行输入menuconfig进行配置

-> RT-Thread online packages
  -> IoT
    ->internet of things
      -> WiFi
        --- rw007: SPI WIFI rw007 driver
              version(v2.1.0)
          [*] use ble function
          (300000000) SPI Max Hz
          (spi1) RW007 BUS NAME
          (22) CS pin index
          (39) INT/BUSY pin index
          (9) RESET pin index
          [*] example driver: rw007 for stm32
          [*] test: spi throughput capability and packet loss testing
          [*] example: save power by switching
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
1.5.1 BLE 功能测试示例命令说明

在开启rw007软件包中的ble功能,会默认打开相关的功能测试示例,可以通过msh命令行输入rw007_ble查询。

msh />rw007_ble
rw007_ble help
rw007_ble init central/peripheral                           Note: init ble mode
rw007_ble get_addr                                          Note: get ble address
rw007_ble update_params                                     Note: update connect parameters(no support)
rw007_ble scan                                              Note: scan ble slave
rw007_ble stop_scan                                         Note: stop scan
rw007_ble connect xx:xx:xx:xx:xx:xx                         Note: use slave addr to connect
rw007_ble disconnect [conn_handle]                          Note: disconnect slave
rw007_ble get_server                                        Note: discover all server(no support)
rw007_ble get_char                                          Note: discover all description(no support)
rw007_ble get_disc                                          Note: discover all characteristic(no support)
rw007_ble mtu_exch                                          Note: ble mtu exchange(no support)
rw007_ble notify                                            Note: enable ble notify(no support)
rw007_ble write                                             Note: ble write data(no support)
rw007_ble read                                              Note: ble read data(no support)
rw007_ble notify_change [conn_handle] [UUID] [char_value]   Note: ble notify configure by uuid
rw007_ble write_uuid [conn_handle] [UUID] [data]            Note: ble write data by uuid
rw007_ble read_uuid [conn_handle] [UUID]                    Note: ble read data by uuid
rw007_ble cfgwifi [duration_ms]                             Note: enable ble configuration wifi

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
1.5.2 BLE 功能初始化

BLE功能初始化函数,使用BLE功能必须调用。

  • 1.RW007 BLE 功能初始化为主机设备。
rw007_ble init central
  • 1

测试示例

msh />rw007_ble init central
122 - ble_cmd_init
start ble central
msh />
  • 1
  • 2
  • 3
  • 4
  • 2.RW007BLE 功能初始化为从机设备。
rw007_ble init peripheral
  • 1

特别说明:目前 RW007 的从机功能仅支持微信小程序配网使用。

1.5.3 获取本机的BLE设备地址

由于BLE设备的地址分为public公共地址和random随机地址。

rw007_ble get_addr
  • 1

测试示例

msh />rw007_ble get_addr
339 - ble_cmd_get_addr
msh />ble data input packet resp_type: 0, len: 12
public_id_addr = c8:47:8c:41:10:04
random_id_addr = 00:00:00:00:00:00
  • 1
  • 2
  • 3
  • 4
  • 5
1.5.4 扫描设备

目前 RW007 BLE 功能支持通过 scan命令,扫描周围的BLE设备。

  • 1.执行扫描周围BLE设备
rw007_ble scan
  • 1

测试示例

msh >rw007_ble scan
365 - ble_cmd_scan
msh >
ble data input packet resp_type: 1, len: 37
RW007_BLE_NTF_TYPE_DISCOVER
received advertisement; event_type=0 rssi=-69 addr_type=1 addr=61:97:58:84:b3:fe
mfg_data = 02 01 1a 02 0a 0c 0a ff 4c 00 10 05 42 1c e0 56 bc
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

这里的 addr地址内容可以为后面连接设备使用,由于目前没有直接显示对应 BLE 设备的名称,需要先人工确定 BLE 设备的地址。

  • 2.停止扫描周围BLE设备
    该指令用于 RW007模块正在执行scan扫描操作过程中,马上停止扫描的动作,可以执行此命令。
rw007_ble stop_scan
  • 1
1.5.5 连接设备

目前 RW007 BLE 功能设备支持通过 BLE设备的类mac地址来连接设备,该命令仅支持主机模式去连接从机设备的类mac地址,连接成功后会有对应的conn_handle值,这个conn_handle值在其他功能沿用。

测试命令

rw007_ble connect xx:xx:xx:xx:xx:xx
  • 1

测试示例

msh />rw007_ble connect 4c:ed:fb:00:04:b1
198 - ble_cmd_connect
str_addr: 4c:ed:fb:00:04:b1
mac addr: b1: 4: 0:fb:ed:4c
msh />resp_type: 1, len: 52
RW007_BLE_NTF_TYPE_CONNECT
type: 0, status: 0, conn_handle: 1

resp_type: 1, len: 44
RW007_BLE_NTF_TYPE_CONNECT_DESC
our_id_addr: c9:47:8c:42:00:48
peer_id_addr: b1:04:00:fb:ed:4c
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
1.5.6 设备断开连接

目前RW007BLE 功能设备支持主动断开从设备的连接。

rw007_ble disconnect [conn_handle]
  • 1

其中 conn_handleconnect连接时的需要一致。

测试示例

msh />rw007_ble disconnect 1
341 - ble_cmd_disconnect
msh />resp_type: 1, len: 52
RW007_BLE_NTF_TYPE_DISCONN
  • 1
  • 2
  • 3
  • 4
1.5.7 设备写数据

目前RW007BLE 功能写数据,支持通过指定UUID来写对应的数据。

rw007_ble write_uuid [conn_handle] [UUID] [data]
  • 1

指令说明:[conn_handle]RW007连接设备时生成的对应值,[UUID]为对应 BLE设备的特征参数,[data]为需要发送的数据。

测试示例

msh />rw007_ble write_uuid 1 ebe0ccbe7a0a4b0c8a1a6ff2997da3a6 00
data: 00
write conn_hanle:1 uuid:ebe0ccbe7a0a4b0c8a1a6ff2997da3a6
write rc:0
  • 1
  • 2
  • 3
  • 4

说明:测试示例中的 [conn_handle]为 1,[UUID]ebe0ccbe7a0a4b0c8a1a6ff2997da3a6,[data]0x00(这里是使用 hex 值)

1.5.8 更新 NOTIFY 参数

目前 RW007 BLE 功能支持修改接收 notify参数。

rw007_ble notify_change [conn_handle] [char_value] [UUID]
  • 1

参数说明:

[conn_handle]RW007连接设备时生成的对应值

[char_value] 为配置参数,具体如下

0:disable indication&notification
1:enable notification,disable indication
2:enable indication, disable notification
3:enable indication &notification
  • 1
  • 2
  • 3
  • 4

[UUID]为对应 BLE设备的特征参数值。

1.5.9 广播包类型的说明

目前 RW007 BLE 功能中可以关于广播包 event的类型可以分为下面几种。

/* Advertising report */
#define BLE_HCI_ADV_RPT_EVTYPE_ADV_IND      (0)
#define BLE_HCI_ADV_RPT_EVTYPE_DIR_IND      (1)
#define BLE_HCI_ADV_RPT_EVTYPE_SCAN_IND     (2)
#define BLE_HCI_ADV_RPT_EVTYPE_NONCONN_IND  (3)
#define BLE_HCI_ADV_RPT_EVTYPE_SCAN_RSP     (4)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

广播包结构如下:

广播包结构描述:
struct ble_gap_disc_desc {
    uint8_t event_type;
    uint8_t length_data;
    ble_addr_t addr;
    int8_t rssi;
    uint8_t *data;

    /***
     * LE direct advertising report fields; direct_addr is BLE_ADDR_ANY if
     * direct address fields are not present.
     */
    ble_addr_t direct_addr;
};

通过event_type区分出不同的广播包类型,所有类型分为如下几种:
/* Advertising report */
0 : 普通广播数据包
1 : 直接广播包 
2 : 扫描请求包 
3 : 不可连接广播指示
4 : 扫描响应数据包
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

因此,在设备的scan扫描回应中可以通过对应的event_type来判定是哪种广播包的类型。

1.6.0 设备读取数据

目前 RW007支持通过 UUID 读取数据的功能。

rw007_ble read_uuid [conn_handle] [UUID]
  • 1

参数说明:

[conn_handle]RW007连接设备时生成的对应值

[UUID]为对应 BLE设备的特征参数。

测试示例

msh />rw007_ble read_uuid 1 2a24
read conn_hanle:1 uuid:2a24
read rc:0
msh />ble data input packet resp_type: 0, len: 18
RW007_BLE_RSP_TYPE_READ
connect:1 attr_handle:14 uuid: 24 2a  read data:
00000000: 4C 59 57 53 44 30 33 4D 4D 43 00                 LYWSD03MMC.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

说明:这里的 [conn_handle]为 1,[UUID]2a24 ,读取到的数据为 BLE 设备的名称。

目前 RW007 模块已经支持读取 128 位的 UUID 的功能。
测试示例

msh />rw007_ble read_uuid 1 ebe0ccbe7a0a4b0c8a1a6ff2997da3a6
read conn_hanle:1 uuid:ebe0ccbe7a0a4b0c8a1a6ff2997da3a6
read rc:0
msh />ble data input packet resp_type: 0, len: 22
RW007_BLE_RSP_TYPE_READ
connect:1 attr_handle:51 uuid: a6 a3 7d 99 f2 6f 1a 8a 0c 4b 0a 7a be cc e0 eb  read data:
00000000: 00                     
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

说明:这里的 [conn_handle]为 1,[UUID] 为128位的 ebe0ccbe7a0a4b0c8a1a6ff2997da3a6 ,读取到的数据值为 00

1.6.1 微信小程序 BLE 配网功能说明

目前RW007支持微信小程序 BLE配网功能。

rw007_ble cfgwifi [duration_ms]    
  • 1

参数说明:

[duration_ms] 为模块作为从机对外进行广播的时长,以毫秒(ms)为单位,RW007模块对外广播的名称为RW007-XXXX其中XXXX为模块mac地址的后4位。

主机驱动的代码,主机端可以参考下面的实现代码,进入 BLE 配网模式。

rt_err_t rw007_ble_cfgwifi(uint32_t duration_ms)
{
    struct rw007_ble_cfgwifi cfgwifi;

    cfgwifi.duration_ms = duration_ms;

    return spi_set_data(wifi_sta.wlan, RW00x_CMD_BLE_CFGWIFI, &cfgwifi, sizeof(struct rw007_ble_cfgwifi));
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

测试示例

msh />rw007_ble cfgwifi 30000
msh />[420332] I/WLAN.mgnt: wifi connect success ssid:
[421341] I/WLAN.lwip: Got IP address : 192.168.1.212
  • 1
  • 2
  • 3

说明:30000RW007模块作为从机对外广播的时长,一旦超过时长后,就会停止对外广播。

关于 BLE 配网和 BLE 主机功能同时使用的一些限制事项
(1)主机的 SCAN 功能和 BLE 配网不能同时使用,当RW007 模块处于Advertise广播状态(BLE 从机功能开启广播),主机(stm32)再执行 scan 操作时,scan操作会返回错误码,代表本次 scan 操作无效,直到 Advertise广播状态结束后,才能正常执行 scan 操作,但是此过程不影响已连接设备的状态。

(2)主机的 SCAN 功能和 BLE 配网不能同时使用,当主机(stm32)正在在执行BLE 主机的 scan 操作时,同时配置RW007 模块进行Advertise广播,此时 scan 操作会被打断,直到Advertise广播状态结束后,才能正常执行 scan 操作,但是此过程不影响已连接设备的状态。

2. 注意事项

由于存在引脚复用情况,所以bsp的SPI的驱动需要引脚配置在Config时进行。

示例代码


维护人:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/84756
推荐阅读
相关标签
  

闽ICP备14008679号