Tư vấn: 0979.466.469 / 0938.128.290

MENU

Giao tiếp SPI giữa 2 Arduino

Báo giá đặt hàng nhập

Trong bài viết này, Điện Tử Tương Lai sẽ chia sẻ cách sử dụng cổng giao tiếp SPI của Arduino. Chúng ta sẽ tìm hiểu giao tiếp SPI giữa 2 Arduino. Nó là một giao thức giao tiếp nối tiếp 4 dây. Nó hỗ trợ giao tiếp 1 master và nhiều slave. Do đó, trong hướng dẫn này, chúng ta sẽ cấu hình 1 Arduino làm master và cái còn lại làm slave.

 

Giới thiệu SPI

Hãy bắt đầu với phần giới thiệu cơ bản về giao thức SPI và các đường giao tiếp của nó. Giao diện giao tiếp nối tiếp này còn được gọi là giao diện ngoại vi nối tiếp. Nó cung cấp chế độ giao tiếp song công đầy đủ (full duplex). Điều này có nghĩa là dữ liệu có thể được nhận và gửi đồng thời. Master có thể gửi dữ liệu đến các slave và slave có thể gửi dữ liệu đến master cùng một lúc. Để truyền và nhận dữ liệu, cần phải có tín hiệu xung nhịp, nghĩa là nó là một kênh truyền thông đồng bộ.

Giao thức truyền thông này sử dụng bốn đường như SCK, MOSI, MISO và SS. Chúng ta sẽ tìm hiểu chi tiết về các đường này trong phần tiếp theo. Quay lại với vấn đề chính, bus SPI có thể có một master duy nhất và nhiều thiết bị slave. Master là vi điều khiển trong khi slave có thể là vi điều khiển, ADC, DAC, …

 

Các chân SPI Arduino

Hình bên dưới là các chân trong Arduino UNO được sử dụng cho giao tiếp SPI, các chân này được đánh dấu bằng màu vàng.

Dưới đây là chức năng được thực hiện bởi các chân này.

 

Chân 11 = MOSI

Chân 12 = MISO

Chân 13 = SCK

Chân 10 = SS

 

Giao tiếp SPI trong Arduino UNO

Bây giờ chúng ta hãy xem một ví dụ về giao tiếp SPI giữa 2 Arduino. Nhưng trước đó, hãy tìm hiểu các chức năng của thư viện giao tiếp SPI có sẵn trong Arduino IDE.

 

Thư viện SPI của Arduino

  Để thiết lập giao tiếp giữa 2 Arduino bằng SPI, có một thư viện Arduino được xây dựng sẵn được sử dụng cho mục đích này

 

: bao gồm thư viện trong chương trình để sử dụng chức năng giao tiếp SPI.

SPI.begin(): khởi tạo bus SPI và đặt chân SCK và MOSI thành LOW và chân SS thành HIGH.

SPI.transfer(val): được sử dụng để giao tiếp đồng thời giữa các thiết bị Master và Slave.

SPI.attachInterrupt(handler): được sử dụng để nhận dữ liệu từ master trong slave và được gọi trong slave.

SPI.setClockDivider(divider): thiết lập bộ chia xung nhịp SPI phù hợp với xung nhịp hệ thống.

Dưới đây là các loại bộ chia:

 

SPI_CLOCK_DIV2

SPI_CLOCK_DIV4

SPI_CLOCK_DIV8

SPI_CLOCK_DIV16

SPI_CLOCK_DIV32

SPI_CLOCK_DIV64

SPI_CLOCK_DIV128

Các bộ chia này tương ứng với phép chia có giá trị là 2, 4, 8, 16, 32, 64, 128.

 

Giao tiếp SPI giữa 2 Arduino

Bây giờ chúng ta hãy xem cách thực hiện giao tiếp SPI giữa 2 Arduino. Chúng ta sẽ định cấu hình 1 Arduino làm master và 1 Arduino khác làm slave. Master sẽ truyền 1 nếu người dùng nhấn nút nhấn được kết nối với D2 của Arduino. SPI Slave Arduino nhận dữ liệu này và dựa trên dữ liệu nhận được, đưa ra quyết định bật hoặc tắt đèn LED được kết nối với chân D4 của Arduino.

 

Đầu tiên cần biết mã của thiết bị Master.

 

Mã thiết bị master Arduino SPI

Code có thể được chia thành 3 phần:

 

Module điện tử 932*50

Khai báo

Trong phần này, chúng ta đã bao gồm thư viện SPI và xác định các biến khác nhau. Các biến push là chân I / O kỹ thuật số Arduino nơi nút nhấn sẽ được kết nối và tùy thuộc vào trạng thái của nó, dữ liệu sẽ được truyền đến slave. Biến LED là chân Arduino dựa trên dữ liệu nhận được từ trạng thái đầu ra của slave sẽ được hiển thị.

 

