วันศุกร์ที่ 3 มีนาคม พ.ศ. 2560

Software serial arduino vs NodeMCU

Software serial Arduino vs NodeMCU




Hardware Connection

// Arduino UNO          9               8
//                                  |                 |
//                                  |                 |
// NodeMCU            14(D6)       12(D5)


Software serial  เป็นไลบลารีตัวนึงที่มีประโยชน์ และนำไปใช้บ่อยมาก เกี่ยวกับงานที่ต้องใช้ Uart TTL มากกว่า 1 ช่อง

โดยทั่วหากนำไลบลารี SoftwareSerial.h มาใช้เลยมันก็ง่าย แต่มันจะมีปัญหาในส่วนที่ ใช้กับ MCU คนละตัวกัน และ NodeMCU ไม่สามารถใช้ไลบลารีร่วมกับ UNO ได้นั้นเอง

แก้ปัญหา ดังนี้
//   MCU                     Library                        inculed
// Arduino UNO       AltSoftSerial                   AltSoftSerial.h
// NodeMCU            espsoftwareserial            SoftwareSerial.h

สาเหตุที่ Arduino UNO ต้องใช้ไลบลารี AltSoftSerial  เนื่องด้วยหากติดตั้งไบลารี SoftwareSerial.h ของ UNO จะชนกับไลบลารีของ NodeMCU นั้นเอง


จากการทดสอบ board rate NodeMCU รับได้เพียงแค่ 9600 เท่านั้น



<<===Arduino UNO========================>>
#include <AltSoftSerial.h>

AltSoftSerial altSerial;
// Board            Serial1 TX   AltSoftSerial RX
// -----            ----------   ----------------
// Arduino UNO          9               8

void setup() {
  Serial.begin(9600);
  Serial.println("AltSoftSerial Test Begin");
  altSerial.begin(9600);
  altSerial.println("Hello World");
}

void loop() {
  String content;

  if (altSerial.available()) {
    content = altSerial.readStringUntil('\r');
    Serial.print(content);
  }

  altSerial.println("Hello World");
  delay(500);
}
<<======================================>>


<<===NodeMCU ===========================>>
#include <SoftwareSerial.h>

//SoftwareSerial swSer(14, 12, false, 256);   //Rx  Tx
SoftwareSerial swSer(D5, D6, false, 256);   //Rx  Tx
// Board            Serial TX       Serial RX
// -----            ----------      -----------
// NodeMCU            14(D6)          12(D5)

void setup() {
  Serial.begin(9600);
  swSer.begin(9600);

  Serial.println("\nSoftware serial test started");
  for (char ch = ' '; ch <= 'z'; ch++) {
    swSer.write(ch);
  }
  swSer.println("");
}
void loop() {
  String content;
  while (swSer.available() > 0) {
    content = swSer.readStringUntil('\r');
    Serial.print(content);
  }
//  swSer.println("Hello World");
//  delay(1000);
}
<<======================================>>