update mqttd program, add relay and beep code
4 files added
6 files renamed
New file |
| | |
| | | /********************************************************************************* |
| | | * Copyright: (C) 2018 LingYun IoT System Studio |
| | | * All rights reserved. |
| | | * |
| | | * Filename: led.c |
| | | * Description: This file is used to control Passive buzzer or Active buzzer |
| | | * |
| | | * pi@raspberrypi:~ $ gpio readall show BCM and wPi pinmap |
| | | * |
| | | * VCC ---- 5V/3.3V |
| | | * GND ---- GND |
| | | * I/O ---- GPIO.18 ---- GPIO.1 |
| | | * BCM wPi |
| | | * |
| | | * Version: 1.0.0(2018/10/14) |
| | | * Author: Guo Wenxue <guowenxue@gmail.com> |
| | | * ChangeLog: 1, Release initial version on "2018/10/14 12:13:26" |
| | | * |
| | | ********************************************************************************/ |
| | | |
| | | #include <stdio.h> |
| | | #include <unistd.h> |
| | | #include <fcntl.h> |
| | | #include <dirent.h> |
| | | #include <string.h> |
| | | #include <time.h> |
| | | #include <errno.h> |
| | | |
| | | #include <wiringPi.h> |
| | | #include "beep.h" |
| | | |
| | | /*+-----------------------------+ |
| | | *| Turn buzzer on or off API | |
| | | *+-----------------------------+*/ |
| | | |
| | | int turn_passive_beep(int cmd, int freq) |
| | | { |
| | | int range; |
| | | |
| | | if(OFF == cmd) |
| | | { |
| | | pwmWrite(PWM_PIN, 0); |
| | | pinMode(PWM_PIN, INPUT) ; |
| | | } |
| | | else |
| | | { |
| | | |
| | | if(freq<2000 || freq>5000) |
| | | { |
| | | printf("Beep set invalid PWM frequency[%d]!\n", freq); |
| | | return -1; |
| | | } |
| | | |
| | | /* Set GPIO as PWM output mode */ |
| | | pinMode(PWM_PIN, PWM_OUTPUT) ; |
| | | |
| | | /* Set PWM mode as ms mode */ |
| | | pwmSetMode(PWM_MODE_MS); |
| | | |
| | | /* Set PWM clock: 19.2MHz/32=600KHz */ |
| | | pwmSetClock(32); |
| | | |
| | | /* Set PWM frequency */ |
| | | range=600000/freq; |
| | | pwmSetRange(range); |
| | | |
| | | /* Set PWM duty 50% */ |
| | | pwmWrite(PWM_PIN, range/2); |
| | | } |
| | | } |
| | | |
| | | |
| | | /* Turn ON/OFF buzzer, Active Buzzer can not set frequency */ |
| | | int turn_active_beep(int cmd) |
| | | { |
| | | /* Active buzzer VCC connect to: |
| | | 5V: Both high and low level will be on |
| | | 3.3V: Low level be on and High level be off |
| | | So we use INPUT or OUTPUT to control the Beeper |
| | | */ |
| | | if(OFF == cmd) |
| | | { |
| | | pinMode(PWM_PIN, INPUT); |
| | | } |
| | | else |
| | | { |
| | | pinMode(PWM_PIN, OUTPUT); |
| | | digitalWrite(PWM_PIN, LOW); |
| | | } |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | |
| | | /*+---------------------------------+ |
| | | *| Play Tone OD,RE,MI....XI,DO1 | |
| | | *+---------------------------------+*/ |
| | | |
| | | enum |
| | | { |
| | | UNUSED=0, |
| | | DO, |
| | | RE, |
| | | MI, |
| | | FA, |
| | | SO, |
| | | LA, |
| | | XI, |
| | | DO1, |
| | | RI1, |
| | | TONE_MAX, |
| | | }; |
| | | |
| | | #define msleep(x) usleep( 1000*(x) ) |
| | | |
| | | static int tone_freq[TONE_MAX]={0, 2093, 2349, 2637, 2794, 3136, 3520, 3952, 4186, 4698 }; |
| | | //static int tone_freq[TONE_MAX]={0, 2000, 2130, 2250, 2360, 2450, 2530, 2620, 2700, 2780}; |
| | | |
| | | static inline void play_tone(int tone, int delay) |
| | | { |
| | | if(tone<DO || tone>RI1) |
| | | return ; |
| | | |
| | | turn_passive_beep(ON, tone_freq[tone]); |
| | | msleep(delay); |
| | | turn_passive_beep(OFF, 0); |
| | | } |
| | | |
| | | void play_tone_freq(void) |
| | | { |
| | | int i; |
| | | |
| | | for(i=DO; i<TONE_MAX; i++) |
| | | { |
| | | play_tone( i, 500 ); |
| | | msleep(500); |
| | | } |
| | | } |
| | | |
| | | |
| | | /*+------------------------------+ |
| | | *| Play song "Little Start" | |
| | | *+------------------------------+*/ |
| | | |
| | | typedef struct tone_s |
| | | { |
| | | int tone; |
| | | int delay_ms; |
| | | |
| | | } tone_t; |
| | | |
| | | #define DEF_DELAY 350 |
| | | static tone_t little_start_notation[]= |
| | | { |
| | | {DO, DEF_DELAY}, |
| | | {DO, DEF_DELAY}, |
| | | {SO, DEF_DELAY}, |
| | | {SO, DEF_DELAY}, |
| | | {LA, DEF_DELAY}, |
| | | {LA, DEF_DELAY}, |
| | | {SO, DEF_DELAY*2}, |
| | | |
| | | {FA, DEF_DELAY}, |
| | | {FA, DEF_DELAY}, |
| | | {MI, DEF_DELAY}, |
| | | {MI, DEF_DELAY}, |
| | | {RE, DEF_DELAY}, |
| | | {RE, DEF_DELAY}, |
| | | {DO, DEF_DELAY*2}, |
| | | |
| | | |
| | | {SO, DEF_DELAY}, |
| | | {SO, DEF_DELAY}, |
| | | {FA, DEF_DELAY}, |
| | | {FA, DEF_DELAY}, |
| | | {MI, DEF_DELAY}, |
| | | {MI, DEF_DELAY}, |
| | | {RE, DEF_DELAY*2}, |
| | | |
| | | |
| | | {SO, DEF_DELAY}, |
| | | {SO, DEF_DELAY}, |
| | | {FA, DEF_DELAY}, |
| | | {FA, DEF_DELAY}, |
| | | {MI, DEF_DELAY}, |
| | | {MI, DEF_DELAY}, |
| | | {RE, DEF_DELAY*2}, |
| | | }; |
| | | |
| | | #define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0])) |
| | | void play_little_star(void) |
| | | { |
| | | int i; |
| | | |
| | | for(i=0; i<ARRAY_SIZE(little_start_notation); i++) |
| | | { |
| | | play_tone(little_start_notation[i].tone, little_start_notation[i].delay_ms); |
| | | msleep(30); |
| | | } |
| | | } |
| | | |
| | | |
New file |
| | |
| | | /********************************************************************************* |
| | | * Copyright: (C) 2018 LingYun IoT System Studio |
| | | * All rights reserved. |
| | | * |
| | | * Filename: beep.h |
| | | * Description: This file is used to control Passive buzzer or Active buzzer |
| | | * |
| | | * pi@raspberrypi:~ $ gpio readall show BCM and wPi pinmap |
| | | * |
| | | * VCC ---- 5V/3.3V |
| | | * GND ---- GND |
| | | * I/O ---- GPIO.18 ---- GPIO.1 |
| | | * BCM wPi |
| | | * |
| | | * Version: 1.0.0(2018/10/14) |
| | | * Author: Guo Wenxue <guowenxue@gmail.com> |
| | | * ChangeLog: 1, Release initial version on "2018/10/14 12:13:26" |
| | | * |
| | | ********************************************************************************/ |
| | | |
| | | #ifndef __BEEP_H |
| | | #define __BEEP_H |
| | | |
| | | #define OFF 0 |
| | | #define ON 1 |
| | | |
| | | //#define CONFIG_ACTV_BEEP |
| | | |
| | | #define BEEP_FREQ 2400 |
| | | |
| | | /* Use Pin12 == GPIO18(BCM) == GPIO.1(wPi) */ |
| | | #define PWM_PIN 1 |
| | | |
| | | int turn_passive_beep(int cmd, int freq); |
| | | |
| | | int turn_active_beep(int cmd); |
| | | |
| | | /* Only passive buzzer can play tone */ |
| | | #ifndef CONFIG_ACTV_BEEP |
| | | void play_little_star(void); |
| | | #endif |
| | | |
| | | #endif |
| | | |
New file |
| | |
| | | /********************************************************************************* |
| | | * Copyright: (C) 2019 LingYun IoT System Studio |
| | | * All rights reserved. |
| | | * |
| | | * Filename: relay.c |
| | | * Description: This file |
| | | * |
| | | * Version: 1.0.0(30/01/19) |
| | | * Author: Guo Wenxue <guowenxue@gmail.com> |
| | | * ChangeLog: 1, Release initial version on "30/01/19 08:44:30" |
| | | * |
| | | ********************************************************************************/ |
| | | |
| | | |
| | | #include <wiringPi.h> |
| | | #include "relay.h" |
| | | |
| | | void relay_init(void) |
| | | { |
| | | wiringPiSetup(); |
| | | pinMode(RELAY_PIN, OUTPUT); |
| | | } |
| | | |
| | | |
| | | void turn_relay(int cmd) |
| | | { |
| | | if( OFF == cmd ) |
| | | { |
| | | digitalWrite ( RELAY_PIN, HIGH ); |
| | | } |
| | | else |
| | | { |
| | | digitalWrite ( RELAY_PIN, LOW ); |
| | | } |
| | | } |
| | | |
New file |
| | |
| | | /******************************************************************************** |
| | | * Copyright: (C) 2019 LingYun IoT System Studio |
| | | * All rights reserved. |
| | | * |
| | | * Filename: relay.h |
| | | * Description: This head file |
| | | * |
| | | * Version: 1.0.0(30/01/19) |
| | | * Author: Guo Wenxue <guowenxue@gmail.com> |
| | | * ChangeLog: 1, Release initial version on "30/01/19 08:49:31" |
| | | * |
| | | ********************************************************************************/ |
| | | |
| | | #ifndef _RELAY_H_ |
| | | #define _RELAY_H_ |
| | | |
| | | #ifndef ON |
| | | #define ON 1 |
| | | #define OFF 0 |
| | | #endif |
| | | |
| | | /* I/O Pin connected to PIN#18, BCM code pin number is 24 and wPi pin number is 5 */ |
| | | #define RELAY_PIN 5 |
| | | |
| | | void relay_init(void); |
| | | void turn_relay(int cmd); |
| | | |
| | | #endif /* ----- #ifndef _RELAY_H_ ----- */ |
| | | |