最好的电子音响科技diy制作网站

haoDIY_音响电子电脑科技DIY小制作发明

twitterpi运动警报发送图片到推特从推特发送命令到PI

时间:2017-05-24 21:01来源:未知 作者:admin 点击:
如果没有保存的用户,那么程序将假定只有超级用户有权要求图片 尝试: pathtofile = workDir +/授权。txt授权= [] 开放(pathtofile)文件:线文件:线=线。strip() 授权。追加(线)文件。()除了IOError: 步骤2
twitterpi运动警报发送图片到推特从推特发送命令到PI

所以,我有一个新的Raspberry Pi的3,一个新的Raspberry Pi的相机模块和推特帐户。我们怎么建立呢?关于Raspberry Pi会搜索出一个特定的标签,当它发现它发出的鸣叫和hashtag鸣叫的鼻祖。现在的建筑上,我们希望能够发送一个命令,PI将进行读取时。哦,我刚刚发现我的工具箱PIR传感器。我们还可以用这个皮作为一个安全监控以及。

用于切割和脚本的糊版,请看下面的地址。
https://alaskaraspi.files.wordpress.com/2017/03/twitterpi1.pdf

步骤1:要求和购物清单

让我们跑下来的要求:

只有特定的用户可以请求一个图片
有限的用户可以发送命令到PI
PI需要运行无头
检查新标签的鸣叫
安全监控必须从主程序的一个单独的线程
系统必须记住授权用户以及最后的鸣叫了
相机需要能够翻转通过鸣叫命令


购物清单:

Raspberry Pi(我用的是PI 3,但我认为任何互联网连接的PI工作)
最新的Raspbian图像标准8G SD卡
电源线
Raspberry Pi的相机模块
网络连接WiFi或CAT5连接到互联网
热释电红外传感器的“被动”(PIR)
LED与电阻
5个GPIO连接线

步骤2:设置你的推特API和数据采集

现在,在我们开始这一切,我们需要有一个推特API设置。我决定建立一个独立的推特解释听我选择的标签以及要发送的回复。我可以如何设置了,但是已经有一些人写了一本非常好的人,所以我就让他们走了吗。只要去你最喜欢的搜索引擎,搜索“如何登记一推特APP”。基本上,你要去https://apps.twitter.com,登录,点击“创建新的应用程序“回答几个问题就可以了。你将需要标注以下信息将用来连接你的Python脚本,你推特帐户。

consumer_key _______________________________________

consumer_secret _______________________________________

access_key _______________________________________

access_secret _______________________________________

步骤3:确保你的PI准备

在你开始之前你应该确保你的软件是最新的。

更新源


现在你需要的是点子,用来安装和管理软件包使用Python编写的软件包管理系统。

sudo apt-get install Python PIP


