『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 3061|回复: 60

[技术探讨] DIY一个基于ASR-PRO的离线语音控制音箱

[复制链接]

2

主题

60

帖子

1659

积分

金牌会员

Rank: 6Rank: 6

积分
1659
金钱
1599
HASS币
0
发表于 2024-1-7 20:05:09 | 显示全部楼层 |阅读模式
本帖最后由 LJCAD 于 2024-1-10 09:44 编辑

一直采用天猫精灵+巴法云来控制hass,但最近经常出现离线的问题,论坛里面有几个ASR-PRO的帖子,综合一下,元旦搞了个离线语音控制音箱,用3d打印了箱体,稳定运行一周多,比天猫精灵要快捷及方便,特借论坛分享一下。

参考帖子:ASR-PRO离线语音模块的使用方法 - 『HomeAssistant』综合讨论区 - 『瀚思彼岸』» 智能家居技术论坛 - Powered by Discuz! (hassbian.com)

线路板白嫖嘉立创,ASR-PRO核心板,D1 mini,6027咪头,1.5寸小喇叭,TYPE-C电源接板。

线路板白嫖嘉立创,ASR-PRO核心板,D1 mini,6027咪头,1.5寸小喇叭,TYPE-C电源接板。 ... ... ...

线路板白嫖嘉立创,ASR-PRO核心板,D1 mini,6027咪头,1.5寸小喇叭,TYPE-C电源接板。 ... ... ...

简单连接一起,预留了两个MIC口。

2

2

音箱采用3d打印,迷宫式,1.5寸小喇叭。

3

3

组装好,与天猫精灵对比。
5.jpg
数据转换采用ESPHOME,但没有采用论坛其他帖子采用mqtt的方法,采用text_sensor,感觉这样减少一重转换。
6.jpg
ESPHOME的yaml如下:
esphome:
  name: "yuyinkongzi"
  includes:
    - my_custom_component.h

esp8266:
  board: d1_mini

# Enable logging
logger:
  level: VERBOSE
  baud_rate: 0

# Enable Home Assistant API
api:
  password: "1"
  
ota:
  password: "1"

web_server:  
  port: 80

wifi:
  ssid: "xxxxxx"
  password: "xxxxxxxxxxx"
  manual_ip:
    static_ip: 192.168.1.xxx
    gateway: 192.168.1.1
    subnet: 255.255.255.0
    
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "YYKZ"
    password: "1234567890"

captive_portal:

uart:
  id: uart_bus
  rx_pin: 3
  tx_pin: 1
  baud_rate: 9600
  debug:
    direction: BOTH
    dummy_receiver: false
    after:
      delimiter: "\n"
    sequence:
      - lambda: UARTDebug::log_string(direction, bytes);

text_sensor:
  - platform: custom
    lambda: |-
      auto my_custom_sensor = new UartReadLineSensor(id(uart_bus));
      App.register_component(my_custom_sensor);
      return {my_custom_sensor};
    text_sensors:
      name: "yykz"
      id: "uart_readline"
ESPHOME要读取uart内容转换为text_sensor,要增加my_custom_component.h才能编译,在ESPHOME目录新建my_custom_component.h文件,拷贝以下内容就可以。
#include "esphome.h"

class UartReadLineSensor : public Component, public UARTDevice, public TextSensor {
 public:
  UartReadLineSensor(UARTComponent *parent) : UARTDevice(parent) {}

  void setup() override {
    // nothing to do here
  }

  int readline(int readch, char *buffer, int len)
  {
    static int pos = 0;
    int rpos;

    if (readch > 0) {
      switch (readch) {
        case '\n': // Ignore new-lines
          break;
        case '\r': // Return on CR
          rpos = pos;
          pos = 0;  // Reset position index ready for next time
          return rpos;
        default:
          if (pos < len-1) {
            buffer[pos++] = readch;
            buffer[pos] = 0;
          }
      }
    }
    // No end of line has been found, so return -1.
    return -1;
  }

  void loop() override {
    const int max_line_length = 80;
    static char buffer[max_line_length];
    while (available()) {
      if(readline(read(), buffer, max_line_length) > 0) {
        publish_state(buffer);
      }
    }
  }
};
ASR-PRO的编写比较简单,全图形化。
7.jpg
然后在NODE-RED中,根据sensor字符变化,用switch判断运行对应命令就可以了。
8.jpg
将家里改成智能化已经4年,这4年里,在论坛学习到很多知识,这次简单的介绍一下离线语音控制,希望能帮到有需要的人。

