简介
- 继电器想必大家一定不陌生吧,通过几伏的电压就能控制几百伏的电压,相当于一个电子开关,生活中也十分常见。树莓派作为入门级的Linux开发板对小白也是十分友好。今天就跟小编一起用树莓派来玩继电器吧。❤️ ❤️ ❤️
树莓派引脚
- 在终端输入 gpio readall 查看树莓派引脚信息
pi@raspberrypi:~/studayPi/dome $ gpio readall
+-----+-----+---------+------+---+---Pi 3B--+---+------+---------+-----+-----+
| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| | | 3.3v | | | 1 || 2 | | | 5v | | |
| 2 | 8 | SDA.1 | ALT0 | 1 | 3 || 4 | | | 5v | | |
| 3 | 9 | SCL.1 | ALT0 | 1 | 5 || 6 | | | 0v | | |
| 4 | 7 | GPIO. 7 | IN | 1 | 7 || 8 | 1 | ALT5 | TxD | 15 | 14 |
| | | 0v | | | 9 || 10 | 1 | ALT5 | RxD | 16 | 15 |
| 17 | 0 | GPIO. 0 | IN | 0 | 11 || 12 | 0 | IN | GPIO. 1 | 1 | 18 |
| 27 | 2 | GPIO. 2 | IN | 0 | 13 || 14 | | | 0v | | |
| 22 | 3 | GPIO. 3 | IN | 0 | 15 || 16 | 0 | IN | GPIO. 4 | 4 | 23 |
| | | 3.3v | | | 17 || 18 | 0 | IN | GPIO. 5 | 5 | 24 |
| 10 | 12 | MOSI | IN | 0 | 19 || 20 | | | 0v | | |
| 9 | 13 | MISO | IN | 0 | 21 || 22 | 0 | IN | GPIO. 6 | 6 | 25 |
| 11 | 14 | SCLK | IN | 0 | 23 || 24 | 1 | IN | CE0 | 10 | 8 |
| | | 0v | | | 25 || 26 | 1 | IN | CE1 | 11 | 7 |
| 0 | 30 | SDA.0 | IN | 1 | 27 || 28 | 1 | IN | SCL.0 | 31 | 1 |
| 5 | 21 | GPIO.21 | IN | 1 | 29 || 30 | | | 0v | | |
| 6 | 22 | GPIO.22 | OUT | 1 | 31 || 32 | 0 | IN | GPIO.26 | 26 | 12 |
| 13 | 23 | GPIO.23 | OUT | 1 | 33 || 34 | | | 0v | | |
| 19 | 24 | GPIO.24 | OUT | 1 | 35 || 36 | 0 | IN | GPIO.27 | 27 | 16 |
| 26 | 25 | GPIO.25 | OUT | 1 | 37 || 38 | 0 | IN | GPIO.28 | 28 | 20 |
| | | 0v | | | 39 || 40 | 0 | IN | GPIO.29 | 29 | 21 |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
+-----+-----+---------+------+---+---Pi 3B--+---+------+---------+-----+-----+
- 中间一栏为物理引脚,方便大家接线时查找,我们使用 wiringPi库时编程用的引脚是wPi那一栏的,大家不要弄混了。
接线
- 本次实验使用4路继电器组控制4个LED灯,用树莓派驱动。当in1~in4为高电平时常开触点端口,为低电平时触发闭合。
- 使用树莓派的2号引脚输出5V供电。
代码
- 编译时要链接库
gcc a.c -lwiringPi
- 废话不多说,小编直接给大家上代码!a.c:
#include <wiringPi.h>
#include <string.h>
#include <stdio.h>
#define L1 22
#define L2 23
#define L3 24
#define L4 25
int main()
{
char cmd[32]={'\0'}; //命令
if(wiringPiSetup() == -1){ //硬件初始化函数
printf("硬件初始化失败\n");
return -1;
}
pinMode(L1,OUTPUT); //设置这4个引脚都是输出引脚
pinMode(L2,OUTPUT);
pinMode(L3,OUTPUT);
pinMode(L4,OUTPUT);
digitalWrite(L1,HIGH); //给in1~in4高电平,相当于开关都断开
digitalWrite(L2,HIGH);
digitalWrite(L3,HIGH);
digitalWrite(L4,HIGH);
while(1){
printf("命令格式为L1/L2/L3/L4/all空格on/off\n 请输入命令:\n");
gets(cmd);
if(!strcmp(cmd,"L1 on")){
digitalWrite(L1,LOW); //L1低电平触发,灯1亮
}else if(!strcmp(cmd,"L1 off")){
digitalWrite(L1,HIGH); //L1高电平断开,灯1灭
}else if(!strcmp(cmd,"L2 on")){
digitalWrite(L2,LOW);
}else if(!strcmp(cmd,"L2 off")){
digitalWrite(L2,HIGH);
}else if(!strcmp(cmd,"L3 on")){
digitalWrite(L3,LOW);
}else if(!strcmp(cmd,"L3 off")){
digitalWrite(L3,HIGH);
}else if(!strcmp(cmd,"L4 on")){
digitalWrite(L4,LOW);
}else if(!strcmp(cmd,"L4 off")){
digitalWrite(L4,HIGH);
}else if(!strcmp(cmd,"all on")){
digitalWrite(L1,LOW);
digitalWrite(L2,LOW);
digitalWrite(L3,LOW);
digitalWrite(L4,LOW);
}else if(!strcmp(cmd,"all off")){
digitalWrite(L1,HIGH);
digitalWrite(L2,HIGH);
digitalWrite(L3,HIGH);
digitalWrite(L4,HIGH);
}else{
printf("小老弟你输啥呢?\n");
}
}
return 0;
}
- 运行a.out,大家输入指令就能看见现象了
流水灯
- 小编为了给大家更明显的展示现象,写个简单的流水灯吧
#include <wiringPi.h>
#include <string.h>
#include <stdio.h>
#define L1 22
#define L2 23
#define L3 24
#define L4 25
int main()
{
char cmd[32]={'\0'};
if(wiringPiSetup() == -1){
printf("硬件初始化失败\n");
return -1;
}
pinMode(L1,OUTPUT);
pinMode(L2,OUTPUT);
pinMode(L3,OUTPUT);
pinMode(L4,OUTPUT);
digitalWrite(L1,HIGH);
digitalWrite(L2,HIGH);
digitalWrite(L3,HIGH);
digitalWrite(L4,HIGH);
while(1){
digitalWrite(L1,LOW);
sleep(1);
digitalWrite(L2,LOW);
sleep(1);
digitalWrite(L3,LOW);
sleep(1);
digitalWrite(L4,LOW);
sleep(1);
digitalWrite(L1,HIGH);
sleep(1);
digitalWrite(L2,HIGH);
sleep(1);
digitalWrite(L3,HIGH);
sleep(1);
digitalWrite(L4,HIGH);
sleep(1);
}
return 0;
}
- 下面是演示视频
树莓派控制继电器
- 相信大家看到这里就已经会用树莓派控制继电器了,快来试试看吧!
❤️ ❤️ ❤️ ❤️ ❤️