树莓派实验室按:这是来自 hyhmnn 的投稿。是时候关掉你的手机闹铃了,用树莓派外接一个音箱就可以 Make 一款科技感和实用性兼备的“AI 闹钟”。这里用到了 Linux 的计划任务、百度语音 API、天气 API。
不看天气的死宅(不爱带包),出门遇到下雨天就尴尬了,在学校还好可以蹭伞,到外面就不行了。
一开始的解决办法就是将爬到的天气信息发到微信上GETWeaInfo
结果有个很大的问题就是,网络要是断了,或者程序不运行了,就要重新载终端上扫二维码登录(太麻烦了)。
于是乎~就有了下面的想法——用树莓派做个天气闹钟。下面开始了!
前提:树莓派安装系统(我装的是最小化的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命令有’`’这个符合不要忘记加上
手机扫一扫
移动阅读更方便
你可能感兴趣的文章