STONE HMI 搭配 Arduino

在本项目中,我将利用 STONE HMI 搭配 Arduino 控制 LED。在此过程中,Arduino 将从 STONE HMI 显示屏接收数据,根据按钮按下状态执行相应操作,并通过 AI-Thinker 工具查看数据以进行验证。

目录 

[1] 描述

[2] 组件列表

[3] 软件/工具安装

[4] GUI设计与上传

[5] 工作原理与Arduino编程

Stone-HMI with Arduino-1

1. STONE HMI描述

STONE Technologies是一家专业的HMI智能串口屏制造商。根据应用需求,STONE Technologies提供不同模块规格的智能串口屏。

2. 组件列表

[ 1] STONE HMI 显示屏 [STWI056WT/N-01]

[2] Arduino

[3] TTL 转 USB 转换器

[4] 9V-12V 电源

[5] USB 数据线

[6] LED

3. STONE Designer(图形用户界面设计软件)安装

在继续操作之前,我们需要安装 STONE Designer 和 USB 驱动程序,下面我们将介绍如何安装此软件。以下是 Drive 链接,您可以从中下载设计工具和 USB 驱动程序软件。

步骤1 : 打开此 Drive,您将看到如下所示的窗口,下载此软件并将其安装在您的计算机上。

Drive ink : https:/drive.google.com/drive/folders/1SbTuj9sqHLb9zV7pmEXOIyxWa9PAdOPH?usp=sharing

Stone-HMI with Arduino-1

从这里下载第1个和第3个文件,因为第1个是GUI设计软件,第3个是USB

驱动程序。下载这些软件后,我们开始进行GUI设计。

4. GUI设计与上传

首先开始界面设计。安装完成后,点击STONE-Designer图标,随后设计软件将打开,您将看到如下界面(如图所示)。

Stone-HMI with Arduino-1

打开后,需创建新项目。点击顶部菜单中的“项目”,再选择“新建”,系统将提示输入项目名称及屏幕尺寸(请根据显示屏大小选择,此处使用640X480分辨率),并选择项目路径。填写完毕后点击“创建”。

Stone-HMI with Arduino-1

完成上述步骤后,为项目选择背景图片,具体操作请按照图中所示步骤进行。

Stone-HMI with Arduino-1

现在需要根据背景图片添加按钮和一个条形控制器。为此,只需在此处添加一个开关控件,并将其命名为“1”(可根据需要自定义名称)。同样,为第二个按钮添加控件并命名为“2”。您可以在下图中看到这两个按钮。

Stone-HMI with Arduino-1

现在选择亮度条,为此需从控件中选择文本选择器。然后选择0-10的缩放范围,以便控制LED的亮度,随后可设置该控件的大小及其他参数。最终效果如下所示。

Stone-HMI with Arduino-1

现在,根据项目 GUI 设计已完成,你需要点击顶部的“编译”按钮编译项目,然后点击“下载”按钮,并选择下载路径,如下图所示。

Stone-HMI with Arduino-1

下一步是将 GUI-Design 上传到显示屏。为此,首先通过电源接口将显示屏连接至9-12伏电源

。随后将USB接口通过USB线连接至电脑与显示屏。连接后将呈现如下状态。

STONE-HMI-WITH-ARDUINO-01

STONE-HMI-WITH-ARDUINO-01

连接显示屏后,首先需通过GUI工具下载‘Default’文件夹。为此请进入调试菜单,点击下载,然后选择目标下载位置。

现在,我们在本地机器上有了Default文件夹,该文件夹将上传到显示屏内存中。为此,首先按照上图所示,通过USB-USB通信将HMI显示屏连接到电脑。在电脑上会出现一个存储设备,您需要删除其中第一个之前的Default文件夹,如下方图片所示。

Stone-HMI with Arduino-1

之后,您可以将从GUI设计中复制的文件夹粘贴到此处。如下方图片所示。

Stone-HMI with Arduino-1

将默认文件夹粘贴到显示存储后,拔出显示屏的USB连接线并断开电源。

等待2-3秒后,重新连接显示屏的电源。此时您将看到我们设计的GUI界面。

Stone-HMI with Arduino-1

现在GUI设计和上传部分已完成,接下来我们将查看代码及运行情况。

5. 工作原理及STONE HMI与Arduino编程

让我们了解代码的工作原理。

Arduino 代码

unsigned char Buffer[20];

#define LED1   2      /*Pin for LED- 1*/

#define LED2   3        / *PWM Pin for Brigh ness Controller LED-2 */

#define LED3   4       /*Pin for LED-3*/

void setup()

{

Serial.begin(115200);

pinMode(LED1,OUTPUT);

pinMode(LED2,OUTPUT);

pinMode(LED3,OUTPUT);

}

void loop()

{

if(Serial.available())

{

/* This loop will store whole frame in buffer array */

for(int i=0;i<=19;i++)

{

Buffer[i]= Serial.read();

}

/* Checking first index of the frame as it is 0X53 */

if(Buffer[0]==0X53)

{

/* Checking condition for LED- 1 [ON] at frame index 13 with value 0X97 */

if(Buffer[ 13]==0X97)

{

Serial.println("LED1_ON");

digitalWrite(LED1, HIGH);

}

/* Checking condition for LED- 1 [OFF] at frame index 13 with value 0X96 */

else if(Buffer[ 13]==0X96)

{

Serial.println("LED1_OFF");

digitalWrite(LED1, LOW);

}

/* Checking condition for LED-2 [ON] at frame index 13 with value 0XD3 */

else if(Buffer[ 13]==0XD3)

{

Serial.println("LED3_ON");

digitalWrite(LED3, HIGH);

}

/* Checking condition for LED-2 [OFF] at frame index 13 with value 0XD2 */

else if(Buffer[ 13]==0XD2)

{

Serial.println("LED3_OFF");

digitalWrite(LED3, LOW);

}

/* Store the value for brighness from the Frame at index 11 for LED-2*/

else if(Buffer[ 12]==0X3E)

{

int x=Buffer[ 11];

int Brightness=map(x,0,10,0,255);

Serial.print("LED2 Brightness :- ");

Serial.println(Brightness);

analogWrite(LED2,Brightness);

}

}

}

delay(10);

}

如代码所示,我们正在将20字节的数据存储到缓冲区中。此缓冲区的目的是存储来自显示屏的数据帧。根据数据帧的位置,我们在代码中检查条件,并根据数据帧的位置获取不同的值。

这些值可以在Ai-thinker工具中查看,以获取每个按钮的响应值。因此,您可以通过替换代码中的if-else判断值来创建自己的代码。虽然可能相同,但建议在Ai-thinker工具中验证一次。

让我们看看电路图,以便您能轻松连接。

Stone-HMI with Arduino-1

根据电路图,如果您想使用相同的引脚连接LED,请按图连接。这里可以看到,HMI显示屏通过TTL转换器连接,该转换器通常与显示屏一起提供。您需要将Tx和Rx连接到Arduino,以便与显示屏通信。

这样,您就完成了这个项目。您还可以参考这个项目的视频(STONE HMI与Arduino),该视频是基于此制作的。

    滚动至顶部