轻松一下--实现一个可以编程点阵屏幕

原文链接:https://juejin.im/post/5d0c3c2ce51d455ca0436267

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

或者是这样的小玩意:

但是这种成品小饰件可以去网上搜索一下,价格都不是很便宜。前一阵在网上看到 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.com/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.com/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

展开阅读全文
博主设置当前文章不允许评论。

■■■■■■■■■■■■轻松一下■■■■■■■■■■■■■■

10-28

=====================rn此文转贴自:bbs.inhe.netrn原贴用户ID:iam老黑rn原文地址:http://bbs.inhe.net/dispbbs.asp?boardid=2&id=198481&star=1#3938397 rnrnrn测试环境:2000\xp\2003rn大家都知道在Windows中“\”符号是路径的分隔符号,比如“C:\Windows\”的意思就是C分区中的Windows文件夹,“C:\Windows\System.exe”的意思就是C分区中的Windows文件夹中的System.exe文件,好继续我们假设一下:rnrn如果文件名中有“\”符号会怎么样呢?假如“S\”是一个文件夹的名字,这个文件夹位于:“F:\”,他的路径就是“F:\S\”,当我们试图访问的时候Windows会错误的认为我们要打开的文件是C分区的S文件夹,这样Windows就无法打开并且会返回一个错误,因为以上的路径并不存在。rnrn也许你现在正在尝试创建“S\”文件,但是Windows会提示你:“\”符号是不能作为文件、文件夹的名字的。看来Windows还是早已想到这一点了的。OK我们继续进行,就不信不能建立包含“\”符号的文件。rnrn现在打开你的电脑,我们要做一些很有趣的尝试。进入Windows后 点击:开始>运行 然后输入“cmd”并会车(如果是Win98请输入“COMMAND”),这时你会看到Windows的命令控制台,我们就是要利用它完成我们剩下的测试,以下包含了很多命令其中中的字符是我的注释:rn----------------------------------------------rnMicrosoft Windows XP [版本 5.1.2600]rn(C) 版权所有 1985-2001 Microsoft Corp.rnrnF:\Test>mkdir s\ 我们的第一次尝试,结果Windows只创建了S文件夹"\"被忽略掉了rnrnF:\Test>mkdir s\s1\ 还是失败,Windows先创建了S文件夹,然后在S内创建s1文件夹rnrnF:\Test>mkdir s.\ "s.\"被解析成S".\"又被忽略了rn子目录或文件 s.\ 已经存在。 rnrnF:\Test>mkdir s..\ 终于成功了,现在你可以在资源管理器看到"s."但却无法打开/删除rnrnF:\Test>mkdir s...\ 又成功了,在资源浏览器能看到"s.."可以打开但是无法删除rnrn----------------------------------------------rnrn为什么会这样?我们先说你看到的这个“S.”文件夹,他即不能打开也不能删除,不能打开是因为他的实际路径是“F:\Test\s..\”(我们自己创建的所以可以确定他的实际路径)但是在Windows资源管理器中名字变成了“S.”也就是说当你试图打开它的时候Windows实际上尝试打开“F:\Test\s.\”当然是不能打开的,文件并不存在,所以Windows会报错。不能删除也是因为这个,Windows把一个实际存在的文件路径错误的解析为一个不存在的路径,并进行操作当然是无法完成的。rnrn该说“S..”这个文件了,这个文件可以打开,但是却无法删除。等等……打开?你以为Windows真的是打开了我们创建的“s...\”文件了吗?我们做下面的试验你就明白了。还是老规矩是我的注释方便大家理解:rn----------------------------------------------rnMicrosoft Windows XP [版本 5.1.2600]rn(C) 版权所有 1985-2001 Microsoft Corp.rnrnF:\Test>echo 1 > Txt1.txt 创建“F:\Test\Txt1.txt”文件rnrnF:\Test>copy Txt1.txt s..\ 复制刚刚创建的文件到“s..\”,就是资源管理器的“S.”rn已复制 1 个文件。rnrnF:\Test>echo 2 > Txt2.txt 创建“F:\Test\Txt2.txt”文件rnrnF:\Test>copy Txt2.txt s..\ 复制刚刚创建的文件到“s...\”,资源管理器的“S..”rn已复制 1 个文件。rnrnF:\Test>rnrn----------------------------------------------rnrn现在回到你的资源管理器打开“S..”文件夹,你看到了什么?“Txt1.txt”文件怎么会在这里?我们刚刚的确复制到了“S.”呀?难道我们打开“S..”文件夹实际上就是打开了“S.”?不错事实就是这样。其实如果你再创建一个“S”文件夹的话“S.”就能打开了,但是实际上打开的是“S”。rnrn“我该怎么删除它呢?”,删除它也不算很难,但是常规的方法是绝对删不掉的。有两种方法可供选择:1;进入DOS删除(不推荐)。2;还是进入命令提示符然后输入“rmdir 目录名”,目录名就是你创建的时候的名字,如果忘记了可以先在资源管理器查看,然后加上“.\”。如果提示“文件夹不是空的”应该加上“/s”参数。删除实例:rn----------------------------------------------rnMicrosoft Windows XP [版本 5.1.2600]rn(C) 版权所有 1985-2001 Microsoft Corp.rnrnF:\Test>dirrn驱动器 F 中的卷是 BGTINGrn卷的序列号是 2C8E-FE1CrnrnF:\Test 的目录rnrn2003-09-11 17:50 <DIR> .rn2003-09-11 17:50 <DIR> ..rn2003-09-11 18:35 <DIR> s.rn2003-09-11 18:37 <DIR> s..rn1 个文件 9 字节rn5 个目录 3,390,029,824 可用字节rnrnF:\Test>rmdir s..目录不是空的。rnrnF:\Test>rmdir s..\ /srns..\, 是否确认(Y/N)? yrnrnF:\Test>rmdir s...\ /srns...\, 是否确认(Y/N)? yrn----------------------------------------------rnrnrn利用这个漏洞我们可以做很多事情,比如想访问“S”文件夹,但是没有权限的时候我们可以创建“S..\”来指向“S”这样就可以跨权限浏览。而且新一代的木马程序很可能利用此漏洞把自身藏在某个“X..\”目录下这样用户根本不可能发现他,就算专业级的杀毒软件也只会去杀“X”而跳过“X..\”。如果恶意程序在机的计算机上创建很多“..\”文件夹的话,哈哈~那个时候Fotmat也许是最好的选择了。现在微软官方好像还没有发布任何防范措施。rnrnrn怎么样是不是有点晕了?不要怕“晕”是很正常的,我已经晕了很多次了。 :)rnrnrn=========好了,说了这么多可能有点乱了。下面我总结一下:=========rnrn1;在Windows中创建“X..\”文件夹后该文件夹将无法通过常规方法删除,但是却可以Copy文件进去,在资源管理器显示为“X.”,错误的指向“X”文件夹。(嘿嘿,怎么有点像快捷方式?)rnrn2;创建“X..\”的方法是在命令行输入“mkdir X..\”。rnrn3;删除它的方法是在命令行输入“rmdir 目录名”,目录名就是你创建的时候的名字,如果忘记了可以先在资源管理器查看,然后加上“.\”。如果提示“文件夹不是空的”应该加上“/s”参数。rnrn3;暂无防范方法。rnrnrn 论坛

没有更多推荐了,返回首页