การใช้ Arduino ร่วมกับ NodeMCU/ESP8266

การใช้ Arduino ร่วมกับ NodeMCU/ESP8266 จะมีด้วยกันหลายแบบ เช่น I2C, Serial เพื่อเพิ่ม I/O เช่นเพิ่มขา digital, ขา analog ในที่นี้จะยกตัวอย่างการสื่อสารแบบ Serial ก่อนเพราะเป็นตัวอย่างที่ง่ายต่อการเข้าใจ ในตัวอย่างจะเป็นการส่งค่าระหว่าง Arduino กับ NodeMCU โดยกำหนดให้ Arduino ส่งค่า int (จำนวนเต็ม) และ float (ทศนิยม) ไปยัง NodeMCU โดยสมมติว่า Arduino กำลังส่งค่าอะไรบางอย่างเป็นจำนวนเต็ม (int) และกำลังอ่านค่า Sensor เป็นทศนิยม (float) จากตัวอย่าง เราสามารถนำค่าที่ NodeMCU อ่านได้เป็น int และ float ไปใช้งานได้เลยโดยใช้ฟังก์ชั่น parseInt()parseFloat() ในส่วนของโค้ดโปรแกรมจะมีด้วยกันสองฝั่งคือ ฝั่งArduino และ ฝั่งNodeMCU

หมายเหตุ สามารถใช้กับ Arduino รุ่นใดก็ได้ หรือจะเอาไปใช้งานในการเพิ่ม output ให้กับ Nodemcu ก็ได้

ตัวอย่างการต่อวงจร

Arduino Nano NodeMCU
VIN VIN
GND GND
D2 D2
D3 D3

 

โค้ดฝั่ง Arduino

int i_data = 1234;

float f_data = 567.89;

#include <SoftwareSerial.h>

SoftwareSerial NanoSerial(3, 2); // RX | TX

void setup()

{

pinMode(3,INPUT);

pinMode(2,OUTPUT);

Serial.begin(9600);

NanoSerial.begin(57600);

}

void loop() {

Serial.print(i_data); Serial.print(“\t”);

Serial.println(f_data);

NanoSerial.print(i_data); NanoSerial.print(” “);

NanoSerial.print(f_data); NanoSerial.print(“\n”);

delay(100);

}

 

 

โค้ดฝั่ง NodeMCU 

#include <ESP8266WiFi.h>

#include <SoftwareSerial.h>

SoftwareSerial NodeSerial(D2,D3); // RX | TX

void setup() {

pinMode(D2, INPUT);

pinMode(D3, OUTPUT);

Serial.begin(9600);

NodeSerial.begin(57600);

Serial.println();

Serial.println();

Serial.println(“NodeMCU/ESP8266 Run”);

}

void loop() {

while (NodeSerial.available() > 0)

{

int i_data = NodeSerial.parseInt();

float f_data = NodeSerial.parseFloat();

if (NodeSerial.read() == ‘\n’)

{

Serial.print(“NodeMCU or ESP8266″); Serial.print(” : “);

Serial.print(i_data); Serial.print(” : “);

Serial.println(f_data);

}

delay(50);

}

delay(10);

}

ผลการทดสอบ