首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在MicroPython上检索和格式化ESP32上的wifi MAC地址?

如何在MicroPython上检索和格式化ESP32上的wifi MAC地址?
EN

Stack Overflow用户
提问于 2022-04-17 14:31:23
回答 2查看 1.4K关注 0票数 3

下面的MicroPython代码运行在ESP32上:

代码语言:javascript
运行
复制
import network

wlan_sta = network.WLAN(network.STA_IF)
wlan_sta.active(True)

wlan_mac = wlan_sta.config('mac')
print("MAC Address:", wlan_mac)  # Show MAC for peering

输出如下所示:

代码语言:javascript
运行
复制
MAC Address: b'0\xae\xa4z\xa7$'

我想以更熟悉的六对十六进制数字的格式显示它,如下所示:

代码语言:javascript
运行
复制
MAC Address: AABBCC112233

在互联网上寻找解决方案之后,我尝试了:

print("MAC Address:", str(wlan_mac)),但它的显示方式与不使用str()时相同

print("MAC Address:", hex(wlan_mac)),但它导致TypeError:无法将字节转换为int

print("MAC Address:", wlan_mac.hex()),但它说AttributeError:‘字节’对象没有属性‘十六进制’

我对从wlan_sta.config('mac')中检索到的字节也有一点怀疑。我希望看到的是更像b'\xaa\xbb\xcc\x11\x22\x33'而不是b'0\xae\xa4z\xa7$'的东西。对于应该是十六进制的东西,z和$看起来很不合适,对于应该是六位数的数字来说,它似乎太短了。

所以我的问题有两方面:

  1. 是否使用正确的方法来获取MAC地址?
  2. 如果是正确的,如何将其格式化为六对十六进制数字?
EN

Stack Overflow用户

回答已采纳

发布于 2022-04-17 15:02:21

我对从wlan_sta.config('mac')检索的字节也有点怀疑。我希望看到的东西更像是b‘\xaa\xcc\xcc\x11\x22\x33’,而不是b‘0\xae\xa4z\xae 7$’。对于应该是十六进制的东西,z和$看起来很不合适,对于应该是六位数的数字来说,它似乎太短了。

你不会得到一个十六进制字符串,你会得到一个字节字符串。因此,如果MAC地址包含值7A,那么字节字符串将包含z (它具有ASCII值122 (十六进制7A))。

我是用正确的方法来获得MAC地址吗?

你才是!

如果它是正确的,我如何将它格式化为六对十六进制数字?

如果要将MAC地址打印为十六进制字符串,可以使用ubinascii.hexlify方法:

代码语言:javascript
运行
复制
>>> import ubinascii
>>> import network
>>> wlan_sta = network.WLAN(network.STA_IF)
>>> wlan_sta.active(True)
>>> wlan_mac = wlan_sta.config('mac')
>>> print(ubinascii.hexlify(wlan_mac).decode())
30aea47aa724

或者也许:

代码语言:javascript
运行
复制
>>> print(ubinascii.hexlify(wlan_mac).decode().upper())
30AEA47AA724
票数 7
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71902740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档