4位7段数码管模块可以显示4位数字0-9和字符A-F,适用于简单显示的应用。模块由一个4位7段共阳极数码管和一个控制芯片TM1650构成,该模块采用IIC协议通信。
本示例通过TM1650库来驱动显示四位7段式数码管。
从 https://gitee.com/billyzh/esp32-cpp-lesson 下载本教程的源码到本地硬盘文件夹,如d:\esp32-cpp-lesson
在VSCode中,选择【文件】->【打开文件夹...】选择上一步保存的文件夹打开
打开项目后,选择config.h文件,修改第10行为
#define APP_LESSON71 1
本例使用I2C默认引脚,故无需设置,若需使用特定I2C引脚,请在board_config.h文件中设置。
创建TM1650实例,代码如下(unit6-lesson71/my_board.cpp):
MyBoard::MyBoard() : Board() {
Log::Info(TAG, "===== Create Board ...... =====");
Log::Info(TAG, "initial led.");
led_ = new GpioLed(BUILTIN_LED_PIN, false); // no pwm
Wire.begin();
//Wire.begin(I2C_SDA_PIN, I2C_SCL_PIN);
tm1650_ = new TM1650();
tm1650_->init();
Log::Info( TAG, "===== Board config completed. =====");
}
程序很简单,就是创建一个TM1650实例。
TM1650库请从https://github.com/makingrobot/TM1650(patch-1分支)下载
数码管显示应用
代码如下(unit6-lesson71/my_application.cpp):
void MyApplication::OnLoop() {
MyBoard *board = (MyBoard *)(&Board::GetInstance());
TM1650 *d = board->GetTM1650();
d->displayOff();
d->displayString("____");
d->setBrightness(TM1650_MIN_BRIGHT);
d->displayOn();
delay(1000);
char line[] = "1234";
d->displayString(line);
d->setBrightnessGradually(4); //TM1650_MAX_BRIGHT;
delay(2000);
d->setBrightnessGradually(TM1650_MIN_BRIGHT);
d->displayOff();
delay(1000);
line[1] |= 128;
d->displayOn();
d->setBrightnessGradually(4); //TM1650_MAX_BRIGHT;
d->displayString(line);
delay(2000);
d->displayString("abcd");
delay(2000);
if (d->displayRunning("1234567890abcdef")) {
while (d->displayRunningShift()) delay(500);
}
delay(2000);
}
程序解读
先通过Board对象获取到TM1650的实例,然后使用TM1650库的方法来显示数字和字符。TM1650库的方法请参考其源码。
编译项目并上传开发板检验
舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。在高档遥控玩具,如飞机、潜艇模型,遥控机器人中已经得到了普遍应用。
本节主要讲解FreeRTOS任务间如何使用互斥对象来实现资源互斥访问。
在ESP32的开发,经常会有系统崩溃一直重启的情况,那么如何快速定位出现异常的代码呢?
本节主要讲解FreeRTOS任务间如何使用消息队列、事件组和二进制信号量进行通信。
本节主要讲解Task类,FreeRTOS多任务的使用。
本节主要讲解Timer类,FreeRTOS定时器的使用。
本节主要讲解舵机驱动类和用按键控制舵机。
本节主要讲解执行器件类型和用按键控制继电器。
本小节主要讲解红外接收和遥控器件,以及遥控操作LED。
本小节讲解模拟量传感器使用,旋转电位器,DHT11温湿度传感器和实现自定义传感器类。
本小节讲解Sensor类及派生类、数字量传感器使用和传感器的推荐交互流程。