【史上最全面arduino esp32教程】I2C的使用
@TOC
前言
在本篇文章中,我们将带您了解如何使用I2C(Inter-Integrated Circuit)通信协议在Arduino ESP32上进行数据交换。I2C是一种常见的串行通信协议,适用于连接多个设备并在它们之间传输数据。我们将介绍I2C通信的基本原理和Arduino ESP32上的I2C库函数使用方法,帮助您快速上手并开始使用I2C进行数据通信。
一、I2C的使用
1.1 I2C对象
在arduino中,i2c的对象为TwoWire
,他继承于Stream
,他的定义如下:
class TwoWire: public Stream
{
//。。。。
};
在arduino中,他给我们先定义好了两个i2c对象:
extern TwoWire Wire;
extern TwoWire Wire1;
我们可以直接去使用这两个已经定义好的对象
1.2 I2C开始函数
首先如果你想要使用I2C,你需要先开始I2C通信,他有下面这两个函数:
bool begin(int sda, int scl, uint32_t frequency=0); // returns true, if successful init of i2c bus
bool begin(uint8_t slaveAddr, int sda, int scl, uint32_t frequency);
他们共同的参数:sda
数据线,scl
时钟线,frequency
为I2C的频率
函数2重载独有参数:slaveAddr
为从设备地址
1.3 读取一字节数据
他的流程图如下:
- 开始发送数据并指定I2C地址:
我们可以使用下面这个函数指定I2C地址:
void beginTransmission(uint16_t address);
参数为I2C设备的地址
- 发送要读取的地址
我们可以使用下面这个函数进行发送要读取的地址:
size_t write(uint8_t);
size_t write(const uint8_t *, size_t);
他可以发送一字节的数据,也可以发送n个字节
- 结束发送
我们可以使用下面这个函数结束发送
uint8_t endTransmission(bool sendStop);
sendStop:一个布尔值参数,指示是否发送停止位。当sendStop为true时,表示在传输结束后发送停止位;当sendStop为false时,表示在传输结束后不发送停止位。
如果为false,则保持I2C总线有效连接
- 请求一字节数据
我们可以使用下面这个函数来请求n个字节的数据:
uint8_t requestFrom(int address, int size);
参数1为从设备地址,参数2为请求字节大小,我们可以改变他来改变请求字节的多少
- 查看是否有数据可以读取
我们可以使用下面这个函数来查看是否有数据到来:
int available(void);
如果参数不为0则有数据
- 读取数据
我们可以使用下面这个函数来读取一字节数据:
int read(void);
1.4 发送一字节的数据
他的流程图如下:
我们只需要使用上面这些函数去开始写入即可
1.5 其他函数
获取和设置I2C总线频率
我们可以使用下面这两个函数来设置和获取I2C总线的频率:
bool setClock(uint32_t);
uint32_t getClock();
设置数据线和时钟线
我们可以使用下面这个函数设置数据线和时钟线:
bool setPins(int sda, int scl);
二、什么时候该使用停止位,什么时候不用?
一般情况下,我们会在最后一次传输数据后发送停止位,以示传输的结束。因此,在大多数情况下,我们会将sendStop参数设为true,以确保在传输结束时发送停止位。
但是,也有一些特殊的情况,可能需要手动控制发送停止位的时机。例如,在多个连续的I2C传输中,我们可能需要发送多次数据,但只在最后一次传输结束时发送停止位。这时,我们可以在最后一次传输前将sendStop参数设为false,然后在最后一次传输后再调用Wire.endTransmission(true)发送停止位。
总结
通过本教程,我们详细了解了Arduino ESP32上的I2C通信。我们了解了I2C的基本原理和层次结构,以及它在连接多个设备时的优势。通过使用Wire库,我们学习了如何在Arduino ESP32上初始化I2C总线并与其他设备进行通信。我们了解了I2C通信的时序和数据传输方式,并演示了如何发送和接收数据。
通过掌握Arduino ESP32上的I2C通信,您可以轻松地与各种I2C设备进行数据交换,如传感器、显示器和存储器等。这为您的项目提供了更多的选择和扩展性。祝贺您完成了本教程!现在,您可以开始利用所学的知识,开发自己的I2C通信应用了。祝您好运!
- 点赞
- 收藏
- 关注作者
评论(0)