admin 管理员组

文章数量: 887021

想必大家都见过下面的这类电子显示屏:

或者是这样的小玩意:

但是这种成品小饰件可以去网上搜索一下,价格都不是很便宜。前一阵在网上看到 AWTRIX 这个项目,可以自己去实现一个相应的功能组件,感觉还是很有意思的。加上原材料的费用算下来,相比还是很便宜,并且可以根据自己的需求去 DIY 这么一个东西,是不是很有成就感?于是就这么入坑了。

那么接下来,我们来一步一步去看看实现的过程~ Let's go!

硬件材料准备:

最基本的硬件有以下三个(也是仅仅是实现基本功能)

  • LED 灯条控制器 (WS2812B)点阵屏幕 价格 ¥115 我这里买的是 8 * 32 这种长屏幕,具体可以根据个人需求去选够

  • NodeMcu LuaWIFI 串口模块物联网开发板 价格 ¥23.8

  • 公对母 40p 彩色排线 价格 ¥3.38

有这三个基础硬件,再加上一台电脑,其实可以实现相应的功能了,当然这里不包括美观的外形。外型完全可以根据你自己的喜好去设计,这也是一个乐趣之一嘛。

这里我先就我实现的最基础功能描述一下,所以拥有这些完全是足够的。

让我们来看一下这些控件的连接图例

如图中有一个电容,就是那个 1000uF,10v 小黑控件,这个在我们上面所提到的硬件中没有,这个电容其实可以不用,影响不大,但是为了安全可以加上,防止开发板被烧坏。

因为目前开发板中没有任何程序,所以点阵屏幕显示其中默认出场内容。

下面我们开始进入程序部分~

AWTRIX

官网地址:blueforcer.de/awtrix-2-0/

官网中包含了整个功能模块实现流程,可以说,只要按照文档一步一步做,就可以实现这样的一个小玩应。

至于硬件部分我就不加以赘述了,直接从软件部分开始介绍~ DIY 过程中,还可以自己加入手势识别控制器、光敏电阻等的,来实现更多更有趣的功能。有兴趣的同学可以自己看一下其硬件部分的介绍,还是有很多有趣的地方的。因为上面我只是介绍了基本的几个控件。

从官网中可以看出,最主要的就是两部分:AWTRIX Controller 和 AWTRIX Server 。下面我们追个进行看一下。

AWTRIX Controller

IDE

首先是 IDE 的选择,这里使用的 VS code,和其中的一个插件--Platform.IO。其实 Platform.IO 是必要的也就是用于将我们编写好的 code 刷到开发板上。底层的开发 IDE 其实是什么并不是很重要。

AWTRIX2.0-Controller

这个是官方提供的一个基础例子,包含其默认程序,也就是一个显示时间的程序。可以进到这个地址 github/awtrix/AWTR… 中将这个 zip 包下载下来,并用 VS code 将其打开。

打开后,我们可以工程中找到下面两个文件

  • awtrix-conf.h

    • 这个文件就是 awtrix 的配置文件。打开文件后,我们能很清楚看到所需要修改的就是三个配置:你所要连接的 WIFI 名称, WIFI 密码,和 awtrix_server 地址。(ps:最后一项现在可以先忽略,下面将 server 的时候会介绍到)
  • AWTRIXController.cpp

    • 这个文件可以理解为你实际开发相应程序的文件,在这个文件中处理,你想要你的显示屏幕展示什么,实现什么功能,等等。

在这里,Controller 的功能就是实现与 server 相连接,从 server 获取数据,然后进行展示。至于具体展示什么,这个是由 server 返回的数据来进行决定的。

固件刷入程序

这部分比较简单,当你上面两个文件都处理完毕后,只需要点击 VS code 中的的查找插件,如下图所示

然后搜索 PlatformIO ,安装相应插件。安装成功后,此时将开发板连接到电脑上,在 PlatformIO 的 device 选项中就能够看到这个设备,如图所示:

最后点击下图中所圈箭头就可以将我们的代码刷入到固件之中

当在控制台出现如下图所的情况时,就说明已经将 code 成功刷了对应固件中

到这里为止,固件部分已经完成了。当没有连接 server 的时候,屏幕点阵如何显示,显示什么,或者在数据连接过程中显示什么,都可以自己去修改,在 AWTRIXController.cpp 中对应位置进行修改即可。

AWTRIX Server

运行 Server

关于 server 的安装形式,官网提供了三种。Quickstart、Installing on a Linux machine with Autostart、Run AWTRIX on android device。 这里我只以第一种 QuickStart 来处理,其他两种,有兴趣的同学可以尝试一下。我尝试了一下,都是可以的。

快速开始,可以到官网上把 AWTRIX Java application 这个 jar 包下载下来,然后调用命令行。

  • Linux & MacOS 环境下运行:sudo java -jar awtrix.jar
  • 在 Windows 环境下运行: java -jar awtrix.jar

当运行过后,控制台会出现如下图所示。还记得之前所提到的 server 地址嘛?没错,就是下图红色箭头处的地址填入 awtrix-conf.h 中。

当 server 运行起来之后,其实我们的基础功能就已经实现了。将 server 地址用网页打开,你可以看到提供的一个 web 页面,从上面可以看到当前 运行的是哪个 APP ,也可以去下载它的 AppStore 下载对应的 App ,修改相应配置,然后展示在你的屏幕点阵上。当然,你可以 DIY 程序去展示你想要展示的。

