一个懂音乐的汽车雨刮器

有的人在车上听音乐的时候,遇到喜欢的节奏总会随着一起摇摆。

如果雨刮器能和音乐联动,那该是多么酷的事情啊。

国外有个伊恩·查纳斯(Ian Charnas)的创客,就改装了自己的汽车雨刮器,可以和车载音响播放的音乐联动。

一起来看看他是怎么让树莓派控制雨刮器的吧。

视频地址:https://v.qq.com/x/page/g3009vxldud.html

创客妹子教你做《偷天陷阱》激光警报系统

喜欢电影的朋友可能看过凯瑟琳.泽塔琼斯和肖恩.康纳利演的《偷天陷阱》。

片中,女主角绕过激光警报系统的过程让人印象深刻。

1999年上映的《偷天陷阱》

那这个激光警报系统实现起来难不难呢?

答案可能比你想象的要简单。

对于那些想要尝试自己构建防盗系统的人,创客妹子 Estefannie 提供了一个制作指南。

示例目标:

建立激光警报系统,保护饼干不被窃取。

工作流程:

激光阵列发现入侵者,摄像头拍照并把照片通过Twitter短消息发给主人,同时蜂鸣器警报响起。

配件清单:

10个激光头

10个光敏电阻

10个电容器

1个树莓派Zero W

1个蜂鸣器

1个树莓派相机模块

12英尺PVC管+ 4个角

1个丙烯酸面板

1个电池组

8根扎带

一罐饼干

Estefannie 并联焊接了10个激光头,又把十个光敏电阻连接到它们自己的GPIO引脚。由于灵敏度的原因,她没有将它们串联起来,这样可以简化调试。

选框架需要几次尝试。Estefannie 从一个木头架子开始试,最后意识到更好的解决方案是PVC管。所有的导线都可以放置在管道内部,然后从管道顶部的一个小窗口出来,连到树莓派Zero W。使用PVC管还可以降低制作成本,因为12英尺的管道大约只需要3美元。

管道内部的布线非常棘手,为完成电路, Estefannie 不得不将一些导线先置入管道内再进行焊接。

Estefannie 尝试将激光头粘合到PVC框架上,但是激光使胶水融化导致失焦。她又尝试使用胶带,后来发现腻子比较完美。成型后可以作为激光器的底座,并可在需要时重新校准。此外,无论激光的温度有多高,它们都能保持不移位。

虽然激光不是很强,但在长时间的校准后, Estefannie 还是会紧张她的眼睛。所以大家在调试的时候,可以戴上太阳镜。

Estefannie 最终在自家厨房里把这个装置搞定了。如果你认真观看影片,会发现她最后还皮了一下。希望大家能和她一样,在创作的过程中收获快乐。

相关视频地址:https://v.qq.com/x/page/l3014nzcgx0.html

相关代码: https://github.com/IoToutpost/Lasers/

素材:Raspberrypi.org

编译:王文文,前51CTO安全频道主编,RedHat认证工程师,华为HCIP-IoT认证工程师。

创客妹子教你做“一键发Twitter眼镜”

关注“IoT前哨站”的朋友可能记得之前我们发过一篇“让相机根据GPS定位自动拍照”的文章。

是的,那位名叫“Estefannie” 的创客妹子又出现了,这次她给大家带来的是一个可以自动发Twitter的眼镜,而且是“侏罗纪公园模式”。

什么叫侏罗纪公园模式呢?

看看这个眼镜发的Twitter内容就知道了。

发现梁龙一只
发现雷龙一只

准确的说, Estefannie 做的这个装置应该叫“侏罗纪恐龙抓拍系统”。因为她这个发的每张照片都会标一个恐龙的名字,比如:“发现梁龙”,“发现雷龙”……她在眼镜上装了一个按钮。按下就能把照片发到Twitter上。

制作流程:

Estefannie 先是找了一个像护目镜一样的眼镜模型。

用3D打印机把眼镜的原型做出来以后,对其进行打磨、喷漆、抛光。然后在上面接好树莓派Zero W,LED和按钮,加上可调节部分、软垫以及绿色镜片……

大量的涂胶、焊接和布线工作之后,她最终得到了一副漂亮的眼镜。

紧接着,她写了一个Python脚本来拍照、与Twitter交互,并通过LED环来提供眼镜当前的状态信息。树莓派系统启动时,会先连到她手机的无线热点。然后,眼镜上的红色LED亮起,表示程序正常运行。

