Difference between revisions of "Matrix Starter Kit/zh"
From FriendlyELEC WiKi
(→打造NanoPi计算机) |
|||
(6 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:门铃系统.png|thumb|门铃系统]] | [[File:门铃系统.png|thumb|门铃系统]] | ||
− | |||
*使用Matrix Starter Kit套件的蜂鸣器、LED、声音传感器做一个门铃系统,当按键按下时,蜂鸣器会响起来,以及LED会闪烁;当声音传感器识别到声音时,蜂鸣器也会响起来。 | *使用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> | ||
+ | |||
+ | 然后启动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
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; }