活用USART HMI顯示互動資訊

在之前我們介紹了許多的單晶片微電腦開發板可以使用的顯示器,例如SSD1306、Max7219、以及LCM1602等等,它們共通的特色就是便宜,有現成可用的驅動程式,介面簡單,可以很方便地利用少少的程式碼就顯示我們想要的資訊,而不需要總是把資訊傳送到網路伺服器或是高階的螢幕上。但是,如果我們需要直接在顯示裝置上互動,而且希望能夠呈現的資訊可以更加地多元,那麼你可能需要使用的是USART HMI這種裝置。

在本篇文章中使用的HMI,它的規格如下:

http://www.100y.com.tw/viewproduct.asp?MNo=141930

如果上述的連結失效的話,可以直接在網路上搜尋TJC4822T035就可以找到類似的HMI裝置。我們這次使用的HMI正面及背面如下所示:

如上圖,在背面的右側有它的型號,左側則是4條連接線。在上傳資料時,我們需要把4條線都連接到USB2TTL的連接上,當資料準備完成時,連接到Arduino則只需要使用到其中的3條線。

這個板子本身就具有許多的功能,我們需要先透過它的編輯程式把所有想要使用及佈置的元件,包含要在板子中使用的所有字型檔案都上傳到它的記憶體中,然後在離開電腦之後,它可以自己運用,也可以透過Arduino等裝置加以控制。

要將它連接到電腦,首先我們需要另購一條PL2303TA的USB轉TTL連接線,如下所示:

它的4條線剛好可以連接到HMI的4條線上,紅色是5V、黑色是GND、白色是RXD、綠色則是TXD,其中線的TX和RX要連接到HMI上的RX和TX,這點要留意。連接完畢之後,把USB接上電腦,你的電腦應該會通知你要安裝驅動程式,一般來說,如果我們曾經安裝過Mu Editor或是mBlock的話,驅動程式應該都是已安裝狀態。

接著,要連到以下的網址下載專屬的編輯器:

http://wiki.tjc1688.com/doku.php?id=2.%E4%B8%8A%E4%BD%8D%E8%BD%AF%E4%BB%B6%E4%B8%8B%E8%BD%BD:1.%E6%9C%80%E6%96%B0%E7%89%88%E6%9C%AC%E4%B8%8B%E8%BD%BD

下載之畫面如下:

編輯器軟體安裝完成之後,即可開啟該程式,進入之後選擇「新建」,然後要選擇你所使用的設備:

按下OK之後,還要再選擇顯示方向以及文字編碼格式,如下所示:

選取完畢之後,即可看到如下所示的編輯畫面:

為了讓文字可以順利地顯示,首要步驟為建立字庫,如下所示:

選擇想要的字型以及字體大小和字庫名稱,按下「生成字庫」即可,如下所示:

因為字型檔的內容有點多,所以要花大約2分鐘左右的時間產生成字庫檔案並儲存。之後即可把該字庫內容引入到編輯器中,透過「下載」的方式把字型檔案上傳到HMI板子上。以下是字庫生成完畢的訊息:

接著會詢問是否加入字庫,請回答「是」:

加入之後我們就可以利用編輯程式左側的工具箱中的控件,建立所需要的介面,以「文本」這個控件為例,利用它就可以輸出我們想要顯示在HMI上的文字。點擊之後可以右下角屬性的地方,修改自己想要的文字內容、字元間距、顏色等等屬性。

請留意此控件的ID名稱,以此例,它的id是t0,這是之後程式控制時的操作對象。值得一提的是,屬性中有一個叫做txt_maxl的,它是用來限制控件中可輸入的字數,把它設大一點會比較方便。

除了文字及數字之外,也可以自行上傳圖片,然後把它放圖片控制中以顯示在HMI中,左下角的介面可以管理圖形檔以及字庫和動畫等。如下所示,我們上傳了一個圖形檔案:

以下是我們編輯的介面:

左下角是一個定時器,它可以設定時間之後,在右下方編寫時間到的時候要執行的程式碼,如下所示:

我們在定時事件中寫下了以下的程式碼:

n0.val++

這會使得n0這個數字控件會在每隔0.5秒的時候自動把自己的數值加1。由於可以透過上述的3個按鈕來進行互動,因此可以點選各個按鈕,分別在它們的按下事件中輸入以下的程式碼:

tm0.en=1
tm0.en=0
n0.val=0

這樣就可以完成對於數字的計數、暫停、以及歸零的操作了。為了示範Arduino的操作,在我們加入一個指針z0以及另外一個數字n1,如下所示:

請使用「下載」功能表,並選擇「聯機並開始下載」按鈕,系統即可開始執行同步作業,把所有的介面及程式資料都上傳到HMI中,過程如下所示:

全部上傳完畢之後,即可移除和電腦之間的連線,然後把電源和TX線連接到Arduino上,請特別注意,只要連接TX就好了。如下所示:

以下是Arduino的程式碼:


void setup() {
  Serial.begin(115200);
  Serial.print("t0.txt=\"NKUST CCET\"\xff\xff\xff");
}

int i=0;
void loop() {
  char buf[100];
  
  sprintf(buf, "n1.val=%d\xff\xff\xff", i++);
  Serial.print(buf); 
  sprintf(buf, "z0.val=%d\xff\xff\xff", i++);
  Serial.print(buf); 
  
  if (i>360) i = 0;
  delay(100);
}

請注意,在把程式碼燒錄到Arduino時請不要連接HMI,不然有很大的機率會導致燒錄失敗。燒錄完成之後,再把線接到HMI上即可。以下是程式運作的過程影片:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *