Difference between revisions of "Matrix Starter Kit/zh"

From FriendlyELEC WiKi
Jump to: navigation, search
 
(7 intermediate revisions by the same user not shown)
Line 1: Line 1:
[[Matrix Starter Kit|English]]
+
[[Matrix Starter Kit With NanoPi|English]]
  
==打造NanoPi计算机==
+
==NanoPi门铃系统==
[[File:NanoPi-computer.png|thumb|NanoPi-computer]]
+
一:NanoPi门铃系统介绍
===NanoPi门铃系统===
+
[[File:门铃系统.png|thumb|门铃系统]]
 +
*使用Matrix Starter Kit套件的蜂鸣器、LED、声音传感器做一个门铃系统,当按键按下时,蜂鸣器会响起来,以及LED会闪烁;当声音传感器识别到声音时,蜂鸣器也会响起来。
 +
*如果需要更好的效果,可以发挥自己的想象力,按键在按下来的时候,蜂鸣器随机播放一首音乐。
 +
<br>
 +
二:Matrix配件
 +
*这里需要使用到Matrix的配件为LED、声音传感器、无源蜂鸣器,均可参考以下链接了解Matrix配件的使用:
 +
{| class="wikitable"
 +
|-
 +
|NanoPi门铃系统 || NanoPi      
 +
|-
 +
|LED    || [http://wiki.friendlyarm.com/wiki/index.php/Matrix_-_LED]
 +
|-
 +
|声音传感器    || [http://wiki.friendlyarm.com/wiki/index.php/Matrix_-_Sound_Sensor]
 +
|-
 +
|无源蜂鸣器      || [http://wiki.friendlyarm.com/wiki/index.php/Matrix_-_Buzzer]
 +
|-
 +
|按键 || [http://wiki.friendlyarm.com/wiki/index.php/Matrix_-_Button]
 +
|}
 +
<br>
 +
三:下载Matrix源码
 +
Matrix配件相关的代码是完全开源的,统一由一个仓库进行管理:git://github.com/friendlyarm/matrix.git <br>
 +
该仓库里不同的分支代表着Matrix配件所支持的不同开发板。<br>
 +
* nanopi分支包含了Matrix对NanoPi的支持;
 +
* tiny4412分支包含了Matrix对Tiny4412的支持;
 +
* raspberrypi分支包含了Matrix对RaspberryPi的支持;
 +
<br>
 +
四:连接使用
 +
{| class="wikitable"
 +
|-
 +
|NanoPi门铃系统 || NanoPi     
 +
|-
 +
|LED    || PIN12
 +
|-
 +
|声音传感器    || PIN7
 +
|-
 +
|无源蜂鸣器      || PIN22
 +
|-
 +
|按键    || PIN11
 +
|}
 +
<br>
 +
五:编译程序及使用
 +
进入Matrix代码仓库,切换到nanopi分支
 +
<syntaxhighlight lang="bash">
 +
$ cd matrix
 +
$ git checkout nanopi
 +
</syntaxhighlight>
  
===温室报警系统===
+
编译Matrix配件代码
 +
<syntaxhighlight lang="bash">
 +
$ make CROSS_COMPILE=arm-linux- clean
 +
$ make CROSS_COMPILE=arm-linux-
 +
$ make CROSS_COMPILE=arm-linux- install
 +
</syntaxhighlight>
 +
注意:请确保你的主机PC当前使用的交叉编译器为NanoPi-Debian配套的arm-linux-gcc-4.4.3。<br>
 +
编译出来的库文件位于install/lib目录下,而测试程序则位于install/usr/bin目录下,模块Matrix-doorbell对应的测试程序为matrix-doorbell。<br>
 +
拷贝库文件和测试程序到NanoPi的文件系统上
 +
<syntaxhighlight lang="bash">
 +
$ cp install/usr/bin/* nanopi_rootfs/usr/bin/
 +
$ cp install/lib/* nanopi_rootfs/lib/ -d
 +
</syntaxhighlight>
  
==打造RasberryPi计算机==
+
然后启动NanoPi,在Debian的shell终端中执行如下命令运行模块Matrixdoorbell的测试程序 <br>
 +
<syntaxhighlight lang="bash">
 +
$ matrix-doorbell
 +
</syntaxhighlight>
 +
代码展示:
 +
<syntaxhighlight lang="c">
 +
#include <stdio.h>
 +
#include <unistd.h>
 +
#include <stdlib.h>
 +
#include <signal.h>
 +
#include "libfahw.h"
 +
 
 +
#define SOUND  0
 +
#define BUTTON  1
 +
static struct sensor sensor_dev[2] = {
 +
{
 +
GPIO_PIN1,
 +
                IRQ_TYPE_EDGE_BOTH,
 +
        },
 +
        {
 +
                GPIO_PIN2,
 +
                IRQ_TYPE_EDGE_FALLING,
 +
        }
 +
};
 +
 
 +
int devFD = -1;
 +
 
 +
int pwm_HZ = 1000;
 +
int pwm_duty = 500;
 +
 
 +
int BUZZERpin = PWM_PIN1;
 +
int LEDpin = GPIO_PIN3;
 +
 
 +
int stop = 0;
 +
void Stop(int signo) {
 +
stop = 1;
 +
}
 +
 
 +
int doorbell_init() {
 +
//sensor init
 +
if ((devFD = sensorInit(sensor_dev, ARRAY_SIZE(sensor_dev))) == -1) {
 +
        printf("Fail to init sensor sound\n");
 +
        return -1;
 +
}
 +
 
 +
//LED init
 +
if ((exportGPIOPin(LEDpin)) == -1) { 
 +
        printf("exportGPIOPin(%d) failed\n", LEDpin);
 +
return -1;
 +
}
 +
if ((setGPIODirection(LEDpin, GPIO_OUT)) == -1) {
 +
        printf("setGPIODirection(%d) failed\n", LEDpin);
 +
return -1;
 +
}
 +
return 0;
 +
}
 +
 
 +
void doorbell_deinit() {
 +
sensorDeinit(devFD);
 +
PWMStop(BUZZERpin);
 +
unexportGPIOPin(LEDpin);
 +
}
 +
 
 +
int doorbell_open() {
 +
if(setGPIOValue(LEDpin, GPIO_HIGH) == -1) {
 +
printf("setGPIOValue(%d) failed\n", LEDpin);
 +
return -1;
 +
}
 +
 
 +
if (PWMPlay(BUZZERpin, pwm_HZ, pwm_duty) == -1) {
 +
        printf("Fail to output PWM\n");
 +
      return -1;
 +
}
 +
return 0;
 +
}
 +
 
 +
int doorbell_close() {
 +
if(setGPIOValue(LEDpin, GPIO_LOW) == -1) {
 +
printf("setGPIOValue(%d) failed\n", LEDpin);
 +
return -1;
 +
}
 +
if(PWMStop(BUZZERpin) == -1) {
 +
printf("Fail to stop PWM\n");
 +
return -1;
 +
}
 +
return 0;
 +
}
 +
 
 +
int main(int argc, char ** argv) {
 +
int sensor_state;
 +
char value[ARRAY_SIZE(sensor_dev)];
 +
doorbell_init();
 +
signal(SIGINT, Stop);
 +
printf("you can press ctrl+c to stop\n");
 +
while(!stop) {
 +
sensor_state = sensorRead(devFD, value, ARRAY_SIZE(sensor_dev));
 +
if(value[SOUND] || value[BUTTON]) {
 +
if(doorbell_open() == -1) {
 +
printf("fail to open doorbell\n");
 +
return -1;
 +
}
 +
value[SOUND] = 0;
 +
value[BUTTON] = 0;
 +
usleep(1000*500);
 +
}
 +
if(doorbell_close() == -1) {
 +
printf("fail to close doorbell\n");
 +
return -1;
 +
}
 +
}
 +
doorbell_deinit();
 +
return 0;
 +
}
 +
</syntaxhighlight>
 +
 
 +
==温室报警系统==

Latest revision as of 09:07, 19 September 2015

English

1 NanoPi门铃系统

一:NanoPi门铃系统介绍

门铃系统
  • 使用Matrix Starter Kit套件的蜂鸣器、LED、声音传感器做一个门铃系统,当按键按下时,蜂鸣器会响起来,以及LED会闪烁;当声音传感器识别到声音时,蜂鸣器也会响起来。
  • 如果需要更好的效果,可以发挥自己的想象力,按键在按下来的时候,蜂鸣器随机播放一首音乐。


二:Matrix配件

  • 这里需要使用到Matrix的配件为LED、声音传感器、无源蜂鸣器,均可参考以下链接了解Matrix配件的使用:
NanoPi门铃系统 NanoPi
LED [1]
声音传感器 [2]
无源蜂鸣器 [3]
按键 [4]


三:下载Matrix源码 Matrix配件相关的代码是完全开源的,统一由一个仓库进行管理:git://github.com/friendlyarm/matrix.git
该仓库里不同的分支代表着Matrix配件所支持的不同开发板。

  • nanopi分支包含了Matrix对NanoPi的支持;
  • tiny4412分支包含了Matrix对Tiny4412的支持;
  • raspberrypi分支包含了Matrix对RaspberryPi的支持;


四:连接使用

NanoPi门铃系统 NanoPi
LED PIN12
声音传感器 PIN7
无源蜂鸣器 PIN22
按键 PIN11


五:编译程序及使用 进入Matrix代码仓库,切换到nanopi分支

$ cd matrix
$ git checkout nanopi

编译Matrix配件代码

$ make CROSS_COMPILE=arm-linux- clean
$ make CROSS_COMPILE=arm-linux-
$ make CROSS_COMPILE=arm-linux- install

注意:请确保你的主机PC当前使用的交叉编译器为NanoPi-Debian配套的arm-linux-gcc-4.4.3。
编译出来的库文件位于install/lib目录下,而测试程序则位于install/usr/bin目录下,模块Matrix-doorbell对应的测试程序为matrix-doorbell。
拷贝库文件和测试程序到NanoPi的文件系统上

$ cp install/usr/bin/* nanopi_rootfs/usr/bin/
$ cp install/lib/* nanopi_rootfs/lib/ -d

然后启动NanoPi,在Debian的shell终端中执行如下命令运行模块Matrixdoorbell的测试程序

$ matrix-doorbell

代码展示:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include "libfahw.h"
 
#define SOUND   0
#define BUTTON  1
static struct sensor sensor_dev[2] = {
	{
		GPIO_PIN1,
                IRQ_TYPE_EDGE_BOTH,
        },
        {
                GPIO_PIN2,
                IRQ_TYPE_EDGE_FALLING,
        }
};
 
int devFD = -1;
 
int pwm_HZ = 1000;
int pwm_duty = 500;
 
int BUZZERpin = PWM_PIN1;
int LEDpin = GPIO_PIN3;
 
int stop = 0;
void Stop(int signo) {
	stop = 1;
}
 
int doorbell_init() {
	//sensor init
	if ((devFD = sensorInit(sensor_dev, ARRAY_SIZE(sensor_dev))) == -1) {
	        printf("Fail to init sensor sound\n");
	        return -1;
	}
 
	//LED init
	if ((exportGPIOPin(LEDpin)) == -1) {   
	        printf("exportGPIOPin(%d) failed\n", LEDpin);
		return -1;
	}
	if ((setGPIODirection(LEDpin, GPIO_OUT)) == -1) {
        	printf("setGPIODirection(%d) failed\n", LEDpin);
		return -1;
	}
	return 0;
}
 
void doorbell_deinit() {
	sensorDeinit(devFD);
	PWMStop(BUZZERpin);
	unexportGPIOPin(LEDpin);
}
 
int doorbell_open() {
	if(setGPIOValue(LEDpin, GPIO_HIGH) == -1) {
		printf("setGPIOValue(%d) failed\n", LEDpin);
		return -1;
	}
 
	if (PWMPlay(BUZZERpin, pwm_HZ, pwm_duty) == -1) {
        	printf("Fail to output PWM\n");
       		return -1;
	}
	return 0;
}
 
int doorbell_close() {
	if(setGPIOValue(LEDpin, GPIO_LOW) == -1) {
		printf("setGPIOValue(%d) failed\n", LEDpin);
		return -1;
	}
	if(PWMStop(BUZZERpin) == -1) {
		printf("Fail to stop PWM\n");
		return -1;
	}
	return 0;
}
 
int main(int argc, char ** argv) {
	int sensor_state;
	char value[ARRAY_SIZE(sensor_dev)];
	doorbell_init();
	signal(SIGINT, Stop);
	printf("you can press ctrl+c to stop\n");
	while(!stop) {
		sensor_state = sensorRead(devFD, value, ARRAY_SIZE(sensor_dev));
		if(value[SOUND] || value[BUTTON]) {
			if(doorbell_open() == -1) {
				printf("fail to open doorbell\n");
				return -1;		
			}
			value[SOUND] = 0;
			value[BUTTON] = 0;
			usleep(1000*500);
		}
		if(doorbell_close() == -1) {
			printf("fail to close doorbell\n");
			return -1;
		}
	}
	doorbell_deinit();
	return 0;
}

2 温室报警系统