本帖最后由 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
图片如下:
附件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:天问ASP PRO 2.0 4M版
图2:ESP8266 开发板
图3:这家外壳比3D打印好很多2.15元/个。要选80mm*50mm*35mm 格式的,刚刚好!
|