没错,这是智zhang语音助手

本系统基于自美系统二次开发,添加连接EMQ服务器,语音远程控制LED(Nodemcu),当然也可以扩展控制更多的设备,只需要将下位机设备连接到EMQ服务器即可。

由于使用自美系统,需要配套的驱动板官方文档有相关链接。(有兴趣的同学可以了解一下 悟空项目 ,也是一个开源智能音箱项目)

自美系统已经将基础的语音交互框架做好,支持自定义唤醒词(snowboy平台),不过有一点需要了解,如果想使用自美系统,需要购买其专用驱动板,用来驱动扬声器和麦克风。如下图

这不是广告哈

对了,有一点需要主要,对于这类智能语音交互系统,麦克风的质量真的很重要,不然都唤醒不了,那就尴尬了。

开机界面如下(界面还是很简洁的)

这里主要介绍一下,二次开发插件的过程,使用Python语言,代码很简单。

自美文档详细介绍了如何添加插件(这里直接上代码)

# encoding: utf-8
import paho.mqtt.client as mqtt from plugin import Plugin HOST = "47.98.xxx.58" #EMQ服务器地址
PORT = 1883 #端口固定1883
MQTT_ID="Client_Test" #自定义客户端 class Test(Plugin):
def start(self,name):
client = mqtt.Client(MQTT_ID)
client.connect(HOST, PORT, 60)
if name["data"].count("开") >=1:
client.publish("LED","1024",2) # 发布一个主题为'LED'
return {'state':True,'data': "主人,灯已打开" ,'msg':'','stop':True}
elif name["data"].count("关") >=1:
client.publish("LED","0",2) # 发布一个主题为'LED'
return {'state':True,'data': "主人,灯已关闭" ,'msg':'','stop':True}
else:
return {'state':True,'data': "没有执行任何操作" ,'msg':'','stop':True}

语音控制Nodemcu上的一个LED 演示视频

附加Nodemcu的代码(使用arduino平台开发)

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <math.h>
int pinLED = D2; const char* ssid = "123";//连接的路由器的名字
const char* password = "12345678";//连接的路由器的密码
const char* mqtt_server = "47.98.xxx.58";//服务器的地址
const int port=1883;//服务器端口号 WiFiClient espClient;
PubSubClient client(espClient); int light=1024;//led的亮度值 void setup_wifi() {//自动连WIFI接入网络
delay(10);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print("hello 8266\n");
Serial.print("...");
}
} void callback(char* topic, byte* payload, unsigned int length) {//用于接收数据
//将char* 转换为int
int l=0;
int p=1;
for (int i = length-1; i >=0; i--) {
l+=(int)((char)payload[i]-'0')*p;
p*=10;
}
light=l;//赋值给light
Serial.println(l); } void reconnect() {//等待,直到连接上服务器
while (!client.connected()) {//如果没有连接上
if (client.connect("nodemcu")+random(999999999)) {//接入时的用户名,尽量取一个很不常用的用户名
client.subscribe("LED");//接收外来的数据时的intopic
} else {
Serial.print("failed, rc=");//连接失败
Serial.print(client.state());//重新连接
Serial.println(" try again in 5 seconds");//延时5秒后重新连接
delay(5000);
}
}
} void setup() {//初始化程序,只运行一遍
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(115200);//设置串口波特率(与烧写用波特率不是一个概念)
setup_wifi();//自动连WIFI接入网络
client.setServer(mqtt_server, port);//端口号
client.setCallback(callback); //用于接收服务器接收的数据
} void loop() {//主循环
reconnect();//确保连上服务器,否则一直等待。
client.loop();//MUC接收数据的主循环函数。
analogWrite(LED_BUILTIN,1024-light);//设置led亮度
} //代码是网上下载的,找不到作者了,如有侵权联系删除,谢谢

