在本文中,我們將使用LPC55S69開發(fā)板和墨水屏制作一個氣象站項目,并且在墨水顯示屏(E-INK)上顯示溫度、濕度和大氣壓,這樣我們就可以將其放在辦公室的窗臺上,
在項目中,我們選擇了MikroElekronika公司的eInk Click電路板(MIKROE-2659)作為該顯示屏的驅(qū)動。墨水屏有一個非常吸引人的功能,那就是斷電保持圖像。我打算關(guān)斷顯示屏電源,在每1分鐘采樣博世BME280環(huán)境傳感器的數(shù)據(jù)后,將NXP LPC55S69設(shè)置為低功耗模式。該項目基于NXP LPC55S69-EVK開發(fā)板,由于該開發(fā)板自帶有一個Mikroe連接器,因此可以將eInk Click電路板直接插入到EVK開發(fā)板中。墨水屏我們選擇的型號是OKdo E1電路板。
OKdo E1電路板和eInk Click電路板之間的連接非常簡單:它們之間采用的是SPI連接(eInk電路板沒有MISO信號返回)、BUSY信號和Data / Command D /?C信號。我使用了MCUXpresso SDK SPI驅(qū)動程序和兩個GPIO信號作為控制信號。此eInk顯示屏需要大約一秒鐘的時間才能將圖像從其顯示RAM傳輸?shù)斤@示面板,并且在此傳輸過程中將BUSY信號設(shè)置為高電平。在此期間,顯示IC將不接受任何新命令或數(shù)據(jù)。而且,與我使用的所有基于SPI的顯示屏器一樣,主機微控制器會設(shè)置或清零控制線“Data / Command D /?C”,并發(fā)出信號告知當(dāng)前SPI字是命令字還是數(shù)據(jù)。
eInk Click電路板接口信號:SPI、BUSY、D /?C
使用MCUXpresso SDK SPI驅(qū)動程序函數(shù)SPI_MasterTransferBlocking()寫入eInk顯示屏。顯示屏包括72 x 172個像素,每個像素都能夠顯示4種灰度顏色之一:白色(0b11)、灰色2(0b10)、灰色1(0b01)或黑色(0b00)。因此,共有12384個像素,如果我們將4個像素的顏色存儲在一個字節(jié)中,則意味著每次屏幕刷新我們將傳輸3096字節(jié)的數(shù)據(jù)(加上該塊之前的5個字節(jié)的控制字(將RAM X地址計數(shù)設(shè)置回零、RAM Y地址計數(shù)回到171),并在數(shù)據(jù)傳輸后4字節(jié))。所有技術(shù)細(xì)節(jié)均在MikroElektronika發(fā)布的數(shù)據(jù)表epa20-ae.pdf 中。我在“橫向”模式下使用屏幕。左上角的像素是像素[0,171]。當(dāng)我們過渡到屏幕右側(cè)時,列數(shù)遞減為0,而當(dāng)我們向下過渡屏幕時,列數(shù)遞增為71,這意味著右下角的像素為[71,0]。
下面以氣象站頁面頂部中心的“云”符號為例。這是一個位圖文件,在將傳輸?shù)斤@示屏之前,它會寫入LPC55S69內(nèi)部的屏幕緩沖區(qū)中。
歷史記錄界面由以下各個部分組成:
● 字體:從MCUXpresso SDK中的LittleVGL圖形庫中獲?。?/p>
● 符號(“電池充電”符號來自LittleVGL,而“溫度”和“云”符號是我創(chuàng)建的位圖);
● 最后,可以將顯示最近7天最高/最低溫度和大氣壓力趨勢的框和線直接直接繪制到屏幕上。
為了以正確的方向顯示位圖,必須進行一些操作。以下是實現(xiàn)步驟。
1)設(shè)計位圖
在開始嵌入式工作之前,我們需要在Microsoft Powerpoint中模擬一些界面。這樣我們將可以看到屏幕的顯示方式,并輕松地移動項目。 Powerpoint的另一個優(yōu)點是它具有圖標(biāo)庫,因此我能夠為屏幕選擇“溫度”和“天氣”圖標(biāo)。
2)導(dǎo)出溫度和天氣符號,并調(diào)整大小
Powerpoint支持以多種格式導(dǎo)出幻燈片 – 我使用位圖格式,然后裁剪輸出,以便僅顯示天氣符號。有許多工具可用于調(diào)整位圖的大小并將其縮小為4色灰度(我使用了GIMP)。前面我提到我們將在一個字節(jié)中存儲4個垂直像素,因此我將符號的大小調(diào)整為20像素寬和16像素高。
顯示20×16像素的圖像(很?。?,因此我在上圖中進行了拉伸。它的大小約為1 KB,20×16像素和2位灰度色(白色、兩個灰度和黑色)。
3)格式轉(zhuǎn)換
位圖存儲為行數(shù)組,每行寬20像素,共有16行。但是,當(dāng)我們寫入屏幕時,必須將數(shù)據(jù)寫入列中。一種解決方案是將位圖繞其對角線軸翻轉(zhuǎn):左上角的像素保持在同一位置,右上角的像素變?yōu)樽笙陆堑南袼?,依此類推上??紤]將圖像順時針旋轉(zhuǎn)90度,然后圍繞垂直軸鏡像是最簡單的方法,如下所示:
如果您仔細(xì)查看“之前”和“之后”圖片,您會發(fā)現(xiàn),當(dāng)我們將第一張_row_從旋轉(zhuǎn)的位圖寫入eInk屏幕上的一列時,我們將顯示16像素的白色列。下一行將生成另一列16個白色像素,位圖的第三行將云的邊緣寫入eInk屏幕上的一列。當(dāng)我們從位圖的行中讀取并在屏幕上寫入列時,最終將按預(yù)期顯示天氣符號。
4)轉(zhuǎn)換為字符數(shù)組
網(wǎng)絡(luò)上有許多位圖到數(shù)組的轉(zhuǎn)換器。比如:https://lvgl.io/tools/imageconverter。最終,我們得到一個看起來像這樣的數(shù)組:
天氣符號數(shù)組
我們可以讀取數(shù)組的前兩行(第26和27行),并觀察到它們是4個字節(jié)的0xFF。將白色編碼為0b11,我們可以看到有兩行16像素的白色。云邊緣的第一個像素被編碼為0b10(0xF8中的“ 8”,第28行)為淺灰色(GREY2)。
5)在屏幕上顯示
我編寫了一個小測試程序以在eInk屏幕上顯示天氣符號。就像從數(shù)組weather_symbol_cloudy_grey2 []中讀取每一行并將其寫入LPC55S69內(nèi)部的屏幕緩沖區(qū)一樣簡單。屏幕緩沖區(qū)只是一個3096字節(jié)的字節(jié)數(shù)組,從左上方的像素開始,一直向下到屏幕的左下方像素,然后返回第二列,依此類推。當(dāng)我們將天氣符號復(fù)制到屏幕緩沖區(qū)時,每次都需要添加行偏移量(18個字節(jié))。由于每一列中有72個像素,因此等于18個字節(jié)。復(fù)制例程就是這樣:
位圖復(fù)制例程
墨水屏上顯示的天氣符號
將eInk CLick電路板連接到OKdo E1墨水屏電路板非常簡單。接口非常簡單,可以使用MCUXpresso SDK SPI驅(qū)動程序和Pins Config工具來設(shè)置SPI和GPIO引腳。 MikroElektronika在其文檔中提供了足夠的信息以使用顯示屏,請注意查找表(LUT)和寫入顯示控制器內(nèi)部RAM的必要命令。然后,反復(fù)嘗試才能獲得正確的位圖寫入順序。使用lpcxpresso55s69 SDK的LitteVGL字體支持來編寫各種字體和符號,我非常喜歡開發(fā)該氣象站項目。
編輯:hfy
-
RAM
+關(guān)注
關(guān)注
8文章
1350瀏覽量
114369 -
顯示控制器
+關(guān)注
關(guān)注
0文章
22瀏覽量
15452 -
環(huán)境傳感器
+關(guān)注
關(guān)注
2文章
73瀏覽量
18483 -
電墨水屏
+關(guān)注
關(guān)注
0文章
7瀏覽量
4087
發(fā)布評論請先 登錄
相關(guān)推薦
評論