添加智能灯固件代码

This commit is contained in:
kerwincui
2021-07-13 17:14:51 +08:00
parent 332f74dd17
commit ecc0b91b8b
2568 changed files with 229441 additions and 0 deletions

View File

@@ -0,0 +1,337 @@
/******************************************************************************
* 作者kerwincui
* 时间2021-06-08
* 邮箱164770707@qq.com
* 源码地址https://gitee.com/kerwincui/wumei-smart
* author: kerwincui
* create: 2021-06-08
* email164770707@qq.com
* source:https://github.com/kerwincui/wumei-smart
******************************************************************************/
#include "button.h"
#include "common.h"
#include "smart_config.h"
#include "led.h"
#include "wifi.h"
#include "http_server.h"
#include "native_ota.h"
#include "mqtt.h"
#include "lwip_sntp.h"
#include "nvs_storage.h"
static const char* TAG = "button";
bool is_open=false;
//单击开关按钮(回调函数)
static void button_single_click_cb(void* arg)
{
ESP_EARLY_LOGI(TAG, "tab switch button\n");
if(relay_status==1)
{
close_relay();
relay_status=0;
}else{
open_relay();
relay_status=1;
}
write_relay_status();
// mqtt发布状态
if(is_wifi_offline==0 && wifi_status==1 ){
publishStatus();
}
}
//长按开关按钮
static void button_long_press_start_cb(void* arg)
{
ESP_LOGI(TAG, "begin smargconfig\n");
//蓝灯闪烁
led_rgb_blink(0,0,255,2,0,0,0,0);
//智能配网
smart_config_start();
}
// 连续短按开关按钮
static void button_press_repeat_cb(void *arg)
{
ESP_LOGI(TAG, "BUTTON_PRESS_REPEAT[%d]", iot_button_get_repeat((button_handle_t)arg));
uint8_t num=iot_button_get_repeat((button_handle_t)arg);
ESP_LOGI(TAG, "press repeat num: %d\n",num);
switch (num)
{
case 7:
ESP_LOGI(TAG, "native ota...\n");
led_rgb_blink(255,0,0,2,0,0,0,0);
native_ota_start();
break;
case 6:
//打开/关闭雷达
led_rgb_blink(0,0,255,2,0,6,0,0);
is_radar=is_radar==1 ? 0:1;
write_is_radar();
break;
case 5:
//遥控清码
ESP_LOGI(TAG, "rf clear code ...\n");
led_rgb_blink(0,0,255,2,0,5,0,0);
is_rf_clear=1;
rf_clear_code();
break;
case 4:
//遥控学习
ESP_LOGI(TAG, "rf learning... \n");
led_rgb_blink(0,0,255,2,0,4,0,0);
is_rf_learn=1;
rf_learn();
break;
case 3:
if(is_ap!=1){
// 打开ap
ESP_LOGI(TAG, "open access point \n");
is_ap=1;
ap_start();
}else{
//重启
device_restart();
}
break;
case 2:
ESP_EARLY_LOGI(TAG, "switch light \n");
light_status=light_status==0?1:0;
led_status();
write_light_status();
break;
default:
break;
}
// mqtt发布状态
if(is_wifi_offline==0 && wifi_status==1 ){
publishSetting();
publishStatus();
}
}
void button_start()
{
printf("before btn init, heap: %d\n", esp_get_free_heap_size());
//初始化继电器引脚
gpio_pad_select_gpio(IO_RELAY);
gpio_set_direction(IO_RELAY,GPIO_MODE_OUTPUT);
//初始化按键
button_config_t cfg = {
.type = BUTTON_TYPE_GPIO,
.gpio_button_config = {
.gpio_num = IO_SWITCH_BUTTON,
.active_level = 0,
},
};
button_handle_t gpio_btn = iot_button_create(&cfg);
if(NULL == gpio_btn) { ESP_LOGE(TAG, "Button create failed"); }
iot_button_register_cb(gpio_btn, BUTTON_SINGLE_CLICK, button_single_click_cb); //短按
iot_button_register_cb(gpio_btn, BUTTON_LONG_PRESS_START, button_long_press_start_cb); //长按
iot_button_register_cb(gpio_btn, BUTTON_PRESS_REPEAT, button_press_repeat_cb); //连续短按
}
/************************************* begin RF接收信号 ***************************************/
static void process_rf_func(uint8_t function){
if(function==1){
//打开关闭继电器
ESP_LOGI(TAG, "switch relay\n");
if(relay_status==0){
open_relay();
relay_status=1;
}else if(relay_status==1){
close_relay();
relay_status=0;
}
write_relay_status();
}else if(function==2){
//打开关闭灯
ESP_LOGI(TAG, "switch light\n");
light_status=light_status==0?1:0;
led_status();
}else if(function==3){
//打开关闭雷达
ESP_LOGI(TAG, "switch radar\n");
if(is_radar==0){
is_radar=1;
}else if(is_radar==1){
is_radar=0;
}
write_is_radar();
}else if(function==4){
//打开关闭报警
ESP_LOGI(TAG, "switch alarm\n");
if(is_alarm==0){
is_alarm=1;
}else if(is_alarm==1){
is_alarm=0;
}
write_is_alarm();
}else if(function==5){
ESP_LOGI(TAG, "smart config\n");
if(is_smart_config==0){
ESP_LOGI(TAG, "begin smargconfig\n");
// wifi_mqtt_stop();
is_smart_config=1;
//蓝灯闪烁
// led_rgb_blink(0,0,255,2,0,0,0,0);
//智能配网
smart_config_start();
}else{
is_smart_config=0;
ESP_LOGI(TAG, "device restart\n");
device_restart();
}
}
// mqtt发布状态
if(is_wifi_offline==0 && wifi_status==1 ){
publishStatus();
publishSetting();
}
}
//RF接收任务
static void rf_receiver_task(void *arg) {
ESP_LOGI(TAG, "begin rf receiver");
// uint32_t gpio_num = (uint32_t) arg;
while(true)
{
if(gpio_get_level(IO_RF_RECEIVER_A)==1)
{
process_rf_func(rf_one_func);
}else if(gpio_get_level(IO_RF_RECEIVER_B)==1)
{
process_rf_func(rf_two_func);
}else if(gpio_get_level(IO_RF_RECEIVER_C)==1)
{
process_rf_func(rf_three_func);
}else if(gpio_get_level(IO_RF_RECEIVER_D)==1)
{
process_rf_func(rf_four_func);
}
vTaskDelay(pdMS_TO_TICKS(250));
}
}
void rf_receiver_start(void)
{
// 初始化射频引脚
gpio_pad_select_gpio(IO_RF_RECEIVER_D);
gpio_pad_select_gpio(IO_RF_RECEIVER_C);
gpio_pad_select_gpio(IO_RF_RECEIVER_B);
gpio_pad_select_gpio(IO_RF_RECEIVER_A);
gpio_pad_select_gpio(IO_RF_LEARN_KEY);
gpio_set_direction(IO_RF_RECEIVER_D,GPIO_MODE_INPUT);
gpio_set_direction(IO_RF_RECEIVER_C,GPIO_MODE_INPUT);
gpio_set_direction(IO_RF_RECEIVER_B,GPIO_MODE_INPUT);
gpio_set_direction(IO_RF_RECEIVER_A,GPIO_MODE_INPUT);
gpio_set_direction(IO_RF_LEARN_KEY,GPIO_MODE_OUTPUT);
// gpio_set_pull_mode(IO_RF_RECEIVER_D,GPIO_PULLDOWN_ONLY);
// gpio_set_pull_mode(IO_RF_RECEIVER_C,GPIO_PULLDOWN_ONLY);
// gpio_set_pull_mode(IO_RF_RECEIVER_B,GPIO_PULLDOWN_ONLY);
// gpio_set_pull_mode(IO_RF_RECEIVER_A,GPIO_PULLDOWN_ONLY);
//创建接收信号任务
xTaskCreate(rf_receiver_task, "rf_receiver_task", 2048, (void*) IO_RF_RECEIVER_A, 10, NULL);
}
/************************************* end RF接信号 ***************************************/
/************************************* begin 雷达感应 ***************************************/
//雷达感应任务
static void radar_sense(void *arg) {
ESP_LOGI(TAG, "begin radar sense");
uint16_t num=0;
while(true){
// if(is_radar==1 && is_alarm==1){
// if(gpio_get_level(IO_RADAR_OUT)==1){
// if(relay_status==0) {
// open_relay();
// led_rgb_blink(255,0,0,100,0,0,3,1000); //红灯闪烁
// }
// }
// else{
// //超过指定时间后关闭
// if(relay_status==1 && num >5*radar_interval){
// close_relay();
// light_status=0;
// led_status();
// num=0;
// }
// num++;
// }
// } else if(is_radar==1) {
// if(gpio_get_level(IO_RADAR_OUT)==1){
// if(relay_status==0) {
// open_relay();
// light_status=1;
// led_status();
// }
// }
// else{
// //超过指定时间后关闭
// if(relay_status==1 && num >5*radar_interval){
// close_relay();
// light_status=0;
// led_status();
// num=0;
// }
// num++;
// }
// }
vTaskDelay(pdMS_TO_TICKS(200));
}
}
// void radar_cds_enable(void){
// gpio_set_level(IO_RADAR_CDS,1);
// }
// void radar_cds_disable(void){
// gpio_set_level(IO_RADAR_CDS,0);
// }
void radar_start(void){
// 初始化射频引脚
gpio_pad_select_gpio(IO_RADAR_OUT);
gpio_set_direction(IO_RADAR_OUT,GPIO_MODE_INPUT);
gpio_set_pull_mode(IO_RADAR_OUT, GPIO_PULLDOWN_ONLY);
// gpio_pad_select_gpio(IO_RADAR_CDS);
// gpio_set_direction(IO_RADAR_CDS,GPIO_MODE_INPUT_OUTPUT);
// gpio_set_pull_mode(IO_RADAR_OUT, GPIO_PULLUP_ONLY);
xTaskCreate(radar_sense,"radar_sense", 2048,NULL,10,NULL);
}
/************************************* end 雷达感应 ***************************************/