适配 ESP32 MicroPython 的 ping

依赖

Fork from coffee-it/uPing .

源代码为适配 Unix 的 MicroPython 代码,有关方法返回值存在差异,此处适配。

差异

经分析关键在于 usocket.getaddrinfo() 函数。

直接在 ESP32 上运行代码,报错点位在 uping.py 的 73 行断言语句:

assert self.CLIENT_IP, "Connection failed"

设计相关逻辑语句在 uping.py 的 70 行:

self.CLIENT_IP = usocket.inet_ntop(usocket.AF_INET, addr[-1][4:8])

inet_ntop() 是为了将 IP 地址从“二进制”转换为“点分十进制”。而在 ESP32 中,usocket.getaddrinfo() 方法返回列表 List ,其默认的 IP 地址已为“点分十进制”:

[(2, 1, 0, 'www.baidu.com', ('39.156.66.18', 1))]

按照原语句,要返回 List 一级元组的第 5 到第 8 个元素,超出返回值范围,所以报错。

所以,直接将获取到的“点分十进制”复制给 self.CLIENT_IP 即可,在原 uping.py 的 70 行修改:

self.CLIENT_IP = addr[-1][0]

适配移植

Gitee 下载:Yogile / uPing

posted @ 2022-07-16 18:35  Yogile  阅读(467)  评论(0编辑  收藏  举报