然后,就可以戴着这个眼镜去抓拍有意思的景物了。

背景:

原本这是她被邀请去“Coolest Projects”青少年创客大会演讲而制作的道具,但你可以根据她的代码自己改改,做一个发微博或者抖音的版本。

关于详细流程,建议大家看视频。

相关视频:https://v.qq.com/x/page/c3010lo613b.html

3D模型文件: https://www.thingiverse.com/thing:3732889

代码下载: https://github.com/IoToutpost/JurassicGoggles

素材:Raspberrypi.org

编译:王文文,前51CTO安全频道主编,RedHat认证工程师,华为HCIP-IoT认证工程师。

一条命令将树莓派变成Wi-Fi接入点

很多开发者都配过无线AP,这几乎是IoT网络配置的一个基本技能。像TP-Link和D-Link那种小盒子,用不了几个步骤就能快速开启无线网络。

这次我们要介绍的是把树莓派编程无线AP的方法。

和之前动则十几个步骤的教程不同。我们借助一个叫 RaspAP 的工具,只要一条命令就能完成部署。

wget -q https://git.io/voEUQ -O /tmp/raspap && bash /tmp/raspap

等到命令执行完成后,重启树莓派,无线AP就做好了。

默认的连接信息如下:

IP 地址: 10.3.141.1
用户名: admin
密码: secret
DHCP 范围: 10.3.141.50 – 10.3.141.255
SSID: raspi-webgui
WiFi 密码: ChangeMe

其实树莓派的Raspbian已经自带了一些无线AP所需的组件, 而RaspAP的好处是它不但自动化相关操作,而且还有一套响应式的 WebUI。非常省事。

对手机浏览器的支持也很好。

官方团队是建议大家在Raspbian Buster版本的树莓派上使用这个工具,在执行安装命令前最好先更新系统。

sudo apt-get update
sudo apt-get dist-upgrade
sudo reboot

然后用sudo raspi-config 命令,在 菜单Localisation Options中设置 WiFi 地区。

如果你还再用没有Wi-Fi模块的老树莓派,可以装一个USB无线网卡。

目前 RaspAP 已通过 GNU Gettext 支持简体中文在内的多国语言,但你得确定系统内已经装中文环境了,如果没装,需要用 sudo dpkg-reconfigure locales  之类的命令自行配置一下语言包。

RaspAP 建议的最佳搭配就是一条有线接树莓派eth0的以太网口,然后通过树莓派自带的Wi-Fi提供无线AP服务。不用重启,也不用额外的操作。

还有一句话官方没明说:为使效果最佳,还是用树莓派3B或3B以后的硬件版本吧。

作者:王文文,前51CTO安全频道主编,RedHat认证工程师,华为HCIP-IoT认证工程师。热爱Linux、Python、Micro:bit和树莓派。

解析Python开发的一款迷你跑步游戏

之前“IoT前哨站”上发了一些用Python写文本游戏的文章。不管对于Python开发者来说还是对于游戏爱好者来说,都非常适合打基础。

这次我们迈入图形时代,来看看国外开发者“Rik Cross”制作的一款迷你跑步游戏。

他用了不到一百行代码,就写出了值得一玩的2D动作游戏,怎么做到的?

在此之前,先向大家介绍一个游戏框架:pgzero。

该框架全名Pygame Zero,是一个基于Pygame的游戏编程框架。它可以更容易地编辑游戏,无需模板、不用编写事件循环,也无需学习复杂的Pygame API,而且支持树莓派。

安装
pip install pgzero

需求:
通过键盘的左右键操作,让运动员向前奔跑,每过25米有路标提醒,最后看谁在百米跑步中耗时最少。

代码下载地址:
https://github.com/IoToutpost/Python_game/tree/master/Sprint

素材(地址同上):
Images文件夹中有21张图,包括运动员的动作分解、跑道等。

其中的关键代码,是一个叫做Sprinter()的类。

class Sprinter(Actor):
     def init(self, **kwargs):
         super().init(image='idle', pos=(200,220), **kwargs)
         self.startTime = time()
         self.finishTime = time()
         self.runFrames = ['run' + str(i) for i in range(1,16)]
         self.timeOnCurrentFrame = 0
         self.speed = 0
         self.lastPressed = None
         self.keyPressed = False
         self.distance = 0
