การใช้ 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

หากต้องการสื่อสาร ระหว่าง uno กับ nodemcu ด้วย serial

การต่อ tx , rx จาก uno ไป node mcu  ต้องต่อผ่าน Logic Level Converter ก่อนครับ

เพราะ tx , rx ของ uno ทำงานที่ 5v แต่   nocd MCU  tx,rx ทำงานที่ 3.3v

UNO                                                                NodeMcu
Tx                – Logic level convert  –>     rx
rx                <—                         —      tx

 

โค้ดฝั่ง 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);

}

ผลการทดสอบ