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 23

Ticker 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 connection
  while (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 23

U8G2_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格式,否则会显示乱码

相关推荐
半杯咖啡半行码12 分钟前
STM32开发之IIC通信详解:从协议基础到FM24CL04实战
stm32·单片机·嵌入式硬件
硅基手札1 小时前
【I2C 技术系列 05】I2C 多主仲裁与时钟同步
驱动开发·stm32·单片机·嵌入式硬件·mcu·计算机外设
szxinmai主板定制专家1 小时前
面向虚拟电厂协调控制:RK3588+FPGA+AI边缘控制器设计思路与算力评估
人工智能·嵌入式硬件·fpga开发·机器人·jetson·zynq·振动采集
硅基手札1 小时前
【I2C 技术系列 01】I2C 电气特性与物理层
驱动开发·stm32·单片机·嵌入式硬件·mcu·计算机外设
comyccccc2 小时前
TB6612电机驱动板原理图与PCB设计学习笔记
单片机·嵌入式硬件
gscsded2 小时前
MCUboot裸机移植实战
单片机·嵌入式硬件·arm
北京盛世宏博3 小时前
多协议以太网温湿度变送器:Modbus TCP/UDP/SNMP 协议应用场景详解
单片机·tcp/ip·udp·传感器·温湿度
HRTOS4 小时前
HRTOS 内核 BUG 修复:任务等待对象未初始化导致的异常唤醒问题
单片机·嵌入式硬件·算法·51单片机
@MMiL4 小时前
SImulink: PowerGui下的信号FFT分析
单片机
List<String> error_P4 小时前
UART串口通信示波器波形测试
嵌入式硬件·示波器