前言:本实验基于CW32L012主控,搭配AI语音CI-03T模块进行语音控制灯光开关的实验。
一、模块介绍:
所需硬件:CW32L012主板,CI-03T AI大模型语音模块,LED灯,电源
本实验实现逻辑:第一,通过在线配置语音模块通讯协议以及语音指令。第二,配置好单片机端串口通讯协议需与语音模块一致。第三,插上LED灯的两个引脚并在单片机端配置点亮熄灭逻辑。第四,上电说语音指令,语音模块发给单片机端并由单片机端点亮熄灭LED实现智能语音灯控。
下附智能公元的智能语音在线配置内容:
二、软件讲解:
下附单片机端串口通讯程序:
#include "cw32l012.h"#include "cw32l012_sysctrl.h"#include "cw32l012_gpio.h"#include "cw32l012_uart.h"#include "OLED.h"#include <stdio.h>#define SYS_CLK_HZ 4000000UL#define VOICE_BAUD 9600volatile uint8_t g_last = 0; // 最近收到的字节volatile uint16_t g_cnt = 0; // 进中断次数void LED_Init(void){__SYSCTRL_GPIOA_CLK_ENABLE();GPIO_InitTypeDef g = {0};g.IT=GPIO_IT_NONE; g.Mode=GPIO_MODE_OUTPUT_PP; g.Pins=GPIO_PIN_6;GPIO_Init(CW_GPIOA, &g);PA06_SETLOW();}void UART_Init_Voice(void){__SYSCTRL_GPIOA_CLK_ENABLE();__SYSCTRL_UART1_CLK_ENABLE();GPIO_InitTypeDef g = {0};g.Pins=GPIO_PIN_3; g.Mode=GPIO_MODE_INPUT;GPIO_Init(CW_GPIOA, &g);PA03_AFx_UART1RXD();UART_InitTypeDef u = {0};u.UART_BaudRate = VOICE_BAUD;u.UART_Source = UART_Source_PCLK;u.UART_UclkFreq = SYS_CLK_HZ;u.UART_Mode = UART_Mode_Rx;UART_Init(CW_UART1, &u);UART_ITConfig(CW_UART1, UART_IT_RC, ENABLE);UART_ClearITPendingBit(CW_UART1, UART_IT_RC);NVIC_SetPriority(UART1_IRQn, 0);NVIC_EnableIRQ(UART1_IRQn);}int main(void){SystemInit();__enable_irq();LED_Init();OLED_Init();OLED_Clear();UART_Init_Voice();while (1){OLED_Printf(0, 0, OLED_6X8, "RX = %02X ", g_last);OLED_Printf(0, 16, OLED_6X8, "CNT= %d ", g_cnt);OLED_Update();}}/* ★函数名与启动文件一致:UART1_IRQHandler */void UART1_IRQHandler(void){if (UART_GetITStatus(CW_UART1, UART_IT_RC) != RESET){UART_ClearITPendingBit(CW_UART1, UART_IT_RC);g_last = UART_ReceiveData(CW_UART1);g_cnt++;if (g_last == 0x01) PA06_SETHIGH();if (g_last == 0x02) PA06_SETLOW();}}void assert_failed(uint8_t *file, uint32_t line) { while(1); }
三、总结与建议:
1.AI语音端和单片机端需要对好通讯协议保证收发一致,以及波特率也要保持一致。
2.LED灯的引脚需要正确插在单片机的引脚上,否则会不亮。
3.下达语音命令时要按照规定好的内容下达并且吐字尽量清晰。
扫码加入QQ群3群| 610403240
阅读全文
95