我們重視您的隱私
通過點擊「允許所有 Cookie」,代表您同意在您的設備上存儲 Cookie 以增強網站瀏覽體驗、分析網站使用情況並協助我們的行銷和網站效能優化工作。您可以在我們的隱私權政策中找到有關於此的更多資訊。
Smart Display 支援多種 CAN 通訊協定,包括 CANopen 與 Custom CAN ID。CANopen 是一種標準化通訊協定,定義了不同類型裝置的通訊規範、裝置規範以及物件模型,提供標準化的方式來設定、監控和控制 CAN bus 上的裝置。另一方面,當 CAN bus 上的裝置具有特定功能或需求,而現有的標準協定無法滿足應用需求時,則可使用 Custom CAN ID 協定,依據實際應用需求定義 CAN 通訊方式,提供更大的設定彈性。
本文將說明如何使用 Arduino 控制板、CAN bus 模組與感測器,透過 Custom CAN ID 控制 7 吋 Smart Display 執行頁面切換。內容包含專案所使用的硬體元件、Arduino 程式編譯,以及透過 Custom CAN ID 切換 Smart Display 頁面的實作方式。
透過本篇示範,可進一步了解 Arduino、CAN bus 模組與 Custom CAN ID 之間的通訊與控制方式,並作為後續開發相關 Smart Display CAN 通訊應用的參考。

系統方塊圖
本專案使用 Arduino Mega 2560 作為主機控制板,並使用 Arduino IDE v2.0.4 進行程式開發。為了透過 CAN bus 介面與 Smart Display 通訊,Arduino 主機需搭配 CAN bus 擴充模組。此模組採用 MCP2515 CAN 控制器與 MCP2551 CAN 收發器,實現 Arduino 主機與 Smart Display 之間的 CAN bus 通訊。
首先,建立一個新專案,輸入專案名稱,然後選擇裝置類別,此應用選擇 7 吋的裝置。通訊協定選擇 Custom CAN ID,顯示方向為橫向模式。接著在 UI 範本中選擇空白範本,最後點選 Create 按鈕,如圖所示。

圖2
完成上述設定後,將顯示下圖頁面。

圖3
根據應用範例,需要新增第二個頁面。請點選 Page 按鈕,然後點選加號。

圖4
背景樣式可在 Resource 頁面中修改。

圖5
在操作介面右方的 background 選單中,您可以選擇所需的背景樣式。

圖6
完成版面設計和前面的步驟後,即可將專案上傳至 Smart Display。
在 "Device Property" 對話方塊中,選擇所需的傳輸速率(Baud Rate)。請確保選擇的傳輸速率與裝置設定相同。
點選 "Upload" 按鈕,將此專案上傳至裝置。上傳完成後,裝置將開始執行該專案。

圖7
當專案上傳完成後,點選 "OK" 按鈕,如下圖所示:

圖8
上傳完成後,您將在 Smart Display 上看到開機畫面。

圖9
畫面由開機頁面切換至操作頁面,即代表專案上傳成功:

圖10
Custom CAN ID 通訊協定使用 mcp2515_can.h 函式庫,另一個 SPI.h 函式庫則用於串列周邊介面(SPI)通訊。mcp2515_can.h 函式庫用於與 MCP2515 CAN(Controller Area Network)控制器進行通訊,MCP2515 是嵌入式系統中常用的 CAN 控制器。
此函式庫提供 MCP2515 初始化、CAN 通訊參數設定(例如位元率、過濾器和遮罩)、CAN 訊息傳送與接收,以及錯誤檢查等功能。在 Arduino IDE 程式中,CAN 通訊所需的相關設定皆定義於圖 11 所示的程式碼中,包括 CAN ID、控制參數及相關變數。此段程式碼會初始化後續程式所需的全域變數、常數和陣列,以及其對應的資料型別。

圖11
此段程式碼為 setup() 函式,在程式啟動時僅執行一次。使用 Serial.begin() 初始化串列埠監控視窗(Arduino → PC),傳輸速率設定為 115200。使用 pinMode() 將內建 LED 的腳位設定為輸出,並將實體按鈕的腳位設定為輸入。接著使用 while 迴圈初始化 MCP2515 CAN 控制器,並透過 CAN.begin() 函式將 CAN_250KBPS 設定為 CAN 通訊的位元率(250 kbps)。

圖12
changePageFunction() 函式會透過 MCP2515 傳送 CAN 命令,以切換 Smart Display 的顯示頁面,並透過包含特定資料位元組的 CAN 訊息執行換頁。此函式首先傳送 “device mode” 命令,使 Smart Display 進入設定模式,接著傳送包含指定頁碼的 “change page” 命令,最後再次傳送 “device mode” 命令,使 Smart Display 返回顯示模式。

圖13
此段程式碼為 loop() 函式,在 setup() 函式執行完成後會持續重複執行。
程式使用 analogRead() 讀取實體按鈕的電壓值,並將其儲存在 buttonValue 變數中。如果 buttonValue 大於 THRESHOLD 值,則表示實體按鈕已被按下。此時,程式會將 nowPage 變數加 1,並使用 sprintf() 和 Serial.println() 將目前的 nowPage 值輸出至串列埠監視器。
接著,程式將目前的 nowPage 值傳入 changePageFunction(),切換至指定的顯示頁面。如果 nowPage 值不為 0,則使用 digitalWrite() 開啟腳位 13 的內建 LED;否則關閉 LED。lastDebounce 變數則使用 millis() 更新目前時間,以記錄上次按下按鈕的時間。程式會在 while 迴圈中持續讀取 buttonValue,直到實體按鈕被釋放。
最後,在迴圈結尾使用 delay(100) 加入延遲,使 CAN bus 訊息以適當的時間間隔傳送。

圖14
如需更多詳細資訊,請參考 Arduino 程式碼。建立主機與 Smart Display 之間的通訊時,需確認相關 CAN 通訊設定。如需進一步了解主機與 Smart Display 之間的通訊,可參考 GUI Builder 中的通訊記錄。
使用 Arduino IDE 成功驗證並上傳程式後,即可透過實體按鈕切換頁面。當 Smart Display 顯示第一頁時,LED 會保持關閉;按下實體按鈕後,顯示畫面會切換至第二頁,同時開啟 LED,如下圖所示:

圖15
上述步驟完成後,即完成透過 Custom CAN ID 控制 Smart Display 頁面切換的示範。
如需下載上述程式、示範影片及相關資料,請參考 GitHub 專案頁面。實際硬體配置如下圖所示:

圖16
本範例示範如何使用 Arduino 開發板搭配 MCP2515 CAN 控制器,透過 Custom CAN ID 控制 Smart Display 執行頁面切換。Arduino 主機讀取實體按鈕的輸入狀態,並透過 MCP2515 傳送 CAN 命令至 Smart Display,以切換顯示頁面。
透過本範例,開發人員可以了解 Arduino 主機與 Smart Display 之間的 Custom CAN ID 通訊與基本控制方式,並作為後續開發 Smart Display CAN 通訊應用的參考。
通過點擊「允許所有 Cookie」,代表您同意在您的設備上存儲 Cookie 以增強網站瀏覽體驗、分析網站使用情況並協助我們的行銷和網站效能優化工作。您可以在我們的隱私權政策中找到有關於此的更多資訊。