# 将运动员推进到下一帧
def nextFrame(self):
    # 如果当前空闲,则启动正在运行的动画。 
    if self.image == 'idle':
        self.image = self.runFrames[0]
    else:
        # 在列表中找到下一个图像,然后返回到第一个图像 
        # 当列表已经到末尾的时候
        nextImageIndex = (self.runFrames.index(self.image) + 1) % len(self.runFrames)
        self.image = self.runFrames[nextImageIndex]

# 检查左右方向键是否正确
# 被交替按下
def isNextKeyPressed(self):
    if keyboard.left and self.lastPressed is not 'left' and not keyboard.right:
        self.lastPressed = 'left'
        return True
    if keyboard.right and self.lastPressed is not 'right' and not keyboard.left:
        self.lastPressed = 'right'
        return True
    return False

def update(self):
    # 更新运动员的速度
    # 交替按键加速
    if self.isNextKeyPressed() and self.distance < 100:
        self.speed = min(self.speed + ACCELERATION, 0.15)
    # 如果没有按键,减速
    else:
        self.speed = max(0, self.speed-DECELERATION)
    # 根据运动员的速度更新距离 
    self.distance += self.speed
    # 根据运动员的速度对其进行动画 
    self.timeOnCurrentFrame += 1
    if self.speed > 0 and self.timeOnCurrentFrame > 10 - (self.speed * 75):
        self.timeOnCurrentFrame = 0
        self.nextFrame()
    # 如果不移动,则设置为空闲
    if self.speed <= 0:
        self.image = 'idle'

里面有一些变量用来跟踪运动员的速度和距离,以及全局的常量(ACCELERATION和DECELERATION的值)。这样可以确定玩家的速度变化。这些数字很小,因为它们代表了玩家加速和减速时,每一帧对应的米数。

玩家通过交替按左右键来增加运动员的速度。这个输入由Sprinter类中的isNextKeyPressed()方法处理,如果按下正确的键,该方法将返回True。

lastPressed变量用于确保左右键被交替按压。如果未按下任何键,玩家会减速,并且该减速程度应小于加速度,以免让玩家突然停下。

在游戏设计中,作者用了gameart2d.com上一个名为“The Boy”的免费形象来作为运动员,里面有15张跑步动作分解图构成的循环。他将从空闲状态开始,只要速度大于0,就切换到跑步动作循环。

这是通过index()在runFrames列表中查找当前运动员图像的名称来实现的,程序会将当前图像设置为列表中的下一个图像(并且在到达列表的末尾时返回第一个图像)。

我们还需要让运动员在跑步动作循环中以成比例的速度向前移动,通过跟踪当前图像显示的帧数来实现(在那个名为timeOnCurrentFrame的变量中)。

为了给玩家一种移动的错觉,作者添加了一些经过玩家的物品:一条终点线和三个显示跑动距离的标记。

这些物品出现的时机是根据运动员在屏幕上的x位置和运动距离计算出来的。

​然而,这意味着每个物品距离玩家最多只有100像素的距离,似乎移动的有点缓慢。我们可以通过SCALE因子来解决,它对应的是运动员跑过的米数和屏幕上像素之间的关系。比如设成1:75。

这些物品最初被绘制在屏幕看不见的右侧,然后向左移动并更快地经过运动员。

最后,startTime和finishTime变量用于计算比赛时间。这两个值最初都设置为比赛开始的时间,只要跑动的距离小于100,finishTime就会更新。使用time模块,比赛时间可以简单地计算为finishTime – startTime。

附注:该游戏在树莓派和Windows PC上都能跑,如果要试玩,记得在Python文件前面加pgzrun命令。

Have fun.

素材:Wireframe #23

编译:王文文,前51CTO安全频道主编,RedHat认证工程师,华为HCIP-IoT认证工程师。

给树莓派 CM 的 eMMC 烧录系统的方法

树莓派 CM(计算模块) 上有一个 eMMC 设备连接在主 SD 卡接口上(Lite 版除外),下面将介绍几种方法,通过计算模块的 IO 底板将系统烧录到 eMMC 上。

你还可以在计算模块的 Datasheet 中查看到本文所介绍的方法。

首先需要准备一块树莓派 CM,和一块底板。CMIO 或者其他底板(如 ED-IOTGATEWAY)均可。

