前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【玩转ESP32】6、驱动i2c设备

【玩转ESP32】6、驱动i2c设备

作者头像
ManInRoad
发布2021-04-16 11:43:30
1.8K0
发布2021-04-16 11:43:30
举报
文章被收录于专栏:物联网思考

前言:在上文中聊了i2c-tools,主要使用命令行,本文使用代码驱动设备。本文以驱动oled展开,关于oled的详细说明,可查看一文彻底了解SSD1306驱动0.96寸OLED,在这里只聊esp32的i2c如何使用。

1、初始化

(1)配置i2c:指定i2c的引脚、模式、速率等;

(2)安装i2c驱动:设置发送、接收缓冲,指定中断等;

这个代码基本是固定的,当做主机的时候都可以使用以下代码来初始化

代码语言:javascript
复制
static esp_err_t i2c_master_init(void)
{
    int i2c_master_port = I2C_MASTER_NUM;
    i2c_config_t conf;
    conf.mode = I2C_MODE_MASTER;
    conf.sda_io_num = I2C_MASTER_SDA_IO;
    conf.sda_pullup_en = GPIO_PULLUP_ENABLE;
    conf.scl_io_num = I2C_MASTER_SCL_IO;
    conf.scl_pullup_en = GPIO_PULLUP_ENABLE;
    conf.master.clk_speed = I2C_MASTER_FREQ_HZ;
    i2c_param_config(i2c_master_port, &conf);
    return i2c_driver_install(i2c_master_port, conf.mode, I2C_MASTER_RX_BUF_DISABLE, I2C_MASTER_TX_BUF_DISABLE, 0);
}

2、主机写

(1)创建一个句柄

(2)产生起始信号

(3)写设备地址

(4)写数据

(5)结束信号

(6)主机发送命令,通知阻塞任务

(7)删除句柄

其中2、3、4、5属于标准i2c的流程,1、6、7属于esp32特有的。

3、主机读

(1)创建一个句柄

(2)产生起始信号

(3)写设备地址

(4)读数据

(5)结束信号

(6)主机发送命令,通知阻塞任务

(7)删除句柄

其中2、3、4、5属于标准i2c的流程,1、6、7属于esp32特有的。

4、驱动oled

0.96 oled只需要写数据即可,参考上面的主机写流程,对oled写代码如下:

代码语言:javascript
复制
void I2C_WriteByte(uint8_t addr,uint8_t data)
{
    i2c_cmd_handle_t cmd = i2c_cmd_link_create();
    i2c_master_start(cmd);
    i2c_master_write_byte(cmd, (ESP_SLAVE_ADDR << 1) | WRITE_BIT, ACK_CHECK_EN);
    i2c_master_write_byte(cmd, addr, ACK_CHECK_EN);
    i2c_master_write_byte(cmd, data, ACK_CHECK_EN);

    i2c_master_stop(cmd);
    esp_err_t ret = i2c_master_cmd_begin(I2C_MASTER_NUM, cmd, 1000 / portTICK_RATE_MS);
    i2c_cmd_link_delete(cmd);

    if(ret!=ESP_OK)
    {
        printf("err=%d\r\n",ret);
    }
}

写数据的接口写好后,直接移植oled初始化、写数据就行。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 物联网思考 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言:在上文中聊了i2c-tools,主要使用命令行,本文使用代码驱动设备。本文以驱动oled展开,关于oled的详细说明,可查看一文彻底了解SSD1306驱动0.96寸OLED,在这里只聊esp32的i2c如何使用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档