diff --git a/SW/rs485_rele_esplan/rs485_rele_esplan.ino b/SW/rs485_rele_esplan/rs485_rele_esplan.ino new file mode 100755 index 0000000..8aaa189 --- /dev/null +++ b/SW/rs485_rele_esplan/rs485_rele_esplan.ino @@ -0,0 +1,59 @@ +// ESPLan + https://www.laskakit.cz/8-kanalu-12v-rele-modul-250vac-10a--rs485--din/ + +byte open1ch[] = {0x01, 0x06, 0x00, 0x01, 0x01, 0x00}; +byte close1ch[] = {0x01, 0x06, 0x00, 0x01, 0x02, 0x00}; + +byte openAll[] = {0x01, 0x06, 0x00, 0x00, 0x07, 0x00}; +byte closeAll[] = {0x01, 0x06, 0x00, 0x00, 0x08, 0x00}; + + +void setup(){ + Serial.begin(115200); + + Serial1.begin(9600, SERIAL_8N1, 36, 4); //ESP32 RX1 IO36, TX1 IO4 + +// sendData(openAll, sizeof(openAll)); // Sepne vsechny rele +// delay(1000); +// sendData(closeAll, sizeof(closeAll)); // Rozepne vsechny rele +// delay(1000); + sendData(open1ch, sizeof(open1ch)); // Sepne rele 1 + delay(1000); + sendData(close1ch, sizeof(close1ch)); // Rozepne rele 1 +} + +void loop(){ + +} + +void sendData(byte d[], int i){ + byte crc[2]; + + uint16_t crcc = calcCRC(d, i); + uint8_t crc_l = (uint8_t)(crcc >> 8); + uint8_t crc_h = (uint8_t)crcc; + d[6] = crc_h; + d[7] = crc_l; + + Serial1.write(d, i+2); +} + +unsigned short calcCRC(const unsigned char *indata, int len){ + unsigned short crc=0xffff; + unsigned char temp; + int n; + while(len--){ + crc=*indata^crc; + for(n=0;n<8;n++){ + char TT; + TT=crc&1; + crc=crc>>1; + crc=crc&0x7fff; + if (TT==1){ + crc=crc^0xa001; + crc=crc&0xffff; + } + } + indata++; + } + return crc; +}