人生苦短,我用Python~ 

一直想自己折腾些极客的东西出来,供自己使用或者是供他人使用。一则可能对自己的生活是一种帮助,二则是对自己技能的提高,三则显得高大上,一直努力,一直提高,一直Happy!~

直到,在京东白条了一个树莓派3,我知道,有一段兴奋的苦旅要开始了...

【前言】

本文拟使用Python开发一个智能时钟,并且将智能时钟部署在 树莓派3 微机上,7*24小时开机,以达到实时监控时钟并在适当的时侯作出响应的目的。其实是每天早上邪恶的提示语,加一段提示音乐。每天中午吵醒午睡的闹钟,房东在没人的时候进屋能吓他一跳...zzzhhh

【实现功能】

这篇文章将要介绍的主要内容如下:

1、早上闹钟,天气预报,音乐提醒

2、整点报时,半点报时

【实现思路】

1、python对天气网站信息的web爬虫爬取

2、通过分析爬取的数据,并拼接需要语音播报的文本

3、调用百度的语音合成api进行语音文本转化成mp3

4、使用python脚本将mp3下载到本地

5、设置计划任务,每分钟检测一下当前时间是否满足条件

6、早上闹钟+天气预报+音乐,整点报时,半点响音

【开发及部署环境】

开发环境:Windows 7 ×64 英文版

     JetBrains PyCharm 2017.1.3 x64

部署环境:Raspberry Pi 3 Ubuntu OS

【所需技术】

1、Python语言的熟练掌握,Python版本2.7

2、利用Python语言,实现web爬虫,网络爬虫的理解

3、正则表达式的简单使用

4、BeautifulSoup html解析库的使用

5、linux常用命令的熟练掌握

【实现过程】

首先附上程序结构:

万码学堂,电脑培训,计算机培训,Java培训,JavaEE开发培训,青岛软件培训,软件工程师培训

我们这次写的py文件是 main_SmartClock.py ,然后还有个配置文件 qx_shs.ini、配置文件全局读取 ConfigField.py ,GetWeatherText.py 爬取墨迹天气的py脚本,TextToAudio.py 将文本转化成语音的脚本。我们可能主要用到这几个py文件。

1、首先是配置ini 配置文件

万码学堂,电脑培训,计算机培训,Java培训,JavaEE开发培训,青岛软件培训,软件工程师培训

 1 [System] 2 OWNER = 东爷 ;语音播报的名字 3  4 [ClockTime] 5 CLOCK_MORNING_AWAKE = 7:16 6 CLOCK_MORNING_GO = 8:30 7 CLOCK_NOON = 13:30 8 CLOCK_AFTERNOON = 19:00 9 CLOCK_EVENING = 23:0010 11 [CameraRecognition]12 IMAGE_SIMILARITY = 0.85       ;视屏监控图片匹配相似度13 SAMPLE_IMAGES_NAME = 东爷     ;图片样本名称14 15 [Text]16 ATTACK_ALERT_TEXT = Some People Attack17 ALERT_TXT_MORNING = 早上好,美好的一天开始啦18 ALERT_TXT_NOON = 中午好,小憩一下,睡个午觉,美美哒19 ALERT_TXT_AFTERNOON = 下午好,夕阳无限好,只是近黄昏啊20 ALERT_TXT_NIGHT = 晚上好,夜深了,早点休息吧,记得睡前喝牛奶哦21 ALERT_TXT_OFF_WORK = 您下班啦,工作一天累了吧,休息一下吧22 ALERT_TXT_HELLO = '您好'23 24 25 [Path]26 MP3_ALERT = soundFiles/alert.mp327 MP3_START = soundFiles/start.mp328 MP3_NORMAL = soundFiles/chengdu.mp329 MP3_WEATHER = soundFiles/weatherGreeting.mp330 MP3_MORNING_AWAKE = soundFiles/piaoyangguohailaikanni.mp331 MP3_MORNING_GO = soundFiles/chengdu.mp332 MP3_NOON = soundFiles/shiguangzhenghao.mp333 MP3_AFTERNOON = soundFiles/wenwendexinfu.mp334 MP3_EVENING = soundFiles/guqin.mp335 MP3_HALF_HOUR = soundFiles/short2.mp336 MP3_HOUR = soundFiles/short3.mp337 MP3_BACKGROUND = soundFiles/background2.mp338 39 CLASSIFIER_PATH = Resources/haarcascade_frontalface_default.xml40 SAMPLE_IMAGES_SAVE_PATH = sampleImages/41 CAMERA_MONITORING_FILES_PATH = cameraMonitoringFiles/

