找回密码
 立即注册

微信扫码登录

搜索
查看: 603|回复: 5

[硬件DIY] 【阿木制作】终于半复刻了第一个硬件——小黑同学

[复制链接]

80

主题

314

回帖

3233

积分

元老级技术达人

积分
3233
金钱
2834
HASS币
20
发表于 2026-9-12 19:47:52 | 显示全部楼层 |阅读模式
本帖最后由 lambilly 于 2026-9-14 10:03 编辑

HomeAssistant把界面、NR等都搞的差不多,一直想学弄一个硬件来玩,群里有一大神前两年制作了小黑同学(天问离线语音模块ASRPro接入Homeassistant【超迷你】),我买了4个,非常很好用。现在业余闲着想学习开源硬件的东西。就想搞一个小黑同学可以用MQTT远程语音,但是大神太忙没空帮着做。我看了他们开源硬件,要焊那种小很0402的电阻,头都大了。年纪大,这么小的东西根本看不清楚的。
后面转换思路弄个开发板自己焊,就搞成了现在这样的。几个信息给大家,有要用的自己做,不难,费时间。
一、硬件
1、天问ASRPRO 2.0和 ESP8266都是开发板,双方就焊对接四根线;
2、喇叭是天问买时自带的。
3、外壳本来想打印,太贵,也不会设计,就找了好久现成的,回来打孔,太便宜大大小小买了好几个,看起来还不错。
4、为了外壳打个l喇叭孔和TYPE-C孔,十八般工具都用上了。
二、固件
1、修改了原ESPHOME配置,原来是2024版本的,最新ESPHOME 2026.08版有许多格式变化,不懂问AI。
2、顺便把原来订制的四个小黑的ESP都升级到2026.08版,顺便把IP写进去。由于家里设备太多,路由器静态地址不够分配。
3、天问编写与烧录与原来一样的。为了方便上下层对准,我改了原来的RX、TX GPIO 改成如下
uart:
  id: asrpro_uart
  tx_pin: GPIO1
  rx_pin: GPIO3
  baud_rate: 115200
  parity: NONE
  stop_bits: 1
  rx_buffer_size: 512

图片如下:
1 (2).jpg 2 (2).jpg 3 (2).jpg 5 (2).jpg 6 (2).jpg 7.jpg


附件ESP8266_2026.08的yaml配置文档
external_components:
  - source: github://MexHigh/ESPHome-UART-Read-Line-Sensor
    components: [ uart_read_line_sensor ]

substitutions:
  devicename: asrpro-mqtt
  friendly_name: ${devicename}
  hw_version: v2.0

esphome:
  name: ${devicename}
  friendly_name: ${friendly_name}
  includes:
    - components/asrpro_uart_command.h

esp8266:
  board: d1_mini
  restore_from_flash: false

wifi:
  networks:
    - ssid: !secret wifi_ssid
      password: !secret wifi_password
  ap:
    ssid: ${devicename}
    password: !secret ap_password
    ap_timeout: 90s

# ========== MQTT 配置 ==========
mqtt:
  broker: !secret mqtt_broker
  port: 1883
  username: !secret mqtt_username
  password: !secret mqtt_password
  client_id: ${devicename}
  topic_prefix: ${devicename}
  discovery: true
  discovery_prefix: homeassistant
  birth_message:
    topic: ${devicename}/status
    payload: online
  will_message:
    topic: ${devicename}/status
    payload: offline

captive_portal:

ota:
  platform: esphome
  password: !secret ota_password

web_server:
  port: 80
  auth:
    username: admin
    password: !secret web_password
    type: digest

logger:
  baud_rate: 0
  esp8266_store_log_strings_in_flash: false
  level: ERROR

uart:
  id: asrpro_uart
  tx_pin: GPIO1
  rx_pin: GPIO3
  baud_rate: 115200
  parity: NONE
  stop_bits: 1
  rx_buffer_size: 512

