mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-30 20:09:14 +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