跳到:
ESP32教程1/55 - SunFounder ESP32物联网学习套件软件与Arduino IDE简介 ESP32教程2/55 - 什么是ESP32、摄像头扩展板、开箱SunFounder的ESP32物联网套件 ESP32 教程 3/55 - 电阻、LED、面包板项目:你好 LED -ESP32 物联网学习套件 ESP32 教程 4/55 - 数据类型 定义变量 Int、bool、char、串口监视器 - ESP32 物联网套件 ESP32教程5/55 - LED调光,控制LED亮度 - ESP32物联网学习套件 ESP32 教程 6/55 - 使用 RGB LED 项目 2.3 - SunFounder 的 ESP32 物联网学习套件 ESP32教程7/55-在ESP32 Arduino编程中使用数组-SunFounder的ESP32物联网学习套件 ESP32 Tutorial 8/55 -Walking Light 74HC595 Shift register -SunFounder's ESP32 IoT Learning kit ESP32 教程 9/55 - 使用按钮切换LED,按下开,按下关 - SunFounder ESP32 物联网套件 ESP32教程10/55 - 使用七段数码管74HC595的数字计数器 - ESP32物联网学习套件 ESP32教程11/55 - 使用LCD1602 LCD2004与ESP32 - SunFounder的ESP32物联网学习套件 ESP32 教程 12/55 - 使用 SunFounder 的 ESP32 IoT 学习套件进行 WS2812 RGB 灯带 4 项目 ESP32教程13/55 - 使用有源蜂鸣器让Arduino发出蜂鸣声 | SunFounder的ESP32物联网学习套件 ESP32 教程 14/55 - 使用 SunFounder ESP32 IoT 学习套件播放自定义音乐音符 ESP32教程15/55 - 使用ESP32 L293D控制直流电机速度 | SunFounder的ESP32物联网学习套件 ESP32教程16/55 - 使用ESP32和L293D的迷你水泵 | SunFounder的ESP32物联网学习套件 ESP32 教程 17/55 - 使用 ESP32 和电位器控制舵机 - ESP32 物联网学习套件 ESP32教程18/55 - 使用ESP32检测倾斜 | SunFounder的ESP32物联网学习套件 ESP32 教程 19/55 - 使用红外传感器检测障碍物 | SunFounder 的 ESP32 物联网学习套件 ESP32 教程 20/55 - 循迹模块 | SunFounder 的 ESP32 物联网学习套件 ESP32教程21/55 - 使用PIR运动传感器检测人体 | SunFounder的ESP32物联网学习套件 ESP32教程22/55 - 使用LED Arduino感受光线 | SunFounder的ESP32物联网学习套件 ESP32 教程 23/55 - 使用ESP32读取电位器电压 | SunFounder的ESP32物联网套件 ESP32 教程 24/55 - 测量土壤湿度用于灌溉 | SunFounder 的 ESP32 IoT 学习套件 ESP32教程25/55 - 使用NTC和LCD测量温度 | SunFounder的ESP32物联网学习套件 ESP32教程26/55 - 使用操纵杆与Arduino采取行动 | SunFounder的ESP32物联网套件 ESP32 教程 27/55 - 使用超声波传感器测量距离 | SunFounder 的 ESP32 物联网学习套件 ESP32教程28/55 - DHT11温度传感器与LCD | SunFounder的ESP32物联网学习套件 ESP32 教程 29/55 - 使用ESP32读取红外遥控按键| SunFounder的ESP32物联网学习套件 ESP32教程30/55——使用Adafruit IO服务通过MQTT在网页上控制舵机 | SunFounder的ESP32物联网学习套件 ESP32教程31/55 - 带避障功能的LED灯带项目 | SunFounder的ESP32物联网学习套件 ESP32教程32/55 - 带LCD和蜂鸣器的汽车倒车距离警告 | SunFounder物联网学习套件 ESP32 教程 33/55 - 使用 SunFounder 的 ESP32 物联网学习套件制作数字骰子 ESP32 教程 34/55 - 使用RGB LED和旋钮实现颜色渐变 | SunFounder的ESP32物联网学习套件 ESP32教程35/55 - 植物监测器,土壤、温度和光照 | SunFounder的ESP32物联网学习套件 ESP32教程36/55 - 猜数字游戏 | SunFounder的ESP32物联网学习套件 ESP32教程37/55 - 使用蓝牙应用与ESP32 BLE | SunFounder的ESP32物联网学习套件 ESP32 教程 38/55 - 通过手机控制RGB LED | SunFounder的ESP32物联网学习套件 ESP32教程39/55 - 将ESP32用作蓝牙音乐播放器 | SunFounder的ESP32物联网学习套件 ESP32教程40/55 - 读写Micro SD卡 | SunFounder的ESP32物联网学习套件 ESP32教程41/55 - 使用Micro SD卡的MP3播放器 | SunFounder的ESP32物联网学习套件 ESP32教程42/55 - 使用相机拍照并保存到Micro SD卡 CAM-1 | SunFounder的ESP32套件 ESP32教程43/55 - 物联网互联网气象站 | SunFounder的ESP32物联网学习套件 ESP32教程44/55 - ESP32摄像头WiFi视频流网页服务器 CAM-2 | SunFounder的ESP32套件 ESP32教程45/55 - 带LED控制的定制流媒体服务器 CAM-3 l SunFounder的ESP32学习套件 ESP32教程46/55 - 使用HiveMQ MQTT进行远程温度监控 | SunFounder的ESP32套件 ESP32教程47/55 - 使用MQTT通过互联网实现WS2812 CheerLights | SunFounder的ESP32物联网套件 ESP32教程48/55 - 远程温度监控与LED控制MQTT | SunFounder的ESP32物联网套件 ESP32教程49/55 - 通过Adafruit IoT在互联网上控制直流电机 | SunFounder的ESP32套件 ESP32教程50/55 - 从世界任何地方控制RGB LED | SunFounder的ESP32套件 ESP32 Tutorial 51/55 - Temperature and Humidity over WiFi with DHT | SunFounder's ESP32 IoT Learning Kit ESP32教程52/55 - WS2812 CheerLights MQTT全局同步与LCD | SunFounder ESP32物联网套件 ESP32教程53/55 - 构建LCD网络时钟 | SunFounder的ESP32物联网学习套件 ESP32教程54/55 - 通过WiFi设置WS2812 LED灯带颜色 | SunFounder的ESP32物联网学习套件 ESP32教程55/55 - 如何测量12V、24V或100V直流电压 | 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显示器:七段详解
演示 / 预期效果 当设置完成且代码上传后,按下按钮将生成一个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
ESP32-33_digital-dice-wiring
ESP32-33_digital-dice-main
ESP32-33_digital-dice-schematic
74HC595 LED Display: Seven Segment explained
ESP32-33_digital-dice-wiring
ESP32-33_digital-dice-main
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);
}