用普通PC主板的蜂鸣器给树莓派(RPI)加个报警器

这两天有点时间,捣鼓了下那闲置好久的树莓派,把普通PC主板的蜂鸣器作为树莓派的报警器用。

Raspberry Pi有许多的GPIO(General Purpose Input Output:通用输入/输出),可以用来控制和读取数字电路中TTL电平的逻辑0和逻辑1。

我们要使用RPi的GPIO首先要知其GPIO的定义,常用的有两种编号定义:WiringPi Pin和BCM GPIO。

GPIO的驱动库我这里介绍两种给大家,一种为C语言的WiringPi,另一种为python的RPi.GPIO,本例使用的是WiringPi。

接线比较简单,把蜂鸣器的红线接GPIO1口(pin:12,即BCM_GPIO 18),黑线接GND(pin:6)。

至于为什么接GPIO1口,主要是因为树莓派只有这个口支持PWM输出。

pin编号如下图所示:

具体代码如下:

alarm.h

#include <wiringPi.h>

#define PIN_NO 1

int init();

void alarm(int count, int value, int interval);

void stopAlarm();

alarm.c

#include <stdio.h>
#include <stdlib.h>
#include "alarm.h"

static short isok;

int init(){
    if(!isok){
        if(wiringPiSetup() == -1){
            printf("WiringPi setup failed!\n");
            return 0;
        }else{
            isok = 1;
        }
    }
    return 1;
}

void alarm(int count, int value, int interval){
    if(!init())
        return;

    //printf("Speaker pin: GPIO%d\n",PIN_NO);

    pinMode(PIN_NO,PWM_OUTPUT);//设置引脚模式,模式为INPUT、OUTPUT 或者 PWM_OUTPUT,注意:仅wiringPi引脚1(即BCM_GPIO 18)支持PWM输出
    pwmSetMode(PWM_MODE_MS);
    //pwmSetRange(1024);

    int c;
    for(c = 0;c < count; c++){
        pwmWrite(PIN_NO,value);
        //printf("%d\n",count - c);
        delay(interval);
        pwmWrite(PIN_NO,-1);
        delay(interval);
    }

    stopAlarm();
}

void stopAlarm(){
    if(!init())
        return;

    pwmWrite(PIN_NO,-1);
    //pwmSetMode(PWM_MODE_BAL);
}

alarm_test.c

#include <stdio.h>
#include <stdlib.h>
#include "alarm.h"

int main(int argc, char *argv[])
{
    if(argc < 4){
        printf("arg error! At least 3 parameters!\n");
        return 1;
    }else{
        int count = atoi(argv[1]);
        int value = atoi(argv[2]);
        int interval = atoi(argv[3]);
        printf("Count:%d\tValue:%d\tInterval:%d\n", count, value, interval);
        printf("Alarm start!\n");
        alarm(count, value, interval);
        printf("Alarm complete!\n");
    }
    return 0;
}

编译:

gcc -c -o alarm.o alarm.c -lwiringPi
gcc -o alarm_test alarm_test.c alarm.o -lwiringPi

执行:

sudo ./alarm_test 10 1000 1000
时间: 2024-10-11 21:01:39

用普通PC主板的蜂鸣器给树莓派(RPI)加个报警器的相关文章

PC主板故障维修技巧

1.熟悉PC主板的总线类型及I/O总线插槽中各信号排列情况,以I/O插槽中重要信号为线索进行故障点查找是维修PC主板致命性故障的关键.微机主板常用总线有PC/XT.PC/AT.VESA.PCI等类型,不同总线的I/O槽中信号排列有所差别,熟悉I/O槽中重要信号是查找因总线类故障系统死机.屏幕无显示等严重故障的前提. 对死机类故障,首先区分故障原因是由I/O设备故障引起还是主板本身故 障引起.确诊故障在系统板后,可检测系统板I/O槽中地址总线或数据总线的脉冲状态初步判断系统故障部位:若所有地址总线

服务器主板和普通PC主板的区别

