乐鑫ESP使用mDNS实现局域网内域名解析实现EMQX传送MQTT单片机串口数据

背景

省流:安装 bonjour

最近使用esp8266制作mqtt串口中转,将单片机数据通过本地emqx服务器上传到自己用C#制作的上位机,以达到AD数据可视化曲线。开始使用的是SDK中MQTT模板,通讯正常,只是需要输入IP地址才行,输入主机名是无法连接!而当emqx服务器电脑重启后路由将会重新分配IP,因此,就得重新更改esp8266内ip地址,然后重新烧录,这样实在太麻烦且不够优雅。通过研究发现可以使用mDNS组播方式实现局域网内主机域名解析。

问题点

开始不知道mDNS的时候,默认使用的是DNS,测试解析www.baidu.com等网站的时候是正常解析出IP地址,一旦解析本机电脑名时是失败!经了解才重新学习DNS域名解析知识,也才知道本地需要使用mDNS。不过不知道为什么PC端C#能直接解析?还以为都一样!

将乐鑫提供的mDNS例程烧录时发现还是无法解析主机.local,经过多次测试和网络查询才发现问题所在!本来都要放弃使用mDNS,那种感觉就像是当初搭建ESP开发环境一样,毕竟一直失败也是信心大减!好在最后使出大方法,就是用ping 主机名 试试看,发现不带local结尾的都能ping通过,一旦带结尾它也给自动去掉!而手里的ESP8266设置主机名后,ping 主机名.local 是能通过的啊,这就说明是windows 主机的mDNS服务器未开启,找到问题后就好解决了!

解决办法

特别简单,就是将windows的mDNS服务安装启动就行了啊!去网上找到 bonjour 软件安装即可,然后重新ping 主机名.local 就OK收工了!之后esp芯片也能正常解析出IP地址,解析出来的是int类型,使用 inet_ntoa 网络转换成字符串函数填入mqtt设置配置就行!

总结

其实问题是很简单,主要还是因为不了解DNS和mDNS原理导致。很多时候,问题的解决方案往往就在身边,做技术多了就更深有体会,虽然答案在身边,但却得找一圈,等你快放弃的时候突然就柳暗花明,忍不住来一句:“卧槽”。但解决的过程真的是心流的体会,忘记了时间存在!之前安装ESP开发环境也是如此,总在准备放弃的时候,心里想着再试试看,就真解决了!

还有个小问题,网上说win10是自带mDNS,只有winxp-win8没有,我一台win10是因为安装过苹果ITuns驱动,所以直接就可用,不知道是不是因为这原因。大家有直接win10测试的麻烦告知一下哈!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值