#2020征文-开发板# 讯飞平台+语音控制开关灯 原创 精华

HarryP0tter
发布于 2021-1-3 16:45
浏览
7收藏

参考连老师博文:https://harmonyos.51cto.com/posts/1842

 

通过讯飞开放平台可以将语音实时转换为文字,我们可以实现语音控制开关灯。大致流程如下:

1、创建应用,下载sdk,编译demo可执行程序(本文采用的Linux SDK);

2、通过应用的唯一APPID,登录到讯飞开放平台;

3、用户输入语音,Linux SDK程序通过麦克风接收到语音数据,上传到讯飞开放平台;

4、平台返回语音翻译的文字,由Linux SDK程序通过udp socket通信的方式发送给开发板;

5、开发板接收到数据,执行控制开关灯的动作;

#2020征文-开发板# 讯飞平台+语音控制开关灯-鸿蒙开发者社区平台准备

1、讯飞控制台:https://console.xfyun.cn/app/myapp,首先申请账号。实名认证后可以领取免费的语音服务;

2、创建新应用;

#2020征文-开发板# 讯飞平台+语音控制开关灯-鸿蒙开发者社区3、下载对应的SDK,编译demo程序,本文采用的Linux SDK;

#2020征文-开发板# 讯飞平台+语音控制开关灯-鸿蒙开发者社区

PC(Linux SDK)准备

1、本文选择的是和开发板位于同一wifi下的虚拟机,解压Linux_iat1227_5fe1be98.zip,采用demo程序//samples/iat_online_record_sample;

2、编译程序,编译成功生成可执行程序iat_online_record_sample;

cd samples/iat_online_record_sample
source 64bit_make.sh
  • 1.
  • 2.

3、登录平台应用需要唯一的APPID即可;

const char* login_params = "appid = 5fe1be98, work_dir = .";
  • 1.

#2020征文-开发板# 讯飞平台+语音控制开关灯-鸿蒙开发者社区

4、Linux SDK程序接收到平台返回结果,通过udp socket发送数据到开发板;

static void show_result(char *string, char is_over)
{
    printf("\rResult: [ %s ]", string);
    if(is_over)
    {   
        putchar('\n');
        /* sendto */
        struct sockaddr_in serv_addr;
        bzero((char *) &serv_addr, sizeof(serv_addr));
        serv_addr.sin_family = AF_INET;
        inet_pton(AF_INET, IP, (void *)&serv_addr.sin_addr);
        serv_addr.sin_port = htons(PORT);
        ssize_t send_len = sendto(SOCKFD, string, strlen(string), 0,
                (const struct sockaddr *)&serv_addr, sizeof(serv_addr));
        printf("send_len=%ld, [%s]\n", send_len, string);
    }   
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

 

开发板准备

1、开发板编写一个udp socket server程序,根据接收到的命令控制开关灯;

        bzero(buf, sizeof(buf));
        recv_len = recvfrom(sockfd, buf, sizeof(buf), 0,
                (struct sockaddr *)&cli, &addrlen);
        if(recv_len > 0)
        {   
            printf("recv: len=%u, [%s] \n", recv_len, buf);
            /*  
                GPIO_10: RED
                GPIO_11: GREEN
                GPIO_12: YELLOW
             */
            if(strncmp(buf, "开灯", strlen("开灯")) == 0)
            {   
                GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 1); 
            }   
            else if(strncmp(buf, "关灯", strlen("关灯")) == 0)
            {   
                GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_10, 0); 
            }   
            else
            {   
                printf("Unknown command.\n");
            }   
        }
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.

 

总体测试

1、启动开发板,连接好wifi,监听udp端口;IP:192.168.124.14 PORT:12345

2、启动Linux SDK demo程序,./iat_online_record_sample;IP:192.168.124.10

3、用户对PC麦克风输入语音“开灯”,打印信息如下,接收讯飞平台文字,发送数据到开发板;

#2020征文-开发板# 讯飞平台+语音控制开关灯-鸿蒙开发者社区4、开发板接收到数据,打印信息如下,GPIO控制灯亮;

#2020征文-开发板# 讯飞平台+语音控制开关灯-鸿蒙开发者社区

5、用户对PC麦克风输入语音“关灯”,打印信息如下,接收讯飞平台文字,发送数据到开发板;

#2020征文-开发板# 讯飞平台+语音控制开关灯-鸿蒙开发者社区

6、开发板接收到数据,打印信息如下,GPIO控制灯灭;

#2020征文-开发板# 讯飞平台+语音控制开关灯-鸿蒙开发者社区

以上就是分享的全部内容,谢谢观看。

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
分类
已于2021-1-3 16:45:53修改
7
收藏 7
回复
举报
7
3
7
3条回复
按时间正序
/
按时间倒序
红叶亦知秋
红叶亦知秋

可以的,智能家居的第一步

回复
2021-1-4 09:21:49
鲜橙加冰
鲜橙加冰

学以致用,可以的。

回复
2021-1-4 10:45:35
hushuo
hushuo

很详细,感谢分享,

回复
2021-1-4 11:56:52


回复
    相关推荐