SPI (Giao diện ngoại vi nối tiếp) trong ESP32 Sử dụng Arduino IDE

Spi Giao Dien Ngoai Vi Noi Tiep Trong Esp32 Su Dung Arduino Ide



Các bo mạch ESP32 có hỗ trợ nhiều giao thức truyền thông. Các giao thức này bao gồm USART nối tiếp, I2C (IIC) và SPI. Cùng với các bo mạch ESP32 này, còn có các giao thức giao tiếp không dây như WiFi, Bluetooth kép, ESP-Now, LoRa và nhiều giao thức khác. Hôm nay chúng ta sẽ tập trung vào giao thức ESP32 SPI (Giao diện ngoại vi nối tiếp).

SPI (Giao diện ngoại vi nối tiếp) trong ESP32

SPI hoặc giao diện ngoại vi nối tiếp là một giao thức truyền thông khoảng cách ngắn được sử dụng trong nhiều thiết bị vi điều khiển như ESP32. Nó là một giao thức giao tiếp đồng bộ chủ yếu được sử dụng bởi các bộ vi điều khiển để giao tiếp với các thiết bị ngoại vi của nó, do đó chúng ta có thể sử dụng giao thức này để đọc và điều khiển các thiết bị hỗ trợ giao thức SPI.







Giao tiếp SPI hỗ trợ cấu hình master-slave luôn có một một bậc thầy điều khiển nhiều nô lệ. Nó là một song công hoàn toàn giao tiếp để dữ liệu có thể được trao đổi đồng thời từ chủ đến nô lệ và nô lệ sang chủ.




Giao tiếp SPI trong nhu cầu ESP32 bốn các chân khác nhau để truyền và nhận dữ liệu đến các thiết bị. Sau đây là bốn chân đó:



  1. SCK: Dòng đồng hồ xác định tốc độ truyền
  2. MISO: Master in Slave out là chân truyền từ Slave sang Master
  3. KHÓI: Master out Slave in là đường truyền dữ liệu master đến Slave
  4. SS: Dòng chọn nô lệ giúp ESP32 chọn một nô lệ cụ thể và truyền hoặc nhận dữ liệu từ nô lệ đó

Ghi chú: Một số thiết bị chỉ là nô lệ và không thể đóng vai trò là chủ, cách đặt tên pin của chúng khác nhau, chẳng hạn như:





    • MISO được thay thế bằng SDO (Dữ liệu nối tiếp ra)
    • KHÓI được thay thế bằng SDI (Dữ liệu nối tiếp trong)

Chân SPI trong ESP32

Bảng ESP32 đi kèm với 4 các thiết bị ngoại vi SPI khác nhau được tích hợp với bộ vi điều khiển của nó.

    • SPI0: Chỉ dành cho giao tiếp bộ nhớ trong- không thể được sử dụng với các thiết bị SPI bên ngoài
    • SPI1: Chỉ dành cho giao tiếp bộ nhớ trong- không thể được sử dụng với các thiết bị SPI bên ngoài
    • SPI2: (HSPI) có tín hiệu xe buýt độc lập. Mỗi xe buýt có thể lấy được 3 thiết bị nô lệ
    • SPI3: (VSPI) tín hiệu xe buýt là độc lập. Mỗi xe buýt có thể lấy được 3 thiết bị nô lệ

Hầu hết các bo mạch ESP32 đều có các chân SPI được gán sẵn cho cả SPI2 và SPI3. Tuy nhiên, nếu không được chỉ định, chúng tôi luôn có thể chỉ định các chân SPI trong mã. Sau đây là các chân SPI được tìm thấy trong hầu hết bảng ESP32 được gán trước:



Giao diện SPI KHÓI MISO SCLK CS
VSPI GPIO23 GPIO19 GPIO18 GPIO5
HSPI GPIO13 GPIO 12 GPIO14 GPIO15



Các chân SPI đã đề cập ở trên có thể khác nhau tùy thuộc vào loại bảng. Bây giờ chúng ta sẽ viết code để kiểm tra các chân SPI của ESP32 bằng Arduino IDE.

Cách tìm các chân SPI mặc định của ESP32

Mã được viết bên dưới sẽ giúp tìm các chân SPI mặc định trong bảng ESP32. Mở Arduino IDE kết nối ESP32 với PC, chọn đúng cổng và tải mã lên. Sau đó đợi đầu ra. Đó là nó! đó là cách nó đơn giản

Mã để tìm các chân SPI mặc định của ESP32

Mã đưa ra dưới đây sẽ in các chân SPI mặc định của ESP32 trên màn hình nối tiếp.

thiết lập vô hiệu ( ) {
Nối tiếp.bắt đầu ( 115200 ) ;
Nối tiếp.print ( 'Chốt MOSI GPIO:' ) ;
Nối tiếp.println ( KHÓI ) ;
Nối tiếp.print ( 'Chốt MISO GPIO:' ) ;
Nối tiếp.println ( MISO ) ;
Nối tiếp.print ( 'Chốt GPIO SCK:' ) ;
Nối tiếp.println ( SCK ) ;
nối tiếp.print ( 'Chốt SS GPIO:' ) ;
Nối tiếp.println ( SS ) ;
}
vòng lặp trống ( ) {
}


