mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-27 14:42:18 +03:00
Добавляем модуль сканера меток DS2401
This commit is contained in:
62
src/modules/sensors/DS2401/DS2401.cpp
Normal file
62
src/modules/sensors/DS2401/DS2401.cpp
Normal 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;
|
||||
}
|
||||
}
|
||||
|
||||
51
src/modules/sensors/DS2401/modinfo.json
Normal file
51
src/modules/sensors/DS2401/modinfo.json
Normal 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": [
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user