树莓派 + 墨水屏 DIY METAR 显示器


​MAKER:markyharris/译:趣无尽(转载请注明出处)

这款复古的 METAR(航空例行天气报告)三色墨水屏显示器,不仅怀旧感十足,还可以同时显示十多种信息。尽管这类小装备是飞行员们才需要用到的,但这也并不妨碍飞行爱好者们 DIY 一件摆放在自己的书桌上。



项目特性
1、墨水屏有三种显示方式:间歇性的循环更新显示、随机显示和自动间隔显示。以天气变化为例,把天气变化设置为 VFR,每小时更新一次即可。因为天气变化,特别恶劣天气的变化,它会非常地快,更新的太频繁就没有意义。

2、脚本用从命令行运行,用不用 cmd line 参数都可以。同时,还可以通过网页界面来管理显示。在网络界面可以清除显示,重新启动或者关闭主机,还可以随时调整布局和更新间隔。我建议用这种方式来管理显示屏。

3、采用 Python 3 编程。由 Waveshare 提供的库来驱动显示器,如 PIL、Numpy 和 Flask。

4、墨水屏显示会有些慢,特别这个三色屏幕。

组件清单

树莓派 Zero W x 1(其他树莓派主板亦可)
MicroSD 卡 x 1
Waveshare 7×5 三色电子墨水屏 x 1
外框 x 1

METAR 简介

METARhttps://en.wikipedia.org/wiki/METAR,它可以为机场环境提供动态的报告,也可以为飞行员提供有关机场天气和其他状况信息的平台。它为进出机场的飞行员传递重要信息,以便飞行员做出正确的选择。

对于飞行员来说,机场的飞行类别是非常的重要。选择有:VFR、MVFR、IFR 和 LIFR。这些类别由云层或能见度决定的。

VFR:目视飞行规则,云层高度超过 3,000 英尺,或能见度超过 5 英里。
MVFR:边际目视飞行规则,云层高度 1,000 至 3,000 英尺 AGL,或 3 到 5 英里的能见度。
IFR:仪表飞行规则,云层高度 500 至低于 1,000 英尺 AGL,或 1 英里至低于 3 英里的能见度。
LIFR:低仪表飞行规则,云层高度 500 英尺 AGL,或小于 1 英里的能见度。

AGL表示地面以上。

通常,这些类别都会有特定的颜色,如 VFR 为绿色。由于这款显示屏可以显示的颜色有限,如图所示,我用以下颜色来表示。

VFR:白底黑色字体。
MVFR:黑底白色字体。
IFR:白底红色字体。
LIFR:红底白色字体。

METAR 实际上是一串需要解码的神秘字符和数字。下面我们将原始的 METAR 文本进行解码。
METAR 文本格式为:KFPK(Charotte/Beach Fld,MI,US)
例如:KFPK 271935Z AUTO 32012G17KT 10SM BKN044 M02/M13 A3005 RMK AO2 T10211133,解码后信息如下。

M02-温度:-2.1°C (28°F)
M13-露点:-13.3°C (8°F) [RH=42%]
A3005-压力(高度计):30.05 英寸 Hg(1017.7 mb)
32012G17KT-风速:从 NW(320 度)14 MPH(12 节)阵风至 20 MPH(17 节)
10SM-能见度:10 或更多英里(16+ 公里)
BKN044-云层高度:4400 英尺 AGL 的断层云
AO2-QC 标志:无需人类增强的自动观察
RMK-备注:备注附加信息

更多关于 METAR 的解读链接,你可以参考https://www.thinkaviation.net/understanding-metars-part-1/

墨水屏文件可在本项目文件库中下载:
https://make.quwj.com/project/429

安装硬件

将 7×5 三色电子墨水屏 HAT 与树莓派 Zero W 相连。树莓派 Zero W 的启动和更新时间稍慢,但方便安装在外框内。

有两种方法可以将显示屏连接到主板。

1、如图所示,将 HAT 直接连接到树莓派的引脚上。

2、如图所示,使用连接器将 HAT 连接到树莓派的引脚上。这种方式不占主板引脚,可为其他功能留用,安装时请确保连接牢固。

HAT 上有两个可拨动开关,都位于右边并且方向朝上。“Display Config” 开关在“B”位置,“Interface Config” 开关在 “0” 位置。

可选添加一个开机开关。将主板通电,可以通过引脚 5 连接到 6 来重新启动它(GPIO 3 接地),引脚接口可参考https://pinout.xyz/

如果你直接将 HAT 连接到引脚,则需要将一根电线焊接到主板下方的引脚 5 和 6 上。连接时请注意不要使另一个引脚上的电线短路。开机开关使用起来很方便,我将开关安装在外壳的后盖处。

