目的:測試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
}
沒有留言:
張貼留言