From 463fc6164914e914ac775e4de6d3b8c803dc88f6 Mon Sep 17 00:00:00 2001 From: Mit4el Date: Wed, 27 Nov 2024 22:21:53 +0300 Subject: [PATCH] pcf8591, sht30 --- data_svelte/widgets.json | 7 +++ src/modules/sensors/Pcf8591/Pcf8591.cpp | 78 ++++++++++++++++++++++++ src/modules/sensors/Pcf8591/modinfo.json | 52 ++++++++++++++++ src/modules/sensors/Sht30/Sht30.cpp | 39 ++++++++++-- src/modules/sensors/Sht30/modinfo.json | 4 +- 5 files changed, 173 insertions(+), 7 deletions(-) create mode 100644 src/modules/sensors/Pcf8591/Pcf8591.cpp create mode 100644 src/modules/sensors/Pcf8591/modinfo.json diff --git a/data_svelte/widgets.json b/data_svelte/widgets.json index 9da79005..21a983fc 100644 --- a/data_svelte/widgets.json +++ b/data_svelte/widgets.json @@ -325,5 +325,12 @@ { "name": "nil", "label": "Без виджета" + }, + { + "name": "anydataBar", + "label": "давление Bar", + "widget": "anydata", + "after": "Kg/cm²", + "icon": "speedometer" } ] \ No newline at end of file diff --git a/src/modules/sensors/Pcf8591/Pcf8591.cpp b/src/modules/sensors/Pcf8591/Pcf8591.cpp new file mode 100644 index 00000000..e3d2511d --- /dev/null +++ b/src/modules/sensors/Pcf8591/Pcf8591.cpp @@ -0,0 +1,78 @@ +#include "Global.h" +#include "classes/IoTItem.h" + +#include "Wire.h" +#include + +// Make sure that this is set to the value in volts of VCC +//#define ADC_REFERENCE_VOLTAGE 3.3 +// Make sure that this is set to the value in volts of VCC +//#define ADC_REFERENCE_VOLTAGE 5.0 + +class Pcf8591 : public IoTItem { + int _pin; + float _adc_ref; + bool _isRaw; + bool _isInited = false; + Adafruit_PCF8591 pcf = Adafruit_PCF8591(); + + public: + Pcf8591(String parameters) : IoTItem(parameters) { + String tmp; + jsonRead(parameters, "pin", tmp); + _pin = tmp.toInt(); + + jsonRead(parameters, "adc_ref", tmp); + _adc_ref = tmp.toFloat(); + + jsonRead(parameters, "mode", tmp); + _isRaw = tmp == "raw"; + + if (!pcf.begin()) { + Serial.println("# Adafruit PCF8591 not found!"); + _isInited = false; + } else + + _isInited = true; + + Serial.println("# Adafruit PCF8591 found"); + + pcf.enableDAC(true); + + Serial.println("AIN0, AIN1, AIN2, AIN3"); + + } + + uint8_t dac_counter = 0; + + void doByInterval() { + + // Make a triangle wave on the DAC output + pcf.analogWrite(dac_counter++); + + if (_isInited) { + if (_isRaw) + value.valD = pcf.analogRead(_pin); // Чтение АЦП нулевого канала (Вольты) + else + // value.valD = (int_to_volts(pcf.analogRead(_pin), 8, ADC_REFERENCE_VOLTAGE)); + value.valD = (int_to_volts(pcf.analogRead(_pin), 8, _adc_ref)); + regEvent(value.valD, "PCF8591"); + } + +} + + float int_to_volts(uint16_t dac_value, uint8_t bits, float logic_level) { + return (((float)dac_value / ((1 << bits) - 1)) * logic_level); + + } + + ~Pcf8591(){}; +}; + +void *getAPI_Pcf8591(String subtype, String param) { + if (subtype == F("Pcf8591")) { + return new Pcf8591(param); + } else { + return nullptr; + } +} diff --git a/src/modules/sensors/Pcf8591/modinfo.json b/src/modules/sensors/Pcf8591/modinfo.json new file mode 100644 index 00000000..99fdc606 --- /dev/null +++ b/src/modules/sensors/Pcf8591/modinfo.json @@ -0,0 +1,52 @@ +{ + "menuSection": "sensors", + "configItem": [ + { + "global": 0, + "name": "Расширитель портов PCF8591", + "type": "Reading", + "subtype": "Pcf8591", + "id": "Pcf85", + "widget": "anydataVlt", + "page": "PCF8591", + "descr": "PCF_0", + "pin": "0", + "mode": "volt", + "adc_ref": 5.0, + "map": "1,255,1,100", + "plus": 0, + "multiply": 1, + "round": 2, + "int": 7 + } + ], + "about": { + "authorName": "Serghei Crasnicov", + "authorContact": "https://t.me/Serghei63", + "authorGit": "https://github.com/Serghei63", + "specialThanks": "", + "moduleName": "Pcf8591", + "moduleVersion": "1.0", + "usedRam": { + "esp32_4mb": 15, + "esp8266_4mb": 15 + }, + "title": "Расширитель 4-х аналоговых портов PCF8591", + "moduleDesc": "Позволяет получить относительную величину напряжения на понижающем трансформаторе.", + "propInfo": { + "pin": "Номер AN, к которому подключен датчик. Допускается 0, 1, 2, 3", + "mode": "Режим работы. volt - вывод в вольтах , raw - значения от 0 до 255", + "int": "Количество секунд между опросами датчика." + } + }, + "defActive": false, + "usedLibs": { + + "esp32*": [ + "https://github.com/adafruit/Adafruit_PCF8591" + ], + "esp82*": [ + "https://github.com/adafruit/Adafruit_PCF8591" + ] + } +} \ No newline at end of file diff --git a/src/modules/sensors/Sht30/Sht30.cpp b/src/modules/sensors/Sht30/Sht30.cpp index d78947df..fb4a5828 100644 --- a/src/modules/sensors/Sht30/Sht30.cpp +++ b/src/modules/sensors/Sht30/Sht30.cpp @@ -13,19 +13,33 @@ #include "Wire.h" #include -SHT3X sht30(0x45); +SHT3X sht30(0x44); class Sht30t : public IoTItem { + + private: + uint8_t _addr = 0; + public: - Sht30t(String parameters): IoTItem(parameters) { } + Sht30t(String parameters): IoTItem(parameters) { + { + String sAddr; + jsonRead(parameters, "addr", sAddr); + if (sAddr == "") + scanI2C(); + else + _addr = hexStringToUint8(sAddr); + } + + } void doByInterval() { if(sht30.get()==0){ value.valD = sht30.cTemp; - SerialPrint("E", "Sensor Sht30t", "OK"); + SerialPrint("i", "Sensor Sht30t", "OK"); - if (value.valD < -46.85F) regEvent(value.valD, "Sht30t"); // TODO: найти способ понимания ошибки получения данных + if (value.valD > -46.85F) regEvent(value.valD, "Sht30t"); // TODO: найти способ понимания ошибки получения данных else SerialPrint("E", "Sensor Sht30t", "Error", _id); } } @@ -33,14 +47,27 @@ class Sht30t : public IoTItem { }; class Sht30h : public IoTItem { + + private: + uint8_t _addr = 0; + public: - Sht30h(String parameters): IoTItem(parameters) { } + Sht30h(String parameters): IoTItem(parameters) { + { + String sAddr; + jsonRead(parameters, "addr", sAddr); + if (sAddr == "") + scanI2C(); + else + _addr = hexStringToUint8(sAddr); + } + } void doByInterval() { if(sht30.get()==0){ value.valD = sht30.humidity; - SerialPrint("E", "Sensor Sht30h", "OK"); + SerialPrint("i", "Sensor Sht30h", "OK"); if (value.valD != -6) regEvent(value.valD, "Sht30h"); // TODO: найти способ понимания ошибки получения данных else SerialPrint("E", "Sensor Sht30h", "Error", _id); } diff --git a/src/modules/sensors/Sht30/modinfo.json b/src/modules/sensors/Sht30/modinfo.json index 6a22d155..a9196559 100644 --- a/src/modules/sensors/Sht30/modinfo.json +++ b/src/modules/sensors/Sht30/modinfo.json @@ -10,6 +10,7 @@ "widget": "anydataTmp", "page": "Сенсоры", "descr": "SHT30 Температура", + "addr": "", "int": 15, "round": 1 }, @@ -22,6 +23,7 @@ "widget": "anydataHum", "page": "Сенсоры", "descr": "SHT30 Влажность", + "addr": "", "int": 15, "round": 1 } @@ -47,7 +49,7 @@ "int": "Количество секунд между опросами датчика." } }, - "defActive": true, + "defActive": false, "usedLibs": { "esp32*": [ "WEMOS SHT3x@1.0.0"