烧录步骤

你需要准备一个 Linux 系统(推荐使用树莓派或装了 Ubuntu 的 PC)或 Windows 7、Mac。

注意,对于 BCM2835 (CM1) 的 bootloader 有一个 BUG,它会给主机返回错误的 USB 数据包,但是大多数的 USB 主机会忽略这个无害的错误并能正常工作。这个错误在 BCM2837 中做了修正。

Windows 下的操作

在 Windows 下有一个安装工具来自动安装所需驱动和引导工具。或者你也可以使用 Cygwin 编译并手动安装驱动。

Windows 安装工具

1、下载并运行 安装程序 完成驱动和引导工具的安装。

2、将树莓派 CM 底板的 USB SLAVE 接口连上 PC 的 USB 接口。需确认 J4 跳线(USB SLAVE BOOT ENABLE)设定在 EN 的位置。

3、给树莓派 CM 底板上电,Windows 将自动发现新硬件并安装驱动。

4、驱动安装完成之后,运行 RPiBoot.exe。

5、等待几秒钟之后,计算模块的 eMMC 将作为 USB 大容量启动器出现在系统的磁盘列表中。

6、这时候就可以像 给 SD 卡烧录系统镜像 一样来给计算模块烧录系统了。在写入系统镜像时请将 J4 跳线设置到 disabled 的位置(或者不要使用 USB Slave 接口)。随后给底板上电,系统会从 eMMC 来启动。

Cygwin 手动安装驱动的方法

Cygwin 是一个在 Windows 平台上运行的类 UNIX 模拟环境,首先你需要在Windows 上安装好 Cygwin。

下载和安装参考 http://www.cygwin.com

接下来,和上面介绍的工具安装方法一样,设置好底板上 J4 跳线到 EN 的位置。用 micro USB 线把底板接到 PC 上,请不要给底板上电。

使用 Git 获取 rpiboot 的源码并编译安装。

sudo apt-get install git

如果系统时间没有设置的话, Git 会报错,使用下面的命令设置系统时间即可,此处 MM、DD、hh、mm 分别为月、日、小时、分钟。

sudo date MMDDhhmm
git clone –depth=1 https://github.com/raspberrypi/usbboot
cd usbboot

如果 libusb 没有安装的话,可以用下面的命令安装,若已安装则可忽略。

sudo apt-get install libusb-1.0-0-dev

编译源码

make

运行 rpiboot

sudo ./rpiboot

现在将计算模块底板的 USB Slave 接口(J15)连上 PC,并给底板上电。rpiboot 程序会检测到计算模块并发送启动代码来运行连接 eMMC。

Linux 下的操作

这部分和 Windows 下 Cygwin 的手动安装驱动方法类似。获取 usbboot 的源码并运行 rpiboot,所用到的命令和上面一样故不再赘述。下面说一下烧录这个步骤所用到的命令。

rpiboot 完成之后,你可以在 /dev/ 目录或者运行 lsblk 命令对比看到 rpiboot 运行前后的一些改变。会出现一个新的设备,就是计算模块的 eMMC。

使用 dd 命令将 Raspbian 镜像刷入到该设备即可。下面假设新的设备名为 sdX 则使用下面的命令。

sudo dd if=raw_os_image_of_your_choice.img of=/dev/sdX bs=4MiB

运行结果

/dev/sdX <- Device
/dev/sdX1 <- First partition (FAT)
/dev/sdX2 <- Second partition (Linux filesystem)

现在 /dev/sdX1 和 /dev/sdX2 可以被正常挂载到系统了。

在写入系统镜像时请将 J4 跳线设置到 disabled 的位置(或者不要使用 USB Slave 接口)。随后给底板上电,系统会从 eMMC 来启动。

来自:树莓派实验室

月黑风高无遁逃 —— 用树莓派自制夜视仪

小时候,我花了很多时间玩“细胞分裂”。这个游戏经常要在阴影中徘徊,光线和声音是完成各种任务的重要因素。

游戏中最让人印象深刻的就是情报员 Sam Fisher 戴的夜视仪。因此我一直对能在黑暗中看清事物而着迷,并有了打造便携式夜视设备的想法。

功能要求:

能在黑暗中观察事物(2米到5米)
有图形界面可操作
10个不同功能的按钮
方便的手柄
可调整到最佳视角。
可保存实时视频
可拍照

