ESP32-mDNS使用笔记

本文记录了ESP32使用mDNS服务,避免通过IP地址访问的步骤。涉及sdkconfig配置,设置SSID和password,安装npm v14.15.1 LTS,编译烧录,以及通过特定域名访问ESP32的网页效果,网页内容包括Home、Chart和Light三个部分,使用了md的iconfont。

ESP32-mDNS使用笔记

目的:通过域名去访问,而不通过IP地址

例程采用example\protocols\http_server\restful_server

实现步骤参考工程目录下的README.md

1、sdkconfig配置

配置ssid和password

CONFIG_EXAMPLE_WIFI_SSID="PDCN"
CONFIG_EXAMPLE_WIFI_PASSWORD="1234567890"

使能GONFIG_EXAMPLE_WEBE_DEPLOY_SF

#
# Example Configuration
#
CONFIG_EXAMPLE_MDNS_HOST_NAME="esp-home"
# CONFIG_EXAMPLE_WEB_DEPLOY_SEMIHOST is not set
# CONFIG_EXAMPLE_WEB_DEPLOY_SD is not set
CONFIG_EXAMPLE_WEB_DEPLOY_SF=y
CONFIG_EXAMPLE_WEB_MOUNT_POINT="/www"
# end of Example Configuration

2、 安装npm

在node官网https://nodejs.org/en/下载,当前下载版本版本14.15.1LTS

cd path_to_this_example/front/web-demo
npm install
npm run build

path_to_this_example为工程路径

build完成生成dist文件夹

3、编译build & 烧录flash

基本操作…,略

4、打开浏览器

输入域名http://esp-home.local

如要修改域名,以dobot-home为例

sdkconfig中修改

CONFIG_EXAMPLE_MDNS_HOST_NAME="dobot-home"

front/src/vue.config.js中修改

target: 'http://dobot-home.local:80',

5、网页效果

网页效果在front/src中修改
例程网页包括以下三个部分,在front/src/views路径下

  • Home
  • Chart
  • Light
    esp_home_local

6、vue

import Vue from 'vue'
import Vuetify from 'vuetify/lib'
import 'vuetify/src/stylus/app.styl'

Vue.use(Vuetify, {
  iconfont: 'md',
})

这里iconfont选择md(material design)

https://material.io/resources/icons/?style=baseline

ESP32使用mDNS(多播DNS)功能可以实现设备在网络中通过域名访问,而不是依赖IP地址。这种机制常用于本地网络服务发现,例如构建一个可通过`http://esp32.local`访问的Web服务器[^1]。 ### 配置mDNS服务的基本步骤 在ESP32上启用mDNS功能需要进行以下配置: 1. **初始化mDNS服务** 调用`mdns_init()`函数来初始化mDNS服务。这一步是所有后续操作的前提。 2. **设置主机名和实例名称** 使用`mdns_hostname_set()`和`mdns_instance_name_set()`函数设置设备的主机名和mDNS服务实例名称。例如,将主机名设为`esp32`,实例名称设为`ESP32-WebServer`。 3. **添加mDNS服务记录** 使用`mdns_service_add()`函数注册一个服务。例如,注册一个HTTP服务(`_http._tcp`)运行在端口`80`上,并附加一些描述信息(如`{"board", "esp32"}`)。 以下是一个完整的mDNS配置示例代码: ```c #include "mdns.h" #define EXAMPLE_MDNS_HOST_NAME "esp32" #define EXAMPLE_MDNS_INSTANCE "ESP32-WebServer" static void initialise_mdns(void) { mdns_init(); mdns_hostname_set(EXAMPLE_MDNS_HOST_NAME); mdns_instance_name_set(EXAMPLE_MDNS_INSTANCE); // 添加一个HTTP服务 mdns_txt_item_t serviceTxtData[] = { {"board", "esp32"}, {"path", "/"} }; ESP_ERROR_CHECK(mdns_service_add("ESP32-WebServer", "_http", "_tcp", 80, serviceTxtData, sizeof(serviceTxtData) / sizeof(serviceTxtData[0]))); } void app_main() { esp_err_t ret = nvs_flash_init(); if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { ESP_ERROR_CHECK(nvs_flash_erase()); ret = nvs_flash_init(); } ESP_ERROR_CHECK(ret); ESP_ERROR_CHECK(esp_netif_init()); ESP_ERROR_CHECK(esp_event_loop_create_default()); // 初始化mDNS服务 initialise_mdns(); // 连接Wi-Fi并启动Web服务器 ESP_ERROR_CHECK(example_connect()); ESP_ERROR_CHECK(start_pic_server()); ESP_LOGI(TAG, "Begin Pic Server"); } ``` ### mDNS服务的运行机制 一旦mDNS服务被正确配置并启动,设备将能够通过局域网内的域名解析访问。例如,在浏览器中输入`http://esp32.local`,即可访问ESP32提供的Web服务[^1]。mDNS服务通过多播方式在网络中广播自己的存在,并响应来自其他设备的查询请求。 在Windows系统中,从Windows 10开始,系统原生支持mDNS协议,因此可以直接通过域名访问设备。对于其他平台,如Linux,可以使用开源工具如Avahi来实现mDNS服务发现和解析[^3]。 ### mDNS的局限性与注意事项 虽然mDNS简化了局域网内的设备发现和访问流程,但其也存在一些局限性: - **仅限局域网使用**:mDNS不适用于广域网(WAN),只能在本地网络中使用- **潜在的安全风险**:由于mDNS基于多播通信,攻击者可能伪造服务响应,导致中间人攻击或服务劫持。 - **命名冲突**:多个设备使用相同主机名时可能导致解析失败或不可预测的行为。 因此,在实际部署中应结合具体场景合理使用mDNS功能,并考虑其安全性问题[^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值