查看: 237|回复: 0

【花雕动手做】ASRPRO语音识别(30)--串口0接收字符串打开灯

[复制链接]

64

主题

86

帖子

477

积分

中级会员

Rank: 3Rank: 3

积分
477
发表于 2024-1-11 14:32:57 | 显示全部楼层 |阅读模式
本例实验的WS2812B模块:

25-.jpg

本例实验的WS2812B模块的电原理图

14.jpg

本案例使用串口
串口是一种采用串行通信方式的扩展接口,可以用于连接计算机和外设,或者实现不同设备之间的数据传输。串口的特点是通信线路简单,成本低,适用于远距离通信,但传输速度较慢。常见的串口有RS-232、RS-422、RS-485等,它们有不同的电平标准、传输距离和负载能力。串口通信需要遵循一定的通信协议,如UART、SPI等,来规定数据的格式、时序和控制信号。

【花雕动手做】实验三十五:通过0#串口接收字符串控制WS2812B的点亮和变色
实验开源代码

  1. #include "asr.h"
  2. extern "C"{ void * __dso_handle = 0 ;}
  3. #include "setup.h"
  4. #include "HardwareSerial.h"
  5. #include "myLib/asr_ws2812.h"

  6. uint32_t snid;
  7. String Rec;
  8. void UART_RX();
  9. void ASR_CODE();
  10. void app();

  11. //{speak:小蝶-清新女声,vol:10,speed:10,platform:haohaodada}
  12. //{playid:10001,voice:欢迎使用人工智能AI语音助手,用智能管家唤醒我}
  13. //{playid:10002,voice:我退下了,用智能管家唤醒我}

  14. WS2812 ASR_WS2812_27(27);
  15. void UART_RX(){
  16.   while (1) {
  17.     if(Serial.available() > 0){
  18.       Rec = Serial.readString();
  19.       if(Rec == "ho"){
  20.         ASR_WS2812_27.setBrightness(30);
  21.         ASR_WS2812_27.pixel_set_all_color(255,0,0);
  22.         ASR_WS2812_27.pixel_show();
  23.         Serial.println("hong");
  24.       }
  25.       else if(Rec == "lan"){
  26.         ASR_WS2812_27.setBrightness(40);
  27.         ASR_WS2812_27.pixel_set_all_color(0,0,255);
  28.         ASR_WS2812_27.pixel_show();
  29.         Serial.println("lan");
  30.       }
  31.       else if(Rec == "lv"){
  32.         ASR_WS2812_27.setBrightness(40);
  33.         ASR_WS2812_27.pixel_set_all_color(0,255,0);
  34.         ASR_WS2812_27.pixel_show();
  35.         Serial.println("lv");
  36.       }
  37.     }
  38.     delay(2);
  39.   }
  40.   vTaskDelete(NULL);
  41. }

  42. /*描述该功能...
  43. */
  44. void ASR_CODE(){
  45.   //语音识别功能框,与语音识别成功时被自动调用一次。
  46.   set_state_enter_wakeup(15000);
  47.   switch (snid) {
  48.    case 0:
  49.     digitalWrite(4,0);
  50.     Serial.println("hello");
  51.     break;
  52.    case 1:
  53.     ASR_WS2812_27.setBrightness(30);
  54.     ASR_WS2812_27.pixel_set_all_color(255,0,0);
  55.     ASR_WS2812_27.pixel_show();
  56.     break;
  57.    case 2:
  58.     ASR_WS2812_27.setBrightness(40);
  59.     ASR_WS2812_27.pixel_set_all_color(0,0,255);
  60.     ASR_WS2812_27.pixel_show();
  61.     break;
  62.    case 3:
  63.     ASR_WS2812_27.setBrightness(40);
  64.     ASR_WS2812_27.pixel_set_all_color(0,255,0);
  65.     ASR_WS2812_27.pixel_show();
  66.     break;
  67.   }

  68. }

  69. void app(){
  70.   //操作系统的一个线程,独立主循环任务,可支持多个类似线程任务。
  71.   //当存在多个线程任务时,注意优先级与占用内存设置。
  72.   while (1) {
  73.     delay(100);
  74.   }
  75.   vTaskDelete(NULL);
  76. }

  77. void sys_sleep_hook()
  78. {
  79.   digitalWrite(4,1);
  80.   ASR_WS2812_27.pixel_set_all_color(0,0,0);
  81.   ASR_WS2812_27.pixel_show();

  82. }

  83. void hardware_init(){
  84.   xTaskCreate(UART_RX,"UART_RX",128,NULL,4,NULL);
  85.   xTaskCreate(app,"app",128,NULL,4,NULL);
  86.   //需要操作系统启动后初始化的内容
  87.   vol_set(7);
  88.   setPinFun(13,SECOND_FUNCTION);
  89.   setPinFun(14,SECOND_FUNCTION);
  90.   Serial.begin(9600);
  91.   Rec = "";
  92.   ASR_WS2812_27.pixel_init(3);
  93.   vTaskDelete(NULL);
  94. }

  95. void setup()
  96. {
  97.   //需要操作系统启动前初始化的内容
  98.   //{ID:0,keyword:"唤醒词",ASR:"智能管家",ASRTO:"我在"}
  99.   //{ID:1,keyword:"命令词",ASR:"打开红灯",ASRTO:"已经打开红灯"}
  100.   //{ID:2,keyword:"命令词",ASR:"打开蓝灯",ASRTO:"已经打开蓝灯"}
  101.   //{ID:3,keyword:"命令词",ASR:"打开绿灯",ASRTO:"已经打开绿灯"}
  102.   setPinFun(4,FIRST_FUNCTION);
  103.   pinMode(4,output);
  104.   digitalWrite(4,1);
  105. }
复制代码

训练模型与编译烧录

14.jpg

15.jpg

实验串口返回情况
串口输出截图
实验场景图

16.jpg

17.jpg

18.jpg

19.jpg

20.jpg

21.jpg



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|好好搭搭在线 ( © 好好搭搭在线 浙ICP备19030393号-1 )

GMT+8, 2024-5-2 19:30 , Processed in 0.328718 second(s), 26 queries .

Powered by Discuz!

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表