万码学堂,电脑培训,计算机培训,Java培训,JavaEE开发培训,青岛软件培训,软件工程师培训

2、然后是对配置文件的读取,并设置到全局变量,因为我好几个主要py文件都要调用这几个全局变量,所以我就直接设置在全局了,避免重复获取ini文件

万码学堂,电脑培训,计算机培训,Java培训,JavaEE开发培训,青岛软件培训,软件工程师培训

 1 # coding=utf-8 2 import ConfigParser 3  4 # 树莓派的ubuntu系统里面如果要使用计划任务,则必须写成绝对路径,意味着这里需要加前缀 5 # RASPBERRY_PI_PATH_ROOT = '/root/C/' 6 # RASPBERRY_PI_PATH_PROJECT = 'QX_SHS/' 7  8 # Windows调试不需要加绝对路径 9 RASPBERRY_PI_PATH_ROOT = ''10 RASPBERRY_PI_PATH_PROJECT = ''11 12 RASPBERRY_PI_PATH_PLUS = RASPBERRY_PI_PATH_ROOT + RASPBERRY_PI_PATH_PROJECT13 14 HEADERS = {15     'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit'16                   '/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safar'17                   'i/537.36',18 }19 20 # get configuration21 config = ConfigParser.ConfigParser()22 config.readfp(open(RASPBERRY_PI_PATH_PLUS + 'qx_shs.ini'))23 24 # 获取System25 OWNER = config.get('System', 'OWNER')26 27 # 获取Text28 ATTACK_ALERT_TEXT = config.get('Text', 'ATTACK_ALERT_TEXT')29 ALERT_TXT_MORNING = config.get('Text', 'ALERT_TXT_MORNING')30 ALERT_TXT_NOON = config.get('Text', 'ALERT_TXT_NOON')31 ALERT_TXT_AFTERNOON = config.get('Text', 'ALERT_TXT_AFTERNOON')32 ALERT_TXT_NIGHT = config.get('Text', 'ALERT_TXT_NIGHT')33 ALERT_TXT_OFF_WORK = config.get('Text', 'ALERT_TXT_OFF_WORK')34 ALERT_TXT_HELLO = config.get('Text', 'ALERT_TXT_HELLO')35 36 # 获取闹钟时间参数37 CLOCK_MORNING_AWAKE = config.get('ClockTime', 'CLOCK_MORNING_AWAKE')38 CLOCK_MORNING_GO = config.get('ClockTime', 'CLOCK_MORNING_GO')39 CLOCK_NOON = config.get('ClockTime', 'CLOCK_NOON')40 CLOCK_AFTERNOON = config.get('ClockTime', 'CLOCK_AFTERNOON')41 CLOCK_EVENING = config.get('ClockTime', 'CLOCK_EVENING')42 43 # 获取CameraRecognition参数44 IMAGE_SIMILARITY = config.get('CameraRecognition', 'IMAGE_SIMILARITY')45 SAMPLE_IMAGES_NAME = config.get('CameraRecognition', 'SAMPLE_IMAGES_NAME')46 47 # 获取路径48 MP3_ALERT = RASPBERRY_PI_PATH_PLUS + config.get('Path', 'MP3_ALERT')49 MP3_START = RASPBERRY_PI_PATH_PLUS + config.get('Path', 'MP3_START')50 MP3_NORMAL = RASPBERRY_PI_PATH_PLUS + config.get('Path', 'MP3_NORMAL')51 MP3_WEATHER = RASPBERRY_PI_PATH_PLUS + config.get('Path', 'MP3_WEATHER')52 MP3_MORNING_AWAKE = RASPBERRY_PI_PATH_PLUS + config.get('Path', 'MP3_MORNING_AWAKE')53 MP3_MORNING_GO = RASPBERRY_PI_PATH_PLUS + config.get('Path', 'MP3_MORNING_GO')54 MP3_NOON = RASPBERRY_PI_PATH_PLUS + config.get('Path', 'MP3_NOON')55 MP3_AFTERNOON = RASPBERRY_PI_PATH_PLUS + config.get('Path', 'MP3_AFTERNOON')56 MP3_EVENING = RASPBERRY_PI_PATH_PLUS + config.get('Path', 'MP3_EVENING')57 MP3_HALF_HOUR = RASPBERRY_PI_PATH_PLUS + config.get('Path', 'MP3_HALF_HOUR')58 MP3_HOUR = RASPBERRY_PI_PATH_PLUS + config.get('Path', 'MP3_HOUR')59 MP3_BACKGROUND = RASPBERRY_PI_PATH_PLUS + config.get('Path', 'MP3_BACKGROUND')60 61 CLASSIFIER_PATH = RASPBERRY_PI_PATH_PLUS + config.get('Path', 'CLASSIFIER_PATH')62 SAMPLE_IMAGES_SAVE_PATH = RASPBERRY_PI_PATH_PLUS + config.get('Path', 'SAMPLE_IMAGES_SAVE_PATH')63 CAMERA_MONITORING_FILES_PATH = RASPBERRY_PI_PATH_PLUS + config.get('Path', 'CAMERA_MONITORING_FILES_PATH')

