Muốn sử dụng được wifi nhưng phải rẻ thì ESP8266 là một sự lựa chọn không tồi, nhưng đang làm bạn lai bực mình vì không đủ chân để làm dự án của mình. Vậy phải làm thế nào ba giờ nhỉ? trả nhẽ lại phải mua nên ESP32! Không! Hôm nay Điện tử hay điện tử hay sẽ mách bạn một cách vừa rẻ, vừa sinh viên mà lại hiệu quả: đo là giao tiếp ESP8266 với Arduino Uno/Mega thông qua nhưng giao tiếp của các chuẩn UART, SPI, I2C một cách đơn giản, hữu hiệu nhât.
Bạn đang xem: Giao tiếp uart giữa arduino và esp8266
Các thứ các bạn cần chuẩn bị để giao tiếp :
Giao tiếp ESP8266 chuẩn UART
Có 2 cách để giao tiếp UART giữa ESP8266/NodeMCU:
1 là giao tiếp bằng cách code trên cả Uno/Mega và ESP8266/NodeMCU2 là chỉ code trên Uno/Mega, trên ESP8266/NodeMCU flash thẳng firmware AT Command,Sơ đồ kết nối

Chương trình
Code NodeMCU
Gửi data ‘123’ qua Uno/Mega, ở đây ta cần có thư viện SoftwareSerial và gán nó với 2 chân RX và TX. Sau đó cấu hình với tốc độ baud là 9600.
#include //Included SoftwareSerial Library//Started SoftwareSerial at RX and TX pin of ESP8266/NodeMCUSoftwareSerial s(3, 1);void setup() { //Serial S Begin at 9600 Baud s.begin(9600);}void loop() { //Write "123" to Serial s.write(123); delay(1000);}
Code Arduino Uno/Mega
Chương trình sau nhận thông tin, đầu tiên là tạo ra biến để nhận data, sau đó là setup baud 9600 để nhận data này.
int data; //Initialized variable to store recieved datavoid setup() { //Serial Begin at 9600 Baud Serial3.begin(9600);}void loop() { data = Serial.read(); //Read the serial data and store it delay(1000);}
Khái niệm
I2C (Inter-Integrated Circuit) là giao thức kết nối giao diện bus nối tiếp. Nó cũng được gọi là TWI vì nó chỉ sử dụng hai dây để giao tiếp. Hai chân này là SDA (đường data) và SCL (đường clock).
I2C là giao thức truyền thông dựa trên sự thừa nhận, tức là phát tín hiệu kiểm tra xác nhận từ bên nhận sau khi truyền dữ liệu để biết liệu dữ liệu có được nhận thành công hay không.
Hai chế độ làm việc của I2C:
Master modeSlave modeDây SDA (đường dữ liệu) được sử dụng để trao đổi dữ liệu giữa thiết bị master và thiết bị slave. SCL (đường xung nhịp đồng hồ) được sử dụng cho đồng hồ đồng bộ ở giữa thiết bị master và slave.
Thiết bị master bắt đầu giao tiếp với một thiết bị slave. Thiết bị master yêu cầu địa chỉ thiết slave để bắt đầu giao tiếp với thiết bị slave. Thiết bị Slave phản hồi cho thiết bị master khi thiết bị master được giải quyết.
Sơ sơ lý thuyết thế thôi, đi cụ thể vào thực hành ta sẽ viết chương trình Arduino cho NodeMCU là I2C master và viết chương trình Arduino cho Arduino Uno/Mega là I2C Slave. Master sẽ gửi chuỗi hello slave đến slave và slave sẽ gửi chuổi hello master phản hồi lại.
Master Device: NodeMCUSlave Device: Arduino UnoSlave Device Address: 8Sơ đồ kết nối

