学习日记——ESP8266DNS域名系统(2020.7.9)

定义

  • 域名:串用点分隔的字符是互联网上某台/某组计算机名称。
  • 域名系统,可以让我们直接使用域名来使用物联网上对应的服务器
  • 例如访问百度搜索服务器
    1.直接使用IP地址访问(123.125.115.110)(IP地址比较繁杂,不好记忆)
    2.通过百度搜索服务器的域名,首先域名系统会将域名转换为相应的IP地址,通过IP地址访问服务器

例程(通过瑞生网的域名来解析IP地址)

#def ine  DN_ Server   "www. rat i onmcu. com"// [瑞生网]域名
  • 首先将ESP8266设为STA模式,并进行软件定时
void ICACHE_ FLASH_ ATTR user_ init (void)
{
	uart_ init(115200, 115200); // 初始化串口波特率
	0s_de lay, _us (10000): // 等待串口稳定
	// OLED显示初始化
	OLED_ Init();// OLED初始化.
	OLED_ ShowStr ing (0, 0, "ESP8266-Client"); // ESPB266-CI ient
	OLED_ ShowString(0. 2."IP:"):// ESP8266_ IP
	OLED_ ShowStr ing (0, 4," rat ionmcu. com"); // www. rat i onmcu. com
	OLED_ ShowString(0. 6. "IP:");//服务器.IP
	LED_ Init_ JX0);// LED初始化
	ESP8266_ STA_ Init_ JXO ;// ESP8266. STA初始化
	OS_ Timer_ IP_ Init_ JX(1000. 1);// 1秒重复定时(获取1P地址)
}	
  • 在定时回调函数中,如果成功获取到IP地址
void ICACHE_ FLASH_ ATTR 0S_ Timer_IP_ cb (void)
{
	u8 C_ LED Flash = 0;// LED闪烁计次
	struct ip_ info ST_ ESP8266 IP: // ESP8266的IP信息
	u8 ESP8266_ IP[4] ;// ESP8266的IP地址
	//成功接入WIFI [STA模式下,如果开启DHCP (默认)_则ES08266的 IP地址由WIFI路由器自动分配]
	if( wifi_ station. get. connect _status ()=STATI0W_ GOT_ 1P) // 判断是否获取IP
	{
		wifi_ get_ ip. info (STATION_ IF, &ST ESP8268_ _IP); 1// 获取STA的IP信息
		ESP8266_ TP[0] = ST_ ESP8266_ IP. ip. addr:// IP地址高八位= addr低八位
		ESP8266_ IP[1] = ST_ ESP8266_ IP. ip. addr>>8;// IP地址次高八位== addr次低八位
		ESP8266_ IP[2] = ST_ ESP8266_ IP. ip. addr>>16;// IP地址次低八位== addr 次高八位
		ESP8266_ IP[3] = ST _ESP8266_ IP. ip. addr>>24:// IP地址低八位= addr高八位
		//显示ESP8266的IP地址
		os_ printf ("\nESP8266 IP = %d. %d. %d. %d\n", ESP8266_ 1P[0], ESP8266_ IP[1], ESP8266_ IP[2].ESP8266_ IP[3].);
		ESP826OLED_ ShowIP (24. 2, ESP8266_ IP); // OLED显 示ESP8266的IP地址
		//接入WIFI成功后,LED快闪3次
		for(; C_ LED_ Flash<=5; C LED_ Flash++)
		{
			GPI0_ OUTPUT_ SET(GPI0_ 1D PIN(4)(C LED _Flash%2)) ;
			delay_ ms (100) ; 
		}
		os_ timer. disarm(&0S_ Timer_ IP); // 关闭定时器
		ESP8266 NetCon_ Init_ Jx();//初始化网络连接(TCP通信)
	}
}	
  • 在网络连接初始化函数当中
