nodemcu(esp8266)u8g2 oled显示汉字获取网络时间

本文分享了使用1.3寸128×64点阵OLED屏幕和SH1106驱动模块的经验,通过U8G2库实现时间显示功能,探讨了汉字显示的局限性和解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我的OLED是1.3寸128×64点阵,驱动是SH1106 I2C接口,我用的U8G2的模块,u8G2有16×16的汉字,Chinese1,chinese2,chinese3,三个汉字字体,是unicode编码,不过我发现汉字不全,只有很少一部分,用DrewGlyph显示。有知道的欢迎讨论。本来分两个文件,发现问题比较多,现在用一个init.lua文件,发现是可以的,连接热点后,可以同步时间,并且在OLED上显示出来,显示正常,程序如下:I2C用的1,2为数据端。时间刷新10S,也可设短,但是改程序,不好传进去。

function init_OLED(sda,scl)
     sla = 0x3c
     i2c.setup(0, sda, scl, i2c.SLOW)
     disp=u8g2.sh1106_i2c_128x64_noname(0,sla)
    
     disp:setFontPosTop()
end
function print_OLED()
  
 disp:clearBuffer()

  
  disp:setFont(u8g2.font_unifont_t_chinese1)
   disp:drawGlyph(45, 3, 24180)
   disp:drawStr(1, 3, tostring(time["year"]))
    disp:drawStr(64, 3, tostring(time["mon"]))
     disp:drawStr(97, 3, tostring(time["day"]))
    disp:setFont(u8g2.font_unifont_t_chinese2)
   disp:drawGlyph(80, 3,26376)
 disp:setFont(u8g2.font_unifont_t_chinese2)
   disp:drawGlyph(115, 3,26085)
disp:drawLine(10,25,120,25)
   
   disp:setFont(u8g2.font_unifont_t_chinese2)
   disp:drawGlyph(44, 30,26102)
    disp:drawStr(28, 30, tostring(time["hour"]+8))
     disp:drawStr(60, 30, tostring(time["min"]))
      disp:drawStr(97, 30, tostring(time["sec"]))
  disp:setFont(u8g2.font_unifont_t_chinese1)
   disp:drawGlyph(80, 30, 20998)
   以上部分代吗,三天的时间,主要是做个总结,需要全部代码的。联系我,wunnu@live.com

<think>嗯,用户想在ESP32上用U8G2库驱动OLED显示中文,这需要几个步骤。首先,用户需要正确连接硬件。我记得ESP32和OLED通常通过I2C连接,所以需要确认引脚是否正确,比如VCC接3.3V,GND接地,SCL和SDA分别接对应的GPIO,比如D22和D21。不过不同的开发板可能引脚不同,得提醒用户检查自己的板子引脚图。 接下来是安装U8G2库。用户可能不知道在Arduino IDE里怎么安装,需要指导他们通过库管理器搜索并安装。然后选择正确的初始化语句,这部分用户可能会困惑,因为U8G2有很多预定义的构造函数,对应不同的屏幕型号和通信协议。用户需要根据自己OLED的型号和分辨率来选择,比如SSD1306的128x64屏,可能需要用`U8G2_SSD1306_128X64_NONAME_F_HW_I2C`。 然后是体问题。U8G2默认可能不带中文体,用户需要生成或导入中文库。这里涉及到使用U8g2体工具生成所需的模,比如用`fontbuilder`工具选择需要的汉字体,生成对应的代码,然后包含到项目中。这一步可能比较复杂,用户可能会遇到体文件过大或者找不到正确符的问题,需要详细说明步骤。 示例代码部分,需要确保初始化正确,设置体,并使用`drawUTF8`或`drawStr`显示中文。但要注意,如果直接使用默认体可能不支持中文,所以必须生成并包含中文体文件。比如在代码开头添加`#include "myfont.h"`,然后在setup里设置体为生成的体。 另外,用户可能需要调整缓冲区大小,因为中文体占用更多内存,如果出现显示问题,可能需要增加Arduino的全局缓冲区设置。还有,模生成工具的使用步骤,用户可能需要下载工具,选择符集,导出代码,这些都需要逐步指导。 最后,常见问题比如接线错误、体未正确应用、内存不足等,都是用户可能会遇到的,需要给出排查建议。比如检查接线是否正确,确认体是否被正确包含和设置,调整缓冲区大小等。 总的来说,用户需要一个从硬件连接到代码编写,再到体生成的完整流程,同时要注意可能出现的陷阱,比如引脚选择、体导入、内存限制等。确保每个步骤都清晰,并提供示例代码和参考资料,帮助用户一步步实现中文显示。</think>### ESP32使用U8G2驱动OLED显示中文教程 #### 一、硬件准备 1. **ESP32开发板**:支持Arduino框架 2. **OLED屏幕**:建议选择SSD1306驱动的128x64分辨率I2C接口屏幕 3. **接线方式**: - OLED VCC → ESP32 3.3V - OLED GND → ESP32 GND - OLED SCL → ESP32 GPIO22(默认I2C时钟引脚) - OLED SDA → ESP32 GPIO21(默认I2C数据引脚)[^2] #### 二、软件配置步骤 1. **安装U8g2库**: - 在Arduino IDE中选择「工具」→「管理库」 - 搜索并安装`U8g2 by oliver`库 2. **选择初始化语句**: ```cpp U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /*reset=*/ U8X8_PIN_NONE); ``` 3. **中文模生成**: - 下载U8g2体工具:[u8g2 font tools](https://github.com/olikraus/u8g2/wiki/fntgrp) - 选择需要的汉字体(如文泉驿点阵体) - 生成模代码文件(如`myfont.h`) #### 三、示例代码 ```cpp #include <U8g2lib.h> #include "myfont.h" // 生成的中文模头文件 U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE); void setup() { u8g2.begin(); u8g2.setFont(myFont); // 使用自定义体 } void loop() { u8g2.firstPage(); do { u8g2.setCursor(0, 20); u8g2.print("你好世界"); // 显示中文 } while (u8g2.nextPage()); delay(1000); } ``` #### 四、关键参数说明 1. **体生成注意事项**: - 每个汉字占用约16x16像素 - 建议选择GB2312符集 - 生成代码时勾选`Use UTF8`选项 2. **内存优化技巧**: ```cpp // 在文件首行添加缓冲区设置 #define U8G2_USE_LARGE_FONTS #define U8X8_PROGMEM ``` #### 五、常见问题排查 | 现象 | 解决方案 | |------|----------| | 屏幕无显示 | 检查I2C地址是否匹配(默认0x3C)| | 汉字显示乱码 | 确认体文件包含对应符编码 | | 内存不足 | 减少显示内容或优化模范围 |
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值