嵌入式開發中,經常會有人機界面的開發,如果你的板子有網口的話,可以開啟VNC功能,這樣就可以同步HMI到PC,平板,或者手機。親測效果非常棒。以emWin的VNC功能來介紹。
1
VNC簡介
emWin VNC 服務器可用于管理嵌入式目標以及多種其他用途,支持壓縮(hextile)編碼。VNC 表示“虛擬網絡計算”。它是基于一種簡單的顯示協議的客戶端-服務器系統,允許用戶從互聯網的任何地方查看和控制“桌面”計算環境,支持多種機器架構,采用的是 TCP/IP 通信協議。換言之:嵌入式設備的顯示內容可以在運行客戶端的機器(如 PC)的屏幕上看到;可以用鼠標和鍵盤來
控制目標。emWin 仿真和試用版都提供了該功能。emWin VNC 支持是一個單獨的軟件包,所以不包含在基本軟件包內。VNC 支持需要 emWin 顏色。如果文件系統可用,還能在客戶端和帶 emWinVNC 客戶端的目標之間實現文件傳輸,VNC 由兩類組件構成:一是服務器,生成顯示,一是查看器,在屏幕上實際繪制顯示內容。不但可以看到遠程機器(目標或仿真),而且可以通過鼠標和鍵盤進行控制。服務器和查看器可以在不同的機器上,可以采用不同的架構。用于連接服務器和查看器的協議具有簡單、開放且不受平臺限制的特點。查看器不存儲狀態。斷開查看器與服務器的連接,然后重新連接不會導致數據丟失。由于可以從其他地方重新連接,因此可以輕松實現移動性。使用 VNC 服務器,可以從任何地方控制您的目標機器。
2
運行需求
因為VNC是跑在網絡上的,所以必須有TCP/IP協議棧,例如我們嵌入式中經常用的lwip等就可以用,另外VNC 服務器需要以獨立線程運行。因此,使用 emWin VNC 服務器要求采用多任務系統。最后如果要傳文件還需要文件系統。實現是完全線程安全的及可重入的;多個 VNC 服務器可以在同一 CPU 的不同層或顯示器中啟動。如果目標(當然,同樣適用于模擬)有多個顯示器或多個層,這可能是一個有用的選項。只有一個 VNC 服務器可以在任何時候在每一層啟動;一旦與查看器的連接結束,則可以連接另一個。
3
win32模擬
首先可以參考emwin的例程,VNC在同一電腦上模擬
打開模擬解決方案工程,使用vs2019模擬
打開工程配置使能VNC,也可以根據自己實際調整分辨率,這里以480*272來展示。如果編譯沒有問題運行工程
打開VNC連接,可參照如下手冊提示連接
4
代碼分析
我們要將代碼移植到我們的硬件板子上其實也很簡單,首先要保證你的TCP/IP協議棧運行正常,可以測試TCP/IP協議棧正常運行后,開始移植VNC,主要就幾個文件需要根據不同的協議棧修改,但都是socket編程,所以接口都一樣。主要就是開啟VNC函數的實現
這里我們以lwip協議棧為例來說明,以IAR環境為工程載體,以freeRTOS為操作系統,參考上面的例程調用,先添加頭文件
這個函數就是實現創建VNC的任務,在任務里調用 GUI_VNC_Process(&_Context, _Send, _Recv, (void *)Sock);去實現VNC的處理。
將實現的文件添加到工程里,并編譯無誤,
在GUI任務化地方調用開啟VNC服務,還可以設置密碼,名字等等,調用相應的API就可以
這樣編譯無誤后,就可以下載試驗了,更多API和玩法可以參考emWin手冊。這個之前測試過,手邊此刻沒有板子,就不給大家演示了。如果你是使用freeRTOS+lwip+emwin可以參照文中的代碼,基本不用變就可以用起來,當然,之前必須保證你的GUI和TCP/IP協議棧可以正常使用。可以參照前面的模擬看效果。這樣就可以很炫的玩你的GUI了。
責任編輯:YYX
-
PC
+關注
關注
9文章
2093瀏覽量
154350 -
HMI
+關注
關注
9文章
590瀏覽量
48611 -
VNC
+關注
關注
0文章
19瀏覽量
9271
原文標題:讓你的HMI開啟VNC騷操作
文章出處:【微信號:InterruptISR,微信公眾號:嵌入式程序員】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論