Search Code

Hướng dẫn ESP32 33/55 - Xúc xắc kỹ thuật số sử dụng bộ học IoT ESP32 của SunFounder

Hướng dẫn ESP32 33/55 - Xúc xắc kỹ thuật số sử dụng bộ học IoT ESP32 của SunFounder

Trong hướng dẫn này, chúng ta sẽ tạo một con xúc xắc kỹ thuật số sử dụng màn hình bảy đoạn và ESP32 từ bộ dụng cụ học tập IoT của SunFounder. Dự án này sẽ cho phép bạn tung một con xúc xắc ảo, tạo ra các số từ 1 đến 6 khi nhấn nút. Đây là một cách tuyệt vời để khám phá các khả năng của ESP32 đồng thời học về giao tiếp với màn hình và nút bấm. Để rõ ràng hơn, hãy xem video tại (trong video ở 0:00).

ESP32-33_digital-dice-main

Giải thích phần cứng

Các thành phần chính cho dự án này bao gồm vi điều khiển ESP32, thanh ghi dịch 74HC595, màn hình bảy đoạn và một nút nhấn. ESP32 là một vi điều khiển mạnh mẽ tích hợp Wi-Fi và Bluetooth, phù hợp cho các ứng dụng IoT. Thanh ghi dịch 74HC595 cho phép chúng ta điều khiển màn hình bảy đoạn bằng ít chân hơn so với việc kết nối trực tiếp từng đoạn.

Màn hình bảy đoạn hiển thị các số và được điều khiển bằng cách gửi dữ liệu từ thanh ghi dịch. Nút nhấn được sử dụng để kích hoạt việc tung xúc xắc, tạo ra một số ngẫu nhiên sẽ được hiển thị. Khi được nhấn, nút kết nối với chân 13 trên ESP32, chân này có điện trở kéo lên bên trong để giữ ở trạng thái cao khi không được nhấn.

Chi tiết bảng dữ liệu

Nhà sản xuất Texas Instruments
Số bộ phận 74HC595
Điện áp logic/IO 2 V đến 6 V
Điện áp cung cấp 4.5 V đến 5.5 V
Dòng điện đầu ra (mỗi kênh) Tối đa 6 mA
Dòng điện đỉnh (mỗi kênh) Tối đa 35 mA
Hướng dẫn tần số PWM Không áp dụng
Ngưỡng logic đầu vào VIH ≥ 2 V, VIL ≤ 0.8 V
Sụt áp / RDS(on) / bão hòa Tối đa 0.5 V
Giới hạn nhiệt 150 °C
Kiểu đóng gói DIP-16
Ghi chú / biến thể Thường được sử dụng trong màn hình kỹ thuật số

 

  • Đảm bảo mức điện áp phù hợp (4.5 V đến 5.5 V) để hoạt động đáng tin cậy.
  • Giới hạn dòng điện đầu ra để tránh làm hỏng thanh ghi dịch.
  • Sử dụng tụ điện tách rời gần các chân nguồn để ổn định điện áp.
  • Kết nối màn hình bảy đoạn đúng cách để tránh hiển thị sai các số.
  • Kiểm tra hệ thống dây điện xem có kết nối lỏng lẻo có thể dẫn đến hành vi bất thường không.

Hướng dẫn nối dây

ESP32-33_digital-dice-wiring

Để nối dây cho xúc xắc kỹ thuật số, hãy bắt đầu bằng cách thiết lập các kết nối nguồn. Kết nối chân nối đất (đường màu xanh lam) trên bảng mạch breadboard với chân nối đất trên ESP32 và đảm bảo rằng tất cả các điểm nối đất được kết nối với nhau. Tiếp theo, kết nối một chân 3.3V từ ESP32 với thanh nguồn (đường màu đỏ) trên bảng mạch breadboard.

ESP32-33_digital-dice-schematic

Đối với thanh ghi dịch 74HC595, đảm bảo rằng chân 1 được kết nối với thanh 3.3V và chân 8 với nối đất. Kết nối chân đầu ra dữ liệu (DS) với chân 25 trên ESP32, chân xung nhịp dịch (SHCP) với chân 26 và chân xung nhịp lưu trữ (STCP) với chân 27. Nút nhấn nên được kết nối giữa chân 13 trên ESP32 và nối đất, cho phép nó kéo chân xuống mức thấp khi được nhấn.

Ví dụ mã & hướng dẫn chi tiết

