Добавляем модуль сканера меток DS2401

This commit is contained in:
2023-02-24 16:08:39 +03:00
parent a184216908
commit a0b8f4067d
2 changed files with 113 additions and 0 deletions

View File

@@ -0,0 +1,62 @@
#include "Global.h"
#include "classes/IoTItem.h"
#include <OneWire.h>
bool cmpAddr(uint8_t *addr1, uint8_t *addr2, int size) {
for (int i=0; i<size; i++) {
if (addr1[i] != addr2[i]) return false;
}
return true;
}
class DS2401 : public IoTItem {
private:
OneWire* _ds = nullptr;
byte _addr[8], _oldAddr[8];
char _addrStr[20];
int _intRepeat;
int _repeatCount = 0;
public:
DS2401(String parameters): IoTItem(parameters) {
int pin;
jsonRead(parameters, "pin", pin);
jsonRead(parameters, "intRepeat", _intRepeat);
_interval = _interval / 1000; // корректируем величину интервала int, теперь он в миллисекундах
_ds = new OneWire(pin);
}
void doByInterval() {
if (_ds->search(_addr) && _ds) {
if ( OneWire::crc8( _addr, 7) != _addr[7]) {
SerialPrint("E", "DS2401", "CRC is not valid!", _id);
return;
}
if (!cmpAddr(_addr, _oldAddr, 8) || _repeatCount > _intRepeat) {
hex2string(_addr, 8, _addrStr);
value.valS = _addrStr;
value.isDecimal = false;
regEvent(value.valS, "DS2401");
memcpy(_oldAddr, _addr, 8);
_repeatCount = 0;
}
}
if (_repeatCount <= _intRepeat) _repeatCount++;
}
~DS2401() {
if (_ds) delete _ds;
};
};
void* getAPI_DS2401(String subtype, String param) {
if (subtype == F("DS2401")) {
return new DS2401(param);
} else {
return nullptr;
}
}

View File

@@ -0,0 +1,51 @@
{
"menuSection": "Сенсоры",
"configItem": [
{
"global": 0,
"name": "Сканер DS2401 меток",
"type": "Reading",
"subtype": "DS2401",
"id": "rds",
"int": 100,
"intRepeat": 6,
"pin": 12
}
],
"about": {
"authorName": "Ilya Belyakov",
"authorContact": "https://t.me/Biveraxe",
"authorGit": "https://github.com/biveraxe",
"specialThanks": "",
"moduleName": "DS2401",
"moduleVersion": "1.0",
"usedRam": {
"esp32_4mb": 15,
"esp8266_4mb": 15
},
"title": "Сканер DS2401 меток",
"moduleDesc": "Ожидает появления на шине 1-wire метки DS2401",
"propInfo": {
"pin": "GPIO номер, к которому подключена шина 1-Wire с подтяжкой 4,7к",
"int": "Количество миллисекунд между опросами шины. 0 - выключено.",
"intRepeat": "Количество интервалов int пропускаем повторы, т.е. при int=100 и intRepeat=6, первые 600мс игнорируем одинаковые адреса меток."
},
"retInfo": "Содержит 64-битный адрес метки в формате HEX строки",
"funcInfo": []
},
"defActive": false,
"usedLibs": {
"esp32_4mb": [
],
"esp8266_4mb": [
],
"esp8266_1mb": [
],
"esp8266_1mb_ota": [
],
"esp8285_1mb": [
],
"esp8285_1mb_ota": [
]
}
}