更新时间:2024-07-30 03:09:37下载pdf
nRF52832 在蓝牙开发者中广泛使用,本文以 nRF52832 为例,演示基于 TuyaOS 开发涂鸦蓝牙设备的基本方法。
其他芯片平台除了烧录方式略有不同外,基本方法都是一样的。目前已发布的蓝牙 LE 芯片有 Nordic 的 nRF52832,富芮坤的 FR801x,奉加微的 PHY6222,泰凌微的 TLSR825x,上海博通的 BK3431Q 和 BK32881。蓝牙 Beacon 和 Mesh 设备也可参考基本流程。
推荐使用涂鸦自研的开发板。在 涂鸦开发者平台,获取开发板,开发板对应的 物料编码 为 2.03.99.00045
。该开发板复用了涂鸦低功耗蓝牙 Dongle 的硬件。
也可使用 Nordic 官方开发板或其他 nRF52832 开发板。需自备 IIC 接口的 32 × 128 分辨率的 OLED 屏幕,无屏幕也可正常调试除 IIC 以外的其他功能。
安装 TuyaOS 环境并下载 TuyaOS 蓝牙 LE SDK(nRF52832)最新版本,跳转到教程。
(可选)若暂无生产需要,可通过修改代码方式进行临时授权。仅用于调试,生产时请改回原状。
在 nRF52832-3.5.3/software/TuyaOS/apps/tuyaos_demo_ble_peripheral 目录下,单击右键。
单击 Build Project 编译工程,等待编译成功。
再次单击右键,单击 Flash Prod 全量烧录固件。该方法后续支持,目前请打开目录 nRF52832-3.5.3\software\TuyaOS.log\hex,双击运行脚本 load_softdevice_bootloader_app.bat 即可全量烧录固件。其他平台烧录方式,参考 开发平台。
将涂鸦自研开发板通过 Micro USB 接口连接电脑,即串口 TX=P0.06,RX=P0.08。
打开上位机,单击 下载地址 进行下载。具体信息,参考 教程。如果有弹窗,则选择 更多信息 > 仍要运行 即可。选择对应串口,波特率 9600。
选择 系统 > 握手,单击 发送指令,即可实现上位机和设备的握手功能,接下来可以通过上位机体验其他任何功能。
此时可在 App Store 下载 涂鸦智能 App,登录后单击 添加设备,或者单击右上角 + > 添加设备,上位机展示的信息为更新配网状态、更新 MTU、更新时间戳和更新连接参数。整个过程如下图所示:
此时可通过上位机(模拟实际产品)和手机 App 进行数据交互,可上报、可下发,可修改上报数据,可展示下发状态。
动图演示的是:
上报打开 LED(面板 LED 被点亮)
上报关闭 LED(面板 LED 被熄灭)
上报欢迎词(Welcome,面板显示欢迎词)
上报自定义数据(123456,面板显示自定义数据)
上报故障告警(故障 2,面板弹窗告警)
上报故障告警(无故障,面板弹窗消失)
可控制任何 GPIO 分别输出高电平、低电平,可读取 GPIO 电平,可将 GPIO 的状态恢复至初始状态,可直接通过上位机修改 GPIO 的序号
动图演示的是:
GPIO 输出高电平
GPIO 输出低电平
GPIO 再次输出高电平
GPIO 恢复初始状态(效果和输出低电平一样)
位置:
1
:配网位置
2
:当前位置(手机)
天气参数:
(1 << 0), /**< temperature. */
(1 << 1), /**< high temperature. */
(1 << 2), /**< low temperature. */
(1 << 3), /**< humidity. */
(1 << 4), /**< weather condition. */
(1 << 5), /**< pressure. */
(1 << 6), /**< sensible temperature. */
(1 << 7), /**< uvi. */
(1 << 8), /**< sunrise. */
(1 << 9), /**< sunset. */
(1 << 10), /**< unix time, used with sunrise and sunset. */
(1 << 11), /**< local time, used with sunrise and sunset. */
(1 << 12), /**< wind speed. */
(1 << 13), /**< wind direction. */
(1 << 14), /**< wind speed scale/level. */
(1 << 15), /**< aqi. */
(1 << 16), /**< tips. */
(1 << 17), /**< Detailed AQI status and national ranking. */
(1 << 18), /**< pm10. */
(1 << 19), /**< pm2.5. */
(1 << 20), /**< o3. */
(1 << 21), /**< no2. */
(1 << 22), /**< co. */
(1 << 23), /**< so2. */
(1 << 24), /**< weather condition mapping ID. */
某天:1-7
动图演示的是:
获取第 1 天的当前温度。
获取第 1 天的当前温度、最高温度、最低温度。
获取第 1 天的当前温度、最高温度、最低温度、天气状况、气压、温度实感。
可通过上位机直接修改 PWM 的频率和占空比,也可选择不同的通道。通道和引脚对应关系如下:
通道 0 - 引脚 P0.28
通道 1 - 引脚 P0.29
通道 2 - 引脚 P0.30
通道 3 - 引脚 P0.31
动图演示的是:
设备 PWM 的频率和占空比:频率 1000,占空比 20%
设备 PWM 的频率和占空比:频率 1000,占空比 50%
设备 PWM 的频率和占空比:频率 2000,占空比 50%
支持启动扫描、暂停扫描,支持修改扫描间隔和扫描窗口,支持主动扫描和被动扫描。启动扫描后,设备每隔 1s 上报一次扫描到的设备数量。
单位时间内扫描到的设备越多,说明设备的扫描性能越好,可以通过该参数判断设备的扫描性能是否达标。
动图演示的是:
启动被动扫描
启动主动扫描
停止扫描
支持获取 RTC 时间,设置 RTC 时间,开始 RTC 定时(重启 RTC)。设备刚上电,RTC 从 0 开始计时。
动图演示的是:
关闭/开启串口,每次重启串口会下发重启设备的指令。
获取 RTC 时间,接近 0,因为每次上电从 0 开始。
设置 RTC 时间为 100。
再次获取 RTC 时间,接近 100。
支持启动看门狗,自动喂狗,手动喂狗,停止看门狗(如果芯片支持的话)。
动图演示的是:
启动看门狗(不支持自动喂狗),4s 后设备重启。
启动看门狗(支持自动喂狗),每隔 2 秒喂狗一次,所以设备不会重启。
重启看门狗(不支持自动喂狗),会提醒看门狗已经启动,时间距离上次喂狗 4s 后设备重启。
支持读取 Flash、擦除 Flash、写入 Flash,支持修改 Flash 的起始地址和操作长度。
动图演示的是:
读取 Flash,默认全 FF
。
写入 Flash,12345678
。
第 2 次读取 Flash,发现是刚刚写入的数据 12345678
。
擦除 Flash。
第 3 次读取 Flash,擦除后全 FF。
每一个宏对应一个调试用例。每个调试用例都可以通过上位机进行功能调试,也可以通过搜索相关宏找到对应代码,将调试与产品开发结合起来,既能降低您的使用门槛,也能提高蓝牙产品开发效率。
/***********************************************************************
*********************constant (macro and enum)*********************
**********************************************************************/
//GID - Group ID, CID - Command ID
#define TEST_GID_SYSTEM 0x01
#define TEST_GID_DEVICE_INFO 0x02
#define TEST_GID_ADV 0x03
#define TEST_GID_SCAN 0x04
#define TEST_GID_CONN 0x05
#define TEST_GID_DATA 0x06
#define TEST_GID_ELSE 0x07
#define TEST_GID_GPIO 0x10
#define TEST_GID_UART 0x11
#define TEST_GID_PWM 0x12
#define TEST_GID_ADC 0x13
#define TEST_GID_SPI 0x14
#define TEST_GID_IIC 0x15
#define TEST_GID_RTC 0x16
#define TEST_GID_FLASH 0x17
#define TEST_GID_WATCHDOG 0x18
#define TEST_GID_POWERMANGER 0x19
#if (4 == TUYA_SDK_TEST_TYPE)
#define TEST_GID_BREDR_SYSTEM 0x20
#define TEST_GID_BREDR_CONNECT 0x21
#define TEST_GID_BREDR_AVTCP 0x22
#define TEST_GID_BREDR_HFP 0x23
#define TEST_GID_BREDR_EQ 0x24
#endif
// TEST_GID_SYSTEM
#define TEST_CID_SHAKE_HAND 0x00
#define TEST_CID_RESET 0x01
#define TEST_CID_FACTORY_RESET 0x02
#define TEST_CID_GET_TIME 0x03
#define TEST_CID_REQ_TIME 0x04
#define TEST_CID_GET_RAND 0x05
#define TEST_CID_GET_QUEUE_SIZE 0x06
#define TEST_CID_POWER_ON 0x80
// TEST_GID_DEVICE_INFO
#define TEST_CID_SET_MAC 0x00
#define TEST_CID_GET_MAC 0x01
#define TEST_CID_SET_PID 0x02
#define TEST_CID_GET_PID 0x03
#define TEST_CID_SET_VERSION 0x04
#define TEST_CID_GET_VERSION 0x05
// TEST_GID_ADV
#define TEST_CID_ADV_ENABLE 0x00
#define TEST_CID_SET_ADV_INTERVAL 0x01
#define TEST_CID_SET_ADV_PARAM 0x02
#define TEST_CID_SET_ADV_DATA 0x03
#define TEST_CID_CONN_REQUEST 0x04
#define TEST_CID_MESH_FAST_PROV 0x05
// TEST_GID_SCAN
#define TEST_CID_SCAN_START 0x00
#define TEST_CID_SCAN_STOP 0x01
#define TEST_CID_ADV_REPORT 0x80
// TEST_GID_CONN
#define TEST_CID_CONN 0x00
#define TEST_CID_SET_CONN_INTERVAL 0x01
#define TEST_CID_SET_CONN_PARAM 0x02
#define TEST_CID_DISCONN 0x03
#define TEST_CID_NET_STATE 0x04
#define TEST_CID_GET_MESH_ADDR 0x05
#define TEST_CID_UNBIND_MODE 0x80
#define TEST_CID_CONN_PARAM_UPDATE 0x81
#define TEST_CID_MTU_UPDATE 0x82
// TEST_GID_DATA
#define TEST_CID_MASTER_SEND 0x00
#define TEST_CID_SLAVE_SEND 0x01
#define TEST_CID_DP_REPORT 0x02
#define TEST_CID_LONG_DP_REPORT 0x03
#define TEST_CID_DP_REPORT_TIME 0x04
#define TEST_CID_LONG_DP_REPORT_TIME 0x05
#define TEST_CID_DP_PASSTHROUGH 0x06
#define TEST_CID_MESH_DP_REPORT 0x07
#define TEST_CID_DP_REPORT_RSP 0x80
#define TEST_CID_DP_REPORT_TIME_RSP 0x81
#define TEST_CID_DP_WRITE 0x82
#define TEST_CID_LONG_DP_WRITE 0x83
#define TEST_CID_MESH_DP_WRITE 0x84
// TEST_GID_ELSE
#define TEST_CID_GET_WEATHER 0x00
#define TEST_CID_SET_BULK_DATA 0x01
#define TEST_CID_GET_SCENE_LIST 0x02
#define TEST_CID_REQ_SCENE_CTRL 0x03
#define TEST_CID_GET_WEATHER_RSP 0x80
#define TEST_CID_GET_WEATHER_DATA 0x81
#define TEST_CID_GET_REMOTER_DATA 0x82
#define TEST_CID_GET_LOCAL_TIMER 0x83
#define TEST_CID_GET_LOCAL_TIMER_RSP 0x84
#define TEST_CID_GET_LOCAL_TIMER_PARSER 0x85
#define TEST_CID_GET_SCENE_RSP 0x86
// TEST_GID_GPIO
#define TEST_CID_PIN_DEINIT 0x00
#define TEST_CID_OUTPUT_HIGH 0x01
#define TEST_CID_OUTPUT_LOW 0x02
#define TEST_CID_PIN_READ 0x03
// TEST_GID_UART
#define TEST_CID_SET_BAUDRATE 0x00
#define TEST_CID_TX_UART_DATA 0x01
#define TEST_CID_RX_UART_PORT 0x80
#define TEST_CID_RX_UART_DATA 0x81
// TEST_GID_PWM
#define TEST_CID_PWM_DEINIT 0x00
#define TEST_CID_SET_FREQ_DUTY 0x01
// TEST_GID_ADC
#define TEST_CID_ADC_DEINIT 0x00
#define TEST_CID_READ_ADC_DATA 0x01
#define TEST_CID_READ_ADC_DATA_RSP 0x80
#define TEST_CID_READ_VOLTAGE_RSP 0x81
// TEST_GID_SPI
#define TEST_CID_TX_SPI_DATA 0x00
#define TEST_CID_RX_SPI_DATA 0x80
// TEST_GID_IIC
#define TEST_CID_TX_IIC_DATA 0x00
#define TEST_CID_RX_IIC_DATA 0x80
// TEST_GID_RTC
#define TEST_CID_SET_RTC_TIME 0x00
#define TEST_CID_GET_RTC_TIME 0x01
#define TEST_CID_START_RTC 0x02
#define TEST_CID_STOP_RTC 0x03
// TEST_GID_FLASH
#define TEST_CID_READ_FLASH_DATA 0x00
#define TEST_CID_ERASE_FLASH_DATA 0x01
#define TEST_CID_WRITE_FLASH_DATA 0x02
// TEST_GID_WATCHDOG
#define TEST_CID_START_WDG 0x00
#define TEST_CID_FEED_WDG 0x01
#define TEST_CID_STOP_WDG 0x02
// TEST_GID_POWERMANGER
#define TEST_CID_ENTER_SLEEP 0x00
#define TEST_CID_WAKEUP_SRC_SET 0x01
调试代码入口分布在 tal_sdk_test.c
和 tal_sdk_test.h
文件中。
调试功能可通过宏定义一键关闭。
#define TUYA_SDK_TEST 0
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