搜索代码

ESP32 教程 33/55 - 使用 SunFounder 的 ESP32 物联网学习套件制作数字骰子

ESP32 教程 33/55 - 使用 SunFounder 的 ESP32 物联网学习套件制作数字骰子

在本教程中,我们将使用SunFounder物联网学习套件中的七段显示器和ESP32制作一个数字骰子。该项目将允许您通过按下按钮来掷虚拟骰子,生成1到6之间的数字。这是探索ESP32功能并学习与显示器和按钮交互的绝佳方式。为了更清晰,请务必观看视频(视频中0:00处)。

ESP32-33_digital-dice-main

硬件说明

该项目的主要组件包括ESP32微控制器、74HC595移位寄存器、七段显示器和按钮。ESP32是一款功能强大的微控制器,集成了Wi-Fi和蓝牙,非常适合物联网应用。74HC595移位寄存器使我们能够使用比直接连接每个段更少的引脚来控制七段显示器。

七段显示器显示数字,并通过从移位寄存器发送数据来控制。按钮用于触发掷骰子,生成一个随机数字并显示。按下时,按钮连接到ESP32上的引脚13,该引脚具有内部上拉电阻,在未按下时保持高电平状态。

数据手册详情

制造商 德州仪器
零件编号 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上的接地引脚,并确保所有接地点相互连接。接下来,将ESP32的3.3V引脚连接到面包板上的电源轨(红线)。

ESP32-33_digital-dice-schematic

对于74HC595移位寄存器,确保引脚1连接到3.3V电源轨,引脚8接地。将数据输出引脚(DS)连接到ESP32上的引脚25,移位时钟引脚(SHCP)连接到引脚26,存储时钟引脚(STCP)连接到引脚27。按钮应连接在ESP32上的引脚13和地之间,按下时将引脚拉低。

代码示例与讲解

在代码中,我们首先定义用于移位寄存器和按钮的引脚。按钮引脚定义为buttonPin,设置为ESP32上的引脚13。数据数组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显示器:七段详解

演示 / 预期效果

当设置完成且代码上传后,按下按钮将生成一个1到6之间的随机数,并显示在七段数码管上。如果所有接线正确,每次按下按钮时显示屏都应显示一个数字。请注意浮空输入问题;确保按钮正确连接到地线,以避免异常行为(视频中1:30处)。

视频时间戳

  • 00:00 开始
  • 1:48 项目介绍
  • 3:40 数字骰子接线说明
  • 13:16 数字骰子Arduino代码解释
  • 19:19 在Arduino IDE中选择ESP32开发板和COM端口
  • 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++
/*
 * // 定义74hc595和按钮使用的引脚
 */
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};
int buttonState = false;

void setup ()
{
 // 将按钮引脚设置为输入模式
  pinMode(buttonPin,INPUT);

 // 将引脚设置为74hc595
  pinMode(STcp,OUTPUT);
  pinMode(SHcp,OUTPUT);
  pinMode(DS,OUTPUT);
}

void loop()
{
 // 检查按钮是否被按下
  if(digitalRead(buttonPin) == LOW)
  {
 // 生成一个介于1和6之间的随机数
    int diceNumber = random(1, 7);

 // 在七段显示器上显示数字
    show_number(diceNumber);

 // 延迟50毫秒
    delay(50);
  }
}

 // 在七段显示器上显示数字的功能
void show_number(int num)
{
 // 将ST_CP接地,并在您传输期间保持低电平。
  digitalWrite(STcp, LOW);

 // 将数字的数据发送到移位寄存器。
  shiftOut(DS, SHcp, MSBFIRST, datArray[num]);

 // 将 ST_CP 拉高以保存数据
  digitalWrite(STcp, HIGH);
}

资源与参考

文件📁

没有可用的文件。