mirror of
https://github.com/alexandrebobkov/ESP-Nodes.git
synced 2025-08-14 07:34:11 +00:00
default code
This commit is contained in:
135
ESP32-Rainmaker-Multidevice/multi_device/main/app_driver.c
Normal file
135
ESP32-Rainmaker-Multidevice/multi_device/main/app_driver.c
Normal file
@@ -0,0 +1,135 @@
|
||||
/*
|
||||
This example code is in the Public Domain (or CC0 licensed, at your option.)
|
||||
|
||||
Unless required by applicable law or agreed to in writing, this
|
||||
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||
CONDITIONS OF ANY KIND, either express or implied.
|
||||
*/
|
||||
|
||||
#include <sdkconfig.h>
|
||||
#include <freertos/FreeRTOS.h>
|
||||
#include <freertos/timers.h>
|
||||
|
||||
#include <iot_button.h>
|
||||
#include <esp_rmaker_core.h>
|
||||
#include <esp_rmaker_standard_types.h>
|
||||
#include <esp_rmaker_standard_params.h>
|
||||
|
||||
#include <app_reset.h>
|
||||
#include <ws2812_led.h>
|
||||
#include "app_priv.h"
|
||||
|
||||
/* This is the button that is used for toggling the power */
|
||||
#define BUTTON_GPIO CONFIG_EXAMPLE_BOARD_BUTTON_GPIO
|
||||
#define BUTTON_ACTIVE_LEVEL 0
|
||||
/* This is the GPIO on which the power will be set */
|
||||
#define OUTPUT_GPIO CONFIG_EXAMPLE_OUTPUT_GPIO
|
||||
|
||||
/* These values correspoind to H,S,V = 120,100,10 */
|
||||
#define DEFAULT_RED 0
|
||||
#define DEFAULT_GREEN 25
|
||||
#define DEFAULT_BLUE 0
|
||||
|
||||
#define WIFI_RESET_BUTTON_TIMEOUT 3
|
||||
#define FACTORY_RESET_BUTTON_TIMEOUT 10
|
||||
|
||||
static bool g_power_state = DEFAULT_SWITCH_POWER;
|
||||
static float g_temperature = DEFAULT_TEMPERATURE;
|
||||
static TimerHandle_t sensor_timer;
|
||||
|
||||
static void app_sensor_update(TimerHandle_t handle)
|
||||
{
|
||||
static float delta = 0.5;
|
||||
g_temperature += delta;
|
||||
if (g_temperature > 99) {
|
||||
delta = -0.5;
|
||||
} else if (g_temperature < 1) {
|
||||
delta = 0.5;
|
||||
}
|
||||
esp_rmaker_param_update_and_report(
|
||||
esp_rmaker_device_get_param_by_type(temp_sensor_device, ESP_RMAKER_PARAM_TEMPERATURE),
|
||||
esp_rmaker_float(g_temperature));
|
||||
}
|
||||
|
||||
float app_get_current_temperature()
|
||||
{
|
||||
return g_temperature;
|
||||
}
|
||||
|
||||
esp_err_t app_sensor_init(void)
|
||||
{
|
||||
g_temperature = DEFAULT_TEMPERATURE;
|
||||
sensor_timer = xTimerCreate("app_sensor_update_tm", (REPORTING_PERIOD * 1000) / portTICK_PERIOD_MS,
|
||||
pdTRUE, NULL, app_sensor_update);
|
||||
if (sensor_timer) {
|
||||
xTimerStart(sensor_timer, 0);
|
||||
return ESP_OK;
|
||||
}
|
||||
return ESP_FAIL;
|
||||
}
|
||||
|
||||
static void app_indicator_set(bool state)
|
||||
{
|
||||
if (state) {
|
||||
ws2812_led_set_rgb(DEFAULT_RED, DEFAULT_GREEN, DEFAULT_BLUE);
|
||||
} else {
|
||||
ws2812_led_clear();
|
||||
}
|
||||
}
|
||||
|
||||
static void app_indicator_init(void)
|
||||
{
|
||||
ws2812_led_init();
|
||||
app_indicator_set(g_power_state);
|
||||
}
|
||||
|
||||
static void push_btn_cb(void *arg)
|
||||
{
|
||||
bool new_state = !g_power_state;
|
||||
app_driver_set_state(new_state);
|
||||
esp_rmaker_param_update_and_report(
|
||||
esp_rmaker_device_get_param_by_type(switch_device, ESP_RMAKER_PARAM_POWER),
|
||||
esp_rmaker_bool(new_state));
|
||||
}
|
||||
|
||||
static void set_power_state(bool target)
|
||||
{
|
||||
gpio_set_level(OUTPUT_GPIO, target);
|
||||
app_indicator_set(target);
|
||||
}
|
||||
|
||||
void app_driver_init()
|
||||
{
|
||||
button_handle_t btn_handle = iot_button_create(BUTTON_GPIO, BUTTON_ACTIVE_LEVEL);
|
||||
if (btn_handle) {
|
||||
/* Register a callback for a button tap (short press) event */
|
||||
iot_button_set_evt_cb(btn_handle, BUTTON_CB_TAP, push_btn_cb, NULL);
|
||||
/* Register Wi-Fi reset and factory reset functionality on same button */
|
||||
app_reset_button_register(btn_handle, WIFI_RESET_BUTTON_TIMEOUT, FACTORY_RESET_BUTTON_TIMEOUT);
|
||||
}
|
||||
|
||||
/* Configure power */
|
||||
gpio_config_t io_conf = {
|
||||
.mode = GPIO_MODE_OUTPUT,
|
||||
.pull_up_en = 1,
|
||||
};
|
||||
io_conf.pin_bit_mask = ((uint64_t)1 << OUTPUT_GPIO);
|
||||
/* Configure the GPIO */
|
||||
gpio_config(&io_conf);
|
||||
app_indicator_init();
|
||||
app_sensor_init();
|
||||
}
|
||||
|
||||
int IRAM_ATTR app_driver_set_state(bool state)
|
||||
{
|
||||
if(g_power_state != state) {
|
||||
g_power_state = state;
|
||||
set_power_state(g_power_state);
|
||||
}
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
bool app_driver_get_state(void)
|
||||
{
|
||||
return g_power_state;
|
||||
}
|
Reference in New Issue
Block a user