这两天有点时间,捣鼓了下那闲置好久的树莓派,把普通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() == -){
printf("WiringPi setup failed!\n");
return ;
}else{
isok = ;
}
}
return ;
} 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 = ;c < count; c++){
pwmWrite(PIN_NO,value);
//printf("%d\n",count - c);
delay(interval);
pwmWrite(PIN_NO,-);
delay(interval);
} stopAlarm();
} void stopAlarm(){
if(!init())
return; pwmWrite(PIN_NO,-);
//pwmSetMode(PWM_MODE_BAL);
}

alarm_test.c

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

编译:

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

执行:

sudo ./alarm_test   

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

  1. 树莓派 Learning 002 装机后必要的操作 --- 08 实现PC端 远程登入 树莓派 --- 法2 远程登录树莓派的图形桌面

    树莓派 装机后必要的操作 - 实现PC端 远程登入 树莓派 我的树莓派型号:Raspberry Pi 2 Model B V1.1 装机系统:NOOBS v1.9.2 PC端系统:win10 x64 ...

  2. 树莓派 Learning 002 必备的操作 --- 08 实现PC端 远程登入 树莓派 --- 法1 远程登入树莓派的命令行状态

    树莓派 必备的操作 - 实现PC端 远程登入 树莓派 - 法1 远程登入树莓派的命令行状态 我的树莓派型号:Raspberry Pi 2 Model B V1.1 装机系统:NOOBS v1.9.2 ...

  3. PC远程传文件到树莓派(PSCP详细版)

    1.下载pscp软件 下载地址:http://www.pc6.com/softview/SoftView_456976.html 百度云下载地址:https://pan.baidu.com/s/1bZ ...

  4. 树莓派 - RPi.GPIO

    RPi.GPIO是通过Python/C API实现的,C代码操作底层寄存器, python通过Python/C API调用这些C接口. 这是关于RPi.GPIO项目的介绍. 其中提到了有python ...

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

    1.通过link标签判断加入 以前听说过在link标签中加media = "handheld",但这个用到安卓或苹果都不管用,后来尝试以下方法,是管用的. <link hre ...

  6. 树莓派RPi.GPIO+Flask构建WebApi实现远程控制

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- import RPi.GPIO as GPIO from flask import Flask, requ ...

  7. Linux主机上实现树莓派的交叉编译及文件传输,远程登陆

    0.环境 Linux主机OS:Ubuntu14.04 64位,运行在wmware workstation 10虚拟机 树莓派版本:raspberry pi 2 B型. 树莓派OS:官网下的的raspb ...

  8. 树莓派之web服务器搭建

    树莓派之web服务器搭建 (一)使用ufw创建防火墙 设置目的:可以完全阻止对树莓派的访问也可以用来配置通过防火墙对特点程序的访问.使用防火墙更好的保护树莓派. 准备工作 1.带有5V电源的树莓派 2 ...

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

    做过一些物联网的作品:因为不想一直做APP来控制,因为不能每个人都去下载你自己做的APP,浏览器大家都是有的:那么每个人通过浏览器WEB来访问我们服务器,岂不是很简单和方便,采用flask+pytho ...

随机推荐

  1. 分布式系统之CAP理论

    任老师第一节主要讲了分布式系统实现时候面临的八个问题,布置的作业就是这个,查询CAP理论. 笔者初次接触分布式,所以本文主要是一个汇总. 一.CAP起源 CAP原本是一个猜想,2000年PODC大会的 ...

  2. jQuery中的一些正则匹配表达式

    jQuery常用正则匹配表达式 落雨 //整数 "^-?[1-9]\\d*$", //正整数 "^[1-9]\\d*$", //负整数 intege2: &qu ...

  3. Handlebars 介绍

    最新项目用到了Ember.js前端框架,第一次使用这样的框架,准备国庆节花2天时间,研究一下它的用法. Ember框架的模板引擎用到了handlebars, 先看国外的一篇介绍文章:An Introd ...

  4. SNMP中文

    SNMP4J 处理中文信息时的问题 http://qsjiangs.iteye.com/blog/1966899

  5. 练习PYTHON之GEVENT

    这个只是作了第一个样例,里面还有很多高级的技巧,希望以后用得着. 我觉得因为以前看过几本LINUX内核,关于异步非阻塞IO,信号,锁之类的,所以理解起来,还可以. import gevent def ...

  6. CC_UNUSED_PARAM 宏含义的解释

    #define CC_UNUSED_PARAM(unusedparam) (void)unusedparam 这个宏完全没有执行任何命令,这样写的原因主要是历史遗留原因,ojb-c不存在纯虚函数并且传 ...

  7. 《sql注入攻击与防御 第2版》的总结 之 如何确定有sql注入漏洞

    看完<sql注入攻击与防御 第2版>后,发现原来自己也能黑网站了,就一个字:太爽了. 简单总结一下入侵步骤: 1.确定是否有sql注入漏洞 2.确定数据库类型 3.组合sql语句,实施渗透 ...

  8. BZOJ_3207_花神的嘲讽计划1_(Hash+主席树)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=3207 给出一个长度为\(n\)的串,以及\(m\)个长度为\(k\)的串,求每个长度为\(k\ ...

  9. PHP libxml RSHUTDOWN安全限制绕过漏洞(CVE-2012-1171)

    漏洞版本: PHP PHP 5.5.x 漏洞描述: BUGTRAQ ID: 65673 CVE(CAN) ID: CVE-2012-1171 PHP是一种HTML内嵌式的语言. PHP 5.x版本内的 ...

  10. jquery如何选择带有多个class的元素

    依次过滤$(“.good”).filter(“.list”).filter(“.Card”) 属性选择$(“[class='good list Card']“);此处 顺序必须一致才行 直接直接用 $ ...