Added I2C IO Expander
This commit is contained in:
parent
e5a63c8c7f
commit
51bdd7233b
@ -1,9 +1,12 @@
|
||||
#include "driver/gpio.h"
|
||||
#include "driver/i2c_master.h"
|
||||
#include "driver/i2c_types.h"
|
||||
#include "esp_err.h"
|
||||
#include "esp_log.h"
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
#include "led_strip.h"
|
||||
#include <stdint.h>
|
||||
|
||||
#define LED_GPIO 21
|
||||
#define TASTER_GPIO 12
|
||||
@ -13,15 +16,23 @@
|
||||
#define TERMINAL_TX 3
|
||||
#define DIP_MASTER 4
|
||||
#define I2C_SCL 5
|
||||
#define I2C_SDA
|
||||
#define I2C_SDA 6
|
||||
#define TOUCH_1 9
|
||||
#define TOUCH_2 8
|
||||
#define LED_RING 7
|
||||
|
||||
#define I2C_PORT 0
|
||||
#define IO_EXPANDER_ADDRESS 0x20
|
||||
#define BMA456_ADDRESS 0x18
|
||||
|
||||
static const char *TAG = "LED_TASK";
|
||||
static led_strip_handle_t led_strip;
|
||||
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 */
|
||||
void vTaskLed(void *pvParameters) {
|
||||
ESP_LOGI(TAG, "LED task started");
|
||||
@ -126,4 +137,46 @@ void app_main(void) {
|
||||
/* Input Monitor Task */
|
||||
ESP_LOGI(TAG, "Input Monitor Task");
|
||||
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, ®_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);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user