树莓派使用WiringPi库驱动继电器

树莓派使用WiringPi库驱动继电器

一、继电器概念

继电器(英文名称:relay)是一种电控制器件,是当输入量(激励量)的变化达到规定要求时,在电气输出电路中使被控量发生预定的阶跃变化的一种电器。它具有控制系统(又称输入回路)和被控制系统(又称输出回路)之间的互动关系。通常应用于自动化的控制电路中,**它实际上是用小电流去控制大电流运作的一种“自动开关”。**故在电路中起着自动调节、安全保护、转换电路等作用。

在这里插入图片描述

二、树莓派与继电器硬件接线

在这里插入图片描述

在这里插入图片描述

三、使用WiringPi库驱动继电器:

#include <stdio.h>
#include <wiringPi.h>

#define SWITCHER 7                  //定义开关引脚

int main()
{
    int cmd;

    wiringPiSetup();                //初始化wiringPi库
    pinMode(SWITCHER, OUTPUT);      //设置开关引脚为输出模式
    digitalWrite(SWITCHER, HIGH);   //初始化开关引脚为高电平

    while(1){
        printf("请输入开关状态(1/0): 1-开 0-关\n");
        scanf("%d", &cmd);

        if(cmd == 1){
            digitalWrite(SWITCHER, LOW);  //设置开关引脚为低电平
            printf("继电器已打开\n");
        }else if(cmd == 0){
            digitalWrite(SWITCHER, HIGH);   //设置开关引脚为高电平
            printf("继电器已关闭\n");
        }else{
            printf("输入错误,请重新输入!\n");
        }
    }
    return 0;
}

在这里插入图片描述

可以看到我们成功使用WiringPi库来驱动了继电器了,但是我们发现在编译的我们链接了WiringPi库,有时候我们需要链接很多库,这样就很麻烦,而且很容易写错,所以我们可以写一个shell脚本来编译代码:

shell脚本应该适用于各种程序的名字:
    
$0		./build.sh
$1		beep.c
$2 		a.out
    
shell脚本处理参数可以通过$来处理,这里的$1就是要编译的文件,$2就是要生成的可执行程序名字
gcc $1 -lwiringPi -o $2

我们创建了一个脚本,往脚本里面写入了内容,但是发现脚本无法运行,原因是我们新创建的脚本是没有权限的

需要使用指令chmod +x build.sh来赋予它执行的权限
在这里插入图片描述

好的,树莓派使用wiringpi驱动oled屏幕的具体步骤如下: 1.安装wiringpi 在终端中输入以下命令进行安装: ``` sudo apt-get update sudo apt-get install wiringpi ``` 2.连接oled屏幕 将oled屏幕的SDA和SCL引脚分别连接到树莓派的GPIO2和GPIO3引脚上。 3.编写代码 使用wiringpi编写代码来控制oled屏幕的显示。以下是一个简单的示例: ``` #include <wiringPi.h> #include <wiringPiI2C.h> #define OLED_ADDR 0x3c int fd; void write_cmd(unsigned char cmd) { wiringPiI2CWriteReg8(fd, 0x00, cmd); } void write_data(unsigned char data) { wiringPiI2CWriteReg8(fd, 0x40, data); } void OLED_Init() { write_cmd(0xAE); // display off write_cmd(0x20); // set memory addressing mode write_cmd(0x00); // horizontal addressing mode write_cmd(0x21); // set column address write_cmd(0x00); // start column write_cmd(0x7F); // end column write_cmd(0x22); // set page address write_cmd(0x00); // start page write_cmd(0x07); // end page write_cmd(0xB0); // set page start address write_cmd(0xC8); // flip vertically write_cmd(0x00); // set low column address write_cmd(0x10); // set high column address write_cmd(0x40); // set display start line write_cmd(0x81); // set contrast control write_cmd(0xFF); // set maximum contrast write_cmd(0xA1); // set segment remap write_cmd(0xA6); // set normal display write_cmd(0xA8); // set multiplex ratio write_cmd(0x3F); // set maximum multiplex ratio write_cmd(0xA4); // set display mode write_cmd(0xD3); // set display offset write_cmd(0x00); // set offset to 0 write_cmd(0xD5); // set display clock divide ratio/oscillator frequency write_cmd(0xF0); // set divide ratio and oscillator frequency write_cmd(0xD9); // set pre-charge period write_cmd(0x22); // set pre-charge period to 2 DCLKs write_cmd(0xDA); // set COM pins hardware configuration write_cmd(0x12); // set alternate COM pins write_cmd(0xDB); // set VCOMH write_cmd(0x40); // set VCOMH to 0.83 VCC write_cmd(0x8D); // set charge pump write_cmd(0x14); // enable charge pump write_cmd(0xAF); // display on } void OLED_Clear() { int i, j; for (i = 0; i < 8; i++) { write_cmd(0xB0 + i); write_cmd(0x00); write_cmd(0x10); for (j = 0; j < 128; j++) { write_data(0x00); } } } void OLED_ShowString(unsigned char x, unsigned char y, unsigned char *str) { unsigned char c = 0, i = 0, j = 0; while (str[j] != '\0') { c = str[j] - 32; if (x > 120) { x = 0; y++; } write_cmd(0xB0 + y); write_cmd((x & 0x0F) | 0x10); write_cmd((x >> 4) | 0x00); for (i = 0; i < 8; i++) { write_data(pgm_read_byte(font8x16 + c * 16 + i)); } write_cmd(0xB0 + y); write_cmd((x & 0x0F) | 0x10); write_cmd((x >> 4) | 0x00); for (i = 8; i < 16; i++) { write_data(pgm_read_byte(font8x16 + c * 16 + i)); } x += 8; j++; } } int main(int argc, char **argv) { if (wiringPiSetup() < 0) { fprintf(stderr, "Failed to setup wiringPi\n"); return 1; } if ((fd = wiringPiI2CSetup(OLED_ADDR)) < 0) { fprintf(stderr, "Failed to setup I2C device: %s\n", strerror(errno)); return 1; } OLED_Init(); OLED_Clear(); OLED_ShowString(0, 0, "Hello, world!"); return 0; } ``` 这段代码实现了oled屏幕的初始化、清屏和显示字符串等功能。 4.编译运行 在终端中输入以下命令进行编译: ``` gcc -o oled oled.c -lwiringPi ``` 然后运行程序: ``` sudo ./oled ``` 此时,oled屏幕应该可以显示出“Hello, world!”这个字符串了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值