亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

使用 Nextion Display 构建 Fridgeye 应用程序

组件和用品

Arduino UNO
× 1
光敏电阻
× 1
电阻 3.3k ohm
× 1
Itead Nextion Enhanced 3.5" 触控显示屏
× 1

应用和在线服务

Nextion GUI 编辑器
Arduino IDE
GIMP - GNU 图像处理程序

关于这个项目

早在今年 7 月,一些来自德国的设计专业学生就发起了一个讽刺性的 Kickstarter 来制作 Fridgeye 的原型;一个漂亮的冰箱光传感器。结合我们通常期望在 Kickstarter 上出现可笑的硬件项目的事实以及团队为使其看起来真实而付出的努力,难怪人们不确定该怎么想。我从一开始就是这个项目的粉丝,这已经不是什么秘密了,但这并不是因为我很想知道我的冰箱灯在做什么。如果您想开始物联网,Fridgeye 是一个范围完美的项目,可以解决增长潜力。

构建冰箱设备

这篇文章的大部分内容将集中在让 Fridgeye 应用程序与连接到 Arduino 的 Nextion 触摸显示器一起运行,但在我们深入了解之前,我们需要一个可以感应光线的实际设备。没问题。让我们花 5 分钟来构建一个。我保证不会再花一秒钟。您只需要一个 Arduino、面包板、光敏电阻和一个 3.3K 电阻。我们会像这样接线。暂时不要担心屏幕连接。只需关注 Arduino、电阻器和光敏电阻器。

实际上,我身边有一个 ProtoShield;所以我在上面贴了一个迷你面包板,这样我就可以把所有东西都放在一个漂亮的盾牌堆叠包装里,但仍然有面包板的自由。这是我的样子。

好吧,我撒谎了,只花了大约 4 分钟。但是您可以利用剩下的时间在您的 Arduino 上放下这个超级简单的草图,并从 Arduino IDE 中观察光传感器的串行输出。

void setup() { Serial.begin(9600); } void loop() { int val =analogRead(A0); Serial.println(val);延迟(500); }  

对 Arduino 进行编程后,从 工具 打开串行监视器 菜单。确保将波特率设置为 9600。您应该会看到一个新的整数值,大约每半秒代表光级。来吧,花点时间玩玩它。盖上传感器,打开和关闭灯,甚至可以尝试用智能手机手电筒照它。观察值的变化。您会注意到它们的范围从完全黑暗中的几乎 0 到被光轰击时的几乎 1024。

什么是 Fridgeye 应用程序?

Fridgeye 应用程序是您 Fridgeye 设备的可靠伴侣。设备停滞不前的日子已经一去不复返了。每个人都知道,在当今物联网的宏伟世界中,您的设备没有机会,除非它有某种应用程序与之配套。它是花生酱和果冻,牛奶和麦片,豌豆和胡萝卜。

该应用程序非常简单。如果我们看一下 Kickstarter 页面,它实际上只是 Fridgeye 检测到的光的百分比,并且似乎只有 0% 或 100%。

我相信我们可以做得更好,并在这 99 个值之间使用一些值,这样它们就不会感觉不好。让我们直接从概念图开始,将其带入现实世界。

Nextion 显示器入门

对于这个项目,我使用 Nextion Enhanced 3.5" 触摸显示器。它是一个全电阻式触摸屏显示器,旨在处理繁重的图形控制,因此即使是像 Arduino 这样的极低端设备也可以通过一对串行线。虽然显示本身非常好,但文档可能很难浏览,特别是对于初学者来说,所以让我们一步一步地浏览它。

显示编程模型

如果您曾经对 Arduino 进行编程以使用显示器,那么您可能在使用过类似简单图形库的东西之前,将抽象出屏幕表面绘图的低级命令。虽然非常好,但这些库仍然需要您进行大量像素推送才能在屏幕上绘制内容。 Nextion 显示使用了一种不同的方法,如果您习惯了 MVVM 或 MVC 模式,则会感觉非常熟悉。从本质上讲,应用程序的外观是完全预先配置的,并存储在屏幕本身上。在运行时,Arduino 使用预先分配的 ID 引用 UI 的各个部分。 Arduino 也以同样的方式从屏幕获取信息,如触摸事件。这意味着 Arduino 不是在运行时绘制东西,而是仅充当视图和控件的导体。如果这没有意义,请在我们逐步完成时再坚持一会儿。

准备视图

