2021年4月30日 星期五

ESP8266與PLC通訊

目的:測試ESP8266 軟體RS232與PLC通訊

系統架構


線路

DB9腳位定義:

 pin2(RX)

 pin3(TX)

 pin5(GND) 

DB9連接線 2,3腳已跳線





ESP8266 Pin

TTL (Pin) – RS232(DB9)

DVP PLC COM1 (BD9)

GPIO 4 (D2, RX)

TX

2 (RX)

2 (RX)

GPIO 0 (D3, TX)

RX

3 (TX)

3 (TX)

3.3 VCC

VCC

5 (GND)

5(GND)

GND

GND

 

 


程式 

#include <SoftwareSerial.h>

#define D2 (4) //RX

#define D3 (0) //TX

SoftwareSerial swSer;

char CR = 0x0D;

char LF = 0x0A;

String cmd = String();

byte inByte[50] ; // 用來儲存收進來的 data byte

int i=0;

boolean once = false;

void setup()                    // run once, when the sketch starts

  Serial.begin(115200);

  swSer.begin(9600, SWSERIAL_7E1, D2, D3);     // DVP PLC Modbus ASCII 9600,7,e,1 

 // force Y0 ON ":01050500FF00F6\r\n" 

  cmd= cmd + ":01050500FF00F6" + CR + LF;

}

void loop() {                

  if(!once){

   Serial.println(" "); 

   Serial.println("ESP8266 --> DVP PLC");

   Serial.print(cmd);  //print string 

   for(int i=0; i<cmd.length(); i++) { //print ascii code

    Serial.print(cmd.charAt(i),HEX);

    Serial.print(" ");

  }  

    swSer.print(cmd); //Arduino 2 PLC 

    delay(100); 

    Serial.println(" ");

   Serial.println(" ");

 // PLC Response

 i=0;

 while (swSer.available()) { //PLC 2 ESP8266

    inByte[i++] = swSer.read();      

  }   

  Serial.println("DVP PLC --> ESP8266");  

  for(int j=0; j< i;j++)   

    Serial.print((char) inByte[j]);    

  for(int j=0; j< i;j++){

    Serial.print(inByte[j],HEX);

    Serial.print(" ");

  } 

  Serial.println(" ");  

 i=0;

 once = true;

  }//end once 

}

結果


ESP_XX 通訊函式庫

SoftwareSerial for ESP XX



沒有留言:

張貼留言