Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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

...