因为我们的 Fridgeye 应用程序非常简单,所以它只需要一个页面。然而,Nextion 显示器能够处理具有多个页面和转换的非常复杂的应用程序。无论您是设计像我们这样的简单应用程序还是非常复杂的应用程序,您都将使用 Nextion GUI 编辑器。它是 Nextion 系列显示器的 WYSIWYG 编辑器,将帮助我们使布局恰到好处。同样,文档和入门体验对于初学者来说可能非常具有挑战性,但一旦掌握了窍门,您将可以快速设计复杂的布局。

在我们破解打开编辑器之前,我们需要准备一个后台资产。参考上面的模拟图像,我们可以看到运行时显示器上唯一会发生变化的是检测到的光的百分比。底部的徽标、背景颜色和绿色条是静态的。让我们用那些可以用作背景的项目制作图像。这在 GIMP 中花了我 5 分钟,看起来像这样。

这里要记住的重要一点是使图像恰好符合您的屏幕所需的大小。就我而言,我使用的是 3.5" 屏幕,可转换为 480 x 320 像素。这正是我在 GIMP 中制作图像的大小。

使用 Nextion 编辑器

注意: Nextion Editor 需要 .NET Framework,目前仅在 Windows 上受支持。我能够通过 Macbook 上的 Parallels 在 Windows 10 虚拟机中毫无问题地运行它。我没有在 Linux 上的 Wine 中测试它。

以下步骤将引导您在 Nextion 编辑器中创建我们简单的应用程序布局。打开 Nextion Editor 后,执行以下步骤。

1. 文件->新建 .在您的机器上为您的项目命名和位置。

2. 将弹出一个对话框,要求您选择设备。就我而言,我选择了增强型和 3.5" 型号。不要单击确定 .继续第 3 步。

3. 点击显示 对话框左上角的选项卡。选择 90 水平显示方向。

4. 现在您可以点击确定。

5. 点击图片 从左侧的工具箱。这将添加一个元素 p0 到你的大纲。

6.图片/字体 左下角的窗格确保您有图片 选项卡被选中。

7. 点击 + 象征。

8. 导航到我们在 GIMP 中创建的图像,该图像为我们的应用程序提供背景,然后单击打开 .

9. 在右侧的属性窗格中双击 pic 属性值区域。将打开带有我们应用程序背景的图片选择对话框。

10. 选择应用背景并点击确定 .

11. 点击文本 从工具箱。这将添加一个名为 t0 的文本区域 在我们显示器的左上角。注意 id 的值 属性,因为您稍后在对 Arduino 进行编程时将需要它。

12. 将文本区域拖到“Light Status”字样下方的所需位置并调整其大小以填充大区域。

13. 要修复白色背景,我们需要将文本区域背景设置为主背景的裁剪版本。随着 t0 选择更改 sta 属性窗格中的属性从纯色到裁剪图像 .

14. 双击 picc 文本区域 t0 的属性值 .这将打开图片选择对话框。再次选择主背景图片,然后点击确定 .这具有使文本区域背景透明的效果。

15. 更改 pco t0 的属性 成为您想要的任何字体颜色。我选择了自定义颜色:红色:125、绿色:231、蓝色:191。

16.工具 菜单选择字体生成器。

17. 在 Font Creator 对话框中选择高度为 96 并选择您想要使用的任何字体。我的是蒙特塞拉特。

18. 为字体命名并点击生成字体 .请务必将其保存在易于记忆的位置。我们稍后会再次需要它。

19. 关闭字体创建器对话框。系统会询问您是否要添加生成的字体。点击 .该字体现在被引用为字体索引 0。

20.t0 添加一些虚拟文本 通过更改 t0 的 txt 属性来查看它的外观 到 100%。您必须在属性值区域外单击才能更新编辑器区域。

21. 重新定位 t0 随心所欲。

22. 点击编译 在顶部工具栏中。

如果一切顺利,您现在将在 %AppData%\Nextion Editor\bianyi 中有一个可供使用的编译后的 TFT 文件 .

更新显示

有几种方法可以将我们精美的新设计融入显示器本身。如果您有 USB 转 TTL 转换器,您可以从 Nextion IDE 内直接连接到您的屏幕,并直接上传编译后的 TFT 文件。否则,您需要将编译后的 TFT 文件复制到 micro SD 卡,该卡可以直接插入屏幕背面的插槽中。 SD 卡必须是 FAT32 格式,并且上面必须有一个 TFT 文件,否则你会遇到错误。 Nextion Editor 将成功编译的文件放在 Windows 上的以下目录中。

