我们重视您的隐私
通过点击「允许所有 Cookie」,代表您同意在您的设备上存储 Cookie 以增强网站浏览体验、分析网站使用情况并协助我们的营销和网站效能优化工作。您可以在我们的隐私权政策中找到有关于此的更多信息。
Smart Display 支持多种 CAN 通信协议,包括 CANopen 和 Custom CAN ID。CANopen 是一种标准化通信协议,定义了适用于不同类型设备的通信配置文件、设备配置文件和对象模型,为 CAN 总线上的设备配置、监控和控制提供了标准化方式。另一方面,当 CAN 总线上的设备具有特定功能或需求,而现有标准协议无法满足时,可以使用 Custom CAN ID 根据应用需求定义 CAN 通信方式,从而提供更高的配置灵活性。
本文介绍如何使用 Arduino 开发板、CAN 总线模块和传感器,通过 Custom CAN ID 对 7 英寸 Smart Display 进行页面切换。内容涵盖项目所使用的硬件组件、Arduino 程序编译,以及如何通过 Custom CAN ID 实现 Smart Display 页面切换。
通过本示例,开发人员可以进一步了解 Arduino 开发板、CAN 总线模块与 Smart Display 之间基于 Custom CAN ID 的通信与控制方式,并将其作为后续开发 Smart Display CAN 通信应用的参考。

图 1 系统框图
本项目使用 Arduino Mega 2560 作为主控制器,并采用 Arduino IDE v2.0.4 进行程序开发。为了通过 CAN 总线接口与 Smart Display 通信,Arduino 主机需连接 CAN 总线扩展板。该扩展板采用 MCP2515 CAN 控制器和 MCP2551 CAN 收发器,实现 Arduino 主机与 Smart Display 之间的 CAN 总线通信。
首先,启动最新版 Smart Display GUI Builder 并创建一个新项目。输入项目名称后,系统会自动选择项目文件夹。
选择设备类型,本示例选择 7 英寸设备,并将通信协议设置为 "Custom CAN ID"。显示方向默认为横向模式。接着选择空白 UI 模板,然后点击 "Create" 按钮创建新项目,如图 2 所示。

图 2
创建空白项目后,将显示图 3 所示的页面。

图 3
本示例需要添加第二个页面。点击 "Page" 按钮,然后点击加号按钮添加新页面。

图 4
可以在 "Resource" 面板中更改背景样式。

图 5
在界面右侧的 "background" 菜单中选择所需的背景样式。

图 6
完成界面布局设计及上述步骤后,即可构建并上传项目。点击 "Device" 按钮并选择 "Device Property"。检查协议和波特率设置,并根据需要进行调整。请确保 GUI Builder 中的波特率与 Arduino 程序中设置的波特率一致。完成设置后,点击 "Connect to Device"。设备成功连接后,点击 "Upload" 上传项目,如图 7 所示。

图 7
项目上传完成后,点击 "OK",如图 8 所示。

图 8
上传完成后,Smart Display 将显示启动画面,如图 9 所示。

图 9
随后,显示画面会从启动画面切换至项目页面,表示已通过 GUI Builder 成功完成项目构建与上传,如图 10 所示。

图 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() 用于初始化与串口监视器之间的串行通信,波特率设置为 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) 加入 100 ms 延时,使 CAN 总线消息以适当的时间间隔发送。

图 14
如需更多详细信息,请参考 Arduino 代码。建立主机与 Smart Display 之间的通信时,请确保相关 CAN 通信设置配置正确。如需进一步了解主机与 Smart Display 之间的通信,可参考 GUI Builder 中的通信日志。
在 Arduino IDE 中成功验证并上传程序后,即可通过实体按键切换显示页面。当 Smart Display 显示第一页时,LED 保持关闭;按下实体按键后,显示画面会切换至第二页,同时打开 LED,如图 15 所示。

图 15
至此,即完成通过 Custom CAN ID 控制 Smart Display 页面切换的示例。
如需下载上述程序、演示视频及相关资料,请参考 GitHub 项目页面。实际硬件配置如图 16 所示。

图 16
本示例介绍如何使用 Arduino 开发板搭配 MCP2515 CAN 控制器,通过 Custom CAN ID 控制 Smart Display 进行页面切换。Arduino 主机读取实体按键的输入状态,并通过 MCP2515 向 Smart Display 发送 CAN 命令,以切换显示页面。
通过本示例,开发人员可以了解 Arduino 主机与 Smart Display 之间基于 Custom CAN ID 的基本通信与控制方式,并将其作为后续开发其他 Smart Display CAN 通信应用的参考。
通过点击「允许所有 Cookie」,代表您同意在您的设备上存储 Cookie 以增强网站浏览体验、分析网站使用情况并协助我们的营销和网站效能优化工作。您可以在我们的隐私权政策中找到有关于此的更多信息。