ค้นหาโค้ด

บทเรียน ESP32 33/55 - ลูกเต๋าดิจิทัลโดยใช้ชุดเรียนรู้ IoT ESP32 ของ SunFounder

บทเรียน ESP32 33/55 - ลูกเต๋าดิจิทัลโดยใช้ชุดเรียนรู้ IoT ESP32 ของ SunFounder

ในบทช่วยสอนนี้ เราจะสร้างลูกเต๋าดิจิทัลโดยใช้จอแสดงผลเจ็ดส่วนและ ESP32 จากชุดการเรียนรู้ IoT ของ SunFounder โปรเจกต์นี้จะช่วยให้คุณสามารถทอยลูกเต๋าเสมือนจริง โดยสร้างตัวเลขตั้งแต่ 1 ถึง 6 เมื่อกดปุ่ม นี่เป็นวิธีที่ยอดเยี่ยมในการสำรวจความสามารถของ ESP32 พร้อมกับการเรียนรู้เกี่ยวกับการเชื่อมต่อกับจอแสดงผลและปุ่มกด เพื่อความชัดเจนยิ่งขึ้น โปรดดูวิดีโอที่ (ในวิดีโอที่ 0:00)

ESP32-33_digital-dice-main

อธิบายฮาร์ดแวร์

ส่วนประกอบหลักสำหรับโปรเจกต์นี้ประกอบด้วยไมโครคอนโทรลเลอร์ ESP32, ชิฟต์รีจิสเตอร์ 74HC595, จอแสดงผลเจ็ดส่วน และปุ่มกด ESP32 เป็นไมโครคอนโทรลเลอร์ที่ทรงพลังซึ่งรวม Wi-Fi และ Bluetooth เข้าด้วยกัน ทำให้เหมาะสำหรับแอปพลิเคชัน IoT ชิฟต์รีจิสเตอร์ 74HC595 ช่วยให้เราควบคุมจอแสดงผลเจ็ดส่วนโดยใช้พินน้อยกว่าการเชื่อมต่อแต่ละส่วนโดยตรง

จอแสดงผลเจ็ดส่วนแสดงตัวเลขและถูกควบคุมโดยการส่งข้อมูลจากชิฟต์รีจิสเตอร์ ปุ่มกดใช้เพื่อเริ่มการทอยลูกเต๋า โดยสร้างตัวเลขสุ่มที่จะแสดงบนจอ เมื่อกดปุ่ม ปุ่มจะเชื่อมต่อกับพิน 13 บน ESP32 ซึ่งมีตัวต้านทานดึงขึ้นภายในเพื่อให้อยู่ในสถานะสูงเมื่อไม่ได้กด

รายละเอียดจากดาต้าชีต

ผู้ผลิต Texas Instruments
หมายเลขชิ้นส่วน 74HC595
แรงดันไฟฟ้าลอจิก/IO 2 V ถึง 6 V
แรงดันไฟฟ้าจ่าย 4.5 V ถึง 5.5 V
กระแสเอาต์พุต (ต่อช่อง) สูงสุด 6 mA
กระแสสูงสุด (ต่อช่อง) สูงสุด 35 mA
คำแนะนำความถี่ PWM ไม่เกี่ยวข้อง
เกณฑ์ลอจิกอินพุต VIH ≥ 2 V, VIL ≤ 0.8 V
แรงดันตก / RDS(on) / ความอิ่มตัว สูงสุด 0.5 V
ขีดจำกัดความร้อน 150 °C
แพ็กเกจ DIP-16
หมายเหตุ / รุ่นอื่น นิยมใช้ในจอแสดงผลดิจิทัล

 

  • ตรวจสอบให้แน่ใจว่าระดับแรงดันไฟฟ้าถูกต้อง (4.5 V ถึง 5.5 V) เพื่อการทำงานที่เชื่อถือได้
  • จำกัดกระแสเอาต์พุตเพื่อหลีกเลี่ยงความเสียหายต่อชิฟต์รีจิสเตอร์
  • ใช้ตัวเก็บประจุแยกสัญญาณใกล้กับพินจ่ายไฟเพื่อรักษาเสถียรภาพของแรงดันไฟฟ้า
  • เชื่อมต่อจอแสดงผลเจ็ดส่วนอย่างถูกต้องเพื่อหลีกเลี่ยงการแสดงตัวเลขที่ผิดพลาด
  • ตรวจสอบการเดินสายไฟเพื่อหาการเชื่อมต่อที่หลวมซึ่งอาจทำให้เกิดพฤติกรรมที่ไม่คาดคิด

คำแนะนำการเดินสายไฟ

ESP32-33_digital-dice-wiring

