Added I2C IO Expander
This commit is contained in:
parent
e5a63c8c7f
commit
51bdd7233b
@ -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, ®_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