服务器主板和普通PC主板的区别: 第一,服务器主板一般都是至少支持两个处理器--芯片组不同(往往是双路以上的服务器,单路服务器有时候就是使用台式机主板). 第二,服务器几乎任何部件都支持ECC,内存.处理器.芯片组(但高阶台式机也开始支持ECC) 第三,服务器很多地方都存在冗余,高档服务器上面甚至连CPU.内存都有冗余,中档服务器上,硬盘.电源的冗余是非常常见的,但低档服务器往往就是台式机的改装品,不过也选用一线大厂电源. 第四,由于服务器的网络负载比较大,因此服务器的网卡一般都是使用TCP/I

pc网页到移动端怎么自动加载适应移动端的css。

1.通过link标签判断加入 以前听说过在link标签中加media = "handheld",但这个用到安卓或苹果都不管用,后来尝试以下方法,是管用的. <link href="mobile.css" rel="stylesheet" type="text/css" media="screen and (max-device-width: 1080px)"> 2.通过js获取 判断所属浏览器是

PC硬件知识必修系列——主板

一.版型 二.芯片组 三.扩展插槽1.PCI/PCIe2.SATA接口 四.I/O接口 五.CPU/内存相关1.CPU插槽2.内存插槽 六.供电用料 七.其它功能1.BIOS2.HIFI/WIFI3.板载芯片4.其它 图来自华硕B85 PLUS的正面裸体图,后面的讲解过程中将多次用到它 我们先将它分成 图下几部分,然后逐一讲解 一.版型什么是板型?简单说就是主板整体的形状标准,它与机箱的搭配有关系,并且在扩展.接口方面有差别. 目前市场最常见的PC主板板型主要是以下三种:ATX——我们常说的“大

玩转树莓派&mdash;&mdash;支持PS3手柄

之前写过一篇用树莓派玩模拟器的.通过retropie可以集成不同的模拟器,在树莓派上玩街机.玩红白机.玩PSP都不是问题. 不过我不喜欢让游戏直接接管我的树莓派,毕竟用树莓派还得做正经事对吧. 还好retorpie提供on the top的使用方式,只不过是需要自行运行Shell命令.这里有指导: https://github.com/retropie/retropie-setup/wiki/Manual-Installation 可以直接通过github拉回来:     git clone -

树莓派3-vnc

软件 PC端: TightVNC Viewer 树莓派:sudo apt-get install tightvncserver 设置 树莓派:vncserver 设置这次vnc的密码 设置完之后会有提示,Nex 'X' desktop is xx:n 这个n是等一下vnc要用的 PC端: 打开TightVNC Viewer 这个软件 在Remot Host填上,你的开发板ip::端口号, 例如我的是192.168.1.104::59001,这个1来自于刚才的n 然后下一步需要填写刚才设置的vnc

安装VNC服务,笔记本显示器显示树莓派图形界面

VNC(Virtual Network Computing)属于一种网络显示系统,也就是说它能将完整的窗口界面通过网络传输到另一台计算机的屏幕上,实现以图形界面的形式去操作.查看远程的计算机. VNC分为VNC服务器(VNC Server)和VNC客户端(VNC Viewer).要实现通过PC机远程操作和查看树莓派的图形界面,需要在树莓派上安装VNC Server.进入终端,输入以下命令即可安装: 1. RPi上安装服务,设置密码,并启动服务 $ sudo apt-get install tig

LINUX主机上交叉编译树莓派详细教程

LINUX主机OS:Ubuntu14.04 64位,运行在wmware workstation 10上. 树莓派版本:raspberry pi 2 B型. 树莓派OS:官网下的的raspbian-jessie. 1.为什么需要交叉编译 在Ubuntu上直接编译一个.c源文件可以用系统自带的gcc编译器编译test.c gcc test.c -o test 然后执行生成的二进制文件 ./test 交叉编译就是把编译的过程在LINUX PC(或其它主机)上执行,然后拷贝二进制可执行文件到树莓派(或其

树莓派安装FLASK服务;并在端网页读取 GPIO状态和系统时间

做过一些物联网的作品:因为不想一直做APP来控制,因为不能每个人都去下载你自己做的APP,浏览器大家都是有的:那么每个人通过浏览器WEB来访问我们服务器,岂不是很简单和方便,采用flask+python.Flask是一个使用 Python 编写的轻量级 Web 应用框架,操作简单,上手容易.安装FLask:sudo apt-get install python-pipsudo pip install flask 然后一个简单的服务器就搭好了,都存在我们的树莓派下,估计大家要写几个程序,那么:mk