
树莓派实验室按:这是来自 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 updatesudo 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/python3makesudo make installecho $?#如果是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 virtualenvmkdir naozhongcd naozhongvirtualenv - 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 requestspip install beautifulsoup4pip 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-aippip install rpi.gpio#遇到问题error:command 'arm-linux-gnueabihf-gcc' failed with exit status 1sudo apt-get install python3-devsudo 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 GPIOimport time#init GPIOGPIO.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 AipSpeechimport requestsimport refrom bs4 import BeautifulSoupimport 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.py45 7 * * * /home/pi/naozhong/naoz/bin/python3 /home/pi/naozhong/wulala.py > /home/pi/naozhong/wulala.log 2>&150,53,55 7 * * * `mplayer /home/pi/naozhong/tmp.mp3` | 
前面的python3,就是virtualenv下的python
后面的文件也需要使用绝对路径
mpalyer命令有’`’这个符合不要忘记加上

能录个视频,看看效果吗?
效果就是灯闪亮+音响有声音,实在想要看加我qq2827340173,我录好发你。
怎么运行呀,具体实现效果是什么呀
运行后出现错误,貌似是溢出,怎么解决?广州的天气…
“`
Traceback (most recent call last):
File “wx.py”, line 74, in
main()
File “wx.py”, line 71, in main
stringToMp3(makeSoup(html))
File “wx.py”, line 25, in makeSoup
soup1 = soup.find_all(‘li’,attrs = {‘class’:’on’})[1]
IndexError: list index out of range
“`
https://github.com/Andy-jg/ReadWeathen 我升级了,不用那么 麻烦。
怎么设定时间
sudo apt-get install maplayer2
sudo apt-get install mplayer
上面一句写错了。误导了我
@王 写错了不好意思啦,哈哈哈
@JJ 也是刚刚学着写python,写的不好,见谅了.
@CYF 爬的网页结构可能不一样,你可能根据所爬的网页需要自行更改的
mplayer 播放音频有很严重的卡顿,不知大伙有没有这个情况,本地和在线地址都试过了,卡的有点难以接受
我没有声音,但是我在页面里面设置了,求解,急
怎么运行,具体实现效果是什么
很急,大佬帮帮忙