ESP8266 I2C从机不确认数据

2024-04-03

我有一个 TM4C123 处理器作为 I2C 主处理器,一个 ESP8266 作为从处理器。对于 ESP,我使用的是 Arduino IDE,并在 2.5.2 版安装了 ESP8266 支持,它应该支持 I2C 从模式。但是,我无法让它工作。即使使用 Arduino Slave_receiver 示例,从站也不会确认(ACK)我在示波器上显示的主站请求。

为了确保我至少使用一次正确的地址,我在主机上实施了地址扫描。为了确保我在 ESP 上使用正确的引脚,我首先在 ESP 上实现了主模式,并使用 I2C 从设备进行了引脚扫描。所以我相当确定这都不是问题。

我正在使用 Olimex Mod-wifi 板,带有 SDA 引脚 12 和 SCL 引脚 13(示意图在这里 https://github.com/OLIMEX/ESP8266/blob/master/HARDWARE/MOD-WIFI-ESP8266-DEV/MOD-WiFi-ESP8266-DEV%20revision%20B1/MOD-WiFi-ESP8266-DEV_Rev_B1.pdf)

有人可以帮我解决这个问题吗?这是我的代码:

// Wire Slave Receiver
// by devyte
// based on the example by Nicholas Zambetti <http://www.zambetti.com>

// Demonstrates use of the Wire library
// Receives data as an I2C/TWI slave device
// Refer to the "Wire Master Writer" example for use with this

// This example code is in the public domain.


#include <Wire.h>

#define SDA_PIN 12
#define SCL_PIN 13

const int16_t I2C_SLAVE = 0x12;

void setup() {
  Serial.begin(115200);           // start serial for output

  Wire.begin(SDA_PIN, SCL_PIN, I2C_SLAVE); // new syntax: join i2c bus (address required for slave)
  Wire.onReceive(receiveEvent); // register event
}

void loop() {
  delay(1000);
  Serial.println("Loop");
}

// function that executes whenever data is received from master
// this function is registered as an event, see setup()
void receiveEvent(size_t howMany) {

  (void) howMany;
  while (1 < Wire.available()) { // loop through all but the last
    char c = Wire.read(); // receive byte as a character
    Serial.print(c);         // print the character
  }
  int x = Wire.read();    // receive byte as an integer
  Serial.println(x);         // print the integer
}

我在使用 ESP8266 时遇到了类似的问题。通过 I²C 在 Arduino Nano(从设备)和 ESP8266(主设备)之间发送数据没有问题。但是当我切换模式(Arduino Nano = Master 和 ESP8266 = Slave)时,Wire 示例不起作用。

我针对此问题的解决方法是将 I²C 工作频率从 100 kHz 降低到大约 20kHz。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ESP8266 I2C从机不确认数据 的相关文章

随机推荐

  • Lisp 中的数组与列表:为什么下面的代码中的列表要快得多?

    我在解决时得到了意想不到的结果欧拉计划中的问题 75 https projecteuler net problem 75 我的代码确实找到了正确的解决方案 但它的行为很奇怪 我的解决方案包括遍历毕达哥拉斯树 巴宁矩阵 https en wi
  • 如何将xml解析为java对象? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个用于配置一些规则的XML 它没有复杂的结构 但是这个配置在我的系统中的任何地方使用 所以我想将此XML解析为java对象并设计
  • 使用已删除的名称创建 Azure API 管理会导致名称“已在使用中”错误

    我之前使用 Terraform 创建并随后删除了 Azure API 管理服务 它消失在Azure Portal中 几个小时后 当我尝试使用相同名称重新创建 API 管理时 我在 Azure 门户中收到此错误 name already in
  • R ranger 包中的预测概率

    我正在尝试在 R 中建立一个具有随机森林分类的 模型 通过 Ned Horning 编辑代码 我首先使用randomForest包但后来发现ranger 这保证了更快的计算 首先 我使用下面的代码在拟合模型后获得每个类别的预测概率rando
  • 编译器如何为 C++ 中条件声明的自动变量分配内存?

    假设我有一个函数 根据某些运行时条件创建昂贵的自动对象或创建便宜的自动对象 void foo if runtimeCondition int x 0 else SuperLargeObject y 当编译器为此函数分配堆栈帧的内存时 它是否
  • jquery selectedIndex 不起作用

    我有一个带有许多选择标签的 from 当用户提交表单时 我想检查用户是否为所有选择标签选择一个选项 这是我的 jquery 代码 apForm select each function var this this if this selec
  • Kubernetes 配置映射符号链接 (..data/):有办法避免它们吗?

    我注意到 当我创建并安装包含一些文本文件的配置映射时 容器会将这些文件视为符号链接 data myfile txt 例如 如果我的配置映射名为 tc configs 并包含 2 个名为 stripe1 xml 和 stripe2 xml 的
  • CSS Calc((100%/5)+10px) 不起作用

    好吧 在我的 CSS 中 我正在尝试进行数学计算 calc 100 5 10px 当我这样做时 它不起作用 当我计算时 100 5 它工作得很好 我需要做什么才能让 10px 正常工作 您需要做的是使用正确的语法 calc 100 5 10
  • 如何在 Ionic 框架中使用 CSS 选择器隔离特定平台

    我遇到了一种罕见的情况 尽管考虑到 Android 和 iOS 之间的行为不同 这是可以理解的 我想在我正在 Ionic 框架上开发的 Cordova 应用程序中使用专门针对 iOS 的不同样式 我想知道基于平台隔离选择器的最佳方法 基本上
  • 如何通过azure云服务上的kubernetes检查持久卷的内容

    我已将软件打包到容器中 我需要通过Azure容器服务将容器放入集群 该软件具有目录的输出 src data 我想访问整个目录的内容 搜索后 我必须解决 在azure上使用Blob存储 但是搜索后 我找不到可执行方法 使用持久卷 但是我找到的
  • Python Pygame 游戏灯光

    我正在制作一款 2D 横向卷轴游戏 游戏中的一个物品是火炬 我有一个手臂可以旋转的玩家 我们可以获取手臂的角度 我正在寻找跟随手臂角度的三角形光束形状 我有一些想法 比如在整个屏幕上放置一个 alpha 图像 并根据手臂角度单独从每个像素中
  • 具有扩展方法的 Kotlin 数据绑定

    我正在尝试在 Android 的数据绑定中使用 Kotlin 扩展方法 例如 调用 onclick 处理程序 所以我编写了这段代码 posttest list item xml
  • 输入文件大小和内容在 macOS 上不会更新

    我编写了一个基于网络的小型工具 它使用文件输入来读取不断变化的文件 用户手动选择它 一次 JavaScript 会跟踪它的更改时间 上次文件修改时间和文件大小 如果已更改 则会再次读取文件内容 这在 Windows 上的所有浏览器中都可以正
  • PHP AWS SDK 3错误:AWS HTTP错误:cURL错误6:无法解析主机:s3.oregon.amazonaws.com

    我正在尝试连接到 AWS 版本 3 SDK 存储桶 但是 我收到以下错误 PHP 致命错误 未捕获异常 Aws S3 Exception S3Exception 并显示消息 在 上执行 PutObject 时出错 https s3 oreg
  • 我如何在 codeigniter 中创建一个虚荣网址

    我如何在 codeigniter 中创建一个虚荣网址 我在框架中执行此操作确实遇到困难 而且似乎没有任何好的答案 有可能 我正在我的一个项目中使用它 这是 CodeIgniter 论坛上的一个帖子 展示了如何做到这一点 http codei
  • 您遇到过的最好的源代码注释是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 .NET Core 时是否需要 AssemblyInfo?

    之前 AssemblyInfo cs文件是由 Visual Studio 自动创建的 用于包含程序集范围的属性 如 AssemblyVersion AssemblyName 等 在 NET Core 和 ASP NET Core 中 pro
  • T-SQL - 按周进行透视

    我目前正在尝试创建一个 T SQL 它运行表中的交货列表 并按客户和仓库对它们进行分组 因此每一行都将是 客户 仓库 总价值 称为费率的列的总和 然而 客户希望将 总价值 分为过去 9 周 因此 我们将拥有如下列 而不是总价值 22 01
  • 为什么我的 rustup rust-toolchain 文件没有覆盖默认值?

    我想使用 Rust 每晚 构建来与 Arrow 和 Datafusion 配合使用 根据这个帖子 https stackoverflow com questions 58226545 how to switch between rust t
  • ESP8266 I2C从机不确认数据

    我有一个 TM4C123 处理器作为 I2C 主处理器 一个 ESP8266 作为从处理器 对于 ESP 我使用的是 Arduino IDE 并在 2 5 2 版安装了 ESP8266 支持 它应该支持 I2C 从模式 但是 我无法让它工作