【ESP32 通知铃 boost_en引脚发送脉冲】

【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

修改编译通知铃的固件

通知铃固件esp32源码

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 #串口输出
### 回答1: ESP32 GATTC_MULTI_CONNECT 是ESP32蓝牙 GATTC(Generic Attribute Profile - Client)库中的一个功能,它允许ESP32与多个GATT服务器建立连接。 GATT是蓝牙技术中的一部分,用于在蓝牙设备之间传输数据。GATT客户端表示蓝牙设备作为数据接收方,它能够连接到一个或多个GATT服务器,并从这些服务器读取数据或向它们写入数据。 ESP32是一款功能强大的蓝牙开发板,其中一个重要的特性是其蓝牙支持。通过使用ESP32的GATTC_MULTI_CONNECT功能,开发人员能够在一个ESP32设备上同时连接到多个GATT服务器。 这个功能有很多实际应用场景。比如,一个智能家居系统可能有多个传感器设备,每个设备都提供了自己的GATT服务器以供数据读取和控制。通过GATTC_MULTI_CONNECT功能,ESP32可以同时连接到所有这些设备,从中读取数据并控制它们。 另一个例子是物联网中的传感器网络。在一个物联网传感器网络中,可能有多个传感器节点,每个节点都可以通过蓝牙与中心节点通信。通过ESP32的GATTC_MULTI_CONNECT功能,中心节点可以同时连接到多个传感器节点,从它们中读取数据并采取相应的措施。 总结而言,ESP32 GATTC_MULTI_CONNECT功能使得ESP32能够同时连接到多个GATT服务器。这个功能在智能家居系统、物联网传感器网络等场景中具有重要意义,可以实现多设备数据读取和控制。 ### 回答2: ESP32 GATTC_MULTI_CONNECT是ESP32蓝牙库中的一个特性,它允许ESP32设备通过GATT客户端同时连接多个GATT服务器。GATT是一种通用属性配置文件,它定义了在蓝牙低功耗设备之间进行数据传输的方式。 通常情况下,蓝牙设备只能与一个GATT服务器进行连接。但是,有些应用场景需要与多个GATT服务器通信,例如在智能家居系统中控制多个设备。这就需要使用到GATTC_MULTI_CONNECT特性。 通过使用GATTC_MULTI_CONNECT,ESP32设备可以同时与多个GATT服务器进行连接,并在这些连接之间切换。在每个连接上,设备可以执行各种GATT操作,如读取属性、写入属性、订阅通知等。 此外,ESP32的GATTC_MULTI_CONNECT还提供了一些优化,以提高多个连接之间的并发性能。例如,设备可以根据每个连接的优先级来动态调整操作的时间分配,从而实现更好的响应速度。 使用ESP32 GATTC_MULTI_CONNECT时,开发人员需要注意以下几点: 1. 需要初始化和配置多个GATT连接。可以使用ESP-IDF提供的API来实现。 2. 可以为每个连接设置不同的处理器回调函数,以处理在每个连接上的GATT事件。 3. 需要关注连接的优先级和操作的时间分配,以实现最佳性能和响应。 4. 需要注意设备的资源和容量限制,以避免连接过多导致性能下降或系统崩溃。 总而言之,ESP32 GATTC_MULTI_CONNECT是ESP32蓝牙库中的一个功能强大的特性,使得ESP32设备可以同时与多个GATT服务器进行连接,为各种应用场景提供了更大的灵活性和可扩展性。 ### 回答3: ESP32的Gattc_multi_connect是一个针对多个连接设备的GATT(通用属性)客户端的功能。ESP32是一种集成了Wi-Fi和蓝牙功能的微控制器,它支持同时与多个蓝牙设备建立连接。 Gattc_multi_connect允许ESP32与多个蓝牙设备同时通信。在使用Gattc_multi_connect之前,我们需要先在ESP32上初始化一个GATT客户端,并为每个要连接的设备创建一个连接配置。接下来,我们可以使用Gattc_multi_connect来连接到多个设备,并同时进行数据交换。 Gattc_multi_connect提供了以下函数用于管理多个GATT连接: 1. esp_ble_gattc_multi_get_service:使用此函数可以获取多个连接中的所有GATT服务。 2. esp_ble_gattc_multi_get_characteristic:此函数可以获取多个连接中的所有GATT特征。 3. esp_ble_gattc_multi_get_descriptor:使用此函数可以获取多个连接中的所有GATT描述符。 4. esp_ble_gattc_multi_register_for_notify:使用此函数可以在多个连接上注册通知事件。 5. esp_ble_gattc_multi_unregister_for_notify:此函数用于取消在多个连接上注册的通知事件。 通过使用Gattc_multi_connect功能,我们可以方便地在ESP32上与多个蓝牙设备进行交互。这对于需要同时与多个设备进行通信的应用程序非常有用,例如智能家居系统或传感器网络。同时,ESP32的Gattc_multi_connect功能还提供了灵活的管理和控制多个连接的能力,以便满足不同应用场景的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值