啥?你想diy一个智能音箱,来吧
没错,这是智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一个智能音箱,来吧的更多相关文章
- 天猫精灵X1智能音箱使用感想
11.22音箱到手,等了刚好一个月. 主要是测评语音交互功能. 测试条件:正宗普通话. 1)问天气.温度:表现良好.2)找手机功能:试了多次,每次都说手机号码格式不对3)小孩听故事:正常.但是开头会有 ...
- 微软自然语言理解平台LUIS:从零开始,帮你开发智能音箱
今年微软开发者大会Build 2017上展示了一款Invoke智能音箱,受到了媒体和大众的广泛关注.近两年,不少大公司纷纷涉足该领域,使得智能音箱逐渐成为一款热门的人工智能家用电器.智能音箱的兴起也改 ...
- 用蓝牙芯片CC2541/CC2540实现一个智能恒温箱
最近突然想自己做一个智能小冰箱玩一玩,于是决定动手试一试. 成品效果图 原材料 半导体制冷片一只 散热风扇 12V电源一台 智能恒温箱电路板 控制板的PCB图 原理图 供电部分原理图 制冷片控制部分原 ...
- DIY一个基于树莓派和Python的无人机视觉跟踪系统
DIY一个基于树莓派和Python的无人机视觉跟踪系统 无人机通过图传将航拍到的图像存储并实时传送回地面站差点儿已经是标配.假设想来点高级的--在无人机上直接处理拍摄的图像并实现自己主动控制要怎么实现 ...
- DIY一个DNS查询器:程序实现
上一篇文章<DIY一个DNS查询器:了解DNS协议>中讲了DNS查询协议的原理和数据结构.经过两个星期的开发,完成了该查询器的编写.期间也遇到了一些问题,如: 1资源记录(Resource ...
- 2、利用蓝牙定位及姿态识别实现一个智能篮球场套件(二)——CC2540/CC2541基于广播的RSSI获得
CC2541一拖多例程中RSSI获得是通过一个事件回调函数实现的,前提是需要连接上蓝牙设备. 这个对于多点定位来说是不可行的,由于主机搜索蓝牙设备过程中也能获得当前蓝牙设备的RSSI等信息,因此可基于 ...
- 1、利用蓝牙定位及姿态识别实现一个智能篮球场套件(一)——用重写CC2541透传模块做成智能手环
一.预言 要实现一个智能篮球场套件,需要设计一个佩戴在篮球运动员手臂上的可以检测投篮.记步的手环,以及一套可以根据RSSI定位运动员的蓝牙定位装置.下面是大致需要的步骤: 首先,需要用CC2541透传 ...
- DIY一个高大上带提醒的计时器,简单实用,你还在等什么
小编心语:锵锵锵!小编我又来了!昨天发了一篇比较实用的<Python聊天室>,鉴于反响还不错,SO ,小编也想给大家多分享点有用的干货,让大家边学边用.好了,闲话不多说,今天要给各位看官们 ...
- Javascript里,想把一个整数转换成字符串,字符串长度为2
Javascript里,想把一个整数转换成字符串,字符串长度为2. 想把一个整数转换成字符串,字符串长度为2,怎么弄?比如 1 => "01"11 => " ...
随机推荐
- $51nod\ 1522$ 上下序列 $dp$
正解:$dp$ 解题报告: 传送门$QwQ$ 一年过去了$gql$还是不咋会这题,,,好菜昂我的$NOIp$必将惨败了$kk$ 考虑从大到小枚举两个相同的数填哪儿,根据那个限制,十分显然的是这两个数必 ...
- ng-zorro-antd中踩过的坑
ng-zorro-antd中踩过的坑 前端项目中,我们经常会使用阿里开源的组件库:ant-design,其提供的组件已经足以满足多数的需求,拿来就能直接用,十分方便,当然了,有些公司会对组件库进行二次 ...
- CodeIgniter框架多条件搜索查询分页功能解决方案
最近在用ci框架写功能的时候,需要用到分页功能,本来寻常的数据结果分页是比较简单的,但是这次写的功能是多条件搜索查询分页,就有点难度了,看官方手册下面评论好多人问, 正常的分页功能例子是这样的: $t ...
- wrk性能测试(详解)
一.简介 wrk 是一款针对 Http 协议的基准测试工具,它能够在单机多核 CPU 的条件下,使用系统自带的高性能 I/O 机制,如 epoll,kqueue 等,通过多线程和事件模式,对目标机器产 ...
- 一次 kafka 消息堆积问题排查
收到某业务组的小伙伴发来的反馈,具体问题如下: 项目中某 kafka 消息组消费特别慢,有时候在 kafka-manager 控制台看到有些消费者已被踢出消费组. 从服务端日志看到如下信息: 该消费组 ...
- 浅析vue封装自定义插件
在使用vue的过程中,经常会用到Vue.use,但是大部分对它一知半解,不了解在调用的时候具体做了什么,因此,本文简要概述下在vue中,如何封装自定义插件. 在开始之前,先补充一句,其实利用vue封装 ...
- jedis的scan操作要注意cursor数据类型
环境 jedis3.0.0 背景 在使用jedis的"scan"操作获取redis中某些key时,发现总是出现类型转换的异常--"java.lang.ClassCastE ...
- 比特币学习笔记(二)---在windows下调试比特币源码
根据我一贯的学习经验,学习开源代码的话,单单看是不够的,必须一边看一边调试才能尽快理解,所以我们要想法搭建windows下bitcoin源码的调试环境. 紧接着昨天的进度,想要调试linux下的比特币 ...
- SpringBoot系列之集成Dubbo的方式
SpringBoot系列之集成Dubbo的方式 本博客介绍Springboot框架集成Dubbo实现微服务的3种常用方式,对于Dubbo知识不是很熟悉的,请先学习我上一篇博客:SpringBoot系列 ...
- ArcEngine DEM叠加影像
代码执行前: 代码执行后: 影像叠加代码: /// <summary> /// 叠加DEM /// </summary> /// <param name="pR ...