如果这个开关对你来说太麻烦,你可以如上图一样在 USB 插头上添加一个开关。

将显示器安装在外框中,并使主板保持正常运转。

安装软件

有两种安装软件的方式。

1、第一种方式
在 Dropbox https://www.dropbox.com/s/u8zt8nw22mxvta8/7in5e-inkMetar.zip?dl=0 上下载软件,并将其复制到 SD 卡,无需安装。请将最新版本存储在 Github 上,可以在这里复制所需安装的软件。软件不能一直确保正常使用,但可以下载后解压缩保存文件,请按照链接中的方法https://www.how2shout.com/how-to/balenaetcher-how-to-create-a-bootable-usb-flash-drive-using-etcher.html 将软件复制到 SF 卡中。

Berrylan https://berrylan.org/ 请将 Berrylan 应用程序下载到手机,以便你设置 WiFi 网络。访问 Apple Store 或 Android Play 商店。

应用程序的主机名和密码都已修改为 “epaper”。

温馨提示:如果在安装镜像后你想从 github.com 更新到最新版本,请输入以下内容:

cd metar
sudo git reset --hard
sudo git pull

2、第二种方式
请在这个链接中下载软件 https://github.com/markyharris/metar, README.md 文件中有详细的安装说明,请按照以下说明正确设置镜像。

下载所需的应用程序

Balena Etcher https://www.balena.io/etcher/
Berrylan Unix Bullseye 镜像 https://berrylan.org/
从 Apple App Store 或 Android Play Store 下载 Berrylan App 到你的手机。

注意:Berrylan 镜像要求不严。它提供了一种简单的方法来设置 WiFi 并可在无桌面树莓派的系统上启用 SSH。当然也可以使用临时的键盘和显示器连接到树莓派并将其启动。但是,通过 Berrylan 手机应用程序更改 WiFi 是最方便。如果不需要 Berrylan,请访问;https://www.raspberrypi.com/software/operating-systems/ 下载最新镜像。 如果 Berrylan 不能使用,https://desertbot.io/blog/headless-raspberry-pi-4-ssh-wifi-setup 请参考无桌面系统设置 WiFi 的步骤。

将镜像写入 SD 卡

使用 Balena Etcher,将镜像写入 Micro SD 卡。访问此处https://www.how2shout.com/how-to/balenaetcher-how-to-create-a-bootable-usb-flash-drive-using-etcher.html 了解和使用 Belena Etcher 的信息。

将 SD 卡放入树莓派并启动。等待 1-2 分钟,观察 SD 卡启动树莓派后 LED 的反馈。当它启动后会停止闪烁(大部分情况下)。

使用 BERRYLAN 设置 WIFI

在手机上打开 Berrylan 应用程序,然后选择 “BT WLAN 设置” 或 “BT WLAN” 或 “raspberrypi”。最常见的是 “BT WLAN”。如果有多个选择,请选择第一个并完成以下步骤。如果连接不到树莓派,请重启再试。

选择使用 WiFi SSID
输入 WiFi 密码,记下 Berrylan 显示的 IP 地址,你稍后会使用到。

使用 SSH 客户端登录

打开 SSH 客户端并输入 “pi@IP address” 然后登录,例如 “pi@192.163.86.71” 。

使用用户名 “pi” 和密码 “raspberry” 登录。如果使用的是普通映像,则必须先启用 SSH,然后客户端才能工作。 Berrylan 自动启用 SSH。如果不行,请将显示器和键盘连接到树莓派并使用 “raspi-config” 来执行。
有关 “raspi-config” 的信息,可点击查阅 ,https://www.raspberrypi.com/documentation/computers/configuration.html

以下列举一些 SSH 客户端:

KiTTY
PuTTY and other PuTTY versions
MobaXterm
WinSCP
SmarTTY
Bitvise SSH Client
Terminal (for Mac)
Chrome SSH extension

设置 SPI 接口

与显示器连接,请执行以下命令。请在 “pi@raspberrypi:~ $” 行输入以下内容

 sudo raspi-config
 3 - Interface Options
 I4 SPI Enable this? Yes

注意:你可以根据需要更改主机名和密码(可选)。

点击 “Yes”,退出“raspi-config”,然后重启树莓派。

在树莓派上设置 GitHub

树莓派启动后,通过 SSH 客户端登录后,输入:

 sudo apt update
 sudo apt-get install git
 git --version 

如果你收到一个 git 版本号码,就可以开始了。

从 GITHUB 复制文件:

进入后输入

 sudo git clone https://github.com/markyharris/metar.git
 cd metar
 ls -la 

这时会列出从 github 复制到目录 “metar” 的文件,验证是否正常工作。

