基于树莓派的智能闹钟

简介

女友牛牛的树莓派智能闹钟经验之谈!牛牛的第一篇技术文,我放这里辣!

Some Tricks

  • 1.在做智能闹钟时,pip install pygame遇见问题Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-buil,加个sudo就好了,干!
  • 2.

1563017258543

在python中出现该问题是因为文件格式编码出现了问题,解决方法如下:

*在文件头追加: # -- coding: cp936 -- 或者 # -- coding: utf-8 -*这几段编码,

同时建议编码时尽量少用中文表达,这不仅有利于减少代码编译错误,也能培养好的代码编写思维

  • 3.报错ImportError: No module named request

引用了import urllib.request

网上说python2没有这个模块,python3才有,想到是不是没有指明用python3运行(树莓派里2和3都有,于是又百度,说要在文件最开头(最开头!!!)加上

1
#!/usr/bin/python3

还有运行时可以直接选择python版本

1
python3   xxx.py
  • 4.sublime text安装模块时:可用anaconda命令行pip install进行安装
  • 5.天气:注册心知天气,提供api(在url中的网址就是接口)

https://www.seniverse.com/products?iid=new

1563032503896

  • 6.百度语音技术注册

注意这其中要用到百度技术

1563032400681

1563032295371

要自己注册获得这三个内容,填进去,才能调用

  • 7.设置树莓派使用蓝牙输出声音

扬声器图标右击,选择要连接的蓝牙设备即可

  • 8.定时播放

crontab -e来编辑cron

1563032723242

1563032754758

1563032768332

代码:

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
import time
import random
import os
import pygame
import urllib.request
import json
from aip import AipSpeech

"""
树莓派打造智能闹钟
pip3 install pygame
pip3 install baidu-aip
"""


# 获取天气
def get_weather():
# location是所处的位置
url = 'https://api.seniverse.com/v3/weather/now.json?key=SXZLwbem1FgKO_iDJ&location=qingdao&language=zh-Hans&unit=c'
obj = urllib.request.urlopen(url)
data_b = obj.read()#将读取的文件放在一个字符串变量中
data_s = data_b.decode('utf-8')
data_dict = json.loads(data_s)#将json格式数据转换为字典
#大括号是字典,中括号是列表
data_list = data_dict['results']
info_list = data_list[0]
rt = info_list['now']
print(rt)
weather = '亲爱的:该起床了,别睡了,快变小猪了,青岛的温度是 {} ,天气 {}'
weather = weather.format(rt['temperature'], rt['text'])
if '雨' in weather:
weather += '今天别忘记带雨伞哦!'
du_say(weather)


# 文字转语音
def du_say(weather):
app_id = '16799759'
api_key = 'cmOGOmvN4uM2N2RpHVBkZLm6'
secret_key = 'hAKMiiaZvu7T0COSfH2NNIU25l63XN3N'
client = AipSpeech(app_id, api_key, secret_key)
# per 3是汉子 4是妹子,spd 是语速,vol 是音量
result = client.synthesis(weather, 'zh', 1, {
'vol': 5, 'per': 3, 'spd': 4
})
# 识别正确返回语音二进制 错误则返回dict 参照下面错误码
if not isinstance(result, dict):
with open('weather.mp3', 'wb') as f:
f.write(result)
py_game_player('weather.mp3')


# 播放天气和音乐
def py_game_player(file):
pygame.mixer.init()
print("播报天气")
pygame.mixer.music.load(file)
pygame.mixer.music.play(loops=1, start=0.0)
print("播放音乐")
while True:
if pygame.mixer.music.get_busy() == 0:
# Linux 配置定时任务要设置绝对路径
mp3 = "C:\CloudMusic\Imad Royal - Queen of France.mp3"
# mp3 = str(random.randint(1, 6)) + ".mp3"
pygame.mixer.music.load(mp3)
pygame.mixer.music.play(loops=1, start=0.0)
break
while True:
if pygame.mixer.music.get_busy() == 0:
print("播报完毕,起床啦")
break

get_weather()

Reference

参考