You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP8266通过WiFi与DNS连接Azure MySQL数据库的问题

我来帮你搞定ESP8266连接Azure MySQL的DNS解析难题!

解决ESP8266通过DNS连接Azure MySQL的问题

你遇到的核心痛点是ESP8266原生WiFi库不直接支持域名连接,而Azure MySQL又没有静态IP——其实ESP8266 SDK自带了DNS解析功能,咱们用WiFi.hostByName()就能轻松解决这个问题,把Azure的数据库主机名转换成可直接使用的IP地址。

步骤1:添加DNS解析逻辑

先通过WiFi.hostByName()解析Azure MySQL的主机名,得到对应的IP地址后,再用这个IP和数据库建立连接。

修改后的完整代码示例

#include <WiFi.h>
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>

// 替换成你的WiFi信息
const char* ssid = "你的WiFi名称";
const char* password = "你的WiFi密码";

// Azure MySQL配置信息
byte mac_addr[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char hostname[] = "something.mysql.database.azure.com"; // 你的Azure MySQL主机名
IPAddress server_ip; // 存储解析后的IP地址
const char* user = "你的Azure数据库用户名"; // 格式是:用户名@服务器前缀,比如xxx@something
const char* db_password = "你的Azure数据库密码";
const char* db_name = "你的数据库名称";

WiFiClient client;
MySQL_Connection conn((Client *)&client);

void setup() {
  Serial.begin(115200);
  delay(10);

  // 连接WiFi
  Serial.print("正在连接WiFi: ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWiFi连接成功!");
  Serial.println("设备本地IP: ");
  Serial.println(WiFi.localIP());

  // 解析Azure MySQL主机名到IP
  Serial.print("正在解析主机名: ");
  Serial.println(hostname);
  if (WiFi.hostByName(hostname, server_ip)) {
    Serial.print("解析成功,IP地址: ");
    Serial.println(server_ip);
  } else {
    Serial.println("主机名解析失败!");
    while(1); // 解析失败则暂停程序,排查问题
  }

  // 连接MySQL数据库
  Serial.print("正在连接Azure MySQL... ");
  if (conn.connect(server_ip, 3306, user, db_password)) {
    Serial.println("连接成功!");
    // 可选:切换到目标数据库
    MySQL_Cursor *cur = new MySQL_Cursor(&conn);
    cur->execute("USE " YOUR_DB_NAME ";");
    delete cur;
  } else {
    Serial.println("连接失败!");
  }
}

void loop() {
  // 在这里添加你的数据库操作逻辑,比如查询、插入数据等
  delay(1000);
}

关键细节说明

  • DNS解析核心:WiFi.hostByName()是ESP8266 WiFi库内置的函数,专门用来把域名转换成IP地址,完美适配Azure没有静态IP的场景。
  • Azure MySQL注意事项:
    • 一定要在Azure门户的MySQL防火墙规则里,允许ESP8266的公网IP访问(测试阶段可以暂时开放所有IP,确认连接正常后再缩小范围)。
    • 用户名格式必须是用户名@服务器前缀,比如你的服务器是something.mysql.database.azure.com,用户名就得是xxx@something。
    • 默认连接端口是3306,如果Azure里修改过端口,要同步修改代码里的端口号。

常见问题排查

  • 解析失败:先检查WiFi连接是否正常,也可以尝试解析google.com这类通用域名,确认ESP8266的DNS功能是否正常。
  • 连接失败:核对Azure MySQL的防火墙规则、用户名格式、密码是否正确,同时确认服务器处于运行状态。

内容的提问来源于stack exchange,提问作者MBJensen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:59:26