From c5affea4385071dfd6acdd10f790512d8d7016d9 Mon Sep 17 00:00:00 2001 From: Alexey Zholtikov Date: Sat, 12 Sep 2026 12:56:14 +0300 Subject: [PATCH] style: updated comments --- README.md | 4 - WIKI_EN.md | 377 ---------------------------------------------------- WIKI_RU.md | 377 ---------------------------------------------------- zh_bh1750.c | 4 +- 4 files changed, 2 insertions(+), 760 deletions(-) delete mode 100644 WIKI_EN.md delete mode 100644 WIKI_RU.md diff --git a/README.md b/README.md index a0f4410..01aa641 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,5 @@ # ESP32 ESP-IDF component for BH1750 ambient light sensor -## SAST Tools - -[PVS-Studio](https://pvs-studio.com/pvs-studio/?utm_source=website&utm_medium=github&utm_campaign=open_source) - static analyzer for C, C++, C#, and Java code. - ## Features 1. I2C interface with configurable frequency up to 400 kHz (Fast Mode). diff --git a/WIKI_EN.md b/WIKI_EN.md deleted file mode 100644 index b720a23..0000000 --- a/WIKI_EN.md +++ /dev/null @@ -1,377 +0,0 @@ -# zh_bh1750 - BH1750 Ambient Light Sensor Component for ESP-IDF - -## Table of Contents - -- [Overview](#overview) -- [Features](#features) -- [Installation](#installation) -- [API Reference](#api-reference) -- [Usage Examples](#usage-examples) -- [Technical Specifications](#technical-specifications) -- [Error Codes](#error-codes) -- [Contributing](#contributing) -- [License](#license) - ---- - -## Overview - -`zh_bh1750` is a lightweight ESP-IDF component for the BH1750 ambient light sensor. It provides a simple API to read illuminance values from 1 to 65535 lux. The component supports multiple sensors on a single I2C bus using the [zh_pca9548a](https://github.com/aZholtikov/zh_pca9548a) I2C multiplexer. - -The component is designed specifically for ESP32 microcontrollers and uses ESP-IDF v5.0+ I2C driver API. - ---- - -## Features - -1. **Illuminance Measurement**: Reads illuminance values from 1 to 65535 lux -2. **I2C Interface**: Uses standard I2C protocol (400 kHz max frequency) -3. **Configurable I2C Address**: Supports both 0x23 and 0x5C addresses -4. **Error Statistics**: Built-in error counter for I2C driver errors -5. **Low Power**: Works with ESP-IDF power management -6. **Thread-Safe**: Uses ESP-IDF I2C driver (thread-safe) -7. **Minimal Overhead**: Low memory and CPU overhead -8. **Multiple Sensor Support**: Compatible with I2C multiplexer (zh_pca9548a) - ---- - -## Installation - -1. Navigate to your project's components directory: - -```bash -cd ../your_project/components -``` - -2. Clone the repository: - -```bash -git clone https://github.com/aZholtikov/zh_bh1750.git -``` - -3. In your application, include the header: - -```c -#include "zh_bh1750.h" -``` - -4. The component will be automatically built with your project. - -### Optional: Using with I2C Multiplexer (zh_pca9548a) - -To use multiple BH1750 sensors on the same I2C bus, also install the [zh_pca9548a](https://github.com/aZholtikov/zh_pca9548a) component. - ---- - -## API Reference - -### zh_bh1750_init_config_t Structure - -```c -typedef struct -{ - i2c_master_bus_handle_t i2c_handle; // Unique I2C bus handle - uint8_t i2c_address; // Sensor I2C address (0x23 or 0x5C) - uint32_t i2c_frequency; // Sensor I2C frequency (max 400000 Hz) -} zh_bh1750_init_config_t; -``` - -Use `ZH_BH1750_INIT_CONFIG_DEFAULT()` macro to initialize with default values: - -- `i2c_frequency`: 400000 Hz -- `i2c_address`: 0x23 - ---- - -### zh_bh1750_handle_t Structure - -```c -typedef struct -{ - bool is_initialized; // Sensor initialization flag - i2c_master_dev_handle_t dev_handle; // Unique I2C device handle -} zh_bh1750_handle_t; -``` - ---- - -### zh_bh1750_stats_t Structure - -```c -typedef struct -{ - uint32_t i2c_driver_error; // Number of I2C driver errors -} zh_bh1750_stats_t; -``` - ---- - -### zh_bh1750_init() - -Initializes the BH1750 sensor. - -**Parameters:** - -- `config` - Pointer to BH1750 initialization configuration structure -- `handle` - Pointer to unique BH1750 handle - -**Returns:** - -- `ESP_OK` - Success -- `ESP_ERR_INVALID_ARG` - Invalid argument (NULL config or handle) -- `ESP_FAIL` - Initialization failed (configuration check or I2C device addition) - -**Example:** - -```c -zh_bh1750_handle_t bh1750_handle = {0}; -zh_bh1750_init_config_t config = ZH_BH1750_INIT_CONFIG_DEFAULT(); -config.i2c_handle = i2c_bus_handle; -zh_bh1750_init(&config, &bh1750_handle); -``` - ---- - -### zh_bh1750_deinit() - -Deinitializes the BH1750 sensor and removes it from the I2C bus. - -**Parameters:** - -- `handle` - Pointer to unique BH1750 handle - -**Returns:** - -- `ESP_OK` - Success -- `ESP_ERR_INVALID_ARG` - Invalid argument (NULL handle) -- `ESP_ERR_INVALID_STATE` - Sensor not initialized -- `ESP_FAIL` - I2C device removal failed - ---- - -### zh_bh1750_read() - -Reads illuminance value from the sensor. - -**Parameters:** - -- `handle` - Pointer to unique BH1750 handle -- `data` - Pointer to store the illuminance value (in lux) - -**Returns:** - -- `ESP_OK` - Success -- `ESP_ERR_INVALID_ARG` - Invalid argument (NULL handle or data) -- `ESP_ERR_NOT_FOUND` - Sensor not initialized -- `ESP_FAIL` - I2C communication error - -**Note:** The function performs measurement and waits ~180ms for data ready. - ---- - -### zh_bh1750_get_stats() - -Gets error statistics since last reset. - -**Returns:** - -- Pointer to the statistics structure - -**Example:** - -```c -const zh_bh1750_stats_t *stats = zh_bh1750_get_stats(); -printf("I2C errors: %ld\n", stats->i2c_driver_error); -``` - ---- - -### zh_bh1750_reset_stats() - -Resets error statistics counter. - -**Example:** - -```c -zh_bh1750_reset_stats(); -``` - ---- - -## Usage Examples - -### Basic Example: Single Sensor - -```c -#include "zh_bh1750.h" - -#define I2C_PORT (I2C_NUM_MAX - 1) - -zh_bh1750_handle_t bh1750_handle = {0}; - -void app_main(void) -{ - esp_log_level_set("zh_bh1750", ESP_LOG_ERROR); - i2c_master_bus_config_t i2c_bus_config = { - .clk_source = I2C_CLK_SRC_DEFAULT, - .i2c_port = I2C_PORT, - .scl_io_num = GPIO_NUM_22, - .sda_io_num = GPIO_NUM_21, - .glitch_ignore_cnt = 7, - .flags.enable_internal_pullup = true, - }; - i2c_master_bus_handle_t i2c_bus_handle; - i2c_new_master_bus(&i2c_bus_config, &i2c_bus_handle); - zh_bh1750_init_config_t config = ZH_BH1750_INIT_CONFIG_DEFAULT(); - config.i2c_handle = i2c_bus_handle; - zh_bh1750_init(&config, &bh1750_handle); - float lux = 0.0; - for (;;) - { - zh_bh1750_read(&bh1750_handle, &lux); - printf("Lux: %.2f\n", lux); - const zh_bh1750_stats_t *stats = zh_bh1750_get_stats(); - printf("I2C errors: %ld\n", stats->i2c_driver_error); - vTaskDelay(5000 / portTICK_PERIOD_MS); - } -} -``` - ---- - -### Multiple Sensors: Using I2C Multiplexer (zh_pca9548a) - -```c -#include "zh_pca9548a.h" -#include "zh_bh1750.h" - -#define I2C_PORT (I2C_NUM_MAX - 1) - -zh_pca9548a_handle_t pca9548a_handle = {0}; -zh_bh1750_handle_t bh1750_handle_chan_0 = {0}; -zh_bh1750_handle_t bh1750_handle_chan_1 = {0}; -zh_bh1750_handle_t bh1750_handle_chan_2 = {0}; - -void app_main(void) -{ - esp_log_level_set("zh_pca9548a", ESP_LOG_ERROR); - esp_log_level_set("zh_bh1750", ESP_LOG_ERROR); - i2c_master_bus_config_t i2c_bus_config = { - .clk_source = I2C_CLK_SRC_DEFAULT, - .i2c_port = I2C_PORT, - .scl_io_num = GPIO_NUM_22, - .sda_io_num = GPIO_NUM_21, - .glitch_ignore_cnt = 7, - .flags.enable_internal_pullup = true, - }; - i2c_master_bus_handle_t i2c_bus_handle = NULL; - i2c_new_master_bus(&i2c_bus_config, &i2c_bus_handle); - // Initialize I2C multiplexer - zh_pca9548a_init_config_t pca_config = ZH_PCA9548A_INIT_CONFIG_DEFAULT(); - pca_config.i2c_handle = i2c_bus_handle; - pca_config.i2c_address = 0x70; - zh_pca9548a_init(&pca_config, &pca9548a_handle); - // Initialize BH1750 sensors on different channels - zh_bh1750_init_config_t bh1750_config = ZH_BH1750_INIT_CONFIG_DEFAULT(); - bh1750_config.i2c_handle = i2c_bus_handle; - zh_pca9548a_set(&pca9548a_handle, ZH_PCA9548A_CHAN_NUM_0); - zh_bh1750_init(&bh1750_config, &bh1750_handle_chan_0); - zh_pca9548a_set(&pca9548a_handle, ZH_PCA9548A_CHAN_NUM_1); - zh_bh1750_init(&bh1750_config, &bh1750_handle_chan_1); - zh_pca9548a_set(&pca9548a_handle, ZH_PCA9548A_CHAN_NUM_2); - zh_bh1750_init(&bh1750_config, &bh1750_handle_chan_2); - float lux = 0.0; - for (;;) - { - // Read sensor on channel 0 - zh_pca9548a_set(&pca9548a_handle, ZH_PCA9548A_CHAN_NUM_0); - zh_bh1750_read(&bh1750_handle_chan_0, &lux); - printf("Sensor 1. Lux: %.2f\n", lux); - // Read sensor on channel 1 - zh_pca9548a_set(&pca9548a_handle, ZH_PCA9548A_CHAN_NUM_1); - zh_bh1750_read(&bh1750_handle_chan_1, &lux); - printf("Sensor 2. Lux: %.2f\n", lux); - // Read sensor on channel 2 - zh_pca9548a_set(&pca9548a_handle, ZH_PCA9548A_CHAN_NUM_2); - zh_bh1750_read(&bh1750_handle_chan_2, &lux); - printf("Sensor 3. Lux: %.2f\n", lux); - vTaskDelay(5000 / portTICK_PERIOD_MS); - } -} -``` - ---- - -## Technical Specifications - -| Parameter | Value | -|-----------|-------| -| **Illuminance Range** | 1 - 65535 lux | -| **Measurement Resolution** | 1 lux | -| **I2C Address** | 0x23, 0x5C | -| **I2C Frequency** | Up to 400 kHz | -| **Measurement Time** | ~180 ms | -| **ESP-IDF Version** | >= 5.0 | -| **Platform** | ESP32 series | -| **Language** | C (C99) | - ---- - -## Error Codes - -| Error Code | Description | -|------------|-------------| -| `ESP_OK` | Operation successful | -| `ESP_ERR_INVALID_ARG` | Invalid argument (NULL pointer or invalid configuration) | -| `ESP_ERR_INVALID_STATE` | Sensor not initialized | -| `ESP_ERR_NOT_FOUND` | Sensor not initialized or not responding | -| `ESP_FAIL` | General failure (I2C communication error) | - ---- - -## Contributing - -Contributions are welcome! To contribute: - -1. Fork the repository -2. Create a feature branch (`git checkout -b feature/AmazingFeature`) -3. Commit your changes (`git commit -m 'Add some AmazingFeature'`) -4. Push to the branch (`git push origin feature/AmazingFeature`) -5. Open a Pull Request - -Please ensure your code follows the existing style and includes appropriate documentation. - ---- - -## License - -This project is licensed under the Apache License, Version 2.0 - see the [LICENSE](LICENSE) file for details. - -### Apache License, Version 2.0 - -Copyright (c) 2026 Alexey Zholtikov - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - ---- - -## Additional Notes - -- **I2C Pull-up Resistors**: Ensure proper pull-up resistors are connected to SDA and SCL lines -- **Measurement Time**: The sensor requires ~180ms for each measurement -- **I2C_ISR_IRAM_SAFE**: For correct operation, enable `I2C_ISR_IRAM_SAFE` and `I2C_MASTER_ISR_HANDLER_IN_IRAM` in menuconfig -- **Thread Safety**: The component uses ESP-IDF I2C driver which is thread-safe - ---- - -*Generated for zh_bh1750 v1.0.0* diff --git a/WIKI_RU.md b/WIKI_RU.md deleted file mode 100644 index 720e3eb..0000000 --- a/WIKI_RU.md +++ /dev/null @@ -1,377 +0,0 @@ -# zh_bh1750 - Компонент датчика освещенности BH1750 для ESP-IDF - -## Содержание - -- [Обзор](#обзор) -- [Возможности](#возможности) -- [Установка](#установка) -- [Справочник API](#справочник-api) -- [Примеры использования](#примеры-использования) -- [Технические характеристики](#технические-характеристики) -- [Коды ошибок](#коды-ошибок) -- [Вклад в проект](#вклад-в-проект) -- [Лицензия](#лицензия) - ---- - -## Обзор - -`zh_bh1750` - это легковесный компонент ESP-IDF для датчика освещенности BH1750. Он предоставляет простой API для считывания значений освещенности от 1 до 65535 люкс. Компонент поддерживает несколько датчиков на одной шине I2C с использованием I2C мультиплексатора [zh_pca9548a](https://github.com/aZholtikov/zh_pca9548a). - -Компонент разработан специально для микроконтроллеров ESP32 и использует API драйвера I2C ESP-IDF v5.0+. - ---- - -## Возможности - -1. **Измерение освещенности**: Считывание значений освещенности от 1 до 65535 люкс -2. **Интерфейс I2C**: Использует стандартный протокол I2C (макс. частота 400 кГц) -3. **Настраиваемый адрес I2C**: Поддерживает адреса 0x23 и 0x5C -4. **Статистика ошибок**: Встроенный счетчик ошибок драйвера I2C -5. **Низкое энергопотребление**: Работает с системой управления питанием ESP-IDF -6. **Потокобезопасность**: Использует драйвер I2C ESP-IDF (потокобезопасен) -7. **Минимальные накладные расходы**: Низкие накладные расходы на память и процессор -8. **Поддержка нескольких датчиков**: Совместим с I2C мультиплексатором (zh_pca9548a) - ---- - -## Установка - -1. Перейдите в каталог компонентов вашего проекта: - -```bash -cd ../ваш_проект/components -``` - -2. Клонируйте репозиторий: - -```bash -git clone https://github.com/aZholtikov/zh_bh1750.git -``` - -3. В вашем приложении подключите заголовочный файл: - -```c -#include "zh_bh1750.h" -``` - -4. Компонент будет автоматически собран вместе с вашим проектом. - -### Опционально: Использование с I2C мультиплексатором (zh_pca9548a) - -Для использования нескольких датчиков BH1750 на одной шине I2C, также установите компонент [zh_pca9548a](https://github.com/aZholtikov/zh_pca9548a). - ---- - -## Справочник API - -### Структура zh_bh1750_init_config_t - -```c -typedef struct -{ - i2c_master_bus_handle_t i2c_handle; // Уникальный дескриптор шины I2C - uint8_t i2c_address; // Адрес устройства датчика I2C (0x23 или 0x5C) - uint32_t i2c_frequency; // Частота I2C датчика (макс. 400000 Гц) -} zh_bh1750_init_config_t; -``` - -Используйте макрос `ZH_BH1750_INIT_CONFIG_DEFAULT()` для инициализации значениями по умолчанию: - -- `i2c_frequency`: 400000 Гц -- `i2c_address`: 0x23 - ---- - -### Структура zh_bh1750_handle_t - -```c -typedef struct -{ - bool is_initialized; // Флаг инициализации датчика - i2c_master_dev_handle_t dev_handle; // Уникальный дескриптор устройства I2C -} zh_bh1750_handle_t; -``` - ---- - -### Структура zh_bh1750_stats_t - -```c -typedef struct -{ - uint32_t i2c_driver_error; // Количество ошибок драйвера I2C -} zh_bh1750_stats_t; -``` - ---- - -### zh_bh1750_init() - -Инициализирует датчик BH1750. - -**Параметры:** - -- `config` - Указатель на структуру конфигурации инициализации BH1750 -- `handle` - Указатель на уникальный дескриптор BH1750 - -**Возвращает:** - -- `ESP_OK` - Успех -- `ESP_ERR_INVALID_ARG` - Неверный аргумент (NULL config или handle) -- `ESP_FAIL` - Ошибка инициализации (проверка конфигурации или добавление устройства I2C) - -**Пример:** - -```c -zh_bh1750_handle_t bh1750_handle = {0}; -zh_bh1750_init_config_t config = ZH_BH1750_INIT_CONFIG_DEFAULT(); -config.i2c_handle = i2c_bus_handle; -zh_bh1750_init(&config, &bh1750_handle); -``` - ---- - -### zh_bh1750_deinit() - -Деинициализирует датчик BH1750 и удаляет его из шины I2C. - -**Параметры:** - -- `handle` - Указатель на уникальный дескриптор BH1750 - -**Возвращает:** - -- `ESP_OK` - Успех -- `ESP_ERR_INVALID_ARG` - Неверный аргумент (NULL handle) -- `ESP_ERR_INVALID_STATE` - Датчик не инициализирован -- `ESP_FAIL` - Ошибка удаления устройства I2C - ---- - -### zh_bh1750_read() - -Считывает значение освещенности с датчика. - -**Параметры:** - -- `handle` - Указатель на уникальный дескриптор BH1750 -- `data` - Указатель для хранения значения освещенности (в люксах) - -**Возвращает:** - -- `ESP_OK` - Успех -- `ESP_ERR_INVALID_ARG` - Неверный аргумент (NULL handle или data) -- `ESP_ERR_NOT_FOUND` - Датчик не инициализирован -- `ESP_FAIL` - Ошибка связи I2C - -**Примечание:** Функция выполняет измерение и ожидает ~180 мс готовности данных. - ---- - -### zh_bh1750_get_stats() - -Получает статистику ошибок с момента последнего сброса. - -**Возвращает:** - -- Указатель на структуру статистики - -**Пример:** - -```c -const zh_bh1750_stats_t *stats = zh_bh1750_get_stats(); -printf("Ошибки I2C: %ld\n", stats->i2c_driver_error); -``` - ---- - -### zh_bh1750_reset_stats() - -Сбрасывает счетчик статистики ошибок. - -**Пример:** - -```c -zh_bh1750_reset_stats(); -``` - ---- - -## Примеры использования - -### Базовый пример: Один датчик - -```c -#include "zh_bh1750.h" - -#define I2C_PORT (I2C_NUM_MAX - 1) - -zh_bh1750_handle_t bh1750_handle = {0}; - -void app_main(void) -{ - esp_log_level_set("zh_bh1750", ESP_LOG_ERROR); - i2c_master_bus_config_t i2c_bus_config = { - .clk_source = I2C_CLK_SRC_DEFAULT, - .i2c_port = I2C_PORT, - .scl_io_num = GPIO_NUM_22, - .sda_io_num = GPIO_NUM_21, - .glitch_ignore_cnt = 7, - .flags.enable_internal_pullup = true, - }; - i2c_master_bus_handle_t i2c_bus_handle; - i2c_new_master_bus(&i2c_bus_config, &i2c_bus_handle); - zh_bh1750_init_config_t config = ZH_BH1750_INIT_CONFIG_DEFAULT(); - config.i2c_handle = i2c_bus_handle; - zh_bh1750_init(&config, &bh1750_handle); - float lux = 0.0; - for (;;) - { - zh_bh1750_read(&bh1750_handle, &lux); - printf("Освещенность: %.2f люкс\n", lux); - const zh_bh1750_stats_t *stats = zh_bh1750_get_stats(); - printf("Ошибки I2C: %ld\n", stats->i2c_driver_error); - vTaskDelay(5000 / portTICK_PERIOD_MS); - } -} -``` - ---- - -### Несколько датчиков: Использование I2C мультиплексатора (zh_pca9548a) - -```c -#include "zh_pca9548a.h" -#include "zh_bh1750.h" - -#define I2C_PORT (I2C_NUM_MAX - 1) - -zh_pca9548a_handle_t pca9548a_handle = {0}; -zh_bh1750_handle_t bh1750_handle_chan_0 = {0}; -zh_bh1750_handle_t bh1750_handle_chan_1 = {0}; -zh_bh1750_handle_t bh1750_handle_chan_2 = {0}; - -void app_main(void) -{ - esp_log_level_set("zh_pca9548a", ESP_LOG_ERROR); - esp_log_level_set("zh_bh1750", ESP_LOG_ERROR); - i2c_master_bus_config_t i2c_bus_config = { - .clk_source = I2C_CLK_SRC_DEFAULT, - .i2c_port = I2C_PORT, - .scl_io_num = GPIO_NUM_22, - .sda_io_num = GPIO_NUM_21, - .glitch_ignore_cnt = 7, - .flags.enable_internal_pullup = true, - }; - i2c_master_bus_handle_t i2c_bus_handle = NULL; - i2c_new_master_bus(&i2c_bus_config, &i2c_bus_handle); - // Инициализация I2C мультиплексатора - zh_pca9548a_init_config_t pca_config = ZH_PCA9548A_INIT_CONFIG_DEFAULT(); - pca_config.i2c_handle = i2c_bus_handle; - pca_config.i2c_address = 0x70; - zh_pca9548a_init(&pca_config, &pca9548a_handle); - // Инициализация датчиков BH1750 на разных каналах - zh_bh1750_init_config_t bh1750_config = ZH_BH1750_INIT_CONFIG_DEFAULT(); - bh1750_config.i2c_handle = i2c_bus_handle; - zh_pca9548a_set(&pca9548a_handle, ZH_PCA9548A_CHAN_NUM_0); - zh_bh1750_init(&bh1750_config, &bh1750_handle_chan_0); - zh_pca9548a_set(&pca9548a_handle, ZH_PCA9548A_CHAN_NUM_1); - zh_bh1750_init(&bh1750_config, &bh1750_handle_chan_1); - zh_pca9548a_set(&pca9548a_handle, ZH_PCA9548A_CHAN_NUM_2); - zh_bh1750_init(&bh1750_config, &bh1750_handle_chan_2); - float lux = 0.0; - for (;;) - { - // Считывание с датчика на канале 0 - zh_pca9548a_set(&pca9548a_handle, ZH_PCA9548A_CHAN_NUM_0); - zh_bh1750_read(&bh1750_handle_chan_0, &lux); - printf("Датчик 1. Освещенность: %.2f люкс\n", lux); - // Считывание с датчика на канале 1 - zh_pca9548a_set(&pca9548a_handle, ZH_PCA9548A_CHAN_NUM_1); - zh_bh1750_read(&bh1750_handle_chan_1, &lux); - printf("Датчик 2. Освещенность: %.2f люкс\n", lux); - // Считывание с датчика на канале 2 - zh_pca9548a_set(&pca9548a_handle, ZH_PCA9548A_CHAN_NUM_2); - zh_bh1750_read(&bh1750_handle_chan_2, &lux); - printf("Датчик 3. Освещенность: %.2f люкс\n", lux); - vTaskDelay(5000 / portTICK_PERIOD_MS); - } -} -``` - ---- - -## Технические характеристики - -| Параметр | Значение | -|----------|----------| -| **Диапазон освещенности** | 1 - 65535 люкс | -| **Разрешение измерения** | 1 люкс | -| **Адрес I2C** | 0x23, 0x5C | -| **Частота I2C** | До 400 кГц | -| **Время измерения** | ~180 мс | -| **Версия ESP-IDF** | >= 5.0 | -| **Платформа** | Семейство ESP32 | -| **Язык** | C (C99) | - ---- - -## Коды ошибок - -| Код ошибки | Описание | -|------------|----------| -| `ESP_OK` | Операция выполнена успешно | -| `ESP_ERR_INVALID_ARG` | Неверный аргумент (NULL указатель или неверная конфигурация) | -| `ESP_ERR_INVALID_STATE` | Датчик не инициализирован | -| `ESP_ERR_NOT_FOUND` | Датчик не инициализирован или не отвечает | -| `ESP_FAIL` | Общая ошибка (ошибка связи I2C) | - ---- - -## Вклад в проект - -Вклад приветствуется! Чтобы внести свой вклад: - -1. Сделайте форк репозитория -2. Создайте ветку функции (`git checkout -b feature/AmazingFeature`) -3. Закоммитьте ваши изменения (`git commit -m 'Add some AmazingFeature'`) -4. Отправьте в ветку (`git push origin feature/AmazingFeature`) -5. Откройте Pull Request - -Пожалуйста, убедитесь, что ваш код следует существующему стилю и включает соответствующую документацию. - ---- - -## Лицензия - -Этот проект лицензирован по лицензии Apache, версия 2.0 - см. файл [LICENSE](LICENSE) для подробной информации. - -### Apache License, Version 2.0 - -Авторское право (c) 2026 Алексей Жолтиков - -Лицензировано по лицензии Apache License, Version 2.0 (далее — "Лицензия"); -вы не можете использовать этот файл, кроме случаев, предусмотренных Лицензией. -Копию Лицензии можно получить по адресу: - - http://www.apache.org/licenses/LICENSE-2.0 - -Если иное не требуется действующим законодательством или не согласовано в письменном виде, -программное обеспечение, распространяемое по Лицензии, распространяется на условиях "КАК ЕСТЬ", -БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, явных или подразумеваемых, включая, но не ограничиваясь, гарантии -ТОВАРНОГО СОСТОЯНИЯ, ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ И НЕНАРУШЕНИЯ ПРАВ. -Смотрите Лицензию для получения конкретных прав и ограничений. - ---- - -## Дополнительные заметки - -- **Подтягивающие резисторы I2C**: Убедитесь, что к линиям SDA и SCL подключены соответствующие подтягивающие резисторы -- **Время измерения**: Датчик требует ~180 мс для каждого измерения -- **I2C_ISR_IRAM_SAFE**: Для правильной работы включите `I2C_ISR_IRAM_SAFE` и `I2C_MASTER_ISR_HANDLER_IN_IRAM` в menuconfig -- **Потокобезопасность**: Компонент использует драйвер I2C ESP-IDF, который является потокобезопасным - ---- - -*Сгенерировано для zh_bh1750 v1.0.0* diff --git a/zh_bh1750.c b/zh_bh1750.c index c2efcd1..c8b92ca 100644 --- a/zh_bh1750.c +++ b/zh_bh1750.c @@ -54,7 +54,7 @@ static esp_err_t _zh_bh1750_validate_config(const zh_bh1750_init_config_t *confi */ static esp_err_t _zh_bh1750_i2c_init(const zh_bh1750_init_config_t *config, zh_bh1750_handle_t *handle); -esp_err_t zh_bh1750_init(const zh_bh1750_init_config_t *config, zh_bh1750_handle_t **handle) // -V2008 +esp_err_t zh_bh1750_init(const zh_bh1750_init_config_t *config, zh_bh1750_handle_t **handle) { ZH_LOGI("BH1750 initialization begin."); ZH_ERROR_CHECK(config != NULL && handle != NULL, ESP_ERR_INVALID_ARG, NULL, "BH1750 initialization failed. Invalid argument."); @@ -78,7 +78,7 @@ esp_err_t zh_bh1750_deinit(zh_bh1750_handle_t **handle) return ESP_OK; } -esp_err_t zh_bh1750_read(zh_bh1750_handle_t **handle, float *data) // -V2008 +esp_err_t zh_bh1750_read(zh_bh1750_handle_t **handle, float *data) { ZH_LOGI("BH1750 read begin."); ZH_ERROR_CHECK(handle != NULL && *handle != NULL && data != NULL, ESP_ERR_INVALID_ARG, NULL, "BH1750 read fail. Invalid argument.");