数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 8252|回复: 34

[Arduino] 用ESP32产生VGA信号,并显示中文

[复制链接]
发表于 2022-4-3 22:36:11 | 显示全部楼层 |阅读模式
本帖最后由 fryefryefrye 于 2022-4-3 22:52 编辑

Arduino开发环境,在库管理器里,先安装如下两个库。U8g2内含中文字库,ESP32Lib提供了VGA驱动。
U8g2
bitluni ESP32Lib

按如下定义焊接VGA线,并使用bitluni ESP32Lib自带的例子,即可显示英文。
  1. //pin configuration
  2. const int redPin = 14;
  3. const int greenPin = 19;
  4. const int bluePin = 27;
  5. const int hsyncPin = 32;
  6. const int vsyncPin = 33;
复制代码


代码大概如下:
  1. //VGA Device
  2. VGA3Bit vga;
  3. //initializing vga at the specified pins
  4. vga.init(vga.MODE320x240, redPin, greenPin, bluePin, hsyncPin, vsyncPin);
  5. //selecting the font  
  6. vga.setFont(Font6x8);     
  7. //displaying the text   
  8. vga.println("Hello World!");
复制代码



想要显示中文就有点复杂了,先在U8g2里创建一个320*240分辨率的屏幕,然后就可以用U8g2来描绘图形和中文字符。
然后写了一小段代码,把U8g2显存里的数据转换到VGA驱动的显存里。

先修改u8g2.h文件,启用#define U8G2_16BIT模式。 否则横向320的分辨率会被限制在240.

代码大概如下:
  1. u8g2_Setup_st7511_avd_320x240_f(&u8g2_vga, U8G2_R0, NULL, NULL);  // init u8g2 structure
  2. //描绘屏幕
  3. u8g2_ClearBuffer(&u8g2_vga);
  4. u8g2_SetFont(&u8g2_vga, u8g2_font_crox3t_tn);
  5. time_t now = time(nullptr); //获取当前时间
  6. time_str = ctime(&now);
  7. //第一行时间
  8. sprintf(sprint_buf, "%c%c:%c%c:%c%c"
  9.                         , time_str[11]
  10.                         , time_str[12]
  11.                         , time_str[14]
  12.                         , time_str[15]
  13.                         , time_str[17]
  14.                         , time_str[18]
  15.                 );
  16. u8g2_DrawStr(&u8g2_vga, 3, 7 + 8 - 3, sprint_buf);
  17. u8g2_DrawStr(&u8g2_vga, 200, 7 + 8 - 3, sprint_buf);

  18. u8g2_SetFont(&u8g2_vga, u8g2_font_wqy16_t_gb2312);//12的中文,英文不等宽。

  19. for (int i = 3; i < 16; i++)
  20. {
  21.         u8g2_DrawUTF8(&u8g2_vga, 0, 16*i-1, "一二三四五六七八九一二三四五六一二三四五");
  22. }
复制代码


关键步骤来了,u8g2的显存数据在 u8g2_vga.tile_buf_ptr 里面。调用vga的驱动,一个点一个点的显示出来。我这里固定显示了白色。如果要显示彩色,还需要再写一些代码。

  1. for (int y = 0; y < 240; y++)      
  2. {      
  3.     for (int x = 0; x < 320; x++)      
  4.     {
  5.         vga.dotFast(x, y, ((u8g2_vga.tile_buf_ptr[x + (y / 8) * 320] >> (y % 8)) & 1) * (0xf));
  6.         //0xf是白色。七种其他颜色分别是:0x8+1,0x8+2,0x8+3,0x8+4,0x8+5,0x8+6,0x8+7
  7.     }
  8. }
复制代码






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 7家元 +250 收起 理由
kaixi_ants + 20 謝謝分享
stdzlqz + 20 謝謝分享
jf201006 + 20 謝謝分享
慕名而来 + 20 優秀文章
家睦 + 80

查看全部打赏

