Crontab 简单实现树莓派语音闹钟
树莓派实验室按:这是来自 hyhmnn 的投稿。是时候关掉你的手机闹铃了,用树莓派外接一个音箱就可以 Make 一款科技感和实用性兼备的“AI 闹钟”。这里用到了 Linux 的计划任务、百度语音 API、天气 API。
不看天气的死宅(不爱带包),出门遇到下雨天就尴尬了,在学校还好可以蹭伞,到外面就不行了。
一开始的解决办法就是将爬到的天气信息发到微信上GETWeaInfo
结果有个很大的问题就是,网络要是断了,或者程序不运行了,就要重新载终端上扫二维码登录(太麻烦了)。
于是乎~就有了下面的想法——用树莓派做个天气闹钟。下面开始了!
播放mp3
前提:树莓派安装系统(我装的是最小化的Raspbian jessie)),ssh连接,wifi连接How to set up WiFi..网上都有…音响(基本都可以,没有就用耳机先代替),LED。
1
2
3
4
5
6
|
sudo apt-get update sudo apt-get install maplayer2 #更新源 #安装mplayer(用他来播放MP3) mplayer xxx.mp3 #测试一下 |
如果有声ok,没有参考林佳楠的博客
配置运行环境
前提:用的python3
安装python3
1
2
3
4
5
6
7
8
9
10
11
12
13
|
sudo apt-get install build-essential libsqlite3-dev sqlite3 bzip2 libbz2-dev libssl-dev openssl libgdbm-dev liblzma-dev libreadline-dev libncursesw5-dev #安装依赖包 wget https: //www .python.org /ftp/python/3 .6.1 /Python-3 .6.1.tgz #下载源码包,你也可以换其他的 tar zxf Python-3.6.1.tgz #解压 cd Python-3.6.1/ . /configure --prefix= /usr/loacl/python3 make sudo make install echo $? #如果是0就是正确的,非零仔细看报错信息去百度google(我没有遇到,不好解答) sudo ln -s /usr/local/python3/bin/python3 /usr/bin/python3 |
安装virtualenv
1
2
3
4
5
6
7
8
|
sudo pip install virtualenv mkdir naozhong cd naozhong virtualenv - p /usr/bin/python3 naoz #/usr/bin/python3 是你安装python3可执行路径(不知道就运行$ which pytho3), source naoz /bin/activate #前面会出现(dirname) #deactivate (退出) |
virtulaenv的作用&&详细使用
安装需要用到的库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
pip install requests pip install beautifulsoup4 pip install baidu-aip #安装失败,因为依赖的库pillow安装失败 #那就装一些pillow的依赖包 sudo apt-get install libtiff5-dev libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python-tk #我试下来需要一个一个安装, #能安装就安装,不能的就跳过。 #再次 pip install pillow&&pip install baidu-aip pip install rpi.gpio #遇到问题error:command 'arm-linux-gnueabihf-gcc' failed with exit status 1 sudo apt-get install python3-dev sudo apt-get install libevent-dev #再次pip install rpi.gpio |
代码
灯闪亮
1
|
vim LEDShining.py |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# -*- coding: utf-8 -*- import RPi.GPIO as GPIO import time #init GPIO GPIO.setmode(GPIO.BOARD) GPIO.setup( 11 , GPIO.OUT) def LED_shining(): try : GPIO.output( 11 , 1 ) time.sleep( 0.5 ) GPIO.output( 11 , 0 ) time.sleep( 0.5 ) except : print ('') def main(): for tmp_a in range ( 60 ): LED_shining() GPIO.cleanup() if __name__ = = '__main__' : main() |
led正极接在11引脚上,负极我放在GND
获取天气并用百度语音转mp3文件
1
|
vim wulala.py |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
# -*- coding: utf-8 -*- from aip import AipSpeech import requests import re from bs4 import BeautifulSoup import time ''' 爬取天气网-无锡 http://www.weather.com.cn/weather/101190201.shtml ''' def getHtmlText(url,code = 'utf-8' ): try : r = requests.get(url) r.raise_for_status() r.encoding = code return r.text except : return '' def makeSoup(html): wstr = '' if html = = '': return '哎呀~今天我也不知道无锡天气了' else : soup = BeautifulSoup(html, 'html.parser' ) soup1 = soup.find_all( 'li' ,attrs = { 'class' : 'on' })[ 1 ] str1 = re.findall(r '>(.*)</' , str (soup1)) b = '' try : slist = re.findall(r '^(.*)</span>(.*)<i>(.*)$' ,str1[ 4 ]) for x in range ( len (slist[ 0 ])): b + = slist[ 0 ][x] except : b = str1[ 4 ] if '/' in b: b = b.replace( '/' , '-' ) str1[ 4 ] = '无锡的温度是' + b #print(str1[4]) str1[ 6 ] = '小风风是' + str1[ 6 ] for i in str1: if i ! = '': wstr = wstr + i if '雨' in wstr: wstr + = '今天别忘记带雨伞哦!' #print(wstr) return wstr ''' 用百度的AIP 把文字变成mp3文件 ''' def stringToMp3(strings_txt): strings_txt = '起床呀~懒虫~起床啊~死肥宅~起床啦~要上班啦!今天是' + strings_txt APPID = '9***3**8' APIKey = 'QC*****UK*****nP***b' SecretKey = 'e8***6******25*****56' aipSpeech = AipSpeech(APPID,APIKey,SecretKey) result = aipSpeech.synthesis(strings_txt, 'zh' , '1' ,\ { 'vol' : 8 , 'per' : 4 , 'spd' : 5 }) if not isinstance (result, dict ): with open ( 'test_tmp.mp3' , 'wb' ) as f: f.write(result) ''' 执行的主函数 ''' def main(): url = 'http://www.weather.com.cn/weather/101190201.shtml' html = getHtmlText(url) stringToMp3(makeSoup(html)) if __name__ = = '__main__' : main() |
去创建新应用,看开发文档,查看key,复制进去,就可以使用百度语音api了。
百度语音合成-开发文档
天气网选择你的城市,把main函数下的url改了,如果html结构都是一样的,那就都可以执行,如果不一样需要更改makeSoup函数了。
最后设置定时运行
首先看时区(中国的是CST)、时间对不对
1
|
date |
时区不对:
1
2
|
sudo dpkg-reconfigure tzdata #选择亚洲-上海就可以了 |
时间不对:
1
|
sudo ntpd -s -d |
定时
1
|
crontab -e |
第一次运行需要指定您的编辑器(随意选)
在最后添加
1
2
3
|
50,53,55 7 * * * /home/pi/naozhong/naoz/bin/python3 /home/pi/naozhong/LEDShining.py 45 7 * * * /home/pi/naozhong/naoz/bin/python3 /home/pi/naozhong/wulala.py > /home/pi/naozhong/wulala.log 2>&1 50,53,55 7 * * * `mplayer /home/pi/naozhong/tmp.mp3` |
前面的python3,就是virtualenv下的python
后面的文件也需要使用绝对路径
mpalyer命令有’`’这个符合不要忘记加上
Crontab 简单实现树莓派语音闹钟的更多相关文章
- crontab简单使用手册
Linux定时任务(1)- crontab 枫林风雨关注 0.1682018.12.14 12:29:47字数 946阅读 921 执行定时任务 crontab 执行循环任务 at 执行一次性任务 c ...
- 离线语音Snowboy热词唤醒+ 树莓派语音交互实现开关灯
离线语音Snowboy热词唤醒 语音识别现在有非常广泛的应用场景,如手机的语音助手,智能音响(小爱,叮咚,天猫精灵...)等. 语音识别一般包含三个阶段:热词唤醒,语音录入,识别和逻辑控制阶段. 热词 ...
- 使用百度ai接口加图灵机器人完成简单web版语音对话
app文件 from flask import Flask, request, render_template, jsonify, send_file from uuid import uuid4 i ...
- linux 计划任务 crontab 简单用法
添加计划任务: 方法1: crontab -e 方法2: vim /etc/crontab #这种方式进去的文件有个sample可供参考 查看已经启动的任务:crontab -l 查看运行状态:ser ...
- jmeter+nmon+crontab简单的执行接口定时压测
一.概述 临时接到任务要对系统的接口进行压测,上面的要求就是:压测,并发2000 在不熟悉系统的情况下,按目前的需求,需要做的步骤: 需要有接口脚本 需要能监控系统性能 需要能定时执行脚本 二.观察 ...
- 简单的树莓派4b装64位系统+docker和docker-compose
起因是这样的,我系统崩了 事先准备 wifi或网线 树莓派和电源 内存卡和读卡器 首先是装系统 去https://downloads.raspberrypi.org/raspios_arm64/ima ...
- 树莓派autossh反向隧道
本来我是将树莓派连接到路由器,从而在电脑端通过IP访问.远在局域网之外的队友怎么访问呢? ssh反向隧道 它的原理比较简单: 树莓派主动向某公网服务器建立ssh连接,并请求公网服务器开启一个额外的SS ...
- 用树莓派USB摄像头做个监控
[前言] 看着阴暗的角落里吃灰噎到嗓子眼的树莓派,一起陪伴的时光历历在目,往事逐渐涌上心头,每每触及此处,内心总会升腾起阵阵怜悯之情... 我这有两个设备,一个是积灰已久的树莓派,另一个是积灰已久的U ...
- 记一个有想法却没能力实现的硬件产品——mp3校时闹钟
枕头旁的闹钟,我想大家都用过,很便宜.用一节干电池供电.但其最大的缺点就是不太准,不能校时. 电池啥事用光,也不知道.钟是走的很慢,没按时闹,搞的自己迟了到. 于是就有了我的漫长思考过程... 先说手 ...
随机推荐
- postman接口测试之复制多个接口或collections到某个子文件夹或collections下
一.痛点 1.postman只支持复制一个请求,或者一个子文件夹,但是不支持复制多个请求,或者整个collections到某个子文件夹或者某个collections下. 2.网上查了好一会儿,没有一个 ...
- IP2188中文资料书
IP2188 是一款集成 12 种.用于 USB 输出端口的快充协议 IC,支持 USB 端口充电协议.支持 11种快充协议,包括 USB TypeC PD2.0/PD3.0/PPS DFP,HVDC ...
- Azure Terraform(六)Common Module
一,引言 之前我们在使用 Terraform 构筑一下 Azure 云资源的时候,直接将所以需要创建的资源全面写在 main.tf 这个文件中,这样写主要是为了演示使用,但是在实际的 Terrafor ...
- ES入门及安装软件
es介绍 Elasticsearch,简称es,是一款高扩展的分布式全文检索引擎.它可以近乎实时的存储,检索数据.es是面向文档型的数据库,一条数据就是一个文档,用json做为文档序列化的格式.es是 ...
- 一键测试VPS到国内速度脚本 SuperBench.sh,以及一键验收云主机脚本
我们买国外VPS服务器测试网络通常会用到speedtest,speedtest默认是测试到最近的节点,那么到国内速度如何呢?虽然可以指定服务器编号,但是一个个测试还是比较麻烦的,这里推荐一个脚本整合了 ...
- Docker的Ubuntu镜像安装的容器无ifconfig命令和ping命令
就这三步骤,下面的是实例不看也罢. apt-get update ###第一步一定要先执行这个更新下.不更新下面的安装命令会显示找不到网络包 //ifconfig apt install net-to ...
- Docker 中的网络功能介绍 外部访问容器 容器互联 配置 DNS
Docker 中的网络功能介绍 | Docker 从入门到实践 https://vuepress.mirror.docker-practice.com/network/ Docker 允许通过外部访问 ...
- .Vue-router跳转和location.href有什么区别
使用location.href='/url'来跳转,简单方便,但是刷新了页面:使用history.pushState('/url'),无刷新页面,静态跳转:引进router,然后使用router.pu ...
- 关于ckfinder上传文件时不能根据结果返回自定义操作问题?
最近项目中为了便于文件的管理,所以CMS项目中使用到了ckfinder插件,但是在使用的过程中,发现其自带的上传事件,如果上传重名的文件,该工具会自动提示错误,显示上传失败.但是如果想要自己去处理重名 ...
- 函数式编程(hashlib模块)
hashlib模块 一.hashlib模块 hashlib模块,主要用于加密相关的操作,在python3的版本里,代替了md5和sha模块,主要提供 SHA1, SHA224, SHA256, S ...