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
相关产品推荐
相关产品推荐