发表于 2022-4-3 23:34:15 | 显示全部楼层
这个厉害了啊 esp这么厉害 啊
回复 支持 反对

使用道具 举报

发表于 2022-4-4 07:06:22 | 显示全部楼层
有库就是方便,准备用来做什么呢
回复 支持 反对

使用道具 举报

发表于 2022-4-4 09:28:45 | 显示全部楼层
CPU整好的就是个迷你电脑
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-4 09:37:31 | 显示全部楼层
muyan 发表于 2022-4-4 07:06
有库就是方便,准备用来做什么呢

挂墙上显示时间,天气,待办事项。

弄个微波感应开关,没人的时候切断VGA信号,显示器自己就会休眠。
回复 支持 反对

使用道具 举报

发表于 2022-4-4 09:53:13 | 显示全部楼层
为玩那些闲置的显示器提供了一个途径。
回复 支持 反对

使用道具 举报

发表于 2022-4-4 10:18:33 | 显示全部楼层
超大显示屏!
回复 支持 反对

使用道具 举报

发表于 2022-4-4 13:54:14 | 显示全部楼层
可以加上hdmi接口么?做个显示器检测的东西,红绿蓝色全屏,灰度,分辨率等检测
回复 支持 反对

使用道具 举报

发表于 2022-4-4 21:43:47 | 显示全部楼层
fryefryefrye 发表于 2022-4-4 09:37
挂墙上显示时间,天气,待办事项。

弄个微波感应开关,没人的时候切断VGA信号,显示器自己就会休眠。 ...

没看昵称,你不是有平板了,又玩这个?
回复 支持 反对

使用道具 举报

发表于 2022-4-4 21:48:02 | 显示全部楼层
fryefryefrye 发表于 2022-4-4 09:37
挂墙上显示时间,天气,待办事项。

弄个微波感应开关,没人的时候切断VGA信号,显示器自己就会休眠。 ...

我现在把控制接入点灯后用天猫精灵控制了,语音控制更方便,不用拿手机去点

如果有独立于esp32的语音控制就不用受制于第三方平台了

好像有语音模块
回复 支持 反对

使用道具 举报

发表于 2022-4-5 07:55:54 | 显示全部楼层
现在的MCU性能太强了,以前用51时恨不得榨干每一个字节内存,优化每一条语句。自从用了ESP8266和32,有点当电脑用的感觉
回复 支持 反对

使用道具 举报

发表于 2022-4-5 10:19:59 来自手机浏览器 | 显示全部楼层
老外已经做出来游戏机了,vga的,用了usb芯片能识别usb的双人手柄。
回复 支持 反对

使用道具 举报

发表于 2022-4-5 14:25:15 | 显示全部楼层
这个好玩啊
回复 支持 反对

使用道具 举报

发表于 2022-6-5 15:55:12 | 显示全部楼层
没想到 还能修改U8G2库,楼主厉害
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-5 17:01:24 | 显示全部楼层
zxy882266 发表于 2022-6-5 15:55
没想到 还能修改U8G2库,楼主厉害

没改。只是找到u8g2库的显存地址,直接读取出来,再通过VGA库显示。
回复 支持 反对

使用道具 举报

发表于 2022-8-7 05:21:40 来自手机浏览器 | 显示全部楼层
这个牛,表示佩服。
回复 支持 反对

使用道具 举报

发表于 2022-8-12 08:56:49 | 显示全部楼层
这个厉害了啊 esp这么厉害 啊
回复 支持 反对

使用道具 举报

发表于 2022-9-5 09:58:31 | 显示全部楼层
不错不错,这个可以有
回复 支持 反对

使用道具 举报

发表于 2022-9-5 10:56:48 | 显示全部楼层
大神就是与众不同
回复 支持 反对

使用道具 举报

发表于 2022-9-5 15:57:06 | 显示全部楼层
牛叉叉啊,看来得好好学
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-9-28 04:47 , Processed in 0.249600 second(s), 12 queries , Gzip On, Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表