最后安装你需要的是tweepy画中画(http://tweepy.readthedocs.io/en/v3.5.0/index.html

sudo pip安装tweepy


让我们开始脚本。我将打破剧本切成大块描述每个部分是做什么。最后,我将展示整个脚本,你可以用它剪切并粘贴到你的皮。当然,需要修改一些代码,我将确定我们走。这不是关于如何计划一个教训,所以我假设你有一些基本的Python编程经验。

首先,我的脚本是在用户的家目录内的子目录twitterpi。剧本本身就是twitterpi.py。在twitterpi目录,将有2个文件,将伴随脚本。我们将确定这些文件当我们到他们的描述。

步骤4:启动脚本和进口

脚本的第一行让我们运行脚本不需要sudo的Python类型。/ twitterpi.py。一旦剧本完成,你将不得不更改权限的脚本可以执行。chmod 550 twitterpi.py

#!/usr/bin/vi Python


下一步,我们将导入库,我们需要运行的程序。

tweepy–用Python和推特接口。
http://tweepy.readthedocs.io/en/v3.5.0/index.html

我们将利用这个时间–暂停计划内的。
https://docs.python.org/2/library/time.html

操作系统–这使我们与Raspbian操作系统接口。
https://docs.python.org/2/library/os.html

线程–线程允许我们“分裂”的程序独立操作部分。
https://docs.python.org/2/library/threading.html

picamera–拉在picamera图书馆给我们以PI相机通信。
http://picamera.readthedocs.io/en/release-1.0/

GPIO–GPIO给我们读信息从PIR以及点亮LED的能力。
https://pypi.python.org/pypi/rpi.gpio

进口tweepy,时间,操作系统线程
从picamera进口PiCamera
进口rpi.gpio GPIO

步骤5:第一个功能blinkled

现在我们要进入这个脚本的功能。这一功能会眨眼半秒后LED关闭半秒。现在,这个函数需要调用输入的是(0,1)或(1,0)。这允许我们把LED然后关闭或关上。第一(0、1)是要把领导当我们完成拍照。的(1,0)是用于普通半秒眨眼。我们也看看blinkled等于1。如果设置为0就不会眨眼。

DEF blinkled(OnOff作):
如果blinkled = = 1:
 GPIO输出(LED、OnOff)
睡眠时间。(5)
 GPIO输出(LED、OffOn)
时间。

步骤6:设置GPIO

设置GPIO

进口,我们将继续设置GPIO。我用GPIO 26我的LED的积极和消极的引脚引脚任意地。连接PI和对LED的引脚之间的电阻是。对于红外,我决定使用GPIO 4作为输入或VCC。你还将连接红外地面以及源引脚上的一个PI的5V引脚。我使用BCM识别GPIO引脚副的物理位置在PI的GPIO数字GPIO模式。然后建立PIR引脚作为输入,LED引脚作为输出,LED被关闭。

PIR = 4 
 LED = 26 
 GPIO设置(PIR,GPIO,)
 GPIO设置(LED,GPIO,
输出(GPIO),LED,GPIO。

步骤7:设置一些变量

我想有一个名单的人,可以要求图片是由PI,通过推特寄给他们,我想限制可以运行在PI命令一个更小的组的人。我的表被称为超级用户分配一组。你会把yourtwitterid你希望能够控制你的PI推特账户。

超级用户= [ 'yourtwitterid ]


找出程序的生活以及目录中的程序创建的文件将被保存到工作目录。

workDir =“/家/ PI / twitterpi”


与使用的推特命令可以打开/关闭LED的闪烁如果你不希望有一个LED闪烁定期。我个人很喜欢有一个“心跳”闪烁,我知道我的剧本仍在运行。我们将打开“心跳”通过设置blinkled变1。设置此变量为0将使LED闪烁。

blinkled = 1

步骤8:功能TakePicture

功能TakePicture

这一功能是用来拍照片的要求。我们将照片保存每次相同的文件名。如果我们想保留一份,我们可以从推特下载。我们将闪烁LED开/关5次,拍照然后关闭LED当我们做。

DEF takepicture():
 pathtofile = workDir +“/执行。JPG”
我范围(0,4):
 blinkled(0,1)#眨掉然后
相机捕捉(pathtofile)
 GPIO输出(LED,0)。

步骤9:功能getstringid

的getstringid是用来在鸣叫的ID号读,我们处理的是我们最后一次运行程序。如果我们不找到一个文件,那么我们可能是第一次运行该脚本,并将开始与1号。

DEF getstringid():
 pathtofile = workDir +“/ stringid .txt”
尝试:
文件打开(pathtofile,“R”)
数= int(文件。read())
文件。()
除了IOError:
数

步骤10:功能savenewstringid

这一功能受到新的tweet ID号发现和保存我们的文件,我们知道微博ID开始看第一。

SaveNewStringID(DEF id_string):
 pathtofile = workDir +“/ stringid。txt”文件打开
 =(pathtofile,“W”)
文件编写(id_string)
#p#分页标题#e#

步骤11:功能sendreply

功能sendreply

在我们找到一个鸣叫我们的标签从一个授权用户,拍摄了一张照片,我们将使用这个函数来发送我们的鸣叫与照片回复我们了。

DEF sendreply(user_name):
 pathtofile = workDir +“/执行。JPG”
鸣叫=“@”+“”+ + user_name STR(时间。strftime(“%”))
状态= API。update_with_media(pathtofile,

步骤12:功能sendstatus

功能sendstatus

不时,我们可以找到该程序的当前状态是什么。这个函数发送一个答复与当前设置闪烁LED超级用户,无论是摄像机的角度是正常的或翻转,表明报警系统线程仍在运行,最后如果运动检测是积极的。

DEF sendstatus(user_name):
如果blinkled = = 1:
眨眼=“true”
别的:
眨眼=“假”
如果运动= = 1:
 MD =“”
别的:
 MD =“关闭”
鸣叫=“@”+“”+ str(user_name +时间。strftime(“%”))\ 
 +“nflip =”+ STR(相机。vFLIP)\”\ nblink 
 + LED =”+眨眼\ 
 +“nthread运行=”+ threadrunning \ 
 +“nmotion检测=”+ MD 
状态= update_status API。

步骤13:功能updateusers

不时,我们可能想让新用户可以请求被发送通过推特图片。使用此功能,当用户发送一个命令,将新用户添加到我们的名单。我们把当前文件,然后添加所有用户在随着超级用户给新用户。

DEF updateusers(新手):
 pathtofile = workDir +“/授权。txt”
授权。追加(新手)
文件打开(pathtofile,“W”)
文件。写(“”)
文件。关闭
文件打开(pathtofile,“A”)
你授权:
文件编写(U +”

步骤14:功能camflip

根据你的相机的位置是什么,你可能需要把相机垂直。因为我们不想如果我们移动相机这个功能修改脚本将翻转相机通过推特命令。

DEF camflip():
 camera.vflip = =真的:如果
 camera.vflip =假
别的:

步骤15:功能checkforcommands

这个功能是我们检查我们的标签,通过接收到的命令。它可能看起来像“命令:命令:额外的# yourhashtag”。由于我们使用这个函数来修改从功能之外的一些变量,我们需要确定在函数的开始,那些“全球”的变量。这个版本有以下命令,但更多的命令可以被添加到列表的脚本。


加利福尼亚:adduser:twitterid添加用户授权列表。
加利福尼亚:触发器捕获的图像的垂直。
加利福尼亚:blinkoff禁用LED闪烁
加利福尼亚:blinkon使LED闪烁。
加利福尼亚:艾顿打开运动检测
加利福尼亚:alertoff禁用运动检测。
加利福尼亚:现状发推的超级用户状态
命令:启动会重启你的皮
命令:关机PI
命令:停止终止程序


如果该命令将返回一个1,然后程序执行命令,然后将拍照并上传到推特。如果它返回一个0,然后执行命令,但没有鸣叫将发送。如果没有命令在鸣叫,那么函数会返回一个1和一个拍摄和推送请求。

DEF checkforcommands(commandstring,user_name):
全球blinkled 
全球运动
全球stopthreads 
 tmplist = commandstring。分裂(“”)
 cmdstring = tmplist [ 0 ] 
 cmdlist = cmdstring。分裂(“:”)
如果“cmd”cmdlist:
如果“adduser”cmdlist:
 updateusers(cmdlist [ 2 ])
返回0 
 elif“翻转”cmdlist:
 camflip() 
返回1 
 elif”blinkoff”cmdlist:
 blinkled = 0 
返回0 
 elif”blinkon”cmdlist:
 blinkled = 1 
返回0 
 elif”艾顿”cmdlist:
 blinkled = 0 
运动= 1 
 sendstatus(user_name)
返回0 
 elif”alertoff”cmdlist:
 blinkled = 1 = 0 
运动
 sendstatus(user_name)
返回0 
 elif”地位的“cmdlist:
 sendstatus(user_name操作系统。系统(“重新启动”)
 elif“关机”cmdlist:
 GPIO。cleanup() 
 OS系统(“关机”)
 elif“停”在cmdlist:
 stopthreads = 1 
 GPIO。cleanup() 
 exit() 
别的:
返回0

步骤16:功能monitortweets

功能monitortweets

的monitortweets函数是程序的主要功能。它运行在一个连续的while循环。寻找新的Twitter的标签在search_text变量识别你。一旦新的鸣叫被发现,保存新的微博ID号然后推特用户ID是在授权表验证。如果用户不在授权列表然后,忽略。如果这是授权用户,然后我们想看看这是一个超级用户查看我们是否需要检查命令(CMD)的鸣叫。如果不是超级用户,那么我们就拍一张照片,它的鸣叫在授权用户。如果这是一个超级用户,然后我们会将信息传递给checkforcommands功能。我们也闪烁LED睡眠节期间。我们只检查新的tweets每分钟一次,以确保我们不会超过推特API相互作用在15分钟内的最大数量。

DEF monitortweets():
全球id_string 
而真实:
 search_text =“# yourhashtag”
 search_result = API。搜索(search_text,RPP = 1,since_id = id_string)
我在search_result:
 id_string = i.id_str 
 savenewstringid(id_string)
鸣叫= API。get_status(id_string)
 user_name =用户鸣叫。如果user_name。screen_name 
授权:
如果user_name超级用户:
检查=(checkforcommands(i.text,user_name))
别的:
检查= 1 = = 1 
如果检查:
 takepicture() 
 sendreply(user_name)
 blinkled(1,0)#闪烁然后
睡眠时间(30)。

步骤17:功能securityalert利用运动检测器(PIR)

功能securityalert利用运动检测器(PIR)

这是函数读取运动检测器时,”艾顿”命令已收到。因为我们不想仅仅一分钟检查运动,我们需要在程序中其他地方的一个单独的线程中运行。一旦运动检测是积极的,我们要不断注意运动。一旦我们运动,我们将等待一秒让主体靠近再拍一张照片。照片后附推送到推特用户ID在功能鉴定。

DEF securityalert():
全球threadrunning 
而真实:
尝试:
如果stopthreads = = 1:
 exit() 
如果运动= = 1:
如果GPIO输入(PIR):
时间。睡眠(1)
 takepicture() 
 sendreply(超级用户[ 0 ])
时间睡眠(60)
除外。:
 threadrunning =没有

步骤18:设置推特API

完成的功能,现在我们建立推特API允许tweepy访问推特。这是一节你会用你的信息,收集当你设定你的推特API在推特网站。一旦信息已定,tweepy变量是用来完成设置访问tweepy配置。

consumer_key =你的消费重点去
 consumer_secret =你的消费秘密去
 access_key =你的访问键去
 access_secret =你访问秘密去
 
 auth = tweepy。OAuthHandler(consumer_key,consumer_secret)
认证。set_access_token(access_key,access_secret)
 API = tweepy API(。

步骤19:设置相机的位置

现在我们要设置picamera模块。我的PI和相机的正常位置要求我把相机所以我要把我的camera.vflip真实。根据你的picamera正常位置,你可能想将此值设置为false。用命令的鸣叫可以翻转的相机如果在程序的启动和运行都需要。

相机= picamera() 
 camera.vflip =真

步骤20:把最后一条微博ID号与我们合作

当程序第一次启动时,我们需要确定最后的tweet的ID号,我们发现最后一次程序运行。本节将在数从getstringid功能。

id_string = getstringid()

步骤21:让我们看看谁的授权要求的图片

我们不想与推特帐户都给要求图片所以我们要建立一个清单,推特用户名,可以请求一个图片被通过推特送给他们的能力。#p#分页标题#e#如果没有保存的用户,那么程序将假定只有超级用户有权要求图片

尝试:
 pathtofile = workDir +“/授权。txt”
授权= [] 
开放(pathtofile)文件:
线文件:
线=线。strip() 
授权。追加(线)
文件。()
除了IOError:

步骤22:确定最后一个变量并开始运行

默认情况下,我们不想有PI设为一个运动检测安全系统,我们将设置运动0。这可以改变程序运行时通过发送一个“艾顿”命令的鸣叫。

运动= 0


有一些问题securityalert线程死亡没有通知,所以我设立了一个变量,提出了一种状态请求时。如果线程死亡,它会修改该变量没有所以我们会知道。

threadrunning =“是”


现在,我们已经建立并运行,对于大多数的一部分,我们要发送状态推到我们的主要推特地址。

sendstatus(超级用户[ 0 ])


最后,我们将开始我们的securityalert线程然后开始监视我们指定的标签推特。的stopthreads设置为0来保持线程运行。如果我们改变stopthreads 1将关闭securityalert螺纹。这将发生在我们控制的C运行时程序从命令行或如果我们发送一个命令鸣叫停止程序。

尝试:
 stopthreads = 0 
 securityalert =线程。线程(name = 'securtiyalert,目标= securityalert)
 securityalert。start() 
 monitortweets() 
除了keyboardinterrupt:
 stopthreads = 1 
 GPIO。

步骤23:在这里找到PDF格式的完整版本的脚本。


(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
相关文章
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片