Added I2C IO Expander

This commit is contained in:
simon 2026-04-21 10:56:00 +02:00
parent e5a63c8c7f
commit 51bdd7233b

View File

@ -1,9 +1,12 @@
#include "driver/gpio.h" #include "driver/gpio.h"
#include "driver/i2c_master.h"
#include "driver/i2c_types.h"
#include "esp_err.h" #include "esp_err.h"
#include "esp_log.h" #include "esp_log.h"
#include "freertos/FreeRTOS.h" #include "freertos/FreeRTOS.h"
#include "freertos/task.h" #include "freertos/task.h"
#include "led_strip.h" #include "led_strip.h"
#include <stdint.h>
#define LED_GPIO 21 #define LED_GPIO 21
#define TASTER_GPIO 12 #define TASTER_GPIO 12
@ -13,15 +16,23 @@
#define TERMINAL_TX 3 #define TERMINAL_TX 3
#define DIP_MASTER 4 #define DIP_MASTER 4
#define I2C_SCL 5 #define I2C_SCL 5
#define I2C_SDA #define I2C_SDA 6
#define TOUCH_1 9 #define TOUCH_1 9
#define TOUCH_2 8 #define TOUCH_2 8
#define LED_RING 7 #define LED_RING 7
#define I2C_PORT 0
#define IO_EXPANDER_ADDRESS 0x20
#define BMA456_ADDRESS 0x18
static const char *TAG = "LED_TASK"; static const char *TAG = "LED_TASK";
static led_strip_handle_t led_strip; static led_strip_handle_t led_strip;
static led_strip_handle_t led_ring; static led_strip_handle_t led_ring;
static i2c_master_bus_handle_t bus_handle;
static i2c_master_dev_handle_t io_expander;
static i2c_master_dev_handle_t bma456_dev_handle;
/* LED Task */ /* LED Task */
void vTaskLed(void *pvParameters) { void vTaskLed(void *pvParameters) {
ESP_LOGI(TAG, "LED task started"); ESP_LOGI(TAG, "LED task started");
@ -126,4 +137,46 @@ void app_main(void) {
/* Input Monitor Task */ /* Input Monitor Task */
ESP_LOGI(TAG, "Input Monitor Task"); ESP_LOGI(TAG, "Input Monitor Task");
xTaskCreate(vTaskInput, "monitor_input", 4096, NULL, 5, NULL); xTaskCreate(vTaskInput, "monitor_input", 4096, NULL, 5, NULL);
/* Init I2C IO Expander */
i2c_master_bus_config_t i2c_mst_config = {
.clk_source = I2C_CLK_SRC_DEFAULT,
.i2c_port = I2C_PORT,
.scl_io_num = I2C_SCL,
.sda_io_num = I2C_SDA,
.glitch_ignore_cnt = 7,
.flags.enable_internal_pullup = true,
};
err = i2c_new_master_bus(&i2c_mst_config, &bus_handle);
if (err != ESP_OK) {
ESP_LOGI(TAG, "I2C Master Could not Init Bus");
}
i2c_device_config_t dev_cfg = {
.dev_addr_length = I2C_ADDR_BIT_LEN_7,
.device_address = IO_EXPANDER_ADDRESS,
.scl_speed_hz = 100000,
};
err = i2c_master_bus_add_device(bus_handle, &dev_cfg, &io_expander);
if (err != ESP_OK) {
ESP_LOGI(TAG, "Could not add IO Expnader to Bus %d", err);
} else {
uint8_t write_buf[2] = {0x03, 0xFF}; // 0xFF setzt alle Bits auf Input
err = i2c_master_transmit(io_expander, write_buf, sizeof(write_buf), -1);
if (err != ESP_OK) {
ESP_LOGI(TAG, "Could not set IO Expander in input mode %d", err);
}
uint8_t reg_addr = 0x00;
uint8_t read_val = 0;
err = i2c_master_transmit_receive(io_expander, &reg_addr, 1, &read_val, 1,
-1);
if (err != ESP_OK) {
ESP_LOGI(TAG, "Could not read IO Expander input %d", err);
}
ESP_LOGI(TAG, "Read INPUT %d", read_val);
}
} }