主要思路:

这个夜视仪核心是红外摄像头(红外线可让你在黑暗中拍摄照片和视频),我买了一个旧的手持式相机闪光灯作为夜视仪的基础。

树莓派Zero小巧,放在这个闪光灯壳子里很完美,有足够的空间支持HyperPixel屏幕和摄像头。而且它还有一个倾斜手柄,这意味着你可以调整夜视角度并且随身携带。

所需硬件:

1、树莓派 Zero W

2、树莓派摄像头 NoIR Camera V2

3、触摸屏 HyperPixel 4.0

代码地址:

https://github.com/IoToutpost/Night-Vision

把程序部署完成之后,可以在桌面放置一个快捷方式,以便随时启动。

十个按钮的功能:

预览 10秒

预览 30秒

预览60秒

预览5分钟

预览10分钟

预览15分钟

拍照

捕捉一个10秒视频

保持预览(没有时间限制)

离开/关闭

因为默认的灰色在黑暗中太亮了,于是作者把按钮改为黑色背景和绿色字体。

编者按:这里用到的HyperPixel 4.0触摸屏似乎与2019年8月发布的Raspbian Buster不太兼容,建议使用Raspbian Stretch。

原先的手持式相机闪光灯没地方展示触摸屏,作者用小刀将其顶部塑料一点一点切掉,这才有了一个不规则的显示区。DIY真是锻炼人啊……

相关视频地址:

https://v.qq.com/x/page/w0917ae6ohs.html

素材:Tecoed.co.uk

作者:TeCoEd

编译:王文文,前51CTO安全频道主编,RedHat认证工程师,华为HCIP-IoT认证工程师。

把站台上的电子提示牌建到桌边

一般轻轨和火车的站台上都会有电子提示牌,提醒乘客当前时间、下一班车还要等多久以及该班车的始发站和终点站等等。

那类似的电子提示牌用到了哪些东西?我们能不能自己做一个?

用树莓派Zero、OLED显示器和3D打印的小盒子就可以搞定。它会涉及一些软件,一点焊接工作,还有一些3D打印材料。

引言

不久前,我看到克里斯·哈钦森(Chris Hutchinson)发布的帖子。

Pretty hyped about my most recent @Raspberry_Pi project — a realistic, real-time, train departure board

I’ve open sourced the software over at: 
https://t.co/vGQzagsSpi

Next step: find a case and make it a permanent fixture! 
pic.twitter.com/HEXgzdH8TS— Chris Hutchinson (@chrishutchinson) June 6, 2019

他从交通网站的API中提取数据,并在一个小型OLED上实时显示列车发车信息,以模仿英国列车站台上的那些电子提示牌。

我很欣赏他的项目,所以决定自己也做一个。主要是打算改变软件工作的方式,使其在 balendCloud 上运行,这样部署和配置会更加容易。

此外,我重新设计了显示布局,以实现字体的1:1像素映射。避免任何缩放,以便看起来更像真正的点阵显示。

至此,我已大功告成,并对结果感到满意。你可以按照本教程做一个类似的版本。

列车信息来源

https://www.transportapi.com/

硬件需求

这个项目的硬件需求不多,主要就是下面这几项。

·树莓派Zero W
·8G容量的SD卡
·USB电缆(用于电源)
·SSD1322 OLED显示器

如果你想自己做外壳,那还需要一台3D打印机或3D打印服务。

软件需求

该项目构建在 balenaCloud 上的 Docker 容器中运行,这意味着你只需几步就可以部署项目,从而节省任何耗时的手动包安装或配置。

所以你需要:

• 从GitHub下载项目

https://github.com/IoToutpost/UK-Train-Departure-Display

• 准备好刷系统的工具
• 一个免费的 balenaCloud 账户,用于设置和管理Pi下载并安装balena CLI工具——安装在你的计算机上,允许你在树莓派上安装项目代码。

组合在一起

第一个任务是将显示器连接到树莓派的GPIO头。

我用的是树莓派Zero W,它没有引脚针。虽然可以把它放在一个小得多的空间,但这意味着我必须自己焊接跳线。

我已经在下面列出了2.8英寸显示器(从AliExpress买来的)的引脚分配。

其他基于 SSD1322 的显示器应该也是可以的,你只需要留意一下引脚,并在上电前仔细检查它们是否连接正确。

