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