• 树莓派控制4路5v继电器开关


    准备材料

    1. 4路5v继电器

    在这里插入图片描述

    1. 杜邦线
      在这里插入图片描述
      这里正常来说是公对母的杜邦线。我直接接的线。

    2. 树莓派3b

    3. 树莓派的电源线

    附上继电器的对接规格
    在这里插入图片描述

    wiringPi库

    安装wiringPi库

    wiringPi是一个很棒的树莓派IO控制库,使用C语言开发,提供了丰富的接口:GPIO控制,中断,多线程等等。
    进入 wiringPi的github https://git.drogon.net/?p=wiringPi;a=summary 下载安装包。点击页面的第一个链接的右边的snapshot,下载安装压缩包。

    然后进入安装包所在的目录执行以下命令:

    tar xfz wiringPi-98bcb20.tar.gz //98bcb20为版本标号,可能不同
    cd wiringPi-98bcb20
    ./build

    验证wiringPi的是否安装成功,输入gpio -v,会在终端中输出相关wiringPi的信息。否则安装失败。

    在这里插入图片描述

    查看引脚编号表格

    使用如下控制台下命令

    gpio readall

    注意:查看时,将树莓派的USB接口面对自己,这样看才是正确的。

    在这里插入图片描述

    wiringPi API

    插一句:

    编写demo是需要写 #include<wiringPi.h>头文件,同样的运行的时候,也要指定-lwiringPi

    硬件初始化函数wiringPiSetup

    int wiringPiSetup (void)

    返回:执行状态,-1表示失败

    当使用这个函数初始化树莓派引脚时,程序使用的是wiringPi 引脚编号表。引脚的编号为 0~16
    需要root权限

    GPIO控制函数pinMode

    void pinMode (int pin, int mode)

    pin:配置的引脚
    mode:指定引脚的IO模式

    可取的值:INPUT、OUTPUT、PWM_OUTPUT,GPIO_CLOCK
    作用:配置引脚的IO模式

    注意:
    只有wiringPi 引脚编号下的1脚(BCM下的18脚) 支持PWM输出

    只有wiringPi编号下的7(BCM下的4号)支持GPIO_CLOCK输出

    GPIO控制函数digitalWrite

    void digitalWrite (int pin, int value)

    pin:控制的引脚
    value:引脚输出的电平值。

    可取的值:HIGH,LOW分别代表高低电平

    让对一个已近配置为输出模式的 引脚 输出指定的电平信号

    demo示例

    #include <stdio.h>
    #include <wiringPi.h>
    #include <stdlib.h>
    #include <string.h>
    /*树莓派控制继电器高低电平亮灯*/
    
    #define SWITCH1 26
    #define SWITCH2 27
    #define SWITCH3 28
    #define SWITCH4 29
    int main(){
    
            char cmd[12] = {"\0"};
            if(wiringPiSetup() == -1){
                    printf("wiringPi初始化失败\n");
                    exit(-1);
            }
            pinMode(SWITCH1,OUTPUT);
            pinMode(SWITCH2,OUTPUT);
            pinMode(SWITCH3,OUTPUT);
            pinMode(SWITCH4,OUTPUT);
            digitalWrite(SWITCH1,HIGH);
            digitalWrite(SWITCH2,HIGH);
            digitalWrite(SWITCH3,HIGH);
            digitalWrite(SWITCH4,HIGH);
            while(1){
                    printf("请输入1/2/3/4 on or off\n");
                    memset(cmd,0,sizeof(cmd));
                    gets(cmd);
                    if(strcmp(cmd,"1 off") == 0){
                            digitalWrite(SWITCH1,HIGH);
                    }else if(strcmp(cmd,"1 on") == 0){
                            digitalWrite(SWITCH1,LOW);
                    }
                    if(strcmp(cmd,"2 off") == 0){
                            digitalWrite(SWITCH2,HIGH);
                    }else if(strcmp(cmd,"2 on") == 0){
                            digitalWrite(SWITCH2,LOW);
                    }
                    if(strcmp(cmd,"3 off") == 0){
                            digitalWrite(SWITCH3,HIGH);
                    }else if(strcmp(cmd,"3 on") == 0){
                            digitalWrite(SWITCH3,LOW);
                    }
                    if(strcmp(cmd,"4 off") == 0){
                            digitalWrite(SWITCH4,HIGH);
                    }else if(strcmp(cmd,"4 on") == 0){
                            digitalWrite(SWITCH4,LOW);
                    }
                    if(strcmp(cmd,"all off") == 0){
                            digitalWrite(SWITCH1,HIGH);
                            digitalWrite(SWITCH2,HIGH);
                            digitalWrite(SWITCH3,HIGH);
                            digitalWrite(SWITCH4,HIGH);
                    }else if(strcmp(cmd,"all on") == 0){
                            digitalWrite(SWITCH1,LOW);
                            digitalWrite(SWITCH2,LOW);
                            digitalWrite(SWITCH3,LOW);
                            digitalWrite(SWITCH4,LOW);
                    }
            }
            return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63

    执行

    gcc demo2.c -lwiringPi

    基本实现就是这样,用法和输入比较土。

    实现效果图:
    在这里插入图片描述

  • 相关阅读:
    系统仿真(五):校园时间消耗系统仿真报告
    Flink 窗口
    二、图像处理
    如何在k8s的Java服务镜像(Linux)中设置中文字体
    视频推拉流/直播点播平台EasyDSS分享的链接提示“无信号”,该如何解决?
    文本生成不同解码方法的具体实现
    BigDecimal精度丢失问题
    android嵌入式开发及实训答案,android面试简历模板
    深入理解安卓ARouter:集成与应用
    [ C++ ] STL_list 使用及其模拟实现
  • 原文地址:https://blog.csdn.net/qq_44333320/article/details/125492252