【发布时间】:2021-01-26 00:57:01
【问题描述】:
我有一个由 nodeMCU(主)和 arduino nano(从)组成的主从设置。我想在两个不同的 I2C 地址上发送两种不同类型的数据。数据类型 1 是整数,数据类型 2 是字符。
我已经写了这两个代码,它们在某种程度上符合我的预期,但结果并不一致。
主控(nodeMCU):
#include <Wire.h>
void setup() {
Serial.begin(9600); /* begin serial for debug */
Wire.begin(5, 4); /* join i2c bus with SDA=D1 and SCL=D2 of NodeMCU */
}
void loop() {
int r =5;
Wire.beginTransmission(8); /* begin with device address 8 */
Wire.write(r);
Wire.endTransmission();
delay(100);
String bod = "message";
Wire.beginTransmission(9);
Wire.write(bod.c_str());
Wire.endTransmission();
delay(100);
}
奴隶(arduino nano)
#include <Wire.h>
void setup() {
/* register request event */
Serial.begin(9600); /* start serial for debug */
}
void loop() {
Wire.begin(8); /* join i2c bus with address 8 */
Wire.onReceive(receiveEvent1); /* register receive event */
Wire.begin(9); /* join i2c bus with address 9 */
Wire.onReceive(receiveEvent2);
}
// function that executes whenever data is received from master
void receiveEvent1(int howMany) {
while (0 <Wire.available()) {
int c = Wire.read();
/* receive byte as int */
Serial.print(c); /* print the int */
}
Serial.println(); /* to newline */
}
void receiveEvent2(char howMany) {
while (0 <Wire.available()) {
char d = Wire.read();
/* receive byte as a character */
Serial.print(d); /* print the character */
}
Serial.println(); /* to newline */
}
我得到的输出也会在短时间内停止:
5
message
5
5
5
10910111511597103101
5
10910111511597103101
message
5
message
5
10910111511597103101
10910111511597103101
10910111511597103101
5
message
message
message
5
message
message
message
5
预期的输出在那里,但不是以一致的方式,例如:
5
message
5
message
5
message
有没有办法得到这样的输出?有没有办法修复输出在短时间内停止?
【问题讨论】:
-
不知道发生了什么(它似乎由于某种原因不同步 - 尝试发送相同类型的消息以确认?),但你在做什么? i2c slave 在每条消息后更改地址是非常奇怪的。
-
我试图向从站获取两种不同类型的数据。我已经设法将它们分开发送。我在想我可以通过使用不同地址发送消息来做到这一点,就像某些传感器在 I2C 总线上使用不同地址一样。
标签: arduino i2c nodemcu master-slave arduino-c++