Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
Библиотека для использования микросхемы i2c pcf8591 с arduino и esp8266.
Эта ИС может управлять (до 4) аналоговыми входами и / или 1 аналоговыми выходами, например, измерять напряжение, считывать значение термистора или гаснуть светодиода.
Может считывать аналоговое значение и записывать аналоговое значение с помощью только 2-х проводов (идеально подходит для ESP-01).
Я стараюсь упростить использование этой микросхемы с минимальным набором операций.
Вы можете найти обновленную версию на моем сайте
Шаг 1. Как работает I2c
I2C работает с двумя проводами: SDA (линия передачи данных) и SCL (линия синхронизации).
Обе эти линии имеют открытый сток, но подтянуты резисторами.
Обычно на линии есть один мастер и один или несколько подчиненных, хотя может быть несколько мастеров, но об этом мы поговорим позже.
И ведущие, и ведомые устройства могут передавать или принимать данные, поэтому устройство может находиться в одном из этих четырех состояний: ведущее передается, ведущее принимает, ведомое передает, ведомое принимает.
Шаг 2:
Вы можете найти мою библиотеку здесь.
Скачать.
Нажмите кнопку СКАЧАТЬ в правом верхнем углу, переименуйте несжатую папку в PCF8591.
Убедитесь, что папка PCF8591 содержит файлы PCF8591.cpp и PCF8591.h.
Поместите папку библиотеки PCF8591 в папку / library /.
Вам может потребоваться создать подпапку библиотек, если это ваша первая библиотека.
Перезагрузите IDE.
Шаг 3: Использование
Конструктор: вы должны передать адрес i2c (чтобы проверить адрес, используйте это руководство I2cScanner)
PCF8591 (адрес uint8_t);
для esp8266, если вы хотите указать вывод SDA и SCL, используйте это:
PCF8591 (адрес uint8_t, uint8_t sda, uint8_t scl);
Шаг 4: считайте значение
IC, как вы можете видеть на изображении, имеет 4 аналоговых входа и 1 аналоговый выход.
Итак, чтобы прочитать весь аналоговый ввод за одну передачу, вы можете сделать (значение от 0 до 255):
PCF8591:: AnalogInput ai = pcf8591.analogReadAll ();
Serial.print (ai.ain0); Serial.print ("-"); Serial.print (ai.ain1); Serial.print ("-"); Serial.print (ai.ain2); Serial.print ("-"); Serial.println (ai.ain3);
если вы хотите прочитать один аналоговый вход или канал:
int ana = pcf8591.analogRead (AIN0); // читаем аналог 0
Шаг 5: прочтите Vale из канала
Эта ИС имеет несколько типов чтения, и вы можете использовать аналоговый вход или аналоговый канал (когда вы используете один аналоговый вход для чтения, и канал показан на рисунках).
Например, чтобы прочитать значение канала 0 в двух дифференциальных входах, вы должны сделать:
int ana = pcf8591.analogRead (CHANNEL0, TWO_DIFFERENTIAL_INPUT); // читаем аналог 0
Шаг 6: запишите значение
Если вы хотите записать аналоговое значение, вы должны сделать (значение от 0 до 255):
pcf8591.analogWrite (128);
Шаг 7: Дополнительные функции
Дополнительная функция - считывание напряжения записи: для расчета напряжения вы должны передать некоторый параметр:
- microcontrollerReferenceVoltage: получить напряжение от напряжения микроконтроллера (фиксировано только AVR без esp8266 для esp 3,3 В)
- referenceVoltage: если microcontrollerReferenceVoltage false принимает это значение, команды:
void VoltageWrite (значение с плавающей запятой, bool microcontrollerReferenceVoltage = true, referenceVoltage с плавающей запятой = 5,0);
float VoltageRead (uint8_t analogPin, bool microcontrollerReferenceVoltage = true, float referenceVoltage = 5.0);
Примеры:
pcf8591.voltageWrite (2.7); // Выход 2,7 В
задержка (3000);
float ana0V = pcf8591.voltageRead (AIN0); // Считываем напряжение с аналогового 0
Serial.println (ana0V);
Шаг 8: Примеры схемы подключения
Шаг 9: Спасибо
Серия проектов i2c (Сборник):
- Датчик температуры и влажности
- Аналоговый расширитель
- Цифровой расширитель
- ЖК дисплей