C:\Users\[您的用户名]\AppData\Roaming\Nextion IDE\bianyi\[项目名称].tft  

注意,您可能必须启用查看隐藏文件,因为 AppData 文件夹被标记为隐藏。

使用 SD 卡上的 TFT 文件执行以下步骤。

  • 确保显示器已关闭
  • 将 SD 卡插入显示器
  • 打开显示器电源。屏幕将显示它正在更新。
  • 更新完成后关闭显示器
  • 取出 SD 卡。不要忘记这一步,因为屏幕不会在 SD 卡仍然插入的情况下运行您的视图。
  • 再次打开显示器电源。您现在应该会看到我们漂亮的 Fridgeye 应用程序。唯一缺少的是光传感器的值。

教 Arduino 如何说 Nextion

现在显示器上有我们的应用程序视图,我们需要在 Arduino 上编写一些代码,以便它可以与其交互并设置灯状态百分比。

安装 Nextion 库

1. 下载最新版本的 Nextion Arduino 库。

2. 复制整个 ITEADLIB_Arduino_Nextion 文件夹到您的 Arduino 库文件夹。在 Windows 上,它将位于:

C:\Users\[your_username]\Documents\Arduino\libraries 

在 Mac 上,它将位于:

~/Documents/Arduino/libraries 

3. 如果您使用的是 Arduino Mega,请跳至第 7 步。

4. 如果使用 Arduino Uno,请打开 NexConfig.h 文件位于 ITEADLIB_Arduino_Nextion 您刚刚复制到 Arduino 库文件夹中的文件夹。

5. 注释掉以下几行:

#define DEBUG_SERIAL_ENABLE #define dbSerial Serial  

6. 更改 #define 对于 nexSerial 是 Serial 而不是 Serial2。这允许我们将显示器直接连接到 UNO 上的 RX 和 TX 线。

#define nexSerial 序列号 

7. 如果 Arduino IDE 已经打开,请重新启动它。这将使库可通过菜单使用。

8.文件 菜单选择新建 以创建新草图。

9. 将默认的草图代码替换为以下内容:

#include "Nextion.h" long lastUpdate; int 传感器 =A0; NexText t0 =NexText(0, 2, "t0"); void checkSensor() { int val =map(analogRead(SENSOR), 0, 1024, 0, 100); String displayText =String(val) + "%"; t0.setText(displayText.c_str()); } void setup(void) { lastUpdate =millis(); pinMode(传感器,输入);下一个初始化(); } void loop(void) { nexLoop(NULL); if (millis() - lastUpdate> 100) { checkSensor(); lastUpdate =毫秒(); } }  

代码演练

如果您的 Arduino foo 允许您理解该草图,那么您可以完全跳过本节。你真棒。如果您不熟悉 Arduino 代码,请不要让这吓到您。让我们一块一块地看一下这张草图。

#include "Nextion.h"  

这表明我们打算使用 Nextion 库。我们不需要做任何其他事情,因为 Arduino IDE 知道在哪里可以找到它,因为我们将它放在库文件夹中。

long lastUpdate; 

这只是一个名为 lastUpdate 的变量 这将使我们能够控制稍后在草图中更新屏幕的频率。

int SENSOR =A0;  

在这里,我们只是为 Arduino 上的 A0 引脚提供了一个更具代码可读性的名称,我们可以稍后使用它来引用它。这在这个草图中并不重要,因为它是我们处理的唯一 I/O 引脚,但这是一个好习惯,因为当你有很多东西连接到你的 Arduino 时它会派上用场。

NexText t0 =NexText(0, 2, "t0");  

在这里,我们在草图中创建一个对象,该对象引用我们在 GUI 中创建的文本元素。请记住,我们将其命名为“t0 "。第一个参数是页码,在我们的例子中是 0,第二个参数是我们之前回忆的组件 ID 是 2。如果你忘记写下来,请返回 Nextion 编辑器,单击 t0 元素并查看属性窗格以查看 ID。

void checkSensor() { int val =map(analogRead(SENSOR), 0, 1024, 0, 100); String displayText =String(val) + "%"; t0.setText(displayText.c_str()); }  

