专业编程基础技术教程

网站首页 > 基础教程 正文

浅谈用代码实现微博控制Galileo(自动发微博代码)

ccvgpt 2025-03-25 11:23:32 基础教程 13 ℃

之前的教程都有讲过如何控制Intel Galileo上的GPIO,以及如何通过Intel Galileo发送微博,至此,算是实现了物联网的一半,将本地的信息实时发布到网络,当然最为关键的是,如何实现通过网络控制Intel Galileo呢?

浅谈用代码实现微博控制Galileo(自动发微博代码)

如图所示,Intel Galileo不断向服务器轮询查看是否有来自用户的指令,若有则检查是否为预定指令,然后开始执行,否则继续轮询,如此往返。这里对服务的唯一要求是必须有公网IP,无论是用户还是Intel Galileo均能够访问其数据。

好了,下面就开始写代码吧,需要说明的是,这里的代码在Linux系统下均能运行,只是在操作GPIO有些区别而已。虽然微博现在有些过时,但是其提供了丰富的API,可以省去自己搭建服务的麻烦,对于物联网应用的简单演示是再合适不过了,当然,有一定基础的用户可以选择微信公共号或者其他平台。

#!/usr/bin/envpython

如上所示,先导入若干autohome,weibo,mraa等若干相关库文件,然后设置5号引脚的模式为输出。

因为这里用到的是获取@ 当前用户的微博,并检查是否有“#Intel Galileo#”标记符,然后再检查是否有“开灯”、“关灯”、“闪灯”等命令。所以,先写一个检查包含“#Intel Galileo#”的函数,并根据其返回的True 或 False进行下一步判断:

defcheck(text):

其次是检查符合上面条件的微博中是否有“开灯”、“关灯”、“闪灯”等命令的函数“check_cmd”

defcheck_cmd(text):

下面开始进入主循环了,这里需要注意的是,获取含有相关命令的微博后,指令执行后,Intel Galileo在其微博下方回复相应的评论。

比如:用户发出一条微博,@plantpark #Intel Galileo#开灯;Intel Galileo接收到后,先将灯打开,然后在这条微博下评论“灯已开”+当前时间,这里为了避免在一条微博下重复评论,特对每条新的微博做对比,分别是“pre_time”和“this_time”通过获取每条微博特有的ID进行比对。为何如此写“autohome.get_mention().split(',')”,具体请参照微博API和weibo.py这里不做赘述。

whileTrue:

不够,这里仅仅是demo,控制逻辑并不完整,大家可以根据自己的兴趣和时间进行修改和完善,比如“else if”进行多层嵌套,以适应更多条件,或者限定只接收特定用户的指令,增加一定的安全性,诸如此类,可玩性还是非常高的。

好了,把下面的代码复制到你的Intel Galileo中,直接运行看看效果吧(效果如上图所示)。对于这一系列的文章,有问题欢迎邮箱交流hi@oszine.com.

#!/usr/bin/envpython#coding=utf-8
importautohome,time,mraa,sys
fromtimeimportlocaltime,strftime
reload(sys)
sys.setdefaultencoding('utf-8')

x=mraa.Gpio(5)
x.dir(mraa.DIR_OUT)


info=autohome.get_user_info()

defcheck(text):
if(text[0:len(info.screen_name)+1]=='@'+'%s'%info.screen_name)and(text.find('#IntelGalileo#')>0):
returnTrue
else:
returnFalse

defblink():
x.write(1)
time.sleep(0.2)
x.write(0)
time.sleep(0.2)

defcheck_cmd(text):
iftext.find('开灯')>0:
return'开灯'
eliftext.find('关灯')>0:
return'关灯'
eliftext.find('闪灯')>0:
return'闪灯'
elif(text.find('开灯')==-1andtext.find('关灯')==-1)andtext.find('闪灯')==-1:
returnFalse

timenow=strftime("%H:%M:%S",localtime())

pre_time=autohome.get_mention().split(',')

whileTrue:
this_time=autohome.get_mention().split(',')
text=this_time[4]
weibo_id=this_time[1]
ifthis_time[1]!=pre_time[1]:
print'youhavesentanewweibo'
ifcheck(text)==True:
ifcheck_cmd(text)=='关灯':
x.write(0)
autohome.send_comments(weibo_id,'#IntelGalileo#灯已关%s'%strftime("%m-%d%H:%M:%S",localtime()))
print"灯已关"
elifcheck_cmd(text)=='开灯':
x.write(1)
autohome.send_comments(weibo_id,'#IntelGalileo#灯已开%s'%strftime("%m-%d%H:%M:%S",localtime()))
print"灯已开"
elifcheck_cmd(text)=='闪灯':
blink()
autohome.send_comments(weibo_id,'#IntelGalileo#灯在闪%s'%strftime("%m-%d%H:%M:%S",localtime()))
print"灯在闪"
else:
autohome.send_comments(weibo_id,'#IntelGalileo#命令错误或当前命令不支持%s'%strftime("%m-%d%H:%M:%S",localtime()))
else:
print"youhaven'tsentanynewweibos"
time.sleep(20)
pre_time=autohome.get_mention().split(',')

“夸克微小,却能成就伟大,因为有你。请关注英特尔Quark开发者俱乐部微信公共号intelquark,还有机会得到小礼品哦~!”

最近发表
标签列表