(七)Arduino系列:NodeMCUI2C通信方法

介绍

I2C(内部集成电路)是串行总线接口连接协议。它也被称为TWI(双线接口),因为它只使用两根电线进行通信。这两条线是SDA(串行数据)和SCL(串行时钟)。

I2C是需要确认的通信协议,即发送器在发送数据之后检查来自接收器的确认以知道接收器是否成功接收到数据。

I2C有两种工作模式,

  • 主模式
  • 从模式

SDA(串行数据)线用于主设备和从设备之间的数据交换。SCL(串行时钟)用于主设备和从设备之间的同步时钟。

主设备启动与从设备的通信。主设备需要从设备地址来启动与从设备的对话。从设备在主设备寻址时响应主设备。

NodeMCU的GPIO引脚具有I2C功能支持。由于ESP-12E的内部功能,我们无法将其所有GPIO用于I2C功能。因此,在将任何GPIO用于I2C应用程序之前,请先进行测试。

 

让我们为NodeMCU编写Arduino程序作为I2C主设备,为Arduino Uno编写Arduino 程序作为I2C从设备。主设备向从设备发送hello字符串,从设备将响应主设备发送hello字符串。

在这里,我们正在使用

主设备: NodeMCU

从设备: Arduino Uno

从设备地址: 8

接线图如下图所示

(七)Arduino系列:NodeMCUI2C通信方法

NodeMCU Arduino I2C连接

 

NodeMCU的Arduino程序(主I2C设备)

#include <Wire.h>

void setup() {
 Serial.begin(9600); /* begin serial for debug */
 Wire.begin(D1, D2); /* join i2c bus with SDA=D1 and SCL=D2 of NodeMCU */
}

void loop() {
 Wire.beginTransmission(8); /* begin with device address 8 */
 Wire.write("Hello Arduino");  /* sends hello string */
 Wire.endTransmission();    /* stop transmitting */

 Wire.requestFrom(8, 13); /* request & read data of size 13 from slave */while(Wire.available()){
    char c = Wire.read();
  Serial.print(c);
 }
 Serial.println();
 delay(1000);
}

Arduino Uno的Arduino程序(从I2C设备)

隐藏内容,您需要满足以下条件方可查看
End

输出结果

从设备(Arduino Uno)串行监视器的输出窗口

(七)Arduino系列:NodeMCUI2C通信方法

主设备(NodeMCU)上串行监视器的输出窗口

(七)Arduino系列:NodeMCUI2C通信方法

 

人已赞赏
动态

(六)Arduino系列:NodeMCU与Arduino进行SPI通信

2019-5-2 13:52:37

动态

CH340E超小、美观、实用下载工具

2019-8-28 23:26:32

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索