feat(pca9555): 编码器数据读取。
This commit is contained in:
parent
bce9548aba
commit
66307c14a2
@ -26,6 +26,7 @@ void app_main(void) {
|
||||
ambient_light_auto_fetch();
|
||||
auto_fetch_temperature();
|
||||
pca9555_init();
|
||||
pca9555_auto_fetch();
|
||||
ui_input_init();
|
||||
xTaskCreate(mqtt_publish_ui_input, "mqtt_publish_ui_input", 2048, NULL, 10,
|
||||
NULL);
|
||||
|
@ -19,8 +19,86 @@
|
||||
#define PCA95555_CMD_CONFIGURATION_PORT_0 0x06
|
||||
#define PCA95555_CMD_CONFIGURATION_PORT_1 0x07
|
||||
|
||||
esp_err_t pca9555_write_config(uint8_t cmd_byte, uint8_t data) {
|
||||
i2c_cmd_handle_t cmd = i2c_cmd_link_create();
|
||||
i2c_master_start(cmd);
|
||||
i2c_master_write_byte(cmd, PCA9555_ADDRESS << 1 | I2C_MASTER_WRITE,
|
||||
ACK_CHECK_EN);
|
||||
i2c_master_write_byte(cmd, cmd_byte, ACK_CHECK_EN);
|
||||
i2c_master_write_byte(cmd, data, ACK_CHECK_EN);
|
||||
i2c_master_stop(cmd);
|
||||
esp_err_t error =
|
||||
i2c_master_cmd_begin(I2C_MASTER_NUM, cmd, 1000 / portTICK_PERIOD_MS);
|
||||
i2c_cmd_link_delete(cmd);
|
||||
if (error != ESP_OK) {
|
||||
ESP_LOGW(PCA_9555_TAG, "write config failed. %d", error);
|
||||
}
|
||||
return error;
|
||||
}
|
||||
|
||||
esp_err_t pca9555_write_output(uint8_t cmd_byte, uint8_t data) {
|
||||
i2c_cmd_handle_t cmd = i2c_cmd_link_create();
|
||||
i2c_master_start(cmd);
|
||||
i2c_master_write_byte(cmd, PCA9555_ADDRESS << 1 | I2C_MASTER_WRITE,
|
||||
ACK_CHECK_EN);
|
||||
i2c_master_write_byte(cmd, cmd_byte, ACK_CHECK_EN);
|
||||
i2c_master_write_byte(cmd, data, ACK_CHECK_EN);
|
||||
i2c_master_stop(cmd);
|
||||
esp_err_t error =
|
||||
i2c_master_cmd_begin(I2C_MASTER_NUM, cmd, 1000 / portTICK_PERIOD_MS);
|
||||
i2c_cmd_link_delete(cmd);
|
||||
if (error != ESP_OK) {
|
||||
ESP_LOGW(PCA_9555_TAG, "write output failed. %d", error);
|
||||
}
|
||||
return error;
|
||||
}
|
||||
|
||||
esp_err_t pca9555_read_one_input(uint8_t cmd_byte, uint8_t* data) {
|
||||
i2c_cmd_handle_t cmd = i2c_cmd_link_create();
|
||||
i2c_master_start(cmd);
|
||||
i2c_master_write_byte(cmd, PCA9555_ADDRESS << 1 | I2C_MASTER_WRITE,
|
||||
ACK_CHECK_EN);
|
||||
i2c_master_write_byte(cmd, cmd_byte, ACK_CHECK_EN);
|
||||
i2c_master_start(cmd);
|
||||
i2c_master_write_byte(cmd, PCA9555_ADDRESS << 1 | I2C_MASTER_READ,
|
||||
ACK_CHECK_EN);
|
||||
i2c_master_read_byte(cmd, data, NACK_VAL);
|
||||
i2c_master_stop(cmd);
|
||||
esp_err_t error =
|
||||
i2c_master_cmd_begin(I2C_MASTER_NUM, cmd, 1000 / portTICK_PERIOD_MS);
|
||||
i2c_cmd_link_delete(cmd);
|
||||
if (error != ESP_OK) {
|
||||
ESP_LOGW(PCA_9555_TAG, "read input failed. %d", error);
|
||||
}
|
||||
return error;
|
||||
}
|
||||
|
||||
void pca9555_fetch(void* arg) {
|
||||
ESP_LOGI(PCA_9555_TAG, "fetching");
|
||||
esp_err_t error;
|
||||
uint8_t buff;
|
||||
char disp_str[17];
|
||||
display_fill_rect(0, 6, 128, 8, 0x00);
|
||||
for (;;) {
|
||||
error = pca9555_read_one_input(PCA95555_CMD_INPUT_PORT_1, &buff);
|
||||
if (error != ESP_OK) {
|
||||
ESP_LOGW(PCA_9555_TAG, "read failed. %x", error);
|
||||
} else {
|
||||
sprintf(disp_str, "IO0: 0x%2x ", buff);
|
||||
display_print8_str(8, 6, disp_str);
|
||||
ESP_LOGD(PCA_9555_TAG, "IO0: 0x%2x", buff);
|
||||
}
|
||||
vTaskDelay(pdMS_TO_TICKS(10));
|
||||
}
|
||||
display_fill_rect(0, 6, 128, 8, 0x00);
|
||||
}
|
||||
|
||||
void pca9555_auto_fetch() {
|
||||
if (is_apds_9930_online == 0) {
|
||||
return;
|
||||
}
|
||||
xTaskCreate(pca9555_fetch, "pac05555-fetching", 2048, NULL, 10, NULL);
|
||||
}
|
||||
|
||||
void pca9555_init() {
|
||||
if (is_pca9555_online == 0) {
|
||||
@ -28,5 +106,6 @@ void pca9555_init() {
|
||||
return;
|
||||
}
|
||||
ESP_LOGI(PCA_9555_TAG, "Initializing PCA9555");
|
||||
// esp_log_level_set(PCA_9555_TAG, ESP_LOG_ERROR);
|
||||
esp_log_level_set(PCA_9555_TAG, ESP_LOG_DEBUG);
|
||||
pca9555_write_config(PCA95555_CMD_CONFIGURATION_PORT_1, 0x01);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user