Example sketches tested on ESP8266-NodeMCU (Receiver) and NANO(Sender).
ESP8266 (Receiver) Codes:
#include<SoftwareSerial.h> //ESP8266 NodeMCU
SoftwareSerial SUART(D5, D6); //SRX = D5, STX = D6
bool flag = false;
byte i = 0;
byte m;
byte x1;
byte z1, z2;
byte CHKSUM = 0;
byte myData[201];
void setup()
{
Serial.begin(115200);
SUART.begin(9600);
Serial.println();
}
void loop()
{
byte n = SUART.available();
if (n != 0)
{
x1 = SUART.read();
if (flag == false)
{
if (x1 == 0x71)
{
z1 = x1;
flag = true;
}
}
else
{
if (x1 == 0xC8)
{
z2 = x1;
Serial.println("===================");
Serial.println("Preamble Found.");
m = SUART.readBytes(myData, 201);
// Serial.println(m, DEC); //debug
Serial.print("Received CHKSUM: "); Serial.println(myData[200], HEX); //debug
for (byte i = 0; i < 200; i++)
{
CHKSUM = CHKSUM + myData[i];
}
CHKSUM = CHKSUM + z1 + z2; //z1 = 0x71, z2 = 0xC8
CHKSUM = ~CHKSUM;
CHKSUM = CHKSUM + 1;
Serial.print("Computed CHKSUM: "); Serial.println(CHKSUM, HEX);//debug
if (CHKSUM == myData[200])
{
Serial.println("Received Valid Data.");
CHKSUM = 0;
}
}
}
}
}
NANO(Sender) Codes:
#include<SoftwareSerial.h> //NANO
SoftwareSerial SUART(2, 3);//SRX = D2(2), STX = D6
int CHKSUM = 0;
byte CHKSUMT;
byte myData[] =
{
0x71, 0xc8, 0x01, 0x10, 0x56, 0x55, 0x62, 0x49, 0x00, 0x05,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x19, 0x15, 0x11, 0x55, 0x16, 0x5e, 0x55, 0x05, 0x09, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x8f,
0x80, 0x8a, 0xb2, 0x71, 0x71, 0x97, 0x99, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x85,
0x15, 0x8a, 0x85, 0x85, 0xd0, 0x7b, 0x78, 0x1f, 0x7e, 0x1f,
0x1f, 0x79, 0x79, 0x8d, 0x8d, 0x9e, 0x96, 0x71, 0x8f, 0xb7,
0xa3, 0x7b, 0x8f, 0x8e, 0x85, 0x80, 0x8f, 0x8a, 0x94, 0x9e,
0x8a, 0x8a, 0x94, 0x9e, 0x82, 0x90, 0x8b, 0x05, 0x65, 0x78,
0xc1, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x55, 0x56, 0x55, 0x21, 0x53, 0x15, 0x5a, 0x05, 0x12, 0x12,
0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe2,
0xce, 0x0d, 0x71, 0x81, 0x72, 0xce, 0x0c, 0x92, 0x81, 0xb0,
0x00, 0xaa, 0x7c, 0xab, 0xb0, 0x32, 0x32, 0x9c, 0xb6, 0x32,
0x32, 0x32, 0x80, 0xb7, 0xaf, 0xcd, 0x9a, 0xac, 0x79, 0x80,
0x77, 0x80, 0xff, 0x91, 0x01, 0x29, 0x59, 0x00, 0x00, 0x3b,
0x0b, 0x1c, 0x51, 0x59, 0x01, 0x36, 0x79, 0x01, 0x01, 0xc3,
0x02, 0x00, 0xdd, 0x02, 0x00, 0x05, 0x00, 0x00, 0x01, 0x00,
0x00, 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0a, 0x14, 0x00,
0x00, 0x00
};
void setup()
{
Serial.begin(115200);
SUART.begin(9600);
for (byte i = 0; i < sizeof myData; i++)
{
CHKSUM += myData[i];
}
CHKSUMT = lowByte(CHKSUM);
CHKSUMT = ~CHKSUMT;
CHKSUMT = CHKSUMT + 1;
// SUART.write(CHKSUMT);
Serial.print(CHKSUMT, HEX);
// myData[201] = CHKSUMT;
}
void loop()
{
SUART.write(myData, sizeof myData);
SUART.write(CHKSUMT);
Serial.println(CHKSUMT, HEX);
delay(1000);
}
Receiver Screenshot:

