当前位置: 首页 > ops >正文

Arduino入门教程:10、屏幕显示

飞书文档https://x509p6c8to.feishu.cn/docx/N45Pd0tA1oaC4CxUWZjc8Ekyn0b

屏幕应用场景

课程使用的SSD1306是一款128*64像素可以使用IIC驱动的OLED屏幕。

SSD1306 Oled显示模块共有4个引脚,标记为GND, VCC, SCL和SDA。这种Oled显示模块可以使用3.3V到5V轻松上电。

u8g2是什么?

u8g2是一套图形库工具库,内部是提供了多种屏幕的驱动方案,如SSD1306_128X64、UC1638_192X96等,使用u8g2我们可以快速实现屏幕应用的开发。

u8g2开发流程

简单显示:

首先先安装对应的u8g2库,直接去PIO Home中搜导入就ok

#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>#define SCL 22
#define SDA 23// IIC version 方向 时钟信号 数据信号 复位数据
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, SCL, SDA, U8X8_PIN_NONE);void setup(void)
{u8g2.begin();
}void loop(void)
{u8g2.clearBuffer();u8g2.setFont(u8g2_font_ncenB14_tr);u8g2.drawStr(0, 24, "Hello World!");u8g2.sendBuffer();delay(1000);u8g2.clearBuffer();u8g2.setFont(u8g2_font_ncenB14_tr);u8g2.drawStr(0, 24, "embeded!");u8g2.sendBuffer();delay(1000);
}

显示时间:

#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
#include <WiFi.h>
#include <Ticker.h> //调用Ticker.h库#define NTP1 "ntp1.aliyun.com"
#define NTP2 "ntp2.aliyun.com"
#define NTP3 "ntp3.aliyun.com"#define STASSID "leo"
#define STAPSK "123456789"const char *ssid = STASSID;
const char *password = STAPSK;#define SCL 22
#define SDA 23Ticker timer1;// IIC version 方向 时钟信号 数据信号 复位数据
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, SCL, SDA, U8X8_PIN_NONE);const String WDAY_NAMES[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; // 星期void printLocalTime()
{struct tm timeInfo; // 声明一个结构体char buff[16];if (!getLocalTime(&timeInfo)){Serial.println("Failed to obtain time");u8g2.setCursor(0, 9);u8g2.print("NTP time failure");return;}Serial.println(&timeInfo, "%F %T %a"); // 格式化输出,串口显示String date = WDAY_NAMES[timeInfo.tm_wday];u8g2.clearBuffer();sprintf_P(buff, PSTR("%04d-%02d-%02d %s"), timeInfo.tm_year + 1900, timeInfo.tm_mon + 1, timeInfo.tm_mday, WDAY_NAMES[timeInfo.tm_wday].c_str());u8g2.setFont(u8g2_font_wqy14_t_gb2312a);u8g2.setCursor(9, 20); // 年份居中显示u8g2.println(buff);    // 显示出年份// Serial.println(buff);sprintf_P(buff, PSTR("%02d:%02d:%02d"), timeInfo.tm_hour, timeInfo.tm_min, timeInfo.tm_sec); // 时间u8g2.setFont(u8g2_font_fur17_tn);u8g2.drawStr(19, 45, buff);u8g2.sendBuffer();
}void setup(void)
{Serial.begin(9600);u8g2.begin();WiFi.mode(WIFI_STA); // 设置ESP32工作模式为无线终端模式WiFi.begin(ssid, password);// Wait for connectionwhile (WiFi.status() != WL_CONNECTED){delay(1000);Serial.print("wait connect to wifi...\n");}Serial.println(ssid);Serial.print("IP address: ");Serial.println(WiFi.localIP());configTime(8 * 3600, 0, NTP1, NTP2, NTP3);u8g2.setPowerSave(0); // 关省电模式timer1.attach_ms(1000,printLocalTime);
}void loop(void)
{}

中文字符显示:

下载库,解压后放到本地电脑路径:

C:\Users\kemp\.platformio\packages\framework-arduinoespressif32\libraries

在VSCode的工程配置文件中,添加该库

"C:/Users/kemp/.platformio/packages/framework-arduinoespressif32/libraries/u8g2_wqy/src",
#include <Arduino.h>
#include <U8g2lib.h>
#include <u8g2_wqy.h>#define SCL 22
#define SDA 23U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/SCL, /* data=*/SDA, /* reset=*/U8X8_PIN_NONE);void setup(void)
{u8g2.begin();u8g2.enableUTF8Print();
}
void loop(void)
{u8g2.setFont(u8g2_font_wqy12_t_gb2312); // 此处建议用gb2312字库,完整支持所有中文编码u8g2.firstPage();do{u8g2.setCursor(0, 20);u8g2.print("小智学长");u8g2.setCursor(0, 40);u8g2.print("你好啊");} while (u8g2.nextPage());delay(1000);
}

注意:如果使用vscode写代码,要把main.cpp文件用记事本打开另存为utf8格式,否则会显示乱码

http://www.xdnf.cn/news/14484.html

相关文章:

  • python大学校园旧物捐赠系统
  • Linux操作系统之进程(六):进程的控制(上)
  • 分治算法之归并排序
  • Day04_C语言基础数据结构重点复习笔记20250618
  • 反转链表二--LeetCode
  • Neo4j 入门到精通(Cypher语言详解)
  • 前端部署更新后,如何优雅地通知用户刷新页面?
  • OpenCV——图像形态学
  • Arrays.asList() 的不可变陷阱:问题、原理与解决方案
  • 秋招是开发算法一起准备,还是只准备一个
  • 技能系统详解(1)——技能
  • mysql 学习
  • 45-Oracle 索引的新建与重建
  • 6-16阿里前端面试记录
  • RAG 架构地基工程-Retrieval 模块的系统设计分享
  • 学习STC51单片机41(芯片为STC89C52RCRC)智能小车8(测速显示到OLED显示屏)
  • git最常用命令
  • RISC-V向量扩展与GPU协处理:开源加速器设计新范式——对比NVDLA与香山架构的指令集融合方案
  • 汽车 CDC威胁分析与风险评估
  • HTTP 请求中的 `Content-Type` 类型详解及前后端示例(Vue + Spring Boot)
  • 腾讯云国际站缩容:策略、考量与实践
  • Vue-7-前端框架Vue之应用基础从Vue2语法到Vue3语法的演变
  • C/C++中的位段(Bit-field)是什么?
  • 单片机 - STM32读取GPIO某一位时为什么不能直接与1判断为高电平?
  • 【开源工具】Windows屏幕控制大师:息屏+亮度调节+快捷键一体化解决方案
  • Day03_数据结构(顺序结构单向链表单向循环链表双向链表双向循环链表)
  • 【一天一个知识点】RAG(Retrieval-Augmented Generation,检索增强生成)构建的第一步
  • ARIMA 模型
  • Linux运维新人自用笔记(部署 ​​LAMP:Linux + Apache + MySQL + PHP、部署discuz论坛)
  • 内存泄漏到底是个什么东西?如何避免内存泄漏