当前位置: 首页 > news >正文

ESP32 I2C通信

I2C简述

两线式串行总线(SDA和SCL),半双工通信方式(支持来回通信,但每次只能一方通过)
通用函数:Wire.begin() 作为主机加入
Wire.begin(27) 只有一个参数的是作为从机加入

主机向从机发送数据

befinTransmission()开始传输
endTransmission()结束传输

主机向从机接收数据

requestFrom()请求从机发送数据
不过这里其实有个问题就是你发送数据的时候如果发的数据少于原来你规定的字节,那么剩余的空间会由0xFF填充!解释:因为从机没有数据发送了就会保持沉默,点平会拉高
解决方案:

1.使用固定长度的字节传送
2.在数据头部插入字段表示数据字段的长度
3.在数据中以特定字符表示传送结束

从机注册的事件
需要注册接收事件和发送事件
onReceive()接收事件
onRequest()发送事件

//主机向从机进行通信
#include <Arduino.h>
#include <Wire.h>int num = 1;
int addr = 33; //从机地址
void setup() 
{Serial.begin(115200);if(Wire.begin()) Serial.println("Wire begin success");else Serial.println("Wire begin failed");
}void loop() 
{char tmp[35];itoa(num++,tmp,10);Wire.beginTransmission(addr);Wire.write(tmp);int ret = Wire.endTransmission();if(ret == 0) {Serial.println("send failed");return;}delay(2000);int len = Wire.requestFrom(addr, 35);//最多不超过35个字节if(len > 0){Serial.println("Receive success");Serial.println(len);Wire.readBytes(tmp, 35);Serial.println(tmp);for(int i = 0;i < 35;i++){Serial.printf("%2X, ",tmp[i]);if(i % 8 == 7) Serial.println();}Serial.println();}delay(2000);
}
http://www.jsqmd.com/news/30339/

相关文章:

  • day06-自动出题工作流
  • 推送docker镜像到github
  • 软件工程学习日志2025.11.3
  • day05-智能换脸-12306出行建议-提取音频工作流
  • x./AC自动机
  • P1029 [NOIP 2001 普及组] 最大公约数和最小公倍数问题
  • SQL Server 并发控制 第四篇:Snapshot Isolation (SI) 和 Read Committed Snapshot Isolation (RCSI)
  • godot 描边插件
  • 怎么在现有App里融入AI对话能力
  • DFS 序 O(1) 求 LCA
  • @pytest.fixture和setup/teardown
  • 矿山通信如何实现全域一体化?迈威为煤矿装上了“智慧神经网络”
  • Java异常处理实战精要:构建稳定应用的基石
  • €$P2025
  • CSP2025 补题
  • 哈希学习总结
  • 142.环形链表 II
  • 2025 年 11 月制冷设备厂家推荐排行榜,小型制冷设备,空调制冷设备,工业制冷设备,商用制冷设备,大型制冷设备,制冷设备安装与维修服务公司推荐
  • 从创作到分析全搞定!2025公众号效率工具深度测评,这波升级95%的人还不知道
  • 20232304 2025-2026-1 《网络与系统攻防技术》实验四实验报告
  • k8s-java应用部署(4)
  • 指数函数和对数函数
  • 2025-11-03 早报新闻
  • 单目三角化原理 - MKT
  • [CEOI 2017] Sure Bet
  • Java数组——三种初始化及内存分析,数组的基本特点,下标越界与小结
  • LeRobot v0.4.0 正式发布:全面提升开源机器人的学习能力
  • QPS、TPS、PV、UV、并发量
  • 补码加减法
  • 今天总结