补充嘉立创打板文件。
Gerber_PCB_语音控制_2_2024-01-01.zip (23.9 KB, 下载次数: 41)
补充音箱打印文件。
语音控制.zip (174.54 KB, 下载次数: 42)


评分

参与人数 5金钱 +56 收起 理由
ekingfan + 10 感谢楼主分享!
yybl + 10 感谢楼主分享!
DDDear + 10 感谢楼主分享!
sorrypqa + 16 论坛有你更精彩!
隔壁的王叔叔 + 10 高手,这是高手!

查看全部评分

回复

使用道具 举报

7

主题

1072

帖子

3361

积分

论坛元老

Rank: 8Rank: 8

积分
3361
金钱
2289
HASS币
0
发表于 2024-1-7 21:47:51 | 显示全部楼层
感谢分享,我要抄作业。
回复

使用道具 举报

50

主题

1300

帖子

4905

积分

论坛DIY达人

积分
4905
金钱
3605
HASS币
20
发表于 2024-1-7 22:14:04 | 显示全部楼层
本帖最后由 sorrypqa 于 2024-1-7 22:17 编辑

不错不错!谢谢分享!纯本地运行的东西才是好东西,打算弄这货到我的航嘉插排,给小孩用
回复

使用道具 举报

44

主题

632

帖子

3562

积分

论坛元老

Rank: 8Rank: 8

积分
3562
金钱
2930
HASS币
0
发表于 2024-1-7 22:58:40 | 显示全部楼层
楼主 你这边“ASR-PRO的编写比较简单,全图形化”然后后面的图片中的设置我这个天问模块编辑界面怎么都调不出来,你是什么位置找到这个结构的。 这个 当识别到命令词悟空时.....这种格式我找了半天没找到啊,请指教!
回复

使用道具 举报

5

主题

171

帖子

1246

积分

金牌会员

Rank: 6Rank: 6

积分
1246
金钱
1075
HASS币
0
发表于 2024-1-8 09:04:40 | 显示全部楼层
打板文件可以分享一下么?大神
回复

使用道具 举报

2

主题

60

帖子

1659

积分

金牌会员

Rank: 6Rank: 6

积分
1659
金钱
1599
HASS币
0
 楼主| 发表于 2024-1-8 17:58:03 | 显示全部楼层
mr_chenxc 发表于 2024-1-8 09:04
打板文件可以分享一下么?大神

已经补充提供
回复

使用道具 举报

2

主题

60

帖子

1659

积分

金牌会员

Rank: 6Rank: 6

积分
1659
金钱
1599
HASS币
0
 楼主| 发表于 2024-1-8 18:09:10 | 显示全部楼层
wangmucha 发表于 2024-1-7 22:58
楼主 你这边“ASR-PRO的编写比较简单,全图形化”然后后面的图片中的设置我这个天问模块编辑界面怎么都调不 ...

你好,刚才看了一下,最新的元旦特别版整个逻辑变了,不再是先前模式。 1.jpg
回复

使用道具 举报

3

主题

201

帖子

2160

积分

金牌会员

Rank: 6Rank: 6

积分
2160
金钱
1959
HASS币
0
发表于 2024-1-8 18:28:52 | 显示全部楼层
有成品出吗!!!!!
回复

使用道具 举报

5

主题

171

帖子

1246

积分

金牌会员

Rank: 6Rank: 6

积分
1246
金钱
1075
HASS币
0
发表于 2024-1-8 21:46:37 | 显示全部楼层
感谢大神,已打板。问下,是可以接两个麦克风么?
回复

使用道具 举报

44

主题

632

帖子

3562

积分

论坛元老

Rank: 8Rank: 8

积分
3562
金钱
2930
HASS币
0
发表于 2024-1-9 00:16:45 | 显示全部楼层
LJCAD 发表于 2024-1-8 18:09
你好,刚才看了一下,最新的元旦特别版整个逻辑变了,不再是先前模式。
...

是的,确实变了,所以我刷了无数次就是无法刷上。不过我已找到方法,你这个依旧还有办法可以刷入。就是我偶然发现的,先用asrone编辑后保存配置文件到桌面,然后选择arspro模块编辑,注意此处一定要点选编辑界面后再去导入界面选择那个有英文字母的那个方式导入,再生成模型和导入刷那边才会显示2M的刷入,否则其他方式都会模块自动跳到asr one模块导致刷入失败。这个坑我昨晚试错了一个通宵才运气好试出来的,应该没人知道可以这么刷吧
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-29 23:02 , Processed in 0.674275 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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