checkSensor() 是我们应用程序的核心。在第一行,我们实际上执行了两个操作。首先我们调用analogRead(SENSOR) 它为我们提供了一个整数值,表示引脚 A0 上的电压(请记住我们将其称为 SENSOR)。在 Arduino UNO 上,analogRead 调用将返回一个从 0 到 1024 的值,但我们希望将其映射到 0% 到 100% 的范围内。没问题。 Arduino IDE 为我们提供了一个内置的 map() 函数允许我们指定一个值,后跟 [from range] 和 [to range]。然后我们将该 int 值更改为 String 类型并添加 % 符号。最后一步是调用 setText() 在我们的 NexText t0 我们之前创建的对象。

void setup(void) { lastUpdate =millis(); pinMode(传感器,输入);下一个初始化(); }  

这是在任何其他草图代码之前执行的标准 Arduino 设置函数。我们初始化 lastUpdate 现在通过调用 millis() 函数,将我们的 A0 引脚设置为输入并初始化 Nextion 库。

void loop(void) { nexLoop(NULL); if (millis() - lastUpdate> 100) { checkSensor(); lastUpdate =毫秒(); } }  

在 Arduino 编程中 loop() 函数会持续执行,直到 Arduino 断电并重新打开或以其他方式重置。我们必须通过调用 nexLoop() 不断地为 Nextion 库提供服务 . NULL 参数仅表示在我们的示例中,我们没有监听来自屏幕的任何触摸事件。然后我们有一个非常简单的检查,看看自上次传感器读数以来是否已经超过 100 毫秒。如果是这样,我们调用我们的 checkSensor() 方法并设置 lastUpdate 变量到现在,再次调用 millis() .

而已。从 Arduino 与我们的 Nextion 显示器交互只需不到 30 行代码。

连接显示器

在我们实际将显示器连接到我们的 Arduino 之前,让我们继续并通过单击顶部栏中的小右箭头或使用快捷键 Ctrl+U 从 IDE 将我们的草图代码推送到它。

在上传过程中无法连接屏幕,因为在 Arduino UNO 上,IDE 需要显示器使用的相同串行线来推送新草图。如果您使用的是 Arduino Mega,则无需担心。

现在将代码推送到 Arduino,让我们连接显示器。不要忘记先断开 Arduino 的电源。有关连接信息,请参阅 Fritzing 图。

当您为 Arduino 供电时,您的 Fridgeye 应用程序应该会很高兴地向您显示当前的光传感器读数。

总结

哇!我们做到了。所以,此时你可能会带着一丝愤怒的语气问道:“这有什么好处?我必须把整个东西都放在冰箱里,这样我就看不到屏幕了。”你是一个非常聪明的学生,但我从来没有说过这些有用,只是构建和学习很有趣。

如果它让您感觉更好,尽管我挑战您将这个项目更进一步,并弄清楚如何将传感器放入冰箱并将显示器放在其他地方。有很多方法可以实现这个目标。 WiFi、蓝牙、Zigbee 和通用无线电发射器只是想到的几个。很多选择和很多东西要学习。如果您确实尝试过,请通过 Twitter @KevinSidwar 与我联系或给我发送电子邮件(Kevin at sidwar dot com)。我很想听听您在物联网方面的冒险经历。直到下一次,快乐黑客。

如果您喜欢我的帖子并想了解更多有关物联网入门的信息,那么您可能对感兴趣 我目前正在围绕 Fridgeye 概念创建的课程 。如果没有,我真的很感谢你一直读到最后。希望你有一个很棒的一天。你应得的。

代码

用于 Fridgeye 应用程序的 Arduino 草图
这是在 Arduino 上运行的代码,因此它可以与 Nextion 显示器通信并显示当前的光传感器阅读器。 /代码>

示意图

这是如何将Arduino、光敏电阻、电阻和屏幕连接在一起以创建该项目的接线图。

制造工艺

  1. Squid Games Doll 使用 Arduino UNO
  2. 用 Arduino 捕捉水滴
  3. Arduino Pong Game - OLED 显示器
  4. Arduino 温度。使用 3.2 显示的监视器和实时时钟
  5. 玩 Nextion Display
  6. Tech-TicTacToe
  7. DIY 电压表与 Arduino 和诺基亚 5110 显示器
  8. BME280 Nextion Display 上的温度、湿度和压力
  9. 带有 OK Google 的蓝牙语音控制设备
  10. 使用 MAX30100 可穿戴脉搏传感器和 Arduino
  11. 使用 YL-39 + YL-69 土壤湿度传感器和 Arduino
  12. 如何用 Arduino 制作音乐