首页-达尔闻    全部    项目分享| 电子纸桌面天气&新闻站 DIY

项目分享| 电子纸桌面天气&新闻站 DIY

最近发现微雪的电子纸是个好东西,显示内容干净素雅,你们有使用电子纸做过项目吗?
今天分享的项目,制作简单,实用性强,感兴趣的同学可以参考制作。
收藏
  • 最近发现微雪的电子纸是个好东西,显示内容干净素雅,你们有使用电子纸做过项目吗?

    今天分享的项目,制作简单,实用性强,感兴趣的同学可以参考制作。

     

     

    硬件组成

    由于想要一个耗电少的好看的显示屏,所以选择从 waveshare 购买电子纸,价格适中而且质量也不错,还可以轻松地在网上找到使用示例,从而简化使用。为了让显示效果更好,选择 7.5 英寸的三色电子纸:

    分辨率:800x480px

    3种颜色:白色,黑色,红色

    屏幕尺寸:163.2 × 97.92mm x ~2mm(太薄了!)

    总尺寸:170.2 × 111.2mm

     

    为了代码正常运行,选择了 Raspberry pi zero W作为项目主控。虽然Arduino 就足够了,但在将来可能会增加更多的项目,比如将 raspberry 作为 WIFI中继。另外一个原因,Raspberry pi zero价格便宜,使用方便,是非常理想的选择。

     

    为了增加项目的观赏性,将它装在一个木制相框里。结果是,真的不错!

     

    项目实现功能:

     

    通过使用API ,获得想要的信息及最新的新闻消息:

    调用天气和新闻 API 来获取信息

    解析传入的 JSON 以供稍后使用

    借助 PILLOW 创建 GUI(屏幕制造商建议的方法)

    在 7.5" 电子纸显示器上打印

     

    软件实现

    项目代码是用 PYTHON 3.8 编写的,其中main文件、天气调用文件、显示新闻的代码、电子纸驱动文件等,都可以在“达尔闻说”微信回复:天气新闻站,获取

    项目中使用以下库:

    • API调用
    • json
    • PIL
    • 文本显示
    •  

    树莓派实现

    借助crontab命令,程序在启动引导阶段就可以执行:

    crontab -e

    @reboot bash /path/launcher.sh

    launcher.sh :

    #!/usr/bin/bash

    cd /path_to_main.py

    python3 main.py

     

     

    关于天气,天气信息可从OPEN WEATHER MAP下载,可以每分钟可以免费更新 60 次(此项目是每小时更新1 次)。可以获得当前天气、下一小时的降雨预报、48 小时的每小时预报以及最多 7 天的每日预报。

    天气调用的参数值:

    当前温度

    当前湿度

    当前风速和方向(将度数转换为“指南针”)

    当前天气图标

    下一小时的降雨预报

    每小时预报+3h、+6h、+12h 打印温度、降水概率和图标

    最多 4 天的每日预报、打印、图标、最低和最高温度以及下雨概率

    过去 6 天的压力和温度历史值(图表)(每天更新一次)

     

    关于新闻信息,选择使用NEWS API来获取最新的头条新闻。它使用简单,每天最多可免费更新 100 次,此项目选择每1小时调取更新一次。

    为了获得全球的最新消息,选择了 googlenews 作为来源。在电子纸上显示最新的 5 条热门新闻,并显示每条新闻的前 120 个字符(大多数情况下足够了)。

    关于污染和警报:此外还可以根据OpenWeatherMaps ,获取天气警报(如雪、风等)和污染数据。此项目中,仅下载并解析这些数据,但并没有在电子纸上显示。未来也可以将污染或天气警报替换部分新闻。

     

    电子纸显示

    在此项目中,使用Pillow来创建界面及加载到屏幕上。

    Pillow是Python图像处理函式库(PIL)的一个分支。PIL是一个函式库,提供了几个操作图像的标准程序。它是一个功能强大的函式库,但自2011年以来就没有太多的更新,并且不支持Python3。

    Pillow在PIL的基础上,为Python3增加了更多功能和支持。它支持一系列图像文件格式,如PNG,JPEG,PPM,GIF,TIFF和BMP。我们将看到如何在图像上执行各种操作,例如裁剪,调整大小,添加文本到图像,旋转,灰阶转换。

Control Render Error!ControlType:productSlideBind,StyleName:Style1,ColorName:Item0,Message:InitError, ControlType:productSlideBind Error:未将对象引用设置到对象的实例。