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.pswp.cn/bicheng/85229.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/85229.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/85229.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

華為云Flexus+DeepSeek征文|體驗華為云ModelArts快速搭建Dify-LLM應用開發平臺并創建自己dify釘釘群聊機器人

華為云FlexusDeepSeek征文&#xff5c;體驗華為云ModelArts快速搭建Dify-LLM應用開發平臺并創建自己dify釘釘群聊機器人 什么是華為云ModelArts 華為云ModelArts ModelArts是華為云提供的全流程AI開發平臺&#xff0c;覆蓋從數據準備到模型部署的全生命周期管理&#xff0c;幫…

【Pytorch】(1)Pytorch環境安裝-①創建虛擬環境

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、創建Pytorch的虛擬環境 前言 提示&#xff1a;以下是本篇文章正文內容&#xff0c;下面案例可供參考 一、Anaconda環境基礎操作 1.1 啟動Anaconda Prompt …

如何自定義WordPress登錄頁面,提升用戶體驗和安全性

WordPress是目前最受歡迎的網站搭建平臺之一&#xff0c;無論是個人博客、企業網站&#xff0c;還是電商平臺&#xff0c;很多人都選擇用它來搭建自己的網站。不過&#xff0c;很多WordPress用戶會發現默認的登錄頁面相對普通&#xff0c;無法體現自己網站的特色。其實&#xf…

Coze扣子 - AI生成數字人口播視頻

一、數字人介紹 數字人&#xff08;Digital Human&#xff09;是指利?先進的數字技術和??智能創建的虛擬人 類形象&#xff0c;能夠模擬?類的外貌、?為和情感。數字?不僅可以在視覺上表 現出真實的?類特征&#xff0c;還可以通過?然語?處理與?戶進?互動。 Coze通過全…

【請關注】真實案例pg及kong安裝部署

# 前提需要安裝好nfs KONG_NAMESPACE="kong-api" PG_NAMESPACE="pg-ha" HARBOR_IP="harbor.rancher.com" 一、安裝pg高可用####################################################################################### kubectl creat…

SSRF7 SSRF漏洞的檢測方式

我們可以進入bp利用bp模塊collaborator&#xff0c;進行檢測&#xff1a; 我們點擊復制到剪切板&#xff1a; 然后再到目標網站進行構造URL&#xff1a; http://192.168.112.12/pikachu-master/vul/ssrf/ssrf_curl.php?urlmvluewtgs390alohzqjakhu2qtwkkc81.oastify.com 然…

C++ 函數的使用

C中的函數是實現代碼復用和模塊化的基本單元。下面從定義、調用、參數傳遞、常見樣式、聲明和分文件編寫等方面進行介紹。 1. 函數定義 函數定義包括返回類型、函數名、參數列表和函數體&#xff1a; 返回類型 函數名(參數列表) {// 函數體return 返回值; // 如果返回類型不是…

一文講清輻射傳輸模型

一、為什么需要進行輻射傳輸反演&#xff1f; 遙感影像中&#xff0c;我們看到的是從地表和大氣混合后到達傳感器的總輻射信號。這個信號既包含了地物反射&#xff0c;也包含了大氣分子和氣溶膠的散射吸收、以及地表自身或大氣的熱發射。若要從中定量獲得植被生理參數、水體理…

視頻編碼怎么選?H.264、H.265、VP9、AV1全解析

你有沒有遇到過這樣的情況&#xff1a;下載了一個高清電影&#xff0c;卻發現播放器打不開&#xff1b;或者上傳視頻到網站時提示“格式不支持”&#xff1f;其實&#xff0c;這背后和視頻編碼格式密切相關。 那么問題來了&#xff1a;視頻編碼格式哪個好&#xff1f; 今天簡鹿…

單例模式:全局唯一實例的設計藝術

引言&#xff1a;為什么需要單例模式 在軟件開發中&#xff0c;某些對象只需要一個全局實例&#xff1a; 數據庫連接池配置管理器日志記錄器線程池緩存系統 使用new關鍵字多次創建這些對象會導致&#xff1a; #mermaid-svg-TyfdXbNvcmqwnA6C {font-family:"trebuchet m…

性能優化 - 案例篇:11種優化接口性能的通用方案

文章目錄 Pre1. 加索引&#xff1a;最低成本&#xff0c;最大收益常見問題&#xff1a;工具命令&#xff1a;建議&#xff1a; 2. SQL 優化&#xff1a;比加索引再進階一步常見 5 類問題&#xff1a;實用建議&#xff1a; 3. 遠程調用&#xff1a;從串行改并行&#xff0c;性能…

Kafka - 并發消費拉取數據過少故障分析

文章目錄 背景與問題描述原理與原因分析參數優化思路示例配置驗證與監控實踐注意事項與風險總結 背景與問題描述 場景描述 使用 Spring Boot Spring Kafka&#xff0c;注解 KafkaListener(topics..., id..., ...)&#xff0c;批量監聽&#xff08;方法簽名為 public void doHa…

開源 Arkts 鴻蒙應用 開發(二)封裝庫.har制作和應用

文章的目的為了記錄使用Arkts 進行Harmony app 開發學習的經歷。本職為嵌入式軟件開發&#xff0c;公司安排開發app&#xff0c;臨時學習&#xff0c;完成app的開發。開發流程和要點有些記憶模糊&#xff0c;趕緊記錄&#xff0c;防止忘記。 相關鏈接&#xff1a; 開源 Arkts …

Qt基礎相關

模態對話框和非模態對話框 在一個頁面進行交互時彈出的一個新頁面&#xff0c;新頁面不堵塞舊頁面的交互&#xff0c;這就是非模態對話框。 模態對話框 模態對話框就是當該對話框彈出后會阻塞其他窗口的響應事件&#xff0c;必須先關閉該對話框&#xff0c;其他窗口才會繼續…

《匯編語言:基于X86處理器》第2章 x86處理器架構

本章重點是與 x86 匯編語言相關的底層硬件。有說法認為&#xff0c;匯編語言是直接與機器交流的理想軟件工具。如果是真的&#xff0c;那么匯編程序員就必須非常熟悉處理器的內部結構與功能。本章將討論指令執行時處理器內部發生的一些基本操作&#xff0c;以及操作系統如何加載…

最小生成樹算法的解題思路與 C++ 算法應用

一、最小生成樹算法針對問題類型及概述 先來簡要陳述一下樹的概念&#xff1a;一個由 N N N 個點和 N ? 1 N-1 N?1 條邊組成的無向連通圖。由此&#xff0c;我們可以得知生成樹算法的概念&#xff1a;在一個 N N N 個點的圖中找出一個由 N ? 1 N-1 N?1 條邊組成的樹。…

feign.FeignException$NotFound: [404 ] during [POST] to [http://ti/ti/v1/i/se

feign.FeignException$NotFound: [404 ] during [POST] to [http://ti/ti/v1/i/send 原因&#xff1a;多個地方注冊 FeignClient(name “ti”, path “/ti/v1/i/send/repeat”) 解決&#xff1a;刪除一個即可

Mac m1 通過docker鏡像安裝kafka

kafka依賴zookeeper&#xff0c;因此需要使用docker同時安裝zookeeper和kafka。 macOS的docker在容器和宿主之間無法通過ip直接通信&#xff0c;因此在安裝的時候需要特殊注意與ip相關的設置。當容器需要訪問宿主ip時&#xff0c;需要使用docker.for.mac.host.internal或者host…

01初始uni-app+tabBar+首頁

初始uni-apptabBar首頁 1. uni-app1.1 新建uni-app項目1.2 目錄結構1.3 把項目配置運行到微信開發者工具 2. tabBar3.1 首頁3.1 配置網絡請求3.2 輪播圖區域3.3 分類導航區域3.4 樓層區域 1. uni-app ? uni-app 是使用 Vue.js 開發前端應用的框架。開發者編寫一套代碼&#x…

微信小程序,微信授權手機號碼

uniapp中index.vue: <template><view class"content"><button open-type"getPhoneNumber" getphonenumber"getPhoneNumber"type"primary">授權手機號登錄 </button></view></template><scrip…