10#include "driver/i2c_master.h"
13#include "freertos/FreeRTOS.h"
14#include "freertos/task.h"
17static const char *
TAG =
"i2c_cmd";
20#define I2C_DEVICE_ADDR 0x20
21#define CMD_INTERVAL_MS 1000
24 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
25 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
45 TAG,
"add LCM device failed");
55 esp_err_t err = ESP_OK;
65 ESP_LOGW(
TAG,
"Send 0x%02X failed: %s",
s_commands[idx], esp_err_to_name(err));
75 static bool started =
false;
77 ESP_RETURN_ON_FALSE(
s_initialized, ESP_ERR_INVALID_STATE,
TAG,
"not initialized");
83 BaseType_t created = xTaskCreate(
i2c_cmd_task,
"i2c_cmd", 2048, NULL, 5, NULL);
84 ESP_RETURN_ON_FALSE(created == pdPASS, ESP_ERR_NO_MEM,
TAG,
"task create failed");
esp_err_t i2c_bus_init(void)
Создаёт master-шину I2C (идемпотентно).
esp_err_t i2c_bus_add_device(uint8_t addr7, i2c_master_dev_handle_t *dev)
Добавить устройство с 7-битным адресом на общую шину.
Общая I2C-шина master (I2C_NUM_0) для всех периферийных устройств.
#define I2C_BUS_TIMEOUT_MS
static void i2c_cmd_task(void *arg)
esp_err_t i2c_cmd_device_init(void)
Добавляет LCM как устройство на общую шину (i2c_bus_init при необходимости).
static bool s_initialized
esp_err_t i2c_cmd_device_start(void)
Запускает задачу циклической отправки команд на LCM.
static i2c_master_dev_handle_t s_i2c_dev
static uint8_t s_commands[]
#define I2C_DEVICE_ADDR
Заводской адрес LCM (7 бит); после SET_ADDR может отличаться
static esp_err_t i2c_cmd_send(uint8_t *data, size_t data_len)
Периодическая отправка команд на LCM по общей I2C-шине.