gpt4 book ai didi

c++ - ESP8266 I2C从站不应答数据

转载 作者:行者123 更新时间:2023-12-02 10:38:30 24 4
gpt4 key购买 nike

我有一个充当I2C主设备的TM4C123处理器和一个作为从设备的ESP8266。对于ESP,我使用的是Arduino IDE,并在版本2.5.2中安装了ESP8266,该版本应支持I2C从属模式。但是,我无法使其正常工作。即使使用Arduino slave_receiver示例,从属也不会确认(ACK)我在示波器上显示的主控请求。

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

我正在使用带有SDA引脚12和SCL引脚13(Schematic here)的Olimex Mod-wifi板

有人可以帮我吗?这是我的代码:

// 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工作频率从100kHz降低到大约20kHz。

关于c++ - ESP8266 I2C从站不应答数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57220912/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com