电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
如何打造属于你的私人语音助手之MQTT开发
分 享
扫描二维码分享
如何打造属于你的私人语音助手之MQTT开发
树莓派
语音助手
MQTT
IAMLIUBO
关注
发布时间: 2020-04-07
丨
阅读: 4755
## 我是谁,谁又是我 Hi, 大家好,我是刘波,人在江湖行走的ID是:[IAMLIUBO](https://blogs.oopswow.com/)!受到电子芯吧客平台用户活跃度的感召,为了防止世界被破坏,为了保护世界的和平,于是我决定也要来电子芯吧客平台混个脸熟了(我不会承认我是为了稿费才来的!绝对不会!滑稽.gif)。 ## 前言 大家还记得我们前面的树莓派私人语音助手的几篇文章吗?之前年底比较忙,没能连续更新,然后又在家度过了一个漫长的假期,最近准备抽时间重新开始更新一下,本篇文章是我们将我们的私人语音助手打造成真正小助手的第一步,我们将会在树莓派上安装一个MQTT server,用来承载我们在局域网内设备间的交互,后面我们就可以通过语音利用MQTT来控制我们的其它设备了,我想你应该知道我在讲什么~ ## 准备 在本篇文章中,你需要准备以下内容: **硬件** * 树莓派(已经搭建好wukong的pi) * ESP8266(建议NodeMCU) **软件** * MQTT.fx(测试用,建议先下载安装,并学一下怎么用) 这就是学习本篇文章,你需要准备的所有的东西了,当然一个可以正常上网的条件也是必不可少的。 ## 安装MQTT server 可能有同学对MQTT不是很熟悉,建议大家可以先去google一下,或者可以看一下我写的这两篇篇文章,以便对MQTT有大致的认识,由于内容比较多,这里就不全贴过来了,大家可以点击下面链接去查看: [物联网标配MQTT初相识](https://zhuanlan.zhihu.com/p/55411234) [物联网标配MQTT服务端软件](https://zhuanlan.zhihu.com/p/56727359) ### Mosquitto简单了解 这是一款Eclipse 团队开发的超轻量级的软件,安装大小仅有几百KB,当然如此轻量级功能上是没有EMQX那么强大了,仅支持MQTT V3协议,不过做测试还是比较好用的,不用在自己的机器上起一个像EMQX那么大的服务,官网也没做太多的介绍,只有一个简短的介绍: >Eclipse Mosquitto is an open source (EPL/EDL licensed) message broker that implements the MQTT protocol versions 5.0, 3.1.1 and 3.1. Mosquitto is lightweight and is suitable for use on all devices from low power single board computers to full servers. >The MQTT protocol provides a lightweight method of carrying out messaging using a publish/subscribe model. This makes it suitable for Internet of Things messaging such as with low power sensors or mobile devices such as phones, embedded computers or microcontrollers. >The Mosquitto project also provides a C library for implementing MQTT clients, and the very popular mosquitto_pub and mosquitto_sub command line MQTT clients. 当然这不是唯一的选择,我们这里选择Mosquitto主要原因还是因为Mosquitto足够小巧,毕竟我们是在树莓派上跑着这个server的,所以像EMQTT这种比较专业的就有点吃力了。 ### 安装Mosquitto 安装也相对简单,大家依次执行以下命令就可以了。 ```bash wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key sudo apt-key add mosquitto-repo.gpg.key sudo wget http://repo.mosquitto.org/debian/mosquitto-buster.list sudo apt-get up<ickey>date sudo apt-get install mosquitto ``` 安装完成后,我们先来检查一下,是否正常运行,输入以下命令,并看到跟下面的图片一样,说明你已经成功安装并运行起来了: ```bash service mosquitto status ``` ![](https://cf02.ickimg.com/bbsimages/202004/be35e29f39b6e5a36034afe5d3384cd5.png) ### 安装mosquitto-clients 上面我们已经安装好了服务端,这里我们再顺便安装一下客户端,安装好后我们就可以测试一下能不能正常使用了,安装也很简单,直接输入下面命令就可以: ```bash sudo apt-get install mosquitto-clients ``` ![](https://cf02.ickimg.com/bbsimages/202004/d8f5c398c26fe88aaf2289fa695c9dea.png) 输入**Y**就可以完成安装了,下面我们来进行测试。 ## 测试 这里我们通过下面三种方式去测试,以帮助大家有更好的认识: * mosquitto-clients * MQTT.fx * ESP8266 第一种方式,我们是在树莓派上测试的,可以验证是否可以正常工作,然后第二种方式我们在Windows上通过MQTT软件进行测试,这里可以验证局域网通信是否正常,然后第三种方式是通过ESP8266去测试,可以验证我们后面就可以愉快的跟硬件交互了。 ### mosquitto-clients 这个测试相对简单,不过大家需要使用putty类似的软件再打开一个窗口,然后我们在**窗口1**和**窗口2**分别输入以下命令: **窗口1** ```bash mosquitto_sub -t "/icxbk/IAMLIUBO" -v ``` **窗口2** ```bash mosquitto_pub -t "/icxbk/IAMLIUBO" -m "Hello,icxbk!" ``` 如果你看到跟下图一样的效果,就说明没问题了! ![](https://cf02.ickimg.com/bbsimages/202004/49c19746139b328a59b11c56a37e0f09.png) 这里给大家简单说一下这几个参数的含义: * -t 这表示主题,后面跟着的参数就是我们发布消息的主题,如果你不太明白什么是主题,可以看上面我贴出的两篇文章链接的第一篇。 * -v 表示收到的消息内容是可见的,也就是通过控制台打印出来 * -m 表示实际发送的消息内容,这里的消息主题要与我们通过mosquitto_sub订阅的主题保持一致 ### MQTT.fx 我们再在Windows上通过MQTT.fx软件测试一下,首先你需要配置一下MQTT broken,依次点击**Extras**->**Edit Connection Profiles**->**右下角加号**,然后配置一下IP,如下图: ![](https://cf02.ickimg.com/bbsimages/202004/baa6cb0e8709931c331f1d315234b42f.png) 然后我们使用Pulish发送一条消息,如下图,但是不要忘记先点击Connect哦~ ![](https://cf02.ickimg.com/bbsimages/202004/278b1d50e3bc81ef279c9f443923b5a3.png) 如果你设置没问题的画,就可以在putty窗口1中看到我们发的消息了,大家如果有不会使用MQTT.fx软件的,建议大家可以先去学习一下。 ### ESP8266 使用ESP8266可能对部分没有接触过的同学显得稍微有点麻烦,这里我们使用Arduino来开发ESP8266,大家如果还没搭建好开发环境的话,可以参考我的下一篇文章,因为后面我们还会多次用到ESP8266,所以我会教大家如何用Arduino IDE来开发ESP8266,建议大家可以先去看一下文章,再回来这里继续。 下面直接贴上代码,代码也很简单,我们这里使用的是**EspMQTTClient**这个库,大家可以通过库管理器来进行安装。 ```c #include "EspMQTTClient.h" void onConnectionEstablished(); EspMQTTClient client( "XXXXXXXXXX", // Wifi 名称 "XXXXXXXXXX", // Wifi 密码 onConnectionEstablished, // MQTT connection established callback "XXX.XXX.XXX.XXX" // 树莓派IP ); void setup() { Serial.begin(115200); } void onConnectionEstablished() { // Subscribe to "mytopic/test" and display received message to Serial client.subscribe("/icxbk/IAMLIUBO", [](const String & payload) { Serial.println(payload); }); // Publish a message to "mytopic/test" client.publish("/icxbk/IAMLIUBO", "This is a message form ESP8266!"); } void loop() { client.loop(); } ``` 大家需要将代码中这一部分的内容替换为你自己的: ```c EspMQTTClient client( "XXXXXXXXXX", // Wifi 名称 "XXXXXXXXXX", // Wifi 密码 onConnectionEstablished, // MQTT connection established callback "XXX.XXX.XXX.XXX" // 树莓派IP ); ``` 编辑好后,就可以编译下载了,下载成功后你会在putty窗口1中看到我们发的消息了,如下图: ![](https://cf02.ickimg.com/bbsimages/202004/7c5992f619631c4c5e4a6ae5f2942061.png) ## 后记 本篇文章是我们后面继续开发我们的私人语音助手的基础,请大家一定要仔细做,可能会有部分代码由markdown格式渲染成html会出现乱码,如果有不能正常执行的代码可以在评论区留言。
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
2
)
IAMLIUBO
擅长:工控电子 能源电源 光电显示 设计,制造及服务 智能硬件
关注
评论
(3)
登录后可评论,请
登录
或
注册
┌|◎o◎|┘
342
天前...
C:\Users\Administrator\Documents\Arduino\libraries\EspMQTTClient\src/EspMQTTClient.h:4:26: fatal error: PubSubClient.h: No such file or directory esp8266烧录的时候显示如上错误,我去网上也没找到答案可以帮忙解决吗,感谢
0
回复
发布
┌|◎o◎|┘
回复
┌|◎o◎|┘
342
天前...
已解决
0
回复
发布
yinxx
194
天前...
可以参考实现实现,不过我现在没有卡,要等我申请下来看看
0
回复
发布
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交