【ESP32 通知铃 boost_en引脚发送脉冲】
安装idf (esp32 的编译下载工具)
esp_idf_4.4.2下载(解压rar后再ubuntu 下解压)
espressif官方文档, 可以查看具体的引脚信息
https://www.espressif.com.cn/zh-hans/support/documents/technical-documents?keys=&field_type_tid%5B%5D=266
修改编译通知铃的固件
From 3e784e5bd34ed9ae97eb8f781a37985b83447e16 Mon Sep 17 00:00:00 2001
From: liangji <liangji@keenon.com>
Date: Thu, 23 Mar 2023 14:40:34 +0800
Subject: [PATCH] test: boost_en send 100ms pluse
Signed-off-by: liangji <liangji@keenon.com>
---
bell/main/espnow_doorbell_main.c | 68 ++++++++++++++++++++++++++++++++++------
1 file changed, 58 insertions(+), 10 deletions(-)
diff --git a/bell/main/espnow_doorbell_main.c b/bell/main/espnow_doorbell_main.c
index 4add99e..ef52a04 100644
--- a/bell/main/espnow_doorbell_main.c
+++ b/bell/main/espnow_doorbell_main.c
@@ -213,6 +213,19 @@ static void doorbell_espnow_send_cb(const uint8_t *mac_addr, esp_now_send_status
}
}
+static void liangji_boost_en_action(void)
+{
+ ESP_LOGE(TAG, "liangji3 set boost_en 1");
+ gpio_set_level(14, 1);
+ vTaskDelay(100 / portTICK_RATE_MS);
+ ESP_LOGE(TAG, "liangji3 set boost_en 0");
+ gpio_set_level(14, 0);
+ //vTaskDelay(100 / portTICK_RATE_MS);
+ //vTaskDelete(NULL);
+ //vTaskDelay(100 / portTICK_RATE_MS);
+ //ESP_LOGD(TAG, "liangji set boost_en 0");
+}
+
static void doorbell_espnow_recv_cb(const uint8_t *mac_addr, const uint8_t *data, int len)
{
doorbell_espnow_event_t evt;
@@ -223,13 +236,28 @@ static void doorbell_espnow_recv_cb(const uint8_t *mac_addr, const uint8_t *data
return;
}
+ print_bytes("liangji espnow recv: ", (uint8_t *)data, len);
+ //printf("liangji data[0]=%02x data[1]=%02x data[2]=%02x data[3]=%02x data[4]=%02x data[5]=%02x\n", data[0], data[1], data[2], data[3], data[4], data[5]);
+ if(data[2]==0xde && data[3]==0xff)
+ {
+ ESP_LOGE(TAG, "liangji recv transport!!!!!!!!!!!!!!!!!!!!!!**********************!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+ liangji_boost_en_action();
+ //判断调度模块条件
+ //xTaskCreate(liangji_boost_en_action, "liangji_boost_en_action", 2048, NULL, 0, NULL);
+ //xTaskCreate(liangji_boost_en_action, "liangji_boost_en_action", 2048, NULL, 2, NULL);
+ }
+
if(data[0]!=0xaa || data[1]!=0xaa)
+ {
+ //ESP_LOGE(TAG, "liangji not aa aa!!!!!!!!!!!!!!!!!!!!!!**********************!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
return;
+ }
- //print_bytes("espnow recv: ", (uint8_t *)data, len);
+ //print_bytes("liangji espnow recv: ", (uint8_t *)data, len);
evt.id = DOORBELL_ESPNOW_RECV_CB;
memcpy(recv_cb->mac_addr, mac_addr, ESP_NOW_ETH_ALEN);
+
if ((data[2] & 0xF0) == WIFI_OTA_CMD_DATA) {
// recv wifi ota data
if (len < WIFI_OTA_CMD_SIZE) {
@@ -245,6 +273,7 @@ static void doorbell_espnow_recv_cb(const uint8_t *mac_addr, const uint8_t *data
}
}
else if (len >= TRANS_DATA_MIN_LEN) {
+
// recv transport data
if (memcmp((uint8_t *)send_param->src_mac,
(uint8_t *)data + TRANS_DATA_MIN_LEN - ESP_NOW_ETH_ALEN, // mac offset
@@ -829,7 +858,9 @@ static esp_err_t doorbell_espnow_init(void)
return ESP_FAIL;
}
memset(peer, 0, sizeof(esp_now_peer_info_t));
- peer->channel = nvs_cfg.wifi_channel;
+ //peer->channel = nvs_cfg.wifi_channel;
+ printf("nvs channel = %d\n", nvs_cfg.wifi_channel);
+ peer->channel = 5;
peer->ifidx = ESPNOW_WIFI_IF;
peer->encrypt = false;
memcpy(peer->peer_addr, s_doorbell_broadcast_mac, ESP_NOW_ETH_ALEN);
@@ -896,6 +927,7 @@ void doorbell_uart_init(void) {
static doorbell_espnow_send_param_t * send_param_init(void)
{
+ ESP_LOGE(TAG, "liangji send_param_init");
doorbell_espnow_send_param_t *send_param = NULL;
/* Initialize sending parameters. */
@@ -1194,7 +1226,8 @@ void doorbell_gpio_init(void)
ESP_LOGI("doorbell_gpio_init", "disable unused gpios");
gpio_config_t io_conf;
io_conf.intr_type = GPIO_INTR_DISABLE;
- io_conf.pin_bit_mask = 0x0700ecd035;
+ //io_conf.pin_bit_mask = 0x0700ecd035;
+ io_conf.pin_bit_mask = 0x0700ec9035;
io_conf.mode = GPIO_MODE_DISABLE;
io_conf.pull_up_en = 0;
io_conf.pull_down_en = 0;
@@ -1207,6 +1240,14 @@ void doorbell_gpio_init(void)
gpio_config(&io_conf);
gpio_set_level(GPIO_OUTPUT_WORK_LED, 1);
+ ESP_LOGI("liangji doorbell_gpio_init", "liangji3 enable boost_en");
+ io_conf.pin_bit_mask = 1ULL << 14;
+ io_conf.mode = GPIO_MODE_OUTPUT;
+ io_conf.pull_up_en = 0;
+ io_conf.pull_down_en = 1;
+ gpio_config(&io_conf);
+ gpio_set_level(14, 0);
+
#if CONFIG_ESP_WORK_LED_FLASH
xTaskCreate(esp_work_led_task, "esp_work_led_task", 2048, NULL, 1, NULL);
#endif
@@ -1295,26 +1336,30 @@ static void doorbell_pwr_ctrl_init(void)
// enable power
gpio_config_t io_conf;
io_conf.intr_type = GPIO_INTR_DISABLE;
- io_conf.pin_bit_mask = 1ULL << CONFIG_ESP_PWR_CTRL_GPIO;
- io_conf.mode = GPIO_MODE_OUTPUT;
+ io_conf.pin_bit_mask = 1ULL << CONFIG_ESP_PWR_CTRL_GPIO;//gpio27 门铃点电源控制
+ io_conf.mode = GPIO_MODE_OUTPUT; //gpio27 为输出模式
io_conf.pull_up_en = 0;
io_conf.pull_down_en = 0;
- gpio_config(&io_conf);
+ gpio_config(&io_conf); //配置生效
- gpio_set_level(CONFIG_ESP_PWR_CTRL_GPIO, 1);
- vTaskDelay(200 / portTICK_RATE_MS);
+ gpio_set_level(CONFIG_ESP_PWR_CTRL_GPIO, 1); //开始供电
+ vTaskDelay(200 / portTICK_RATE_MS); //延时200ms
}
void app_main(void)
{
+ ESP_LOGE(TAG, "liangji start now !!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
+
+ //xTaskCreate(liangji_boost_en_action, "liangji_boost_en_action", 2048, NULL, 2, NULL);
+ //读取寄存器,获取led灯的颜色和亮度
nvs_storage_init();
nvs_cfg_restore(&nvs_cfg);
print_bytes("nvs_cfg: ", (uint8_t *)&nvs_cfg, sizeof(nvs_cfg_t));
led_info.color = nvs_cfg.led_color;
led_info.brightness = nvs_cfg.led_brightness;
- doorbell_pwr_ctrl_init();
- led_strip_t *strip = led_ws2813_init();
+ doorbell_pwr_ctrl_init(); //初始化门铃电源引脚
+ led_strip_t *strip = led_ws2813_init();//led灯芯片
#if CONFIG_ESPNOW_ENABLE_SLEEP_MODE
xTaskCreate(doorbell_led_task, "doorbell_led_task", 2048, strip, 2, &led_task_handle);
#else
@@ -1331,7 +1376,10 @@ void app_main(void)
doorbell_button_init();
doorbell_state_ctl_init(&nvs_cfg);
+ ESP_LOGE(TAG, "liangji init over !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
+
#if CONFIG_ESPNOW_ENABLE_SLEEP_MODE
+ ESP_LOGE(TAG, "liangji now in enable sleep mode!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
doorbell_sleep_mode_init();
uint16_t work_time_total = 0;
--
2.7.4
. ./expose.sh #更新环境变量
idf.py flash -p /dev/ttyUSB0 -b 921600 monitor #烧录固件并且串口输出 ctrl ] 退出
idf.py -p /dev/ttyUSB0 monitor #串口输出