void ICACHE FLASH ATTR ESP8266 NetCon Init JX()
{
	//结构体赋值
	ST_ NetCon. type = ESPCOWW_ TCP ;//设置为TCP协议
	ST_ NetCon. proto. tcp = (esp_ _tcp *) os_ zalloc (sizeof (esp_ tcp)); // 开辟内存
	// ESP8266作为TCP_ Client,想要连接TCP. Server,必须知道TCP_ Server 的IP地址
	ST. NetCon. preo. top->loca1. port = espconn_ port() ; // 本地端口[获取可用端口]
	ST NetCon. proto. tcp->remote port = 80; //自标端口[HTTP端口号80]
	//获取域名所对应的IP地址
	// [参数1:网络连接结构体指针/参数2:域名字符串指针/参数3: IP地址结构体指针/参数4:回调函数]
	espconn_ gethostbyname (&ST_ NetCon, DN Server, &IP_ Server, DNS_ Over_ _Cb_ JX) ; 
	//注册连接成功回调函数、异常断开回调函数
	espconn_ regist_ connectcb (&ST NetCon, ESP8266 TCP. Connect. Cb _JX) ; // 注册TCP连接成功建立的回调函数
	espconn_ regist_ r econcb (&ST_ NetCon, ESP8266 TCP_ Break_ _Cb_ _Jx) ;// 注册TCP连接异常断开的回调函数

  • 域名解析结束回调函数
    DNS域名解析结束_回调函数[参数1:域名字符串指针/参数2: IP地址结构体指针/参数3:网络连接结构体指针]
void ICACHE_ FLASH_ ATTR DNS_ 0ver_ Cb_ JX (const char * name, ip_ addr_ t *ipaddr. void *arg)
{
	struct espconn * T. arg = (struct espconn *)arg; // 缓存网络连接结构体指针
	if(ipaddr == NULL)//域名解析失败
	{
		os_ printf("\rn---- DomainName Analyse Failed ---\r\n");
		return;
	}
	else if (ipaddr != NULL & ipaddr->addr != 0//域名解析成功
	{
		os_ printf ("\r\n---- Doma inName Analyse Succeed --- \r'n"):
		IP_ Server. addr = ipaddr->addr;//获取服务器IP地址
		//将解析到的服务器IP地址设为TCP连接的远端IP地址
		os_ memcpy (T_ arg->proto. tcp->remote_ ip, &IP_ Server. addr, 4); //设置服务器IP地址
		//显示[瑞生网]的IP地址
		os_ pr intf("\r\nIP Server = %d. %d. %d. %d\r\n",
		*((u8*)&IP_ Server. addr)*((u8*)&IP_ Server. addr+1)*((uB*)&IP_ Server. addr+2)*(u8*)&IP_ Server. addr+3)) ;//串口打印.
		OLED_ ShowIP(24.6. T_ arg- ->proto. tcp- ->remote_ ip) ;// OLED显示
		espconn_ connect(T. arg); //连接TCP-server
	}
}
	

注意事项

当我们串口打印出现以下情况时,说明我们的ESP8266没有连接到网络。
在这里插入图片描述

要成功实现此过程,我们需要ESP8266连接我们的路由器,其实没有路由器也是可以的。连接我们的电脑热点即可(此处连接手机热点也可实现我已经尝试过)
在这里插入图片描述
点开图中按键即可打开电脑的热点。若是第一次使用可以鼠标右击图中模块。点击设置。
就可以看到此电脑的网络名称和密码了。
在这里插入图片描述
完成此操作之后,我们需要将我们找到的网络名称和网络密码写到相应的代码区域内。此次需要我们进行宏定义。
在这里插入图片描述
完成此操作之后我们再进行编译下载即可成功。

现象

编译成功之后,我们打开串口助手,复位ESP8266。打开手机热点,即可通过串口助手看到现象。
在这里插入图片描述
由ESP8266显示可知。ESP8266的IP地址为192.168.43.13(其实为192.168.43.130)解析到瑞生网的IP地址为182.92.178.10(其实为182.92.178.104)和串口打印的IP地址一致。
在这里插入图片描述
ESP8266显示解析成功,这里可以看到瑞生网IP地址为182.92.178.104,并且串口打印ESP8266TCP连接成功。说明我们的ESP8266成功的解析到了瑞生网的IP地址并且成功连接到了瑞生网。

检验

我们来检查一下ESP8266通过域名解析到的IP地址是否正确。我们可以通过电脑上的命令指示符来确定。
在这里插入图片描述
由命令指示符上回复可以看到。上面显示的IP地址与我们串口的IP地址相同,说明我们的ESP8266通过域名解析到的IP地址是正确的。

参考连接

https://www.bilibili.com/video/BV1dJ411S723?p=41

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

热爱生活的fuyao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值