บทเรียน ESP32 33/55 - ลูกเต๋าดิจิทัลโดยใช้ชุดเรียนรู้ IoT ESP32 ของ SunFounder
ในบทช่วยสอนนี้ เราจะสร้างลูกเต๋าดิจิทัลโดยใช้จอแสดงผลเจ็ดส่วนและ ESP32 จากชุดการเรียนรู้ IoT ของ SunFounder โปรเจกต์นี้จะช่วยให้คุณสามารถทอยลูกเต๋าเสมือนจริง โดยสร้างตัวเลขตั้งแต่ 1 ถึง 6 เมื่อกดปุ่ม นี่เป็นวิธีที่ยอดเยี่ยมในการสำรวจความสามารถของ ESP32 พร้อมกับการเรียนรู้เกี่ยวกับการเชื่อมต่อกับจอแสดงผลและปุ่มกด เพื่อความชัดเจนยิ่งขึ้น โปรดดูวิดีโอที่ (ในวิดีโอที่ 0:00)
อธิบายฮาร์ดแวร์
ส่วนประกอบหลักสำหรับโปรเจกต์นี้ประกอบด้วยไมโครคอนโทรลเลอร์ 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 และตรวจสอบให้แน่ใจว่าจุดกราวด์ทั้งหมดเชื่อมต่อถึงกัน จากนั้นเชื่อมต่อพิน 3.3V จาก ESP32 เข้ากับรางจ่ายไฟ (เส้นสีแดง) บนเบรดบอร์ด
สำหรับชิฟต์รีจิสเตอร์ 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() ส่งค่าที่เหมาะสมจากอาร์เรย์ข้อมูลไปยังชิฟต์รีจิสเตอร์ ซึ่งจะควบคุมส่วนต่างๆ ของจอแสดงผลเพื่อแสดงตัวเลขที่สร้างขึ้น ฟังก์ชันนี้มีความสำคัญต่อการตอบสนองทางภาพเมื่อกดปุ่ม
การสาธิต / สิ่งที่คาดหวัง
เมื่อการตั้งค่าเสร็จสมบูรณ์และอัปโหลดโค้ดแล้ว การกดปุ่มจะสร้างตัวเลขสุ่มระหว่าง 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
// 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);
}
Common Course Links
Common Course Files
แหล่งข้อมูลและเอกสารอ้างอิง
-
เอกสารESP32 Tutorial 33/55 - SunFounder doc page for digital dicedocs.sunfounder.com
ไฟล์📁
ไม่มีไฟล์ที่พร้อมใช้งาน