#include void setup() { Serial.begin(9600); /* begin serial for debug */ Wire.begin(D1, D2); /* join i2c bus with SDA=D1 and SCL=D2 of NodeMCU */} void loop() { Wire.beginTransmission(8); /* begin with device address 8 */ Wire.write("Hello Slave"); /* sends hello slave string */ Wire.endTransmission(); /* stop transmitting */ Wire.requestFrom(8, 13); /* request & read data of size 13 from slave */ while(Wire.available()){ char c = Wire.read(); Serial.print(c); } Serial.println(); delay(1000);}
#include void setup() { Wire.begin(8); /* join i2c bus with address 8 */ Wire.onReceive(receiveEvent); /* register receive event */ Wire.onRequest(requestEvent); /* register request event */ Serial.begin(9600); /* start serial for debug */}void loop() { delay(100);}// function that executes whenever data is received from mastervoid receiveEvent(int howMany) { while (0 Wire.available()) { char c = Wire.read(); /* receive byte as a character */ Serial.print(c); /* print the character */ } Serial.println(); /* to newline */}// function that executes whenever data is requested from mastervoid requestEvent() { Wire.write("Hello Master"); /*send string on request */}
Kết quả
Đây là kết quả mình test thử giữa ESP8266/NodeMCU và Arduino Mega
Khái niệm
SPI (Serial Peripheral Interface) là chuẩn giao tiếp dạng bus được đưa ra bởi Motorola Corp.
SPI dùng 4 chân kết nối, nên ta thường gọi nó là kết nối dạng 4 dây.SPI là full duplex master-slave communication protocol. Có nghĩa là chỉ một master và một slave có thể kết nối nhau thông qua bus interface trong cùng một thời điểm.SPI cho phép device có thể làm việc mở 2 mode cơ bản là SPI Master Mode và SPI Slave Mode.Master Device sẽ phản hồi thông tin thiết lập kết nối. Master Device tạo ra Serial Clock để đồng bộ data truyền nhận. Master Device còn có thể quản lý nhiều slave devices trên bus bằng việc lựa chọn từng cái.ESP8266 có chân SPI (SD1, CMD, SD0, CLK) dùng cho Quad-SPI communication với flash memory trên ESP-12E, vì thếta sẽ không thể sử dụng những chân này được, ta sẽ dùng các chân thay thế là GPIO14-GPIO17, các bạn có thể xem hình dưới đây.
Xem thêm: Nhạc Phim Giang Sơn Mỹ Nhân 1993, Phim Giang Sơn Mỹ Nhân Thuyết Minh

Sơ đồ kết nối

Chương trình
Chúng ta sẽ viết chương trình giao tiếp SPI cho ESP8266/NodeMCU và Uno/Mega, ở đây NodeMCU là master device và Uno/Mega là slave device.
NodeMCU sẽ gửi lời chào với chuỗi “Hello Slave” với ‘\n’ ở cuối chuỗi . Uno/Mega Slave device nhận chuỗi này và in nó ra serial.
Chương trình cho NodeMCU#includechar buff<>="Hello Slave\n";void setup() { Serial.begin(9600); /* begin serial with 9600 baud */ SPI.begin(); /* begin SPI */}void loop() { for(inti=0; isizeof buff; i++) /* transfer buff data per second */ SPI.transfer(buff); delay(1000); } Vậy là mình đã thực hiện giao tiếp truyền nhận data từ ESP8266/NodeMCU sang Arduino Uno/Mega với các chuẩn giao tiếp UART,I2C, SPI rồi, giờ thì các bạn có thể thoải mái sáng tạo và thử nghiệm với dự án của mình nhé. Để cùng nhau học hỏi nhiều hơn về PCB hay thích Group: padinno.com Cần gia công PCB liên hệ ngay: padinno.com Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu * Bình luận Tên * Email * Trang web Lưu tên của tôi, email, và trang web trong trình duyệt này cho lần bình luận kế tiếp của tôi. Điện Tử Hay ( padinno.com ) là trang kết nối đam mê sáng tạo và chia sẻ kiến thức về chế đồ, lập trình, các dự án arduino và các mạch điện tử. Ngoài ra, chúng tôi còn cung cấp các mạch điện tử và hộ trợ làm mạch điện tử PCB với công nghệ SMT. padinno.com là trang kết nối đam mê sáng tạo và chia sẻ kiến thức về chế đồ, lập trình, các dự án arduino và các mạch điện tử. Ngoài ra, chúng tôi còn cung cấp các mạch điện tử và hộ trợ làm mạch điện tử PCB với công nghệ SMT. Giới Thiệu Chung Bảo Hành & Đổi Trả Phí Ship COD Quy Trình Gia Hàng Báo Giá Sản Xuất SMT Hướng Dẫn Đặt Hàng Hình Thức Thanh Toán Hướng Dẫn Liên Hệ
#include char buff <100>;volatile byte index;volatile bool receivedone; /* use reception complete flag */void setup (void){ Serial.begin (9600); SPCR |= bit(SPE); /* Enable SPI */ pinMode(MISO, OUTPUT); /* Make MISO pin as OUTPUT */ index = 0; receivedone = false; SPI.attachInterrupt(); /* Attach SPI interrupt */}void loop (void){ if (receivedone) /* Check and print received buffer if any */ { buffTạm kết
Trả lời Hủy
Về Chúng Tôi
Thông Tin Chung
Hướng Dẫn