Trong mã, trước tiên chúng ta định nghĩa các chân được sử dụng cho thanh ghi dịch và nút nhấn. Chân nút được định nghĩa là buttonPin và được đặt ở chân 13 trên ESP32. Mảng dữ liệu datArray chứa các biểu diễn nhị phân của các số 0-9 cho màn hình bảy đoạn.


const int STcp = 27;//ST_CP
const int SHcp = 26;//SH_CP 
const int DS = 25; //DS 
const int buttonPin = 13;
int datArray[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

Trong hàm setup(), chúng ta đặt chân nút ở chế độ đầu vào và các chân thanh ghi dịch ở chế độ đầu ra. Điều này chuẩn bị các chân để đọc đầu vào từ nút và gửi dữ liệu đến màn hình.


void setup ()
{
  pinMode(buttonPin,INPUT); 
  pinMode(STcp,OUTPUT);
  pinMode(SHcp,OUTPUT);
  pinMode(DS,OUTPUT);
}

Logic chính của chương trình nằm trong hàm loop(). Nó kiểm tra xem nút có được nhấn không, tạo ra một số ngẫu nhiên và gọi hàm show_number() để hiển thị số trên màn hình bảy đoạn.


void loop()
{
  if(digitalRead(buttonPin) == LOW)
  {
    int diceNumber = random(1, 7);
    show_number(diceNumber);
    delay(50);
  }
}

Hàm show_number() gửi giá trị phù hợp từ mảng dữ liệu đến thanh ghi dịch, sau đó điều khiển các đoạn của màn hình để hiển thị số được tạo ra. Hàm này rất quan trọng để phản hồi trực quan khi nút được nhấn.

74HC595 LED Display: Seven-Segment Explained
74HC595 LED Display: Seven Segment explained

Trình diễn / Điều gì sẽ xảy ra

Khi quá trình thiết lập hoàn tất và mã được tải lên, nhấn nút sẽ tạo ra một số ngẫu nhiên từ 1 đến 6, số này sẽ được hiển thị trên màn hình bảy đoạn. Nếu mọi thứ được kết nối đúng cách, màn hình sẽ hiển thị một số mỗi khi nhấn nút. Hãy cẩn thận với các đầu vào nổi; đảm bảo rằng nút được kết nối đúng với đất để tránh hành vi bất thường (trong video tại 1:30).

Mốc thời gian video

  • 00:00 Bắt đầu
  • 1:48 Giới thiệu dự án
  • 3:40 Giải thích về cách đấu dây cho Xúc xắc kỹ thuật số
  • 13:16 Giải thích mã Arduino cho Xúc xắc kỹ thuật số
  • 19:19 Chọn bo mạch ESP32 và cổng COM trong Arduino IDE
  • 21:00 Trình diễn Xúc xắc kỹ thuật số
  • 22:15 Hiệu chỉnh mã Arduino

Hình ảnh

74HC595 LED Display: Seven-Segment Explained
74HC595 LED Display: Seven Segment explained
ESP32-33_digital-dice-wiring
ESP32-33_digital-dice-wiring
ESP32-33_digital-dice-main
ESP32-33_digital-dice-main
ESP32-33_digital-dice-schematic
ESP32-33_digital-dice-schematic
834-ESP32 Tutorial 33/55- Arduino code for digital dice
Ngôn ngữ: C++
// Define the pins used for the 74hc595 and button
const int STcp = 27;//ST_CP
const int SHcp = 26;//SH_CP 
const int DS = 25; //DS 
const int buttonPin = 13;

// Define an array of values to display numbers on a 7-segment display
int datArray[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int buttonState = false;

void setup ()
{
  // Set the button pin to input mode
  pinMode(buttonPin,INPUT); 

  //Set pins to 74hc595
  pinMode(STcp,OUTPUT);
  pinMode(SHcp,OUTPUT);
  pinMode(DS,OUTPUT);
}

void loop()
{
  // Check if the button is pressed
  if(digitalRead(buttonPin) == LOW)
  {
    // Generate a random number between 1 and 6
    int diceNumber = random(1, 7);

     // Display the number on the 7-segment display
    show_number(diceNumber);

    // Delay for 50 milliseconds
    delay(50);
  }
}

// Function to display a number on a 7-segment display
void show_number(int num)
{
  // Ground ST_CP and hold low for as long as you are transmitting
  digitalWrite(STcp, LOW);

  // Send the data for the number to the shift register
  shiftOut(DS, SHcp, MSBFIRST, datArray[num]);

  // Pull the ST_CP to save the data
  digitalWrite(STcp, HIGH);
}

Tài nguyên & tài liệu tham khảo

Tập tin📁

Không có tệp nào khả dụng.