Thiết lập thiết bị

Ở đây thiết bị đang được thiết lập cho chương trình và giao tiếp. Tốc độ truyền đầu tiên đã được đặt. Chân push và chân LED đã được khai báo là chân đầu vào và đầu ra. Giao tiếp SPI đã được thiết lập bằng các chức năng được mô tả ở trên và slave select đã được đặt ở mức cao để dừng giao tiếp nếu đã được thực hiện.

 

Chức năng được thực hiện

Trong phần này, chúng ta đã thực hiện thao tác thực tế gửi và nhận lệnh.

 

Hai biến được định nghĩa là m_send và m_receive. Trạng thái của nút nhấn gắn ở chân 2 được đọc. Tùy thuộc vào mức CAO hoặc THẤP, lệnh 1 hoặc 0 được gửi đến slave bằng cách sử dụng hàm SPI.transfer được mô tả ở trên.

 

Phần tiếp theo đề cập đến việc nhận dữ liệu. Dữ liệu cũng được nhận bằng cách sử dụng chức năng tương tự SPI.transfer. Nếu dữ liệu nhận được là 0, đèn LED ở chân 4 được đặt thành thấp và nếu dữ liệu nhận được là 1, đèn LED ở chân 4 được đặt thành cao.

 

Hoàn thành mã master

 

Mã master Arduino SPI

Code có thể được chia thành 3 phần:

 

Khai báo

Trong phần này, chúng ta đã bao gồm thư viện SPI và xác định các biến khác nhau. Biến inputbutton là chân I / O kỹ thuật số Arduino nơi nút nhấn sẽ được kết nối và tùy thuộc vào trạng thái của nó, dữ liệu sẽ được truyền đến master. Biến outputLED là chân Arduino trong đó dựa trên dữ liệu nhận được từ trạng thái đầu ra của master sẽ được hiển thị. Slave nhận được sẽ lưu trữ giá trị nhận được từ master.

 

Thiết lập thiết bị

Ở đây thiết bị đang được thiết lập cho chương trình và giao tiếp. Tốc độ truyền đầu tiên đã được đặt. Các chân push và LED và MISO đã được khai báo là các chân đầu vào và đầu ra. Sau đó, thiết bị đã được đặt ở chế độ slave và ngắt đã được đặt cho giao tiếp SPI.

Bất cứ khi nào xảy ra ngắt do chân nhận SPI, quy trình ngắt này sẽ thực thi.

 

Chức năng được thực hiện

Trong phần này, chúng ta đã thực hiện các thao tác thực tế về việc gửi và nhận lệnh.

Tại đây việc nhận dữ liệu đầu tiên được xác nhận nếu dữ liệu được nhận thì nó được kiểm tra xem là 0 hoặc 1. Nếu nhận được 0, đèn LED ở chân đầu ra 4 được đặt thành THẤP và nếu nhận được 1, đèn LED ở chân đầu ra 4 được đặt thành CAO .

 

Tiếp theo là kiểm tra trạng thái của chân nút nhấn 2 nếu trạng thái CAO, 1 được gửi đến Master và nếu trạng thái THẤP, 0 được gửi đến thiết bị Master.

 

Hoàn thành mã thiết bị slave

Khi nút được nhấn ở Arduino 1, sau một thời gian đèn LED ở Arduino 2 được BẬT.
Khi nút được nhấn ở Arduino 2, sau một thời gian đèn LED ở Arduino 1 được BẬT.

Các ứng dụng SPI trong các dự án Arduino

Giao tiếp SPI được sử dụng để giao tiếp flash, thẻ nhớ và EEPROM với vi điều khiển

Màn hình OLED và LCD sử dụng phương pháp này để giao tiếp với các thiết bị nhúng. Các cảm biến khác nhau như nhiệt độ, áp suất và DAC sử dụng phương thức giao tiếp này.

Gia công pcb 932*150
Sản phẩm nổi bật
Sale 0%
70000 /Cái
/ Cái

Code: M-7006-056 Còn hàng

Lưu xem sau
Sale 0%
25000 /Cái
66000 / Cái

Code: M-7006-039 Còn hàng

Lưu xem sau
Sale 0%
275000 /Cái
/ Cái

Code: M-7006-015 Còn hàng

Lưu xem sau
Sale 0%
253000 /Cái
/ Cái

Code: M-7006-030 Còn hàng

Lưu xem sau
Hỗ trợ liên kết
0979466469
0899909838
0938128290
0899909838
Khiếu nại: 0964238397
0979466469
0868565469
0868565469

Hotline: 0979 466 469

Loading
0964238397
Bạn cần linh kiện mẫu ? 7-11 ngày