树莓派笔记08-微信公众号控制树莓派(二)

上一篇笔记实现了树莓派上调用itchatmp接口对接微信公众测试号,并且能够实现对话功能,这一篇就实现微信公众号控制树莓派开关主机的功能。


主要思路就是通过微信公众测试号的菜单功能选择来控制树莓派的引脚,树莓派引脚接继电器控制电脑主机。

前期准备:继电器、杜邦线(公对母/母对母)

1.微信公众测试号自定义菜单

首先在微信公众测试号的界面找到最下方自定义菜单这一选项


自定义菜单

点进去然后划到最下方,有一个网页调试工具接口


网页调试接口

打开后首先获得token,需要输入之前的appid和secret,然后获取access_token,这个要保存一下
获取token

然后在接口类型那儿选择自定义菜单,access_token选择之前保存的access_token。最后在body里定义菜单,这儿button就是第一层菜单,sub_butten就是第二层菜单,这个事例在微信开放文档里面有,大家可以多试验一下。


创建菜单按钮

其中这个key是指定的,我下面就用的这个key这个键值对来实现对微信公众测试号的功能选择的。(没理解可以去微信公众号后台回复问题)

最后选择检查问题,如果没问题的话打开你的微信公众测试号就能看得到你自定义的菜单了。


自定义菜单

由于我主要是用在主机的开关机,所以这儿用了两台主机操作系统作为按钮,win下面二级菜单控制开关机。

2.树莓派端引脚测试

首先树莓派端能够控制引脚高低电平,本文使用的是RPI库,对于RPI的库这儿略过介绍,直接使用调用使用高低电平就可以了,具体代码如下:

# -*- coding: utf-8 -*-                          #通过声明可以在程序中书写中文
import RPi.GPIO as GPIO                     #引入RPi.GPIO库函数命名为GPIO
import time                                            #引入计时time函数
# BOARD编号方式,基于插座引脚编号
GPIO.setmode(GPIO.BOARD)             #将GPIO编程方式设置为BOARD模式
#输出模式
GPIO.setup(11, GPIO.OUT)                #将GPIO引脚11设置为输出引脚

while True:                                            #条件为真,下面程序一直循环执行     
        GPIO.output(11, GPIO.HIGH)    #将11引脚电压置高,点亮LED灯
        time.sleep(1)                               #延时1秒
        GPIO.output(11, GPIO.LOW)     #将11引脚电压置低,熄灭LED灯
        time.sleep(1)                               #延时1秒

将继电器接到GPIO11接口,调用程序,继电器能够实现开关!

继电器输入总共三个引脚,分别是输入、+5v、GND。将11引脚接到输入,其他两个引脚接到树莓派上的+5V和GND引脚。

3.树莓派与微信公众测试号对接

通过itchatmp官方文档查看菜单的接收函数为:

@itchatmp.msg_register(itchatmp.content.INCOME_MSG) #调用测试号按钮接口
def text_reply(msg):
        return msg        

通过调用菜单接口,可以看到EventKey返回的值就是在微信公众平台调试工具的key值。这样就可以通过使用key键来设计程序。

4.设计程序

现在微信公众测试号已经跟树莓派完美对接了。对于树莓派运行的程序如下:

import itchatmp
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.OUT)                    #将GPIO引脚11设置为输出引脚
GPIO.setup(13, GPIO.OUT)
GPIO.output(11, GPIO.HIGH)
GPIO.output(13, GPIO.HIGH)

itchatmp.update_config(itchatmp.WechatConfig(
  # 填写上一步在微信公众号的配置内容
   token='',
   appId = '',
   appSecret = ''))

@itchatmp.msg_register(itchatmp.content.INCOME_MSG)
def text_reply(msg):
#       print(msg)
#       print(msg['EventKey'])
        if msg['EventKey']=='ubuntu':
                GPIO.output(11, GPIO.LOW)          #将11引脚电压置高,点亮LED
                time.sleep(1)                       #延时1秒
                GPIO.output(11, GPIO.HIGH)           #将11引脚电压置低,熄灭LED

                time.sleep(1)
                return 'ubuntu start'
        elif msg['EventKey']=='win':
                GPIO.output(13, GPIO.LOW)
                time.sleep(1)
                GPIO.output(13, GPIO.HIGH)
                time.sleep(1)
                return 'win start'


        if msg['EventKey']=='wins':
                GPIO.output(13, GPIO.LOW)
                time.sleep(5)
                GPIO.output(13, GPIO.HIGH)
                return 'win poweroff'

@itchatmp.msg_register(itchatmp.content.TEXT)
def text_reply(msg):
    print(msg)
    return msg['Contant']
itchatmp.run()

至此树莓派端的全部设计就已经完成了。

5.硬件连接

由于这里使用两个继电器分别控制两个主机,所以在代码中设计引脚有两个作为继电器的输入引脚,将11和13引脚分别接到继电器端的in接口,然后将继电器输出引脚与主板开机引脚接上。最后开机实验,成功!!!


如果80端口被占用,可以通过

sudo netstat -tunlp | grep :80
查看被占用的进程号,然后
sudo kill -9 进程号

了解更多请关注作者微信公众号:

一技破万法

你可能感兴趣的:(树莓派笔记08-微信公众号控制树莓派(二))