sensor:
  - platform: wifi_signal
    name: ESP RSSI
    update_interval: 60s
  - platform: template
    name: ESP Free Memory Byte
    id: id_esp_free_memory_byte
    lambda: |-
      return ESP.getFreeHeap();
    filters:
      - multiply: 0.001
    unit_of_measurement: "KB"
    update_interval: 30s
  - platform: uptime
    name: ESP Uptime Sensor
    id: uptime_sensor
    update_interval: 60s
    internal: true
    on_raw_value:
      then:
        - text_sensor.template.publish:
            id: uptime_human
            state: !lambda |-
              int seconds = round(id(uptime_sensor).get_raw_state());
              int days = seconds / (24 * 3600);
              seconds = seconds % (24 * 3600);
              int hours = seconds / 3600;
              seconds = seconds % 3600;
              int minutes = seconds / 60;
              seconds = seconds % 60;
              return (
                (days ? String(days) + "d " : "") +
                (hours ? String(hours) + "h " : "") +
                (minutes ? String(minutes) + "m " : "") +
                (String(seconds) + "s")
              ).c_str();

button:
  - platform: restart
    name: ESP Restart
    entity_category: config
  - platform: factory_reset
    disabled_by_default: true
    name: ESP Factory Reset
    id: factory_reset_all

text_sensor:
  - platform: template
    name: ESP Uptime
    id: uptime_human
    icon: mdi:clock-start
  - platform: wifi_info
    ip_address:
      name: ESP IP Address
    mac_address:
      name: ESP MAC
  - platform: uart_read_line_sensor
    name: "ASRPRO CMD"
    id: "uart_readline"
    uart_id: asrpro_uart

light:
  - platform: status_led
    name: Status Led
    id: light_status_led
    output: status_led_gpio
    internal: true

output:
  - platform: esp8266_pwm
    id: status_led_gpio
    pin: GPIO16
    inverted: true

备注:代码中的asrpro_uart_command.h
用原代码的头文件


附上采用的配件图片:
1.png
图1:天问ASP PRO 2.0 4M版
2.png
图2:ESP8266 开发板
3.png
图3:这家外壳比3D打印好很多2.15元/个。要选80mm*50mm*35mm 格式的,刚刚好!

评分

参与人数 1金钱 +10 收起 理由
summ99111 + 10

查看全部评分

回复

使用道具 举报

0

主题

302

回帖

2556

积分

金牌会员

积分
2556
金钱
2254
HASS币
0
发表于 2026-9-13 12:30:29 | 显示全部楼层
厉害啊!!!
回复

使用道具 举报

4

主题

220

回帖

1447

积分

金牌会员

积分
1447
金钱
1223
HASS币
0
发表于 2026-9-14 09:27:00 | 显示全部楼层
这个和大神的小黑有什么特别之处吗?我也买了,方便分享ESPHOME的固件吗?


/**
* Linux常用命令:pwd 显示用户当前所在的目录
* 我一直都在你身边 ,一直都在
* Link https://greasyfork.org/zh-CN/scripts/396933-hostloc-zsbd
*/
回复

使用道具 举报

0

主题

43

回帖

1157

积分

金牌会员

积分
1157
金钱
1114
HASS币
0
发表于 2026-9-14 09:39:04 | 显示全部楼层
感谢楼主分享,学习了
回复

使用道具 举报

80

主题

314

回帖

3233

积分

元老级技术达人

积分
3233
金钱
2834
HASS币
20
 楼主| 发表于 2026-9-14 09:44:00 | 显示全部楼层
summ99111 发表于 2026-9-14 09:27
这个和大神的小黑有什么特别之处吗?我也买了,方便分享ESPHOME的固件吗?

1、大神的那个要焊很多的电阻,我搞不定焊,我的这个都是开发板,只对接焊上四条线就行了。
2、大神那个是本地ESPHOME接入,我改成MQTT,可以运程接入。
回复

使用道具 举报

4

主题

220

回帖

1447

积分

金牌会员

积分
1447
金钱
1223
HASS币
0
发表于 2026-9-14 21:24:27 | 显示全部楼层
lambilly 发表于 2026-9-14 09:44
1、大神的那个要焊很多的电阻,我搞不定焊,我的这个都是开发板,只对接焊上四条线就行了。
2、大神那个是 ...

谢谢老哥的分享,改天有空我也自己在做两个
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian ( 晋ICP备17001384号-1 )|网站地图

GMT+8, 2026-10-7 21:16 , Processed in 0.015347 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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