首頁 技術服務 智能顯示器 如何透過Custom CAN ID通訊協議對SmartDisplay執行換頁

如何透過Custom CAN ID通訊協議對SmartDisplay執行換頁

前言

為了推廣 SmartDisplay,我們提供了不同的通訊協議來實現 CAN 通訊,包括 CANopen 和custom CAN ID。CANopen 是一種標準化的協議,定義了不同類型設備的通訊配置文件、設備配置文件以及物件模型。它提供了一種標準化的方法來配置、監控和控制 CAN bus上的設備。 另一方面,當 CAN bus上的設備具有獨特的功能或現有的標準協議無法滿足時,通常會使用custom CAN ID協議。與標準協議相比,custom CAN ID可以提供更大的靈活性和效率。

說明

本文提供如何透過自定義的CAN ID來控制 Arduino 模組、CAN bus模組和傳感器的教學指南。且概述了專案中使用的硬體部件、詳細探討程式編譯,並說明如何透過custom CAN ID切換 Smart Display 7"的頁面。

無論您是初學者還是經驗豐富的開發人員,本文都將幫助您更了解如何使用這些組件來控制設備,以便於進一步使用 Arduino模組、CAN bus模組和custom CAN ID協議來實踐更多的專案項目。

系統方塊圖

系統方塊圖

 

本文使用的 Arduino模組搭配的開發環境為Arduino IDE v2.0.4。為了用CANbus介面與SmartDisplay通訊,Arduino主機需搭配一個CAN bus擴充模組,該模組使用 MCP2515 CAN 控制器和 MCP2551 CAN 收發器來與之通訊。

本應用需要以下配件:
  • 7" Smart Display
  • ARDUINO Mega 2560
  • CAN bus shield for ARDUINO Mega 2560
  • CAN bus Dongle
  • Physical Button Sensor
  • LED
  • Software GUI-Builder v0.4.5 or above


範例分為三個部分:
  • 在GUI Builder中設計專案。
  • 建立並上傳專案
  • 編譯Arduino 主機

以GUI Builder設計專案

首先,建立一個新專案,輸入專案名稱,然後選擇裝置類別,此應用選擇7吋的裝置。通訊協議選擇Custom CAN ID,顯示方向為橫向模式。接著在UI範本中選擇空白模板,最後點選Create按鈕,如圖所示。

圖2

圖2

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

圖3

圖3

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

圖4

圖4

背景樣式可在Resource頁面做修改。

圖5

圖5

在操作介面右方的background選單中,您可以選擇您喜歡的背景樣式。

圖6

圖6

建立並上傳專案

在完成佈局設計和前面的步驟後,就可以上傳專案到SmartDisplay中了。
在"Device Property"對話方塊中,選擇您所需要的鮑率。請確保選擇的鮑率與您的裝置相同。
按一下"Upload"按鈕,將此專案上傳到您的裝置中。上傳完成後,您的裝置將開始運行該項目。

圖7

圖7

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

圖8

圖8

上傳完成後,您將在SmartDisplay上看到開機畫面。

圖9

圖9

畫面由開機頁面跳至操作頁面代表專案上傳成功:

圖10

圖10

編程Ardunio主機

Custom CAN ID通訊協議使用的是"mcp2515_can.h"的函式庫,另一個名為"SPI.h"的函式庫則用於串行外設介面(SPI)通訊。 mcp2515_can.h 函式庫用於與 MCP2515 CAN(控制區域網)控制器進行接口,該控制器是嵌入式系統中廣泛使用的 CAN 控制器。

該庫提供了一些功能,用於初始化 MCP2515,設置 CAN 通訊設置(例如位元率、過濾器和遮罩設置),傳送和接收 CAN 訊息,以及檢查錯誤。在 Arduino IDE 程序中,所有所需的註冊地址都定義在下圖所示的程式碼中。此程式碼初始化各種全域變數、常數和陣列,以及它們對應的數據類型,這些數據類型稍後會在程式碼中使用。

圖11

圖11

此段程式碼是 setup() 函数,在程序開始時僅調用一次。使用 Serial.begin() 初始化串列埠監視器(Ardunio ->PC),鮑率為 115200。使用 pinMode() 將內置 LED 配置為輸出。使用 pinMode() 配置物理按鈕腳位為輸入。使用 while 迴圈來初始化 MCP2515 CAN 控制器。使用 CAN.begin() 函数, 將CAN_250KBPS 作為鮑率參數(250K)。

圖12

圖12

changePageFunction() 函式向 MCP2515 發送命令為顯示模式之間進行切換。它透過發送特定數據字節的訊息來進行切換。函式首先發送“device mode”命令,將 MCP2515 切換到配置模式,然後使用想要切換的頁碼進行“page change”的命令,最後再發送一個“device mode”命令以將 MCP2515 切換回顯示模式。

圖13

圖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

圖14

如需更多詳細資料,請參考 Arduino 程式碼。需要注意連接主機與SmartDisplay的位址。如果您想了解更多關於主機和SmartDisplay之間的通訊,請參考 GUI builder 通訊欄。

使用 Arduino IDE 成功驗證並上傳程式後,就可以透過按時體按鈕來切換頁面。當螢幕顯示第一頁時,LED 將關閉。按下實體按鈕會切換到第二頁並且打開LED,如下圖所示:

圖15

圖15

恭喜!完成了一個專案!

請參考 GitHub 的連結 https://bit.ly/3oT0o5M 下載上述程式、示範影片,以及更多詳細資訊。實際的硬體設置如下圖:

圖16

圖16

結語

使用 Arduino 開發板和 MCP2515 CAN 控制器,我們可以用實體按鈕來控制 SmartDisplay。本文示範了如何向 MCP2515 發送命令以在顯示模式之間進行切換,以及如何讀取實體按鈕的電壓以觸發這些命令。此系統可以擴展其他功能,例如按鍵、傳感器或其他部件。 MCP2515 和 Arduino 開發板提供了一個靈活且易於使用的平台,可用於各種應用,例如汽車、工控或智慧家電。

回分類頁
go top
close