源码会上传到Github(有需要自行下载

小白一枚,欢迎评论指正

啥?你想diy一个智能音箱,来吧的更多相关文章

  1. 天猫精灵X1智能音箱使用感想

    11.22音箱到手,等了刚好一个月. 主要是测评语音交互功能. 测试条件:正宗普通话. 1)问天气.温度:表现良好.2)找手机功能:试了多次,每次都说手机号码格式不对3)小孩听故事:正常.但是开头会有 ...

  2. 微软自然语言理解平台LUIS:从零开始,帮你开发智能音箱

    今年微软开发者大会Build 2017上展示了一款Invoke智能音箱,受到了媒体和大众的广泛关注.近两年,不少大公司纷纷涉足该领域,使得智能音箱逐渐成为一款热门的人工智能家用电器.智能音箱的兴起也改 ...

  3. 用蓝牙芯片CC2541/CC2540实现一个智能恒温箱

    最近突然想自己做一个智能小冰箱玩一玩,于是决定动手试一试. 成品效果图 原材料 半导体制冷片一只 散热风扇 12V电源一台 智能恒温箱电路板 控制板的PCB图 原理图 供电部分原理图 制冷片控制部分原 ...

  4. DIY一个基于树莓派和Python的无人机视觉跟踪系统

    DIY一个基于树莓派和Python的无人机视觉跟踪系统 无人机通过图传将航拍到的图像存储并实时传送回地面站差点儿已经是标配.假设想来点高级的--在无人机上直接处理拍摄的图像并实现自己主动控制要怎么实现 ...

  5. DIY一个DNS查询器:程序实现

    上一篇文章<DIY一个DNS查询器:了解DNS协议>中讲了DNS查询协议的原理和数据结构.经过两个星期的开发,完成了该查询器的编写.期间也遇到了一些问题,如: 1资源记录(Resource ...

  6. 2、利用蓝牙定位及姿态识别实现一个智能篮球场套件(二)——CC2540/CC2541基于广播的RSSI获得

    CC2541一拖多例程中RSSI获得是通过一个事件回调函数实现的,前提是需要连接上蓝牙设备. 这个对于多点定位来说是不可行的,由于主机搜索蓝牙设备过程中也能获得当前蓝牙设备的RSSI等信息,因此可基于 ...

  7. 1、利用蓝牙定位及姿态识别实现一个智能篮球场套件(一)——用重写CC2541透传模块做成智能手环

    一.预言 要实现一个智能篮球场套件,需要设计一个佩戴在篮球运动员手臂上的可以检测投篮.记步的手环,以及一套可以根据RSSI定位运动员的蓝牙定位装置.下面是大致需要的步骤: 首先,需要用CC2541透传 ...

  8. DIY一个高大上带提醒的计时器,简单实用,你还在等什么

    小编心语:锵锵锵!小编我又来了!昨天发了一篇比较实用的<Python聊天室>,鉴于反响还不错,SO ,小编也想给大家多分享点有用的干货,让大家边学边用.好了,闲话不多说,今天要给各位看官们 ...

  9. Javascript里,想把一个整数转换成字符串,字符串长度为2

    Javascript里,想把一个整数转换成字符串,字符串长度为2.  想把一个整数转换成字符串,字符串长度为2,怎么弄?比如 1 => "01"11 => " ...

随机推荐

  1. Redo与Undo的理解

    本文概要本文的原意是一篇个人学习笔记,为了避免成为草草记录一下的流水账,尝试从给人介绍的角度开写.但在整理的过程中,越来越感觉力不从心,一是细节太多了,原以为足够了解的一个小知识点下可能隐藏了很多细节 ...

  2. 电脑端TIM登录时记住密码

    为什么每次登录TIM时点了记住密码,下次再登录时还是记不住呢? 不是扫码就是还得输出密码,为这事愁了好多次, 最近终于发现如何记住密码了... 进入登录界面以后,点击左下角这个小图标>> ...

  3. 「Luogu P1210」回文检测 解题报告

    题面 这是一道诡异的黄题 居然让你求一串吧啦吧啦的东西中 字母(大小写)最长的回文串的长度,还要输出完整的串 吐血 思路: 保持淡定,我们啥都不会,就会Manacher,那就用Manacher大法! ...

  4. 负载均衡基本原理与lvs

    前言: 之前在山西的项目上使用的是lvs下的NAT模式,但另外两个模式并没有涉及,今天系统的整理下关于负载均衡的相关理论与lvs各模式的相关优点与不足,知其然与所以然,而后能针对性的应用: 基本介绍 ...

  5. Win10下设置默认输入法与默认中文输入

    实现的效果: 把自己需要的一个或多个输入法软件添加到输入法列表中(一般就指定一个),避免了需要在打字时Ctrl + Shift等快捷键在多个输入法中不停切换的麻烦 首选语言默认为中文,毕竟作为一个中国 ...

  6. Have Fun with Numbers

    Notice that the number 123456789 is a 9-digit number consisting exactly the numbers from 1 to 9, wit ...

  7. Unity 基于Cinemachine计算透视摄像机在地图中的移动范围

    Unity中Cinemachine的基础功能介绍可详见之前写的博客: https://www.cnblogs.com/koshio0219/p/11820654.html 本篇的重点是讨论,在给定规则 ...

  8. cannot mount volume over existing file, file exists /var/lib/docker/overlay2/.../merged/usr/share/zoneinfo/UTC 解决

    问题产生原因: linux系统docker-compose.yml文件 放到 mac本启动发现启动报错 cannot mount volume over existing file, file exi ...

  9. 从头学pytorch(二十):残差网络resnet

    残差网络ResNet resnet是何凯明大神在2015年提出的.并且获得了当年的ImageNet比赛的冠军. 残差网络具有里程碑的意义,为以后的网络设计提出了一个新的思路. googlenet的思路 ...

  10. Java 用链表实现栈和队列

    栈 是一种基于后进先出(LIFO)策略的集合类型.当邮件在桌上放成一叠时,就能用栈来表示.新邮件会放在最上面,当你要看邮件时,会一封一封从上到下阅读.栈的顶部称为栈顶,所有操作都在栈顶完成. 前面提到 ...