Mã bắt đầu bằng cách xác định tốc độ truyền và tiếp tục bằng cách gọi chân GPIO mặc định cho giao thức truyền thông ESP32 SPI.

đầu ra

Ở đây trong trường hợp của chúng tôi, màn hình nối tiếp hiển thị chân 23, 19, 18 và 5 tương ứng cho MOSI, MISO, SCK và SS.

Cách sử dụng Ghim SPI tùy chỉnh trong ESP32

Nhờ các tính năng ghép kênh của ESP32, có thể định cấu hình bất kỳ chân nào của bảng ESP32 thành UART, I2C, SPI và PWM. Người ta chỉ cần gán chúng bằng mã. Bây giờ chúng ta sẽ xác định các chân SPI mới và in chúng trên màn hình nối tiếp để xác nhận.

Nhập mã được cung cấp bên dưới vào trình chỉnh sửa Arduino IDE.

#include
thiết lập vô hiệu ( ) {
Nối tiếp.bắt đầu ( 115200 ) ;
nối tiếp.print ( 'Chốt MOSI GPIO mặc định:' ) ;
Nối tiếp.println ( KHÓI ) ;
Nối tiếp.print ( 'Chốt MISO GPIO mặc định:' ) ;
Nối tiếp.println ( MISO ) ;
nối tiếp.print ( 'Chốt GPIO SCK mặc định:' ) ;
Nối tiếp.println ( SCK ) ;
Nối tiếp.print ( 'Chốt SS GPIO mặc định:' ) ;
Nối tiếp.println ( SS ) ;
#define SCK 25
#define MISO 32
#define MOSI 26
#define CS 33
/* Library_Name Sensor_name ( CS, MOSI, MISO, SCK ) ; // gọi chân SPI mới */
Nối tiếp.print ( 'Chốt GPIO MOSI MỚI:' ) ;
Nối tiếp.println ( KHÓI ) ;
Nối tiếp.print ( 'Chốt GPIO MISO MỚI:' ) ;
Nối tiếp.println ( MISO ) ;
nối tiếp.print ( 'Chốt GPIO MỚI của SCK:' ) ;
Nối tiếp.println ( SCK ) ;
nối tiếp.print ( 'SS Chân GPIO MỚI:' ) ;
Nối tiếp.println ( SS ) ;
}
vòng lặp trống ( ) {
}


Ở đây trong đoạn mã trên, chúng tôi bao gồm thư viện nối tiếp SPI sau đó in các chân SPI mặc định trên màn hình nối tiếp. Người ta có thể bỏ qua phần mã này nếu không cần thiết. Tiếp theo, sử dụng định nghĩa, chúng tôi gán các chân mới cho SPI và in từng cái một trên màn hình nối tiếp.

đầu ra

Đầu ra hiển thị trên màn hình nối tiếp in tất cả các chân SPI mới cho bảng ESP32.

ESP32 với nhiều thiết bị SPI

ESP32 có hai bus SPI và mỗi bus có thể điều khiển 3 thiết bị có nghĩa là có thể điều khiển tổng cộng 6 thiết bị bằng SPI của ESP32. Để điều khiển nhiều thiết bị hơn, chúng ta có thể sử dụng các kỹ thuật ghép kênh khác nhau.

Trong khi điều khiển nhiều thiết bị phụ, ESP32 sẽ hoạt động như một thiết bị chính cho cả ba dòng MISO, MOSI SCLK sẽ giống nhau đối với chúng, điểm khác biệt duy nhất là dòng tín hiệu đồng hồ CS. Để gửi dữ liệu đến thiết bị phụ, chân CS của thiết bị phụ đó phải được đặt ở mức thấp.


Cú pháp sau sẽ được tuân theo nếu chúng ta muốn đặt CS thành THẤP.

digitalWrite ( CS, THẤP ) ;


Giả sử chúng ta muốn đọc dữ liệu từ bất kỳ thiết bị nào khác, vì vậy chúng ta phải đặt chân CS của thiết bị phụ đầu tiên là CAO để tắt nó.

digitalWrite ( CS_1, CAO ) ; // vô hiệu hóa chân CS của SLAVE 1
digitalWrite ( CS_2, THẤP ) ; // Kích hoạt chân CS của SLAVE hai

Sự kết luận

Giao diện ngoại vi nối tiếp là giao thức truyền thông có dây được vi điều khiển ESP32 sử dụng để trao đổi dữ liệu giữa nhiều thiết bị phụ. ESP32 SPI hỗ trợ hai bus khác nhau để giao tiếp với mỗi bus có khả năng điều khiển 3 thiết bị phụ. Theo mặc định, ESP32 đi kèm với các chân SPI; tuy nhiên, chúng ta cũng có thể xác định và sử dụng các ghim tùy chỉnh bằng mã.