无论你是否把线焊接到Raspberry Pi,都肯定要将线焊接到显示器上。

设置软件

用 balenaCloud & Docker 大大简化了软件的设置过程。

这意味着你不必手动安装或配置软件包,只需设置应用程序,添加设备并刷写SD卡,然后用 balena CLI 工具从计算机推送代码。我不会在这里详细介绍这个过程,你可以访问以下链接查看相关文档。

https://www.balena.io/docs/learn/deploy/deployment/

• 设置balenaCloud应用程序

首先你要有一个balenaCloud账户。然后添加一个新的应用程序,确保为正在使用的设备选择匹配的硬件类型。

接下来,向应用程序添加一个新设备,配置网络并下载balenaOS映像。

• 给设备刷写SD卡并接通电源

用Etcher或其他工具把下载好的操作系统刷入SD卡。
将SD卡插入树莓派并启动设备。几分钟内,它应该会出现在balenaCloud仪表板上。

• 推送App代码

这一步是将代码推送到balenaCloud,之后它会将其分发到你刚才添加的树莓派。具体步骤:

从GitHub下载代码(本文前面提到的链接),然后在你的计算机上安装 balena CLI 工具,进入项目目录,执行 balena push <appName> ,其中 <appName> 是你之前在 balenaCloud 仪表板中创建的应用程序的名称。例如:balena push TrainDepartureDisplay。

如果一切顺利,你将看到balena 独角兽吉祥物,并且你刚刚推送的代码将自动分发到设备上。

准备好硬件并部署代码后,下一步是配置运行应用程序所需的环境变量。

添加配置信息

不需要手动编辑配置文件,你可以用 balloud 仪表板来设置并随时更改任何变量。如果需要的话,你可以看看如何设置环境变量的文档。

https://github.com/balena-io-playground/UK-Train-Departure-Display#configuration

在获得传输API的密钥和应用ID之前,你需要在 Transport API 上注册一个帐户。这样你才能知道列车目的地和到站时间等信息。

一个基础帐户是免费的,每天只能有1000个请求,但是对于这个项目来说已经足够了。

如果前面工作都没问题,整个系统应该可以运行了,你第一眼看到的画面应该是这样。

做个外壳

接下来要把这个电子提示牌做的更真实一些,至少在外观方面。

我设计了一个外壳来装显示器和树莓派。这样可以把所有的东西紧密地放在一起,不会浪费太多的空间。

然后用Autodesk Fusion 360和Creality Ender 3(通过Cura)将其打印出来。这个外壳的模型可以在balena Thingiverse页面上找到。

将 Raspberry Pi Zero 放进壳中,然后熔化少许卡槽以便将其固定。

然后,用四个2.6毫米螺丝封住后盖。

我的电脑显示屏背面有USB接口,所以我剪了一条旧的USB电缆来供电。用细电线做这样的连接时,两根导线外侧可以加上热收缩管。给它们加热后,会形成一个坚固的接头。

供电线通过外壳顶部引出,以获得清爽的外观,然后用双面胶将我们的成品固定在电脑显示屏的下面。

后记

非常感谢Chris Hutchinson,是他最初启动这个项目,并促使我做进一步的开发。Blake也做了一些改进,这个项目就是他那里 fork 出来的。

Blake的项目地址:
https://github.com/ghostseven/UK-Train-Departure-Display

本项目用到的字体:
https://github.com/DanielHartUK/Dot-Matrix-Typeface

来自:Balena.io

作者:Chris Crocker-White

译者:王文文,前51CTO安全频道主编,Redhat认证工程师,华为HCIP-IoT认证工程师。

拒绝炎热和潮湿 DIY智能换气扇

夏季的上海,烈日炎炎。

白天出门就是一种折磨。

在屋里一直开着空调吧,到了昼夜交替或者深夜的时候,可能又觉得冷。

暴雨的时候,外面空气清新,室内却很闷热……

如果给你两个换气扇,怎样才能让室内空气健康流通呢?

美国有一位名叫 Ishmael Vargas 的创客,给我们带来了他的方案。

在芝加哥地区,夏季的白天和夜晚都是炎热潮湿的。太阳下山的时候外面温度下降,但家里却未必。

这就是窗式换气扇用得着的地方,它可以把冷空气吹进房子里。

但一直这么开着也不行,因为温度在不停变化。

