ESP32-Audio-Kit开发板是一款主打音频处理的开发板,若再为它配上图片显示功能将会锦上添花。鉴于其提供的接口资源实在有限,见图1所示。
图1扩展接口
这里是以一个SPI接口的彩色OLED屏为显示器件,其各引脚的连接关系如下:
SCL --- 23
SDA --- 18
RST --- 22
DC --- 19
CS --- 21
显示屏的引脚功能配置函数为:
void App_OledInit(void)
{
pinMode(SCL,OUTPUT);
pinMode(SDA,OUTPUT);
pinMode(DC, OUTPUT);
pinMode(RST,OUTPUT);
pinMode(CS,OUTPUT);
}
相应的清屏函数为:
void LCD_Clear(u16 Color)
{
u16 i,j;
LCD_Address_Set(0,0,LCD_W-1,LCD_H-1);
for(i=0;i<LCD_W;i++)
{
for (j=0;j<LCD_H;j++)
{
LCD_WR_DATA(Color);
}
}
}
在配置显示字库的情况下,其字符显示函数为:
void LCD_ShowChar(u16 x,u16 y,u8 num,u16 color)
{
u8 temp;
u8 pos,t;
u16 x0=x;
num=num-' ';
LCD_Address_Set(x,y,x+8-1,y+16-1);
for(pos=0;pos<16;pos++)
{
temp=asc2_1608[(u16)num*16+pos];
for(t=0;t<8;t++)
{
if(temp&0x01) LCD_WR_DATA(color);
temp>>=1;
x++;
}
x=x0;
y++;
}
}
在使用该函数的情况下,其显示效果如图2所示。
图2字符显示效果
在借助于文件系统及TF卡读写功能的情况下,可实现图片显示及数码相框功能,显示效果如图3所示。
显示指定目录下图片的功能函数为:
void listDir(fs::FS &fs, const char * dirname, uint8_t levels)
{
Serial.printf("Listing directory: %s\n", dirname);
File root = fs.open(dirname);
if(!root){
Serial.println("Failed to open directory");
return;
}
if(!root.isDirectory()){
Serial.println("Not a directory");
return;
}
File file = root.openNextFile();
while(file)
{
testpic(SD_MMC, file.name());
// 按键控制
while (digitalRead(key)==0)
file = root.openNextFile();
}
}
图3图片显示效果