万码学堂,电脑培训,计算机培训,Java培训,JavaEE开发培训,青岛软件培训,软件工程师培训

3、使用requests库进行对墨迹天气网站信息的爬取http://tianqi.moji.com/,网络爬虫的代码我就不进行介绍了,代码里面也有详细的注释,要注意对其他文件的调用,包导入。

万码学堂,电脑培训,计算机培训,Java培训,JavaEE开发培训,青岛软件培训,软件工程师培训

  1 # coding=utf-8  2   3 # RASPBERRY_PI_PATH_ROOT 执行Ubuntu计划任务必须声明绝对路径  4 RASPBERRY_PI_PATH_ROOT = '/root/C/'  5   6 import sys  7   8 sys.path.append(RASPBERRY_PI_PATH_ROOT)  9 import re 10 import requests 11 from bs4 import BeautifulSoup 12 from datetime import datetime 13 from Helper_DG.DateTimeHelper_DG import * 14 from QX_SHS.ConfigField import * 15  16 reload(sys) 17 sys.setdefaultencoding('utf8') 18  19  20 def numtozh(num): 21     num_dict = {1: '一', 2: '二', 3: '三', 4: '四', 5: '五', 6: '六', 7: '七', 22                 8: '八', 9: '九', 0: '零'} 23     num = int(num) 24     if 100 <= num < 1000: 25         b_num = num // 100 26         s_num = (num - b_num * 100) // 10 27         g_num = (num - b_num * 100) % 10 28         if g_num == 0 and s_num == 0: 29             num = '%s百' % (num_dict[b_num]) 30         elif s_num == 0: 31             num = '%s百%s%s' % (num_dict[b_num], num_dict.get(s_num, ''), num_dict.get(g_num, '')) 32         elif g_num == 0: 33             num = '%s百%s十' % (num_dict[b_num], num_dict.get(s_num, '')) 34         else: 35             num = '%s百%s十%s' % (num_dict[b_num], num_dict.get(s_num, ''), num_dict.get(g_num, '')) 36     elif 10 <= num < 100: 37         s_num = num // 10 38         g_num = (num - s_num * 10) % 10 39         if g_num == 0: 40             g_num = '' 41         num = '%s十%s' % (num_dict[s_num], num_dict.get(g_num, '')) 42     elif 0 <= num < 10: 43         g_num = num 44         num = '%s' % (num_dict[g_num]) 45     elif -10 < num < 0: 46         g_num = -num 47         num = '零下%s' % (num_dict[g_num]) 48     elif -100 < num <= -10: 49         num = -num 50         s_num = num // 10 51         g_num = (num - s_num * 10) % 10 52         if g_num == 0: 53             g_num = '' 54         num = '零下%s十%s' % (num_dict[s_num], num_dict.get(g_num, '')) 55

QiXiao_柒小(東)
Microsoft ARD Technical Support
QX(qixiao)Team
天津市西青經濟開發區 Xiqing Economic Development Area Tianjin 300387,P.R.China
郵箱Email : dong@qixiao.me , wd8622088@foxmail.com
網址Http: http://qixiao.me

http://www.cnblogs.com/qixiaoyizhan/p/7128075.html