序言:

树莓派作为时下流行的DIY平台,python作为流行的编程语言,玩树莓派是一种态度,写python代码是一种生活情趣。

周五是个好日子,因为周末来了。

忙碌了一周,周五休息一下,玩玩树莓派,学习python,让大脑放个假。

触控按键相较机械按钮而言,耐磨,使用起来非常方便。

购买树莓派套件里有单个触控按键,玩起来吧。

一、原理

触控按键外观如下,属于电容性触控按键,主控是JR223B(见图中U1)。手摸按键区域或悬浮表明,PCB触控区产生感应电容,触控IC处理后知道有触控事件,使SIG输出高电平;没有触控时,SIG输出低电平。

触控按键外观

树莓派通过一个GPIO连接SIG,通过监测触控模块的SIG引脚的电平,就可以知道按键是否按下。原理如下:

0->1(上升沿):表示按键按下(触摸)。

1->1:表示触摸一直都在(手没有离开,相当于长按)

1->0(下降沿):表示按键松开。

0->0:无触控

监测方法有二,一是循环查询SIG电平;二是利用GPIO中断。

因为触摸事件比较随机,而且不会很频繁,所以GPIO中断方式最有效。

利用RPi.GPIO库的add_event_dectect()函数和add_event_callback()函数

二、连线

触控模块与树莓派连线

三、编程

代码如下,把所有相关操作封装到函数里,既调用方便代码又简洁。

#!touchkey.py--触摸按键程序
#encoding == utf-8
import RPi.GPIO as GPIO
import time
touch_key = 12 # touchkey ---->GPIO12
#按键处理函数,参数self如果不加的话,会报错
#检测到按键上升沿事件,只执行一次。
#就算手指一直不放开,不会重复执行。
def mykeyprocess(self):
print("You touch the touch key!!!!!!!")
print("触控按键电平:",GPIO.input(touch_key))
#初始化函数
def init(keyhandler):
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(touch_key,GPIO.IN)
GPIO.add_event_detect(touch_key,GPIO.RISING)
#最后一个参数为软件去抖时间,500ms
GPIO.add_event_callback(touch_key,keyhandler)
def destroy():
try:
GPIO.remove_event_detect(touch_key)
GPIO.cleanup()
except:
print("touchkey: GPIO cleanup fail.")
if(__name__=='__main__'):
try:
init(mykeyprocess)
while True:
print("waiting for your touch!!")
print("触控按键电平:",GPIO.input(touch_key))
time.sleep(1)
except:
destroy()

四、调试

mykeyprocess函数必须加上一个参数self,否则触摸时回调函数mykeyprocess无法正确执行,提示以下错误:

TypeError: mykeyprocess() takes 0 positional arguments but 1 was given

增加self参数后,执行正确。

触控驱动调试结果