适配 ESP32 MicroPython 的 ping
依赖
源代码为适配 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]