ในการเดินสายไฟสำหรับลูกเต๋าดิจิทัล ให้เริ่มต้นด้วยการตั้งค่าการเชื่อมต่อพลังงาน เชื่อมต่อกราวด์ (เส้นสีน้ำเงิน) บนเบรดบอร์ดของคุณกับพินกราวด์บน ESP32 และตรวจสอบให้แน่ใจว่าจุดกราวด์ทั้งหมดเชื่อมต่อถึงกัน จากนั้นเชื่อมต่อพิน 3.3V จาก ESP32 เข้ากับรางจ่ายไฟ (เส้นสีแดง) บนเบรดบอร์ด

ESP32-33_digital-dice-schematic

สำหรับชิฟต์รีจิสเตอร์ 74HC595 ตรวจสอบให้แน่ใจว่าพิน 1 เชื่อมต่อกับราง 3.3V และพิน 8 เชื่อมต่อกับกราวด์ เชื่อมต่อพินเอาต์พุตข้อมูล (DS) เข้ากับพิน 25 บน ESP32 พินนาฬิกาชิฟต์ (SHCP) เข้ากับพิน 26 และพินนาฬิกาจัดเก็บ (STCP) เข้ากับพิน 27 ปุ่มกดควรเชื่อมต่อระหว่างพิน 13 บน ESP32 และกราวด์ เพื่อให้สามารถดึงพินให้เป็นสถานะต่ำเมื่อกด

ตัวอย่างโค้ดและคำอธิบาย

ในโค้ด ก่อนอื่นเรากำหนดพินที่ใช้สำหรับชิฟต์รีจิสเตอร์และปุ่มกด พินปุ่มถูกกำหนดเป็น buttonPin และตั้งไว้ที่พิน 13 บน ESP32 อาร์เรย์ข้อมูล datArray ประกอบด้วยการแทนค่าเลขฐานสองของตัวเลข 0-9 สำหรับจอแสดงผลเจ็ดส่วน


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};

ในฟังก์ชัน setup() เราตั้งค่าพินปุ่มเป็นโหมดอินพุตและพินชิฟต์รีจิสเตอร์เป็นโหมดเอาต์พุต ซึ่งเตรียมพินสำหรับการอ่านอินพุตจากปุ่มและการส่งข้อมูลไปยังจอแสดงผล


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

ลอจิกหลักของโปรแกรมอยู่ในฟังก์ชัน loop() ซึ่งตรวจสอบว่าปุ่มถูกกดหรือไม่ สร้างตัวเลขสุ่ม และเรียกฟังก์ชัน show_number() เพื่อแสดงตัวเลขบนจอแสดงผลเจ็ดส่วน


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

ฟังก์ชัน show_number() ส่งค่าที่เหมาะสมจากอาร์เรย์ข้อมูลไปยังชิฟต์รีจิสเตอร์ ซึ่งจะควบคุมส่วนต่างๆ ของจอแสดงผลเพื่อแสดงตัวเลขที่สร้างขึ้น ฟังก์ชันนี้มีความสำคัญต่อการตอบสนองทางภาพเมื่อกดปุ่ม

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

การสาธิต / สิ่งที่คาดหวัง

เมื่อการตั้งค่าเสร็จสมบูรณ์และอัปโหลดโค้ดแล้ว การกดปุ่มจะสร้างตัวเลขสุ่มระหว่าง 1 ถึง 6 ซึ่งจะแสดงบนจอแสดงผลเจ็ดส่วน หากทุกอย่างเชื่อมต่ออย่างถูกต้อง จอแสดงผลควรแสดงตัวเลขทุกครั้งที่กดปุ่ม ควรระวังอินพุตลอย (floating inputs) ตรวจสอบให้แน่ใจว่าปุ่มเชื่อมต่อกับกราวด์อย่างถูกต้องเพื่อหลีกเลี่ยงพฤติกรรมที่ไม่แน่นอน (ในวิดีโอที่ 1:30)

ไทม์สแตมป์ของวิดีโอ

  • 00:00 เริ่มต้น
  • 1:48 แนะนำโปรเจกต์
  • 3:40 อธิบายการเดินสายสำหรับลูกเต๋าดิจิทัล
  • 13:16 อธิบายโค้ด Arduino สำหรับลูกเต๋าดิจิทัล
  • 19:19 การเลือกบอร์ด ESP32 และพอร์ต COM ใน Arduino IDE
  • 21:00 การสาธิตลูกเต๋าดิจิทัล
  • 22:15 การแก้ไขโค้ด Arduino

ภาพ

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
ภาษา: 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);
}

แหล่งข้อมูลและเอกสารอ้างอิง

ไฟล์📁

ไม่มีไฟล์ที่พร้อมใช้งาน