依赖项

该软件大多数依赖项都已随图像一起安装。但少许还需要手动安装。如 PIL、Numpy 和 Flask。

安装软件所需的必要依赖项

 sudo apt-get install python3-setuptools
 sudo apt install python3-pil
 sudo apt-get install python3-numpy
 sudo pip3 install Flask

字体

代码是使用 “NotoMono-Regular.ttf” 和 “LiberationMono-Bold.ttf” 编写,这需要将它们安装到“/usr/share/fonts/truetype/” 的目录中。请在 cmd 行输入以下内容:

 cd /usr/share/fonts/truetype/
 sudo mkdir noto
 sudo mkdir liberation2
 cd noto
 sudo wget https://github.com/markyharris/metar/raw/f1858d85ad3b79864fb6e082cd083346828661ef/fonts/noto/NotoMono-Regular.ttf
 cd ..
 cd liberation2
 sudo wget https://github.com/markyharris/metar/raw/f1858d85ad3b79864fb6e082cd083346828661ef/fonts/liberation2/LiberationMono-Bold.ttf

测试运行 METAR 显示

现在是关键时刻,从 cmd 行手动运行主脚本。
输入

 cd ~
 cd metar
 sudo python3 metar_main.py

一切正常,cmd 行将显示调试数据,包括原始元字符串。请观察显示屏,看它是否在更新时开始闪烁,完全刷新可能需要几秒钟,所以请耐心等待。如果出现 “metar_settings.py” 中的默认机场,那么你就成功了。

现在根据需要编辑 “metar_settings.py” 文件。如果在 cmd 行上没有传递其他参数,这些值是脚本回退的默认值。下面显示了 “metar_settings.py” 文件的一部分。可以进行机场更改,例如首选机场 ID。

# Default User Settings
  airport = "KFLG" # enter default airport identifier to display. Be sure to use quotes
  interval = 1800  # enter default time in seconds between METAR updates - 3600 = 1 hour, no quotes
  use_disp_format = 7 # Choose which display layout to use. -1 = Random layout, -2 = Cycle layouts
  use_remarks = 1  # 0 = display airport information, 1 = display metar remarks info 
  random_airports = ["KEYW","KDFW","KSEA","KORD", "KLAS","KCMR","KABQ","KDEN", \
                   "KPHX","KNBC","KBKV","KTTS"]

注意:“random_airports” 列表可显示多个机场,它包含 12 个机场。如果列表中的机场超过 12 个,脚本将从列表中随机选择 12 个,默认的机场将在显示屏中显示为本国机场。

测试 CMD 线控制

该脚本最多写入四行 cmd 行参数

第一个参数-机场标识符-必须为 4 个字符的 ICAO 格式。
第二个参数-布局编号-将接受 -2、-1 和 0-7。
第三个参数-以秒为单位的更新间隔-60=1 分钟,3600=1 小时。
第四个参数-使用备注-1=显示元备注关键信息,0=显示机场信息。

它们将按顺序排列,但并非全部显示的。例如,当只能输入机场 ID 时,默认设置将显示最后三个参数。

例如输入

sudo python3 metar_main.py kflg 7 60 0

从这例子中可以看到,显示屏将使用第七种布局显示弗拉格斯塔夫机场 60 秒内的信息,然后更新机场信息。

检测工作是否正常,可以使用“webapp.py”和“metar.html”下面的脚本就可以了。

测试 WEBAPP.PY

在“metar”目录中输入

sudo python3 webapp.py

它将运行一个 Flask 模块,该模块将使用上次保存的配置运行“metar_main.py”。 Flask 设置了一个网络服务器,因此我们还可以运行 html 文件来控制来自同一 WiFi 网络上的任何计算机、平板电脑或手机的显示。

你的显示器应该可以显示信息。

