Crontab 简单实现树莓派语音闹钟
阅读原文时间:2023年07月11日阅读:1

树莓派实验室按:这是来自 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命令有’`’这个符合不要忘记加上

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章