卧室有朵彩色的云会不会很可爱呢?就像晴天娃娃一样告诉你今天的天气。云朵基于树莓派 Zero W 构建,连接到 Yahoo Weather API 获取天气信息,再通过设定的不断变化的颜色告诉你天气变化的情况。我觉得把云朵悬挂在家中的墙壁上会非常的好看。
云朵颜色变化所代表的天气信息如下:
如果第二天温度比当日高 10%,就会变成红色。
如果第二天温度比当日低 10%,就会变成金色。
如果同时满足这两个条件,会保持红色。
如果这两个条件都不满足,会保持蓝色。
如遇雨或雪,它将会闪烁。
温馨提示:
项目中使用的雅虎的 API 会中断。所以要随时注意更新。更多的信息可以访问:https://developer.yahoo.com/weather/ 。
cloud.svg
[8212 Bytes at 2020-05-16, 38 次下载]
wpa_supplicant.conf
[49 Bytes at 2020-05-16, 24 次下载]
cloud_neopixel.py
[5270 Bytes at 2020-05-16, 47 次下载]
STL_Files.zip
[929079 Bytes at 2020-05-16, 68 次下载]
树莓派 Zero W × 1
Micro SD 卡 × 1
USB 电线(白色) × 1
Neopixels 灯环(60 LED/每米) × 若干
锯齿框架挂钩(双孔) × 若干
3M 胶脚垫 × 若干
1/2" S4S 橡木板 × 若干
6" S4S 橡木板 × 若干
3" S4S 橡木板 × 若干
1/8" 硬质纤维板 × 若干
1/8" 白色半透明亚克力板 × 若干
1/8" 木销钉 × 若干
Watco 木制油漆 × 1
25ft 26AWG 红线 × 若干
25ft 26AWG 黑线 × 若干
25ft 26AWG 蓝线 × 若干
木胶 × 1
热胶枪 × 1
订书机 × 1
所有切割的图纸都在 svg 文件中。如图所示,云朵一共有四层。在第二层和第四层,内部路径和中间路径之间包含有 1/8" 深的凹层。以便将扩散层和背板嵌入其中。扩散层使用半透明亚克力板,用于光的漫反射,背板使用硬质纤维板。
如图所示,这是未切割前的在 Shapeoko3 上的预览图像。稍后会重复使用到,请保存好。
云朵形状的来源:
http://www.softicons.com/web-icons/vector-stylish-weather-icons-by-bartosz-kaszubowski/cloud-icon
切割文件请在项目文件库中下载。
https://make.quwj.com/project/232
1、将切割好的组件粘在一起,只需要将中间的两层粘连起来即可。
2、将 1/8" 木销钉插入孔中以便对齐。木销没有使用胶水固定,因此一旦使用就无法自由取下来了。
3、干燥时,使用夹子将组件固定在一起并擦去溢出的多余胶水。
4、在等待胶水干燥的过程中,我从内部取下组件,并先用 150 粒度的砂纸打磨再使用 220 粒度的砂纸打磨。擦拭干净后,使用深核桃色的木制油漆刷满表面,使其表面光滑并保持干燥。
这是给顶层上色的好时机。而且不会将整个扩散层弄脏。
5、给主云朵上色。胶水晾干后,使用木制油漆对主要云朵进行打磨和上色。
1、将灯带放入云朵中确定所需要的长度,要让灯带覆盖到整个云朵。经过测量,需要要十九条灯带,考虑到要粘合的部分,最好预留一些长度,最终采用了二十条。
2、拆除灯带周围的橡胶保护带,再将电线添加到插排上以便连接到树莓派 Zero W 上。
3、将焊条的末端与电线的末端提前焊接在一起效果会更好。
4、将电线焊接到灯带。
5、在背面插板上涂一点热熔胶,以将 NeoPixel 灯条带固定到云朵的边缘。尽量的使条带尽可能靠近背板。如图所示,我应该在灯条上使用另一个 LED。
1、将扩散层放置在图中的位置,并在顶部周围涂抹少量胶水。
2、将顶层固定好。确保其尽可能的与其他层对齐,并擦去多余的胶水。
1、如图所示,接线方式非常简单。
树莓派上 GPIO 18 针脚连接到 Din Neopixel
树莓派的 5V 连接到 Neopixel 的 5V
树莓派的 GND 连接到 Neopixel 的 GND
2、在焊接 USB 电线之前,需要先为其钻孔。我的线是 3mm 粗的线,所以我用 3mm 的钻头钻洞,并确保不要钻到 neopixel 灯带上。
3、切断没有插入计算机的公头的一端。然后去掉一些不需要的线。项目只需要红线(5V)和黑线(GND)。
4、焊接完成后的样子。
将操作系统下载至 SD 卡。我使用的是:
https://www.raspberrypi.org/downloads/raspbian/
使用 etcher.io 的程序将图像刻录到 SD 卡。完成后,在启动目录中添加两个文件,以便树莓派启用 ssh 并提供正确的 wifi 信息。
使用文本编辑器打开 wpa_supplicant.conf 文件,输入 wifi 的 ssid 和密码。然后将文件添加到 sd 卡,启用 ssh。我们需要建立一个标有 ssh 的文件,因为 sd 卡上没有扩展名。
具体的详情你可以参考:
https://shumeipai.nxez.com/2017/09/13/raspberry-pi-network-configuration-before-boot.html
连接到树莓派
在树莓派中使用 putty 和 SSH 的程序。你可以访问以下网址,找到相关的操作文档。https://shumeipai.nxez.com/2013/09/07/using-putty-to-log-in-to-the-raspberry-pie.html
唯一的区别是,你可以找到树莓派的 IP。我发现使用 raspberrypi.local 连接到主机更容易。
安装所需的库
安装 pip ,运行以下命令:
sudo apt-get install python-pip
安装 requests 模块:
pip install requests
接下来,安装 NeoPixels 所需的项目。这些步骤的说明来源于:
https://learn.adafruit.com/neopixels-on-raspberry-pi?view=all#software
sudo apt-get install build-essential python-dev git scons swig
运行命令:
git clone https://github.com/jgarff/rpi_ws281x.git
cd rpi_ws281x
scons
下一步
cd python
sudo python setup.py install
现在,所需的库都已安装完毕。
在树莓派上部署程序
从 GitHub 库中获取文件:
https://github.com/keebie81/Weather-Forecast-Cloud
你可以将内容剪切并粘贴到新文件中,或使用 WinSCP 传输文件:
https://winscp.net/eng/download.php
如果你需要剪切和粘贴,就要使用此命令制作一个新文件。
sudo nano cloud.py
然后粘贴内容到 cloud.py。
下一步,你可能需要更改一些数值。如果你使用了不同数量的 NeoPixels 或 GPIO 引脚
如果 NeoPixels 的使用量不同,则更改 LED_COUNT。如果使用的 GPIO 引脚不同,请更改 LED_PIN。
在第 72 行,你需要更改位置,如果你使用了 sheboygan 来预测天气。
运行代码
更改完毕后,就可以测试代码。
sudo python cloud.py
现在,云朵应该会亮起来,在终端窗口中,你看到它输出了今天和明天的最高温度和最低温度。
设置开机自动运行
配置自动启动,添加下面的代码到 rc.local 文件中。
python /home/pi/cloud.py &
所需的代码请在项目文件库中下载。
https://make.quwj.com/project/232
1、使用记号笔找到中心做好标记。然后,我将锯齿框架挂钩和两个橡胶垫安装到位。
2、使用热熔胶将树莓派固定到位。将一小撮热胶放在树莓派的背面,然后将其连接到背面板上。
3、用螺丝刀给钉书钉留出空间。
4、将弯曲的订书钉固定背板。
5、给每朵云添加挂钩和两个橡胶垫,所有的云朵就完成了。
如果你没有木工 CNC 机床的访问权限,下面提供了 STL 文件。其中括 Autodesk Fusion 360 的设计文件。你也可以修改设计并优化打印。
STL 文件请在项目文件库中下载。
https://make.quwj.com/project/232
我原本想用 esp8266 开发板来实现这个项目,但是我在 Arduino IDE 和 JSON 方面的技能不如树莓派。未来这个项目还会增加一些功能,例如在扩散层后的七段显示器上显示当前温度。
我将把文件放在 GitHub 上并添加代码,如果你采用了 Pimoroni Blinkt,Pimoroni Unicorn PHAT 或 Raspberry PI Sense Hat,就可以去使用。
https://github.com/keebie81/Weather-Forecast-Cloud