请注意,当 webapp.py 启动时,信息将显示到 SSH 客户端中。你需要它提供的 URL。例如(你的可能不一样), 在 [http://192.168.86.71:5000/](http://192.168.86.71:5000/) 上运行(按 CTRL+C 退出)。

测试 METAR.HTML

使用上一步中的 URL,打开网络浏览器并输入 URL。如果一切顺利,会看到一个允许控制显示的网页。

注意:运行的 html 文件,必须使用最初设置 WiFi 时提供的 URL,并连接到同一 WiFi 网络的计算机、平板电脑或手机。 URL 的 IP 地址后附加 ‘:5000’,即。http://192.168.86.71:5000/ (你的可能不一样)。

为启动设置 RC.LOCAL(可选)

如果你希望显示器在关机或意外断电后自动重新启动,可以参考这个步骤。必须运行 webapp.py 才能使网络界面正常工作。它在自动启动时很有帮助。

进入

 cd ~
 cd /etc
 sudo nano rc.local

在“Exit”前添加。

sudo python3 /home/pi/metar/webapp.py &

保存编辑好的文件并重启

 ctrl-x
 y
 sudo reboot now

注意:如果你不需要“webapp.py”自动启动,你只需再次打开“rc.local”并注释掉添加的行,然后重新保存并重新启动。这将要求你在 cmd 行中手动运行“webapp.py”以使网络界面正常运行。

设置 POWEROFF.SERVICE 关机(可选)

当设备关闭时,它可以让墨水屏显示空白。停电也不会黑屏,但是如果你在“rc.local”做以下设置,当电源恢复时,它将重置显示。

将“poweroff.service”复制到“/lib/systemd/system”

 cd ~
 cd /lib/systemd/system 
 sudo wget https://raw.githubusercontent.com/markyharris/metar/main/poweroff.service

通过输入启用服务

sudo systemctl enable poweroff.service

将 python 脚本“metar_poweroff.py”复制到“/opt/metar_poweroff”

 cd ~  
 cd /opt
 sudo mkdir metar_poweroff
 cd metar_poweroff
 sudo wget https://raw.githubusercontent.com/markyharris/metar/main/metar_poweroff.py

其他项

到目前为止,软件的安装已完成,建议你将 SD 卡备份镜像。

步骤如下:
1、点击链接下载 Win32DiskImager https://sourceforge.net/projects/win32diskimager/
2、将 SD 卡插入计算机的读卡器。
3、单击文件夹图标并找到一个目录来存储镜像,命名为 metar_display.img。
4、单击“只读分配的分区”。
5、单击“读取”然后等待完成。
6、完成后安全弹出 SD 卡并将其重新安装到树莓派。

故障排除

在完成这个显示屏时,我遇到许多故障问题,在这里给大家分享出来,以便帮助可能遇到同样问题的人。

无显示的情况

首先点击了解 HAT 的功能 https://www.waveshare.com/wiki/7.5inch_e-Paper_HAT_(B),然后运行提供的测试脚本。

请单击顶部的“资源”选项卡,然后单击“演示代码”的 github 链接。https://github.com/waveshare/e-Paper/tree/master/RaspberryPi_JetsonNano/python/examples

选择正确的测试版本,我使用的是 “epd_7in5b_V2_test.py” https://github.com/waveshare/e-Paper/blob/master/RaspberryPi_JetsonNano/python/examples/epd_7in5b_V2_test.py

当树莓派的电源中断时,可能会发生这种情况,请仔细检查树莓派板上的 LED 并确保其亮起。

也有可能是 SD 卡损坏,需要重新安装镜像,这时就可以启用备份的资料。

待命

当树莓派尝试从 weather.org 更新数据时,会时常发生错误。当网站未返回机场数据,或输入的机场后当前未提供 METAR 数据,或机场 ID 未被识别时,将显示错误。一分钟后它会再次尝试获取数据。在大多数情况下,它将成功接收数据,然后正确显示。

如果多次尝试后显示屏没有更新,请检查 WiFi 网络是否正常。

错误发生

大多数其他的错误,在发出“发生错误”的消息提示时会与错误描述一起显示。这些将比无法从互联网访问数据更为严重。请参考以下内容,以便在相应的情况下对其进行调试。

网络界面未加载
1、确保在网络浏览器中输入了正确的 URL。例如,http://192.168.84.79:5000/ 。

请注意将“:5000”附加到树莓派的 IP 地址。如果没有,将看不到网络界面。

此外,请确保你使用的计算机与树莓派连接在同一网络。请及早检查。

网络界面依赖于树莓派上运行的 “webapp.py”。这也是为什么建议将 rc.local 设置为在启动时运行 “webapp.py”。如果未设置,则必须在加载网络界面之前从 cmd 行手动运行 “webapp.py”。

更新时间长

1、本身墨水屏更新稍长,请耐心等待。

2、Layout5-多个机场显示需要轮询 weather.gov 13 次以获取 13 个机场的数据,与其他显示布局相比会发生延迟。

3、如果机场 ID 出现拼写错误,可能会导致显示屏闪烁且不显示任何数据。通常会显示错误提醒,如果没有,只需重新输入机场 ID,并确保其为有效的 4 字符 ICAO ID。

阴影部分

使用墨水屏出现这种情况很普遍,通常更新显示几次将消除这个问题。网络界面中“Clear E-Paper Display”的功能,可以帮助删除这些阴影。让阴影最小化的方法是使用“循环”或“随机”显示功能,它可以在每次更新间隔时更改布局。

via



坐沙发

发表评论

你的邮件地址不会公开


*