C语言编程
宏定义 wiringPi中的 0 引脚,对应GPIO17,由于继电器采用的只是小的电压压降控制,所以本次不需要PWM控制,只需要定义引脚为输出,再利用高低输出的无限循环就可以实现实现。
PS:pinMode 函数
原型为: void pinMode(int pin, int mode);
digitalWrite 函数
原型为: void digitalWrite(int pin, int value);
使用该函数可以向指定的管脚写入 HIGH(高)或者LOW(低),写入前,需要将管脚讴置为输出模式。
wiringPi 将任何的非 0 值作为 HIGH(高)来对待,因此,0 是唯一能够代表 LOW(低)的数值。
#include <wiringPi.h>
#include <stdio.h>
#define RelayPin 0
int main(void)
{
if(wiringPiSetup() == -1){ //when initialize wiring failed,print messageto screen
printf("setup wiringPi failed !");
return 1;
}
// printf("linker LedPin : GPIO %d(wiringPi pin)\n",VoicePin); //when initialize wiring successfully,print message to screen
pinMode(RelayPin, OUTPUT);
while(1){
digitalWrite(RelayPin, LOW);
delay(1000);
digitalWrite(RelayPin, HIGH);
delay(1000);
}
return 0;
}
Python 编程
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
RelayPin = 11 # pin11
def setup():
GPIO.setmode(GPIO.BOARD) # Numbers GPIOs by physical location
GPIO.setup(RelayPin, GPIO.OUT)
GPIO.output(RelayPin, GPIO.HIGH)
def loop():
while True:
print '...relayd on'
GPIO.output(RelayPin, GPIO.LOW)
time.sleep(0.5)
print 'relay off...'
GPIO.output(RelayPin, GPIO.HIGH)
time.sleep(0.5)
def destroy():
GPIO.output(RelayPin, GPIO.HIGH)
GPIO.cleanup() # Release resource
if __name__ == '__main__': # Program start from here
setup()
try:
loop()
except KeyboardInterrupt: # When 'Ctrl+C' is pressed, the child program destroy() will be executed.
destroy()
PS:GPIO.setmode(GPIO.BOARD)
GPIO.setmode(GPIO.BOARD)
在RPi.GPIO中,同时支持树莓派上的两种GPIO引脚编号。第一种编号是BOARD编号,这和树莓派电路板上的物理引脚编号相对应。不用担心因为版本的更改而导致引脚调用要重新更改。
另外一种调用方式是GPIO.setmode(GPIO.BCM)
,面向的是更底层的工作方式,使用起来会比较困难。
PS:还要说的就是GPIO.cleanup()
GPIO.cleanup() 是用来释放资源的,可以及时的释放树莓派中的引脚,避免树莓派损坏。