3.13 CBU-Wi-FiBLE双模模组(来自水也浩荡不息的贡献)
CBU-IPEX 内置运行速度最高可到 120 MHz 的 32-bit MCU,内置 2Mbyte 闪存和 256 KB RAM。可以使得模组支持 IoT 云连接,并且 MCU 专为信号处理扩展的指令使其可以有效地实现音频编码和解码。拥有丰富的外设,如 PWM、UART、SPI。多达六路的 32 位 PWM 输出使芯片非常适合高品质的 LED 控制。
3.13.1 模块来源
采购链接: https://item.szlcsc.com/3143149.html
资料下载: https://developer.tuya.com/cn/docs/iot/wifi-mcu-overview?id=K9hhi0xprxmpw
3.13.2 规格参数
工作电压:3.3V
工作电流:270maA
通信方式:****UART
引脚数量:21
数据手册:CBU 模组规格书-涂鸦 IoT 开发平台-涂鸦开发者
SDK 移植教程: MCU SDK 移植-涂鸦 IoT 开发平台-涂鸦开发者
3.13.3 移植过程
本文主要以一个智能灯为例,展示如何移植涂鸦的 Wi-Fi MCU SDK,可以通过手机控制梁山派开发板板载 led。
注意移植开始前,请确认模组已经烧录通用固件。立创商城提示有代烧录服务。若无法确认模组固件,也可以在创建产品后自行在涂鸦平台购买模组。
3.13.3.1 查看资料
CBU 是一款涂鸦智能常用的 Wi-Fi 模组,烧录串口通用固件后可以通过串口协议对接,实现对接涂鸦平台,实现设备的智能化控制。可以实现带 MCU 设备的智能化改造,配合使用 MCU SDK 、公版 App 及公版面板,一站式完成产品智能化,开发高效便捷。工程移植完成后,可以适用于任意涂鸦 Wi-Fi 串口模块,不仅仅可供 CBU 使用。
移植流程:创建产品(选通用自定义方案)-选择产品功能-获取 MCU 包-移植 MCU SDK-App 配网控制
- 平台创建产品,获取 MCU 包。教程可以参考:Wi-Fi MCU 教程。此处不做赘述。
- 获取 MCU SDK 包,移植进入梁山派串口中断接收例程中。
- 移植流程可以参考官方文档:Wi-Fi MCU SDK 移植
- App 使用参考文档:App 使用手册。各大应用商店均可直接下载。
3.13.3.2 引脚选择
若直接使用单模组,可以直接按图所示飞线联调,四根线:模组 VCC 接 3.3V,GND 接地,RX1 接 PA9,TX1 接 PA10。
| CAT1 | 立创·梁山派 |
|---|---|
| VCC | 3V3 |
| GND | GND |
| RX1 | PA9 |
| TX1 | PA10 |
3.13.3.3 移植至工程
编译根据报错提示修改对应的修改点,主要涉及 protocol.c、mcuapi.c 相关函数更改
串口发送函数嵌入
/**
* @brief 串口发送数据
* @param[in] {value} 串口要发送的1字节数据
* @return Null
*/
void uart_transmit_output(unsigned char value)
{
// #error "请将MCU串口发送函数填入该函数,并删除该行"
usart_send_data(value);
/*
//Example:
extern void Uart_PutChar(unsigned char value);
Uart_PutChar(value); //串口发送函数
*/
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
串口接收中断函数修改
void BSP_USART_IRQHandler(void)
{
if(usart_interrupt_flag_get(BSP_USART,USART_INT_FLAG_RBNE) == SET) // ½ÓÊÕ»º³åÇø²»Îª¿Õ
{
uart_receive_input(usart_data_receive(BSP_USART));
// g_recv_buff[g_recv_length++] = usart_data_receive(BSP_USART); // °Ñ½ÓÊÕµ½µÄÊý¾Ý·Åµ½»º³åÇøÖÐ
}
if(usart_interrupt_flag_get(BSP_USART,USART_INT_FLAG_IDLE) == SET) // ¼ì²âµ½Ö¡ÖжÏ
{
usart_data_receive(BSP_USART); // ±ØÐëÒª¶Á£¬¶Á³öÀ´µÄÖµ²»ÄÜÒª
// g_recv_buff[g_recv_length] = '\0'; // Êý¾Ý½ÓÊÕÍê±Ï£¬Êý×é½áÊø±êÖ¾
g_recv_complete_flag = 1; // ½ÓÊÕÍê³É
}
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
初始化设备状态上报函数
/**
* @brief 系统所有dp点信息上传,实现APP和muc数据同步
* @param Null
* @return Null
* @note 此函数SDK内部需调用,MCU必须实现该函数内数据上报功能,包括只上报和可上报可下发型数据
*/
void all_data_update(void)
{
// #error "请在此处理可下发可上报数据及只上报数据示例,处理完成后删除该行"
//此代码为平台自动生成,请按照实际数据修改每个可下发可上报函数和只上报函数
mcu_dp_bool_update(DPID_SWITCH_1,1 ); //BOOL型数据上报;
mcu_dp_value_update(DPID_COUNTDOWN_1,0); //VALUE型数据上报;
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
main 函数修改
int main(void)
{
nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2); // 优先级分组
systick_config(); // 滴答定时器初始化
led_gpio_config(); // led初始化
key_gpio_config(); // key初始化
usart_gpio_config(9600U); // 串口0初始化
wifi_protocol_init();
while(1) {
wifi_uart_service();
}2
3
4
5
6
7
8
9
10
11
12
常用宏定义重定义问题,include "gd32f4xx.h" 即可
#include "gd32f4xx.h"
//=============================================================================
//定义常量
//如果编译发生错误: #40: expected an identifier DISABLE = 0, 类似这样的错误提示,可以包含头文件 #include "stm32f1xx.h" 来解决
//=============================================================================
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
#ifndef NULL
#define NULL ((void *) 0)
#endif
#ifndef SUCCESS
#define SUCCESS 1
#endif
#ifndef ERROR
#define ERROR 0
#endif
#ifndef INVALID
#define INVALID 0xFF
#endif
#ifndef ENABLE
#define ENABLE 1
#endif
#ifndef DISABLE
#define DISABLE 0
#endif2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
相关功能写入:1.按键按下发送配网指令 2.接收到 app 消息,控制 led 亮灭
void BSP_KEY_EXTI_IRQHANDLER(void)
{
if(exti_interrupt_flag_get(BSP_KEY_EXTI_LINE) == SET)
{
if(gpio_input_bit_get(BSP_KEY_PORT,BSP_KEY_PIN) == SET)
{
gpio_bit_toggle(PORT_LED2,PIN_LED2);
mcu_reset_wifi();//发送配网指令
// printf("key press!\r\n");
}else{
printf("key release!\r\n");
}
exti_interrupt_flag_clear(BSP_KEY_EXTI_LINE);
}
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
注意:dp_download_**功能函数是官网根据创建的产品自动生成的。这里不同的产品,dp_download 函数不一样,这里仅以一个开关 dp 为例,举例说明。
/*****************************************************************************
函数名称 : dp_download_switch_1_handle
功能描述 : 针对DPID_SWITCH_1的处理函数
输入参数 : value:数据源数据
: length:数据长度
返回参数 : 成功返回:SUCCESS/失败返回:ERROR
使用说明 : 可下发可上报类型,需要在处理完数据后上报处理结果至app
*****************************************************************************/
static unsigned char dp_download_switch_1_handle(const unsigned char value[], unsigned short length)
{
//示例:当前DP类型为BOOL
unsigned char ret;
//0:off/1:on
unsigned char switch_1;
switch_1 = mcu_get_dp_download_bool(value,length);
if(switch_1 == 0) {
gpio_bit_write(PORT_LED2,PIN_LED2,RESET);
//bool off
}else {
gpio_bit_write(PORT_LED2,PIN_LED2,SET);
//bool on
}
//There should be a report after processing the DP
ret = mcu_dp_bool_update(DPID_SWITCH_1,switch_1);
if(ret == SUCCESS)
return SUCCESS;
else
return ERROR;
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
OK,没有报错,移植成功。后续若无功能变更,可以替换 PRODUCT_KEY 为自己的创建的 PID,可以修改控制面板、设备名称等。
3.13.4 移植验证
在 main.c 中编写以下代码。
#include "gd32f4xx.h"
#include "systick.h"
#include <stdio.h>
#include "main.h"
#include "bsp_led.h"
#include "sys.h"
#include "bsp_usart.h"
#include "bsp_key.h"
#include "bsp_basic_timer.h"
#include "bsp_pwm.h"
#include "stdlib.h"
#include "string.h"
#include "wifi.h"
/************************************************
函数名称 : main
功 能 : 主函数
参 数 : 无
返 回 值 : 无
作 者 : LC
*************************************************/
int main(void)
{
nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2); // 优先级分组
systick_config(); // 滴答定时器初始化
led_gpio_config(); // led初始化
key_gpio_config(); // key初始化
usart_gpio_config(9600U); // 串口0初始化
wifi_protocol_init();
while(1) {
wifi_uart_service();
}
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
实验现象:按下按键后,设备处于配网状态,可以使用涂鸦智能或者智能生活 App 配网。配网成功后可以使用手机 App 进行控制板载 LED 的亮灭。
App 界面为涂鸦官方面板,平台创建产品后,可以根据自己喜好选择。设备名称、界面风格、主体颜色,均可在平台修改。若使用此例程,可以将代码中 PID 为自己的 PID,即可看到自己选择的产品及面板。
演示视频中,开关按钮对应的函数即为上述 demo 函数中 dp_download_switch_1_handle 函数。demo 仅适配了开关功能,更多功能可以自行实现。
App 使用参考文档:App 使用手册。各大应用商店均可直接下载。
文件 3.13.4-2 移植成功示例
通过网盘分享的文件:立创·梁山派GD32F470ZGT6开发板【模块移植手册代码】
链接: https://pan.baidu.com/s/1pp44yjD1Dhh7U9iZ2a11IA 提取码: LCKF