...
https://www.mischianti.org/2020/05/11/interface-arduino-esp8266-esp32-rs-485/
Sample Code for ESP8266 Wemos:
Code Block |
---|
#include "Arduino.h" #include <SoftwareSerial.h> #include <SoftwareSerial<Ticker.h> #define RXPin SER_RX_PIN D2 // Serial Receive pin #define TXPinSER_TX_PIN D3 // Serial Transmit pin //RS485 control #define SERIALSER_COMMUNICATION_CONTROL_PIN D0 // Transmission set pin #define RS485SER_TX_PIN_VALUE HIGH #define RS485SER_RX_PIN_VALUE LOW SoftwareSerial RS485Serial(RXPin, TXPin); // RX, TX int byteSend; void setup() { Serial.begin(19200); pinMode(SERIAL_COMMUNICATION_CONTROL_PIN, OUTPUT); digitalWrite(SERIAL_COMMUNICATION_CONTROL_PIN, RS485_RX_PIN_VALUE); RS485Serial.begin(19200); // set the data rate } String dataReceived; bool isDataReceived = false; void loop() { digitalWrite(SERIAL_COMMUNICATION_CONTROL_PIN, RS485_RX_PIN_VALUE);// Init receive if (RS485Serial.available()){ dataReceived = RS485Serial.readString(); Serial.print("Data received "); Serial.println(dataReceived); isDataReceived = true; delay(10); } if (isDataReceived){ delay(111); digitalWrite(SERIAL_COMMUNICATION_CONTROL_PIN, RS485_TX_PIN_VALUE); // Init transmit Serial.println("Send response!"); RS485Serial.print("OK --> "); RS485Serial.println(dataReceived); isDataReceived = false; } delay(111);serialPort(SER_RX_PIN, SER_TX_PIN); Ticker ticker; int byteSend; String dataReceived; bool isDataReceived = false; bool halt = true; int setSpeed = 0; int curSpeed = 0; //ramp this up until it reaches the set speed //int savedSpeed = 0; //const int speedCount = 123; const byte b1[] = {0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16}; const byte b2[] = {0,161,195,230,8,42,76,111,145,179,213,248,26,60,94,129,163,197,231,10,44,78,112,147,181,215,249,28,62,96,130,165,199,233,11,46,80,114,148,183,217,251,29,64,98,132,166,200,235,13,47,81,116,150,184,218,253,31,65,99,134,164,202,236,15,49,83,117,152,186,220,254,33,67,101,135,170,204,238,16,51,85,119,153,188,222,0,34,101,103,137,171,206,240,18,52,87,121,155,173,224,2,36,70,105,139,173,207,242,20,54,88,123,157,191,225,4,20,54,88,123,157,191,225}; const byte b3[] = {221,16,201,186,144,116,105,188,33,197,216,18,156,188,101,79,171,182,82,43,11,210,8,154,186,99,250,96,132,229,70,87,142,23,64,51,212,48,87,130,38,194,136,186,94,57,221,121,172,63,219,60,79,236,117,172,189,135,230,2,54,175,118,86,112,234,51,19,158,122,103,131,132,93,125,222,20,9,237,132,81,76,168,118,5,220,105,141,161,69,139,127,49,235,188,156,116,237,78,110,92,210,242,43,131,32,0,217,80,195,39,131,86,49,213,180,119,195,39,131,86,49,213,180}; void setup() { Serial.begin(115200); //initialize RS485 pinMode(SER_CONTROL_PIN, OUTPUT); digitalWrite(SER_CONTROL_PIN, SER_RX_VALUE); serialPort.begin(9600); ticker.attach_ms(15,sendSpeedPacket); } void loop() { // setSpeed = 0; // delay(30000); // setSpeed = 1; // delay(30000); // setSpeed = 10; // delay(30000); // // setSpeed = 1; delay(30000); setSpeed = 5; // delay(30000); // setSpeed = 12; delay(30000); halt=true; } void processSerial(){ processReceived(); sendSpeedPacket(); } void processReceived(){ digitalWrite(SER_CONTROL_PIN, SER_RX_VALUE);// Init receive if (serialPort.available()){ dataReceived = serialPort.readString(); Serial.print("Data received "); Serial.println(dataReceived); } } void sendSpeedPacket() { if(halt == true) { //send the stop packet serialPort.write((byte)0); serialPort.write((byte)255); serialPort.write((byte)241); serialPort.write((byte)2); serialPort.write((byte)0); serialPort.write((byte)0); serialPort.write((byte)221); } else { //send the current speed packet serialPort.write((byte)0); serialPort.write((byte)255); serialPort.write((byte)241); serialPort.write((byte)2); serialPort.write((byte)b1[curSpeed]); serialPort.write((byte)b2[curSpeed]); serialPort.write((byte)b3[curSpeed]); } if (halt == true){ curSpeed = 0; } if (curSpeed < setSpeed && halt == false) { //this ramps the sent speed up until it hits the set speed curSpeed++; } if (curSpeed > setSpeed && halt == false) { //this immediately reduces the sent speed to the set speed curSpeed = setSpeed; } Serial.print(halt); Serial.print(" "); Serial.println(curSpeed); } |
Code Block |
---|
$ sort tmp.txt | uniq -c 411 4 +1 4 +2 1 01 1a fe df 00 fd ce 1a ec fe 3a ac fe 1 01 1a fe df 00 fd ce 1a ec fe 5e f4 fd 1 01 1a fe df 00 fd ce 1a ec fe 76 2c fe 2 01 1a fe df 00 fd ce 1a ec fe 7a b4 fc 1 01 1a fe df 00 fd ce 1a ec fe e6 d4 fc 2 01 1a fe df 00 fd f2 1a ec fe fe fa ff 1 01 1a fe df 00 fd f6 1a ec fe fe b6 fe 2 01 1a fe df 00 fd fa 1a ec fe fe a6 fe 4 01 1a fe df 00 fd fe 1a ec fe fe ea ff 19 01 26 f6 ff af 1f 00 fd ce 26 fc 76 fe 1 01 26 f6 ff af 1f 00 fd f6 26 fc aa ff 1 01 26 f6 ff af 1f 00 fd fa 26 fc 82 fe 10 01 26 f6 ff af 1f 00 fd fe 26 fc 9a fe 18 01 3a f6 ff bd be 00 fd ce 3a fc ce ff 5 01 3a f6 ff bd be 00 fd f6 3a fc 12 fe 10 01 3a f6 ff bd be 00 fd fe 3a fc 22 ff 5 01 3a f6 ff ff 45 00 fd f2 3a fc 0a fe 6 01 3a f6 ff ff 45 00 fd fa 3a fc 3a ff 1 01 3a f6 ff ff 45 00 fd fe 3a fc 22 ff 1 01 0d fe df 00 fd ce 1a ec fe 1 01 13 f6 ff af 1f 00 fd ce 26 fc 76 fe 1 01 1a fe df 00 fd ce 1a ec fe 72 35 01 1a fe df 00 fd fe 1a ec fe fe ea ff 15 01 1a fe df 00 fd fe 1a ec fe fe ea ff 4 01 26 f6 ff af 1f 00 fd ce 26 fc 76 fe 5 01 3a f6 ff bd be 00 fd ce 3a fc ce ff 199 01 3a f6 ff ff 45 00 fd fe 3a fc 22 ff 41 01 3a f6 ff ff 45 00 fd fe 3a fc 22 ff 1 01 3a f6 ff ff 45 f4 fe 3a fc 22 ff 1 01 3e ff 1f 00 fd fe 3e fe 7e fe 1 01 be f6 ff 0b c2 00 fd fe be fc a6 fe |
...