去年夏天,Ishmael Vargas 经常要在半夜起床把换气扇关掉,但他觉得可以用一个更好的方法来控制风扇,无需人工干预,于是他便启动了这个小项目。

Ishmael Vargas 用树莓派和DHT22温湿度传感器来监测室温,然后将其与外部温度进行比较。如果后者更凉爽,则通过智能Wi-Fi电源插头(TP-Link HS100)打开换气扇 —— 这比将风扇连接到继电器要简单得多。

传感器的三根线分别接在树莓派的电源、接地、GPIO 4(建议加上10K电阻)
Smart WiFi Plug 智能插座

室外温度感知

为了简单起见,Ishmael 选择使用 pywapi 库从 Weather Channel 获取室外温度,而不再连接外部传感器。

“Weather Channel 提供的温度和实际温度可能相差一两度。这对于这个项目来说已经足够了。”他解释道。

智能WiFi插座用于打开和关闭窗户风扇

在测试中,Ishmael 发现清晨的风扇可能会把温暖的空气吹进房子里。

他说:“根据风扇的大小、房间的大小和房屋材料的不同,室内的温度可能永远不会像室外那么低。”例如,如果外面的温度是65°F(18°C),那么里面的温度可能会是67°F(19.5°C)。当室外温度开始上升时,你可能需要关掉风扇。”

远程控制

Ishmael 没有让风扇程序在启动时自动运行,而是选择通过Android智能手机手动启动并控制它。后者运行VNC查看器应用程序,允许远程访问Raspberry Pi的桌面,在桌面有一个快捷方式可以启动风扇应用程序。然后显示一个Pygame窗口,其中包含温度信息和控制按钮。

树莓派的桌面

“风扇应用程序有两个按钮,可以向上或向下改变(所需的温度)设定值。”Ishmael说。

此外,右上角的按钮是关闭应用程序并返回桌面。他的目标是在他的树莓派上运行多个项目,并为每个应用程序提供桌面快捷方式。

在手机或PC上,可以通过VNC查看温度数据和控制按钮

虽然最初的项目只使用了一个换气扇,但他后来对其进行了修改,添加了另一个风扇。因为他意识到,要想取得最好的性能,需要两个换气扇。一个吹进来,另一个吹出去。

编者注:最近在上海转悠了几个老小区,发现多户人家的通风问题需要改善。有的是楼道和通风管道设计的问题,这个就不说了。有的纯粹是自己不重视,如果能做科学的改动,应该可以让生活更舒畅。

源码地址:

https://github.com/IoToutpost/Smart-Window-Fan

素材:MagPi,编译:IoT前哨站,转载请注明出处。

王文文,前51CTO安全频道主编,阿里巴巴资深安全工程师。Redhat认证工程师,华为IoT认证工程师。

创客姐姐告诉你,树莓派4B到底有多快

作者:长空无名

最近很多科技媒体都报道了树莓派4发布的消息。

虽然整个板子做了大幅升级,基础价格却依然是35美元,称的上是业界良心。

那号称史上性能最强的树莓派4,到底有哪些亮点呢?一起来看产品图。

USB-C供电口 
1.5GHz 四核64位 ARM Cortex-A72 CPU
1GB/2GB/4GB LPDDR4 SDRAM 内存(可选)
全吞吐量千兆以太网(真千兆)
双频 802.11ac 无线网络
蓝牙 5.0
两个 USB 3.0 和两个 USB 2.0 接口
同时支持两个显示器,分辨率高达 4K
VideoCore VI 显卡,支持 OpenGL ES 3.x
HEVC 视频 4Kp60 硬解码

当然,光看图例是不够的。让创客姐姐 Estefannie 来给你讲解一下。

视频地址:

https://v.qq.com/x/page/n0889tx4vsn.html

按小姐姐说的,树莓派4B的Cortex-A72要比树莓派3B的Cortex-A53快不少。

我们在树莓派3B上跑个测试脚本,看看耗时。

可以看到,树莓派3B花了7分55.68秒。

然后再看看 Estefannie 用树莓派4B测的结果。

同一脚本,树莓派4B花了3分41.882秒,耗时仅用了前者的一半不到。性能果然是提高了不少。

脚本内容:

time echo “scale=10000;4*a(1)” | bc -l

有兴趣的朋友可以自行测试。当然,你得先有一块树莓派4B哦。

来自:IoT前哨站