DIY API

通过官方文档中,我们可以找到,其提供了许多 API 来供开发者去调用。 如

  • Power:Turns AWTRIX On (true) or Off (false)
  • switchTo:Switch to the defined App
  • showAnimation:Shows a random animation, downloaded from AWTRIX cloud

等等。

应用这些 API ,可以让我们可以更加个性化的去操纵对应 App ,使其娱乐性质更高。

但如果只是以目前的状况来说,我们每次想要改变一个状态或者属性,都需要去我们刚刚简历的 server 端去调用相应的 API,这一点上不免有一些麻烦。那我们有什么方式可以更加方便的处理一下呢?让用户体验更好一下呢?下面罗列了几个方法:

  • 不用说了,就是最笨的方法,在控制台上调用相应 API 去修改值。这种方法原始,高效,就是比较麻烦。

  • 使用 Telegram 机器人。其实就相当于你去告诉机器人你想干什么,然后机器人会根据预先设置好的指令,去只调用相应的 API 然后改变对应参数。虽然在用户体验上得到了提升,但是这种方法有其自身的弊端,主要有以下两点: 在国内不是很普及,同时想用的话,还是比较麻烦的 还需要跑一个机器人的服务端,来处理自己所发送消息,执行相应指令。

  • 这个是针对 iPhone 手机用户的,可以使用其“快捷指令”这个功能去调用 API,比较方便并且响应速度也比较快。

这里我以第三种方式来举个例子:

  • 在 iPhone 手机上找到‘快捷指令“,如果没有,可以在 App Store 去搜索下载。然后打开”快捷指令“

  • 点击创建快捷指令,在搜索中输入 “URL”,选中

  • 在 URL 那一栏中填入 “yourServerAddress/api/v3/basics”

  • 再次搜索 “URL”,并选中获取 URL 内容

  • 点开“高级”,点击方法,选择”POST“,头部不需要动,请求题选择“JSON”,点击添加新字段,选择文本。以打开和关闭为例,在键值处填入“power”,文本着填入“false”

  • 点击完成

这样在手机中的快捷指令库中就会多了一条未命名快捷指令。然后设置其名称为关灯。同理新建开灯指令,只要将 value 值改成 true 即可。不出意外的话,当你运行“关灯”指令的时候,屏幕点阵就会关闭;运行“开灯”指令的时候,屏幕点阵就会再次打开。

同时,快捷指令还支持 Siri 唤醒执行,更加方便了一下,感觉逼格又高了一些。

DIY APP

既然是 DIY,当然除了原有 App Store 中所提供的功能以外,我们可以按照自己的想法去是想一个应用,然后发布到上面,这样我们就可以尽情的 DIY 啦。

看到 AWTRIX 的官网上面有 App Development 并且在其子项目中还有 Create your own App 这一选项,本以为可以很简单的 DIY 对应的 App。但是点进去后,发现这个文档并没有写完,后面都是未完待续...

文档中提供了开发编译器 B4J,和一些基本的配置设置。由于没有接触过,所以还是一脸懵逼。并且,编写这个代码需要在 Windows 环境下,用 B4X Language 所开发。所以需要一个 Windows 本,或者安装虚拟机。这里就用一个别人的写好的例子去解读一下:

连接地址:github/leeeboo/awt…

这个代码主要实现的是从哔哩哔哩里面去获取当前登陆用户的粉丝数。 我们可以看一下文档中的下面配置信息与 code 中的配置信息对比一下

AppName
plugin name (must be unique)
AppVersion
version of the App
tickInterval
Tickinterval in ms (should be 65 by default)
needDownloads
How many downloadhandlers should be generated
updateInterval
force update after X seconds. 0 for systeminterval
lockApp
If set to true AWTRIX will wait for the " finish" command before switch wo the next app.
iconID
default Icon from AWTRIXER.
description
The description of you App. Use HTML to style your text. This description will be shown in the Appstore and in MyApps
setupInfos
Use HTML to describe the Settings wich is necessary for you App.
appSettings
Here you need to define a map containing all Settings can be changed by the user. You can set a default value or Null. If you set Null the User has to enter a Value before AWTRIX will show this App.
You can get each setting from this map with appSettings.Get("Text")
复制代码

主要 tickInterval 和 needDownloads 这两个属性的设置,前者为执行时间间隔,后者为判断是否需要去从网上获取数据。主要功能函数在 Run 中,也即是整个功能的核心点。

到此,整个基本流程算是走了一遍,有兴趣的同学可以自己尝试一下,动手与编程相互结合还是很有有意思的,尤其当你做出来自己想要样子的时候,会有一种幸福感~

看到这个的时候,上网上搜了搜,有一个做的很全的视频讲解 @黑影儿TV ,很多部分也是他上面学习了解的,如果有什么不懂,可以参考上面的视频,上面一步一步很详细的讲解了该如何去做。

在此,特别的感谢 @黑影儿TV ,上面有许多有意思的东西值得去尝试尝试。

希望大家都能有自己感兴趣,想要做的~

兴趣给予我们更大的动力~

别犹豫,有想要做的就去放手去做~

加油,哈哈~

转载于:https://juejin.im/post/5d0c3c2ce51d455ca0436267

本文标签: 点阵 屏幕 轻松