pcf8591, sht30

This commit is contained in:
Mit4el
2024-11-27 22:21:53 +03:00
parent 0bd525401b
commit 463fc61649
5 changed files with 173 additions and 7 deletions

View File

@@ -325,5 +325,12 @@
{ {
"name": "nil", "name": "nil",
"label": "Без виджета" "label": "Без виджета"
},
{
"name": "anydataBar",
"label": "давление Bar",
"widget": "anydata",
"after": "Kg/cm²",
"icon": "speedometer"
} }
] ]

View File

@@ -0,0 +1,78 @@
#include "Global.h"
#include "classes/IoTItem.h"
#include "Wire.h"
#include <Adafruit_PCF8591.h>
// 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;
}
}

View File

@@ -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"
]
}
}

View File

@@ -13,19 +13,33 @@
#include "Wire.h" #include "Wire.h"
#include <WEMOS_SHT3X.h> #include <WEMOS_SHT3X.h>
SHT3X sht30(0x45); SHT3X sht30(0x44);
class Sht30t : public IoTItem { class Sht30t : public IoTItem {
private:
uint8_t _addr = 0;
public: 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() { void doByInterval() {
if(sht30.get()==0){ if(sht30.get()==0){
value.valD = sht30.cTemp; 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); else SerialPrint("E", "Sensor Sht30t", "Error", _id);
} }
} }
@@ -33,14 +47,27 @@ class Sht30t : public IoTItem {
}; };
class Sht30h : public IoTItem { class Sht30h : public IoTItem {
private:
uint8_t _addr = 0;
public: 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() { void doByInterval() {
if(sht30.get()==0){ if(sht30.get()==0){
value.valD = sht30.humidity; value.valD = sht30.humidity;
SerialPrint("E", "Sensor Sht30h", "OK"); SerialPrint("i", "Sensor Sht30h", "OK");
if (value.valD != -6) regEvent(value.valD, "Sht30h"); // TODO: найти способ понимания ошибки получения данных if (value.valD != -6) regEvent(value.valD, "Sht30h"); // TODO: найти способ понимания ошибки получения данных
else SerialPrint("E", "Sensor Sht30h", "Error", _id); else SerialPrint("E", "Sensor Sht30h", "Error", _id);
} }

View File

@@ -10,6 +10,7 @@
"widget": "anydataTmp", "widget": "anydataTmp",
"page": "Сенсоры", "page": "Сенсоры",
"descr": "SHT30 Температура", "descr": "SHT30 Температура",
"addr": "",
"int": 15, "int": 15,
"round": 1 "round": 1
}, },
@@ -22,6 +23,7 @@
"widget": "anydataHum", "widget": "anydataHum",
"page": "Сенсоры", "page": "Сенсоры",
"descr": "SHT30 Влажность", "descr": "SHT30 Влажность",
"addr": "",
"int": 15, "int": 15,
"round": 1 "round": 1
} }
@@ -47,7 +49,7 @@
"int": "Количество секунд между опросами датчика." "int": "Количество секунд между опросами датчика."
} }
}, },
"defActive": true, "defActive": false,
"usedLibs": { "usedLibs": {
"esp32*": [ "esp32*": [
"WEMOS SHT3x@1.0.0" "WEMOS SHT3x@1.0.0"