没错,这是智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. 洛谷$ P$4317 花神的数论题 数位$dp$

    正解:数位$dp$ 解题报告: 传送门! 开始看到感觉有些新奇鸭,仔细一想发现还是个板子鸭,,, 考虑设$f_{i}$表示$sum[j]=i$的$j$的个数 日常考虑$dfs$呗,考虑变量要设哪些$Q ...

  2. $CH$ $0x50$ & $0x51$ 做题记录

    [X]$Mr.Young's\ Picture\ Permutations$ 前面这儿写了挺多道辣,,,懒得写辣$QAQ$ (后面所有同上都是同这个$QwQ$ [X]$LCIS$ 做过了,看这儿 $u ...

  3. $Poj1821\ Fence\ $单调队列优化$DP$

    Poj   Acwing Description 有N块木板等待被M个工匠粉刷,每块木板至多被刷一次.第i个工匠要么不粉刷,要么粉刷包含木块Si的,长度不超过Li的连续的一段木板,每粉刷一块可以得到P ...

  4. 预告:Windows 7 + Tiny Linux 4.19 + XFS + Vmware Workstation 15 (PRO)下篇dockerの奥义

    困 困 等明天再写吧 主题将围绕在Vmware使用持久化XFS disk后machine rm default后不丢失images containers volumes etc.的奇观 并将展开部署c ...

  5. 注解@ConfigurationProperties使用方法

    注解@ConfigurationProperties使用方法 前言 最近在思考使用java config的方式进行配置,java config是指基于java配置的spring.传统的Spring一般 ...

  6. docker+mysql 更改配置后重启不了的解决方案

    docker+mysql 更改配置后重启不了的解决方案 前提:在最近的项目中,决定将项目改造成数据库读写分离的架构,于是擅自更改生产环境的数据库的配置文件my.cnf,由于我是用docker进行部署的 ...

  7. C++ | C++ 基础知识 | 指针、数组与引用

    1.指针 在 C++ 语言中存放及使用内存地址是通过指针和引用完成的. char c = 'a'; // 声明 c 变量,c 变量存储的是 'a' 的值. char* p = &c; // 声 ...

  8. Sql Server学习笔记

    1.指定路径创建数据库 create database student on--创建库的时候必须写 ( name=student, filename='E:\database\student.mdf' ...

  9. ATOM插件及快捷键

    xml-formatter :https://atom.io/packages/xml-formatter xml格式化工具 SHIFT-CTRL-X:快速格式化 SHIFT-CTRL-M:移除换行符 ...

  10. python循环语句(while和for)

    循环语句分成两种,while循环 和 for循环 作用:可以使指定的代码块重复指定的次数 while循环: # 语法: # while 条件表达式 : # 代码块 # else : # 代码块 # 执 ...