From 7bff8e2c17c3c03cf55e75fd43e022ebec442630 Mon Sep 17 00:00:00 2001 From: Ivan Li Date: Mon, 24 Apr 2023 20:41:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=80=9A=E8=BF=87=20mDNS=20=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E6=9C=8D=E5=8A=A1=E8=8A=82=E7=82=B9=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + dependencies.lock | 10 ++++++++-- main/CMakeLists.txt | 2 +- main/hw-ms03.c | 27 --------------------------- main/idf_component.yml | 17 +++++++++++++++++ main/main.c | 5 +++-- main/service_discovery.c | 28 ++++++++++++++++++++++++++++ 7 files changed, 58 insertions(+), 32 deletions(-) delete mode 100644 main/hw-ms03.c create mode 100644 main/idf_component.yml create mode 100644 main/service_discovery.c diff --git a/.gitignore b/.gitignore index 82fe3f0..a3f6de1 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ build/ sdkconfig sdkconfig.old .vscode/ +managed_components/ \ No newline at end of file diff --git a/dependencies.lock b/dependencies.lock index b64582b..1a137fe 100644 --- a/dependencies.lock +++ b/dependencies.lock @@ -1,9 +1,15 @@ dependencies: + espressif/mdns: + component_hash: 3f3bf8ff67ec99dde4e935637af087ebc899b9fee396ffa1c9138d3775f1aca4 + source: + service_url: https://api.components.espressif.com/ + type: service + version: 1.0.9 idf: component_hash: null source: type: idf - version: 4.4.4 -manifest_hash: dcf4d39b94252de130019eadceb989d72b0dbc26b552cfdcbb50f6da531d2b92 + version: 5.0.1 +manifest_hash: d23f3b15e8b95dfe5da6cf83768d24158a3a0222f95694b1fa09c3ca8602f79f target: esp32c3 version: 1.0.0 diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index e6703c7..c625f62 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -1,2 +1,2 @@ -idf_component_register(SRCS "hw-ms03.c" "app_nvs.c" "apds_9960.c" "pca9555.c" "i2c.c" "asr_pro.c" "ci_03t.c" "ui_input.c" "ambient_light.c" "temperature.c" "embedded_display.c" "mqtt.c" "main.c" "wifi.c" "light.c" "mqtt.c" "led_strip_encoder/led_strip_encoder.c" +idf_component_register(SRCS "service_discovery.c" "app_nvs.c" "apds_9960.c" "pca9555.c" "i2c.c" "asr_pro.c" "ci_03t.c" "ui_input.c" "ambient_light.c" "temperature.c" "embedded_display.c" "mqtt.c" "main.c" "wifi.c" "light.c" "mqtt.c" "led_strip_encoder/led_strip_encoder.c" INCLUDE_DIRS ".") \ No newline at end of file diff --git a/main/hw-ms03.c b/main/hw-ms03.c deleted file mode 100644 index ef70a48..0000000 --- a/main/hw-ms03.c +++ /dev/null @@ -1,27 +0,0 @@ -#pragma once -#include "driver/gpio.h" -#include "freeRTOS/FreeRTOS.h" - -#define HW_MS03_INT_GPIO 6 -#define BEEP_GPIO 7 - -void hw_ms03_int_handler(void *arg) { - gpio_set_level(BEEP_GPIO, gpio_get_level(HW_MS03_INT_GPIO)); -} - -void hw_ms03_init() { - gpio_config_t io_conf = {}; - - io_conf.mode = GPIO_MODE_INPUT; - io_conf.pull_up_en = 0; - io_conf.pull_down_en = 1; - io_conf.intr_type = GPIO_INTR_ANYEDGE; - io_conf.pin_bit_mask = 1ULL << HW_MS03_INT_GPIO; - gpio_config(&io_conf); - io_conf.mode = GPIO_MODE_OUTPUT; - io_conf.pin_bit_mask = 1ULL << BEEP_GPIO; - io_conf.pull_down_en = 0; - gpio_config(&io_conf); - - gpio_isr_handler_add(HW_MS03_INT_GPIO, hw_ms03_int_handler, NULL); -} \ No newline at end of file diff --git a/main/idf_component.yml b/main/idf_component.yml new file mode 100644 index 0000000..a37f9a3 --- /dev/null +++ b/main/idf_component.yml @@ -0,0 +1,17 @@ +## IDF Component Manager Manifest File +dependencies: + espressif/mdns: "^1.0.9" + ## Required IDF version + idf: + version: ">=5.0.1" + # # Put list of dependencies here + # # For components maintained by Espressif: + # component: "~1.0.0" + # # For 3rd party components: + # username/component: ">=1.0.0,<2.0.0" + # username2/component2: + # version: "~1.0.0" + # # For transient dependencies `public` flag can be set. + # # `public` flag doesn't have an effect dependencies of the `main` component. + # # All dependencies of `main` are public by default. + # public: true diff --git a/main/main.c b/main/main.c index 97b3e5f..5c5af00 100644 --- a/main/main.c +++ b/main/main.c @@ -5,12 +5,12 @@ #include "esp_log.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" -#include "hw-ms03.c" #include "i2c.c" #include "light.c" #include "mqtt.c" #include "pca9555.c" #include "sdkconfig.h" +#include "service_discovery.c" #include "temperature.c" #include "ui_input.c" #include "wifi.c" @@ -27,7 +27,7 @@ void app_main(void) { init_display(); display_print8_str(0, 0, "Ambient Light"); - // hw_ms03_init(); + ci_03t_init(); apds_9960_init(); apds_9960_auto_fetch(); @@ -41,6 +41,7 @@ void app_main(void) { if (connect_wifi()) { light_play(light_mode_idle); } + service_discovery_init(); vTaskDelay(pdMS_TO_TICKS(1000)); mqtt_app_start(); if (waiting_for_mqtt_connected()) { diff --git a/main/service_discovery.c b/main/service_discovery.c new file mode 100644 index 0000000..882e092 --- /dev/null +++ b/main/service_discovery.c @@ -0,0 +1,28 @@ +#pragma once + +#include "esp_err.h" +#include "esp_log.h" +#include "mdns.h" + +static const char *SERVICE_DISCOVERY_TAG = "SERVICE_DISCOVERY_TAG"; + +static void service_discovery_init() { // 初始化 mDNS 服务 + esp_err_t err = mdns_init(); + if (err) { + ESP_LOGE(SERVICE_DISCOVERY_TAG, "MDNS Init failed: %d\n", err); + return; + } + + // 设置 hostname + mdns_hostname_set("ambient-light-board"); + // 设置默认实例 + mdns_instance_name_set("ivan"); + // 添加服务 + mdns_service_add(NULL, "_ambient_light", "_udp", 23042, NULL, 0); + mdns_service_add(NULL, "_http", "_tcp", 80, NULL, 0); + + // 注意:必须先添加服务,然后才能设置其属性 + // web 服务器使用自定义的实例名 + mdns_service_instance_name_set("_ambientlight_web", "_tcp", + "Ambient Light Board Web Server"); +} \ No newline at end of file