ESP32-基于EDPIDF-第三节-I2C的使用
2023-01-18 19:15:25 哔哩哔哩

ESP32的每一个引脚都可以作为I2C协议的SCL,SDA。

这里我以OLED12864为例,SCL->D22.   SDA->D21;此处OLED12864为I2C协议,地址为默认的0X78。

ESP32配置I2C有以下几步:


(资料图)

配置初始化结构体 i2c_config_t 。其中包含以下参数:mode选择主机或从机。SDA_IO_NUM/SCL_IO_NUM配置引脚号,我这里配置成D21,D22。sda_pullup_en和scl_pullup_en配置上拉使能,配置master下的clk_speed。这里官方给出最好不要超过1MHZ。最最最要注意的是:clk_flags要配置成0。

安装驱动程序。

主机发起通信,创建命令链接,填充好数据,发送,发送后释放资源。(此处见下图)

此处以OLED12864为例子,编写I2C代码。

注:前面部分的是单个字节传输方式,后面的是先存入数组缓冲区,然后一起传出去。前面的好处,不会丢数据,但是亲测很慢,所以我重新写了驱动。后面的好处:比较迅速,而且暂时测试也没有丢数据的情况,有问题再改BUG吧QAQ。

引入的头文件:

I2C结构体初始化:

I2C写单个字节的命令(写命令)

后面的全部跟正常的OLED初始化流程一样子了,把写命令和写数据函数替换上面的函数名就好了。举个例子:(PS:ESPIDF的编译器好像不能用C99的标准,所以oledfont.h文件要注意,数组采用{{1,2,3},{3,2,1}}这种形式就不会报错了)。

最后,app_main文件:

第一种方式完结,下面是第二种方式的驱动,非常迅速,强烈推荐!!!!

从多字节传输(与之对应的是上面的单字节传输)

OLED的初始化:

OLED的清屏幕

OLED设置坐标:

OLED写单个字节(同样需要引入oledfont.h头文件)

OLED写字符串:

太太太长了~~~~下面将以MPU6050验证I2C从机向主机传输数据,同时还有中断,详细见下一节嘿嘿。

猜你喜欢