ESP32 I2C设备地址解析

本人是初学者,非常愿意与各位交流。

最近在看IIC操作设备地址时,觉得那些资料都挺枯燥的,还是记录一下比较简单的描述吧。

这里主要讲解的为:“表达式 0x20 << 1 | 1” 的具体含义。

通俗讲,表达式 0x20 << 1 | 1 是用于生成I2C设备的8位读操作地址。不过,为了便于记忆,可以打个比方:

想象你住在一个叫 I2C小区 的公寓楼里:

  • 这栋楼有 128户人家(对应I2C的7位地址,0~127)。

  • 你家门牌号是 0x20(十六进制,相当于十进制32号房)。


关键角色:

  1. 你(ESP32):想找邻居拿东西(读数据)或送东西(写数据)。

  2. 快递柜(I2C设备):在你邻居家门口(地址0x20),柜子有2个功能按钮:
    🔴 红色按钮(1) → “取快递”(读数据)
    🟢 绿色按钮(0) → “存快递”(写数据)


问题:你怎么告诉快递柜你要“取快递”?

不能只说“我去32号房”,因为快递柜不知道你要“存”还是“取”!所以I2C协议发明了一个神奇的操作:

步骤①:把门牌号升级成8位数 → 0x20 << 1
  • 原始门牌号:0x20(二进制:00100000

  • 左移1位相当于在门牌号后面补个0
    00100000 → 01000000(新门牌号 0x40
    (就像把32号升级成64号大房间,专门用来放快递柜!)

步骤②:按下取件按钮 → | 1
  • 在升级后的门牌号(0x40最后一位加上1
    01000000 → 01000001(变成 0x41
    💡 这个"1"就是告诉快递柜:"我要取快递啦!"


最终魔法地址:0x41

  • 0x41 = 升级后的门牌号(64号) + 取件指令(1)
    → 它代表:“请打开 32号房 的快递柜,我要读数据!”

对比写操作(存快递):
  • 如果是存快递(写数据),最后加的就是 0
    0x20 << 1 | 0 = 0x40
    → 意思是:“请打开32号房的快递柜,我要存数据!”


现实代码中的样子(超简单!)

// 告诉32号房:我要取1个快递(读1字节数据)
Wire.requestFrom(0x20, 1); 

// 告诉32号房:我要存快递(写数据)
Wire.beginTransmission(0x20); 

✅ 实际写代码时,直接用 7位地址(0x20) 即可,ESP32会自动帮你完成 <<1 | 0/1 的魔法转换!


口诀:

🔢 7位地址像门牌,
←左移一位补个零,
✌️末尾0/1定读写,
📦 取件加1存加零!

下次看到 0x20 << 1 | 1,就笑着想:“噢~这是要去32号房取快递!” 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FightingFreedom

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

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

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

打赏作者

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

抵扣说明:

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

余额充值