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

相关推荐
邹诗钰-电子信息工程1 小时前
嵌入式自学第四十二天
单片机·嵌入式硬件
iCxhust2 小时前
使用 Visual Studio 创建安装包的完整指南
ide·单片机·嵌入式硬件·microsoft·c#·visual studio
深圳市尚想信息技术有限公司3 小时前
意法STM32F103C8T6 单片机ARM Cortex-M3 国民MCU 电机控制到物联网专用
arm开发·stm32·单片机
技术流浪者4 小时前
PCB设计实践(三十六)PCB设计新手系统性注意事项总结
单片机·嵌入式硬件·硬件工程·pcb设计
GodKK老神灭4 小时前
STM32 实现PID
stm32·单片机·算法·c
heater4045 小时前
【STM32 HAL库】使用HAL库操作FLASH
stm32·单片机
西北丰5 小时前
键盘 AK35I Pro V2 分析
单片机·嵌入式硬件·计算机外设
电子科技圈5 小时前
为AR眼镜等多种智能可穿戴设备添加穿戴状态检测功能
经验分享·后端·嵌入式硬件·ar·restful·智能硬件·智能手表
刘延林.6 小时前
使用 MicroPython 实现 ESP32-CH3 扬声器播放声音
嵌入式硬件