WiFi-ESP8266入门开发(十四)-使用IIC

注:对于ESP8266开源技术感兴趣的可以加群,我们一起探索交流学习,群号:579932824。群名:ESP8266开源技术交流群。

介绍

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

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

两种模式即I2Cworks,

  • 主模式
  • 从模式

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

主设备启动与从设备的通信。主设备需要向从设备地址发起与从设备的通话。主设备寻址时,从设备响应主设备。

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

 

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

在这里,我们正在使用

主设备: NodeMCU

从属设备: Arduino Uno

从设备地址: 8

接口图如下图所示

NodeMCU Arduino I2C接口

NodeMCU Arduino I2C接口

 

针对NodeMCU的Arduino Sketch(主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(从I2C设备)Arduino Sketch

#include <Wire.h>

void setup() {
 Wire.begin(8);                /* join i2c bus with address 8 */
 Wire.onReceive(receiveEvent); /* register receive event */
 Wire.onRequest(requestEvent); /* register request event */
 Serial.begin(9600);           /* start serial for debug */
}

void loop() {
 delay(100);
}

// function that executes whenever data is received from master
void receiveEvent(inthowMany) {
 while (0 <Wire.available()) {
    char c = Wire.read();      /* receive byte as a character */
    Serial.print(c);           /* print the character */
  }
 Serial.println();             /* to newline */
}

// function that executes whenever data is requested from master
void requestEvent() {
 Wire.write("Hello NodeMCU");  /*send string on request */
}

输出窗口

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

Arduino从站输出窗口

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

NodeMCU I2C主站的Arduino输出窗口

 


 

  • 10
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Lanson

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值