微软正式开源 Azure IoT Edge 边缘计算服务

微软宣布,2017年底公开预览的 Azure IoT Edge 边缘计算服务已发布正式版,并通过 GitHub 将其开源。Azure IoT Edge 主要将基于云的分析和定制的业务逻辑转移到边缘设备,使企业能够专注于洞察商业机会而非数据管理。 微软表示,这些设备现在将能够立即采取实时数据行动。

借助开源的 Azure IoT Edge,开发人员可以更灵活地控制自己的边缘解决方案,以及运行时或调试问题。

此外,Azure IoT Edge 的正式版本也将支持 Docker 兼容的 Moby 容器管理系统。 微软还将扩展针对物联网的 Azure 认证,以开始针对边缘设备的软件和硬件认证,包括运行时,设备管理和安全性。

为了解决 Azure IoT Edge 大规模部署的安全问题,Azure IoT Edge 深入集成了设备调配服务,以安全地配置数以万计的设备和 Azure IoT Edge 安全管理员,这些管理员可以用来保护边缘设备及其组件。 自动设备管理(ADM)可以基于设备元数据将大型物联网边缘模块部署到设备。

Azure IoT Edge 支持 C#,C,Node.js,Python 和 Java 等编程语言。 它还提供 VSCode 模块开发,测试和部署工具,以及带 VSTS 的 CI/CD 管道。

部署 Azure IoT Edge 有三个必要组件,即 Azure IoT Edge Runtime,Azure IoT Hub 和 Edge 模块。 Azure IoT Edge Runtime 是免费且开源的,但客户必须使用付费的 Azure IoT Hub 实例进行扩展。 边缘设备的管理和部署也将基于 Azure 服务或客户使用的 Edge 模块。

需要下载微软开源的Azure IoT Edge 代码请访问:

https://github.com/Azure/iotedge

来自:开源中国

Fuchsia 操作系统将兼容Debian Linux 应用

Fuchsia是谷歌公司新推出的一款更适合物联网的操作系统。这款新操作系统和安卓以及Chrome OS都不同,因为它没有使用Linux内核。

正在人们为其兼容性担忧之时,谷歌最近宣布为 Fuchsia OS 增加了一个用于运行 Debian Linux 应用程序的模拟器。以使 Linux 应用程序能够在 Fuchsia 中作为虚拟机(VM)运行。和之前发布的模拟器不同,谷歌声称:其“Guest” App 与宿主 Fuchsia 的集成会更加紧密。

对于有些人来说,Linux 不仅是 Android 和 Chrome OS 的基础,也是谷歌企业平台的基础,所以 Fuchsia 似乎是一种“背叛”。

毫无疑问,谷歌有一些非常好的理由要避免使用 Linux。一个原因可能是 Linux“年纪太大”,太复杂了。如果从头开始做一个东西,谷歌就可以避开这些问题,使用更优雅的代码,给黑客留下最少的可乘之机。谷歌还将安全更新深植到操作系统中,通过隔离应用程序让它们无法直接访问系统内核,这点与 Linux 是不一样的。

早在 2016 年,我们认为谷歌可能会将 Fuchsia 作为一个私有操作系统,就像苹果公司将 iOS 的一切牢牢控制在手中一样。尽管不排除这个可能性,但至少现在 Fuchsia 仍然是一个开源项目。

有些人还推测,谷歌因为无法在微处理器(MCU)领域扩大规模而绕过了 Linux。然而,基于 MCU 的物联网似乎并不是目前 Fuchisa 关注的焦点。一些报道称,Fuchsia 旨在替代 Android 和 Chrome OS,最终的组合平台将被称为 Google Andromeda。

今年早些时候,9to5Google 报道说,Fuchsia 将包含独立的 UI——用于手机的 Armadillo UI 和用于桌面的 Capybara UI——以及 Android Things 和其他新的 Android 变体,将紧密集成谷歌智能助理语音技术。从本质上讲,这与微软未能为手机和笔记本电脑提供通用的 Windows 或 Canonical 已停用的“融合”版 Ubuntu 计划如出一辙。

无论 Fuchsia 的命运将如何,谷歌需要吸引到成熟的应用程序和开发者,而实现这一目标的最佳方式就是增加 Linux 应用程序兼容性。9to5Google 建议,为了实现该目标,新的 Guest App 最开始应该先支持包括 Debian 在内的 Linux 平台,通过调用 Machina 库实现比 QEMU(虚拟操作系统模拟器)更好的集成。

谷歌将 Fuchsia 的 Machina 描述为“一个建立在 Zircon 之上的库,提供与 Garnet 系统集成的虚拟外设。”Zircon 是基于 Little Kernel(LK)的 Fuchsia 微内核,之前叫作 Magenta。Garnet 是直接位于 Zircon 之上的层,提供设备驱动程序、Escher 图形渲染器、Fuchsia 的 Amber 更新程序以及用于 Xi 编辑器的 Xi Core 引擎。其他层包括用于应用设计的 Peridot,以及 Topaz,一个支持 Flutter 的应用层。

Machina 采用了 Virtio 虚拟化标准,基于 Linux 内核的虚拟机(KVM)也采用了该标准。Machina 使用了 Virtio 的 vsock 虚拟套接字,“它可以在宿主操作系统与客户应用之间打开直接通道,而这种便利性无法通过其他方式实现”。

这样可能可以实现快速的鼠标移动、自动调整屏幕分辨率,并支持多显示器、文件传输以及复制和粘贴。这看起来很像人们所期望的通过谷歌 Crostini 在 Chrome OS 上运行 Linux 应用程序的仿真度。早些时候有关 Guest App 的报道表示,谷歌正在将 Android 运行时构建到 Fuchsia 中,而不是单纯依靠模拟器来运行 Android 应用程序。

我们应该以客观的态度看待模拟器。大多数基于 Linux 的移动操作系统厂商都承诺具备 Android 应用兼容性,但通常都未能兑现他们的诺言。因此,通过在一开始就将模拟器深植到宿主操作系统中,而不是在后面才添加。Fuchsia 可能因为此举而为 Linux 开发者提供了一个更“真实的”模拟器。

怎样为树莓派安装Rust开发包和相关实用软件?

随着软件业的蓬勃发展,越来越多的新技术开始呈现在大家面前。比如Golang和Rust这两门计算机编程语言。

Golang可能大家接触的多一些,毕竟容器和区块链等大量开发者在用。稍晚一年出现的Rust,可能有些朋友不熟悉。

Rust是Mozilla主导开发的注重安全、速度和并发的系统级编程语言,随着Rust的成熟,Mozilla开始尝试用Rust开发Firefox的组件,其中包括核心引擎Servo/Project Quantum。

普通PC和Mac电脑咱们这里就不说了,这里讲讲如何在树莓派上安装Rust开发包和那些没有加入“系统软件库”的Rust软件。

这里还是拿出我的Raspberry Pi Zero W。

在确保网络状态良好的情况下,在命令行执行:

sudo curl https://sh.rustup.rs -sSf | sh

默认安装选1即可,它会自动安装稳定版的Rust for ARM。这里可以看到版本号是1.27.0。

安装成功后可以写个hello world试试是否可以正常编译。

cat > hello.rs << EOF

rustc hello.rs

这个命令可以生成二进制文件直接执行。

从图中我们能看到,树莓派已经可以编译rust程序了。然后我们用cargo这个rust包管理工具来安装一个文件搜索工具 —— fd-find。

执行:cargo install fd-find

下载和编译的过程比较漫长。当然,如果你是高性能PC可以很快。单核ARM的话你就慢慢等吧。

差不多一场世界杯足球赛的耗时,终于编译完成了这个fd-find(我这里用了84分 2.69秒)。

最后就是享受劳动成果了,试试这个由Rust语言开发,传说中可取代“find”命令的小工具吧。

速度快,更简洁,支持正则表达式。还可以和其他Shell命令融合。

欢迎大家和我探讨IoT物联网终端上的开发和应用。

版权声明:本文为“IoT前哨站”原创,转载请注明原文作者和出处。

用树莓派构建一个婴儿监视器

香港很湿热,即便是晚上,许多人为了更舒适,在家里也使用空调。当我的大儿子还是一个小婴儿的时候,他卧室的空调还是需要手动控制的,没有温度自动调节的功能。它的控制器只有开或者关,让空调整个晚上持续运行会导致房间过冷,并且也浪费能源和钱。

我决定使用一个基于树莓派的物联网解决方案去修复这个问题。后来我进一步为它添加了一个婴儿监视器插件。在这篇文章中,我将解释我是如何做的,它的代码在 我的 GitHub 页面上。

设计空调控制器

解决我的问题的第一个部分是使用了一个 Orvibo S20 可通过 WiFi 连接的智能插头和智能手机应用程序。虽然这样可以让我通过远程来控制空调,但是它还是手动处理的,而我希望尝试让它自动化。我在 Instructables 上找到了一个满足我的需求的项目:他使用树莓派从一个AM2302 传感器上测量附近的温度和湿度,并将它们记录到一个 MySQL 数据库中。

使用压接头将温度/湿度传感器连接到树莓派的相应 GPIO 针脚上。幸运的是,AM2302 传感器有一个用于读取的 开源软件,并且同时提供了 Python 示例。

与我的项目放在一起的用于 AM2302 传感器 接口的软件已经更新了,并且我使用的原始代码现在应该已经过时了,停止维护了。这个代码是由一个小的二进制组成,用于连接到传感器以及解释读取并返回正确值的 Python 脚本。

将传感器连接到树莓派,这些 Python 代码能够正确地返回温度和湿度读数。将 Python 连接到 MySQL 数据库很简单,并且也有大量的使用 python-mysql 绑定的代码示例。因为我需要持续地监视温度和湿度,所以我写软件来实现这些。

事实上,最终我用了两个解决方案,一是作为一个持续运行的进程,周期性(一般是间隔一分钟)地获取传感器数据,另一种是让 Python 脚本运行一次然后退出。我决定使用第二种方法,并使用 cron 去每分钟调用一次这个脚本。之所以选择这种方法的主要原因是,(通过循环实现的)持续的脚本偶尔会不返回读数,这将导致尝试读取传感器的进程出现堆积,最终可能会导致系统挂起而缺乏可用资源。

我也找到了可以用程序来控制我的智能插头的一个 Perl 脚本。它是解决这种问题所需的一部分,因此当某些温度/湿度达到触发条件,将触发这个 Perl 脚本。在做了一些测试之后,我决定去设计一个独立的 checking 脚本,从 MySQL 去拉取最新的数据,然后根据返回的值去设置智能开关为开或关。将插头控制逻辑与传感器读取脚本分开,意味着它们是各自独立运行的,就算是传感器读取脚本写的有问题也没事。

配置一个打开/关闭空调的温度值是很有意义的,因此,我将这些值转移到控制脚本读取的配置文件中。我也发现,虽然传感器的值一般都很准确,但是,偶尔也会出现返回不正确读数的情况。这个传感器脚本被修改为不向 MySQL 数据库中写入与前值差异非常大的值。同样也在配置文件中写入了连续读取的温度/湿度之间允许的最大差异值,如果读取的值处于这些限制值以外,这些值写不会提交到数据库中。

虽然,做这个自动调节器似乎花费了很多努力,但是,这意味着,记录到 MySQL 数据库的数据是有效的、可用于进一步去分析识别用户使用模式的有用数据。可以用多种图形方式去展示来自 MySQL 数据库中的数据,而我决定使用 Google Chart 在一个 Web 页面上显示数据。

添加一个婴儿监视摄像头

树莓派开放的性能意味着我可以不断地为它增加功能 —— 并且我有大量的未使用的可用 GPIO 针脚。我的下一个创意是去添加一个摄像头模块,将它放在孩子的卧室中,配置它去监视婴儿。

我需要一个能够在黑暗环境中工作的摄像头,而 Pi Noir 摄像头模块是非常适合这种条件的。Pi Noir 除了没有红外过滤之外,同样也是树莓派常用的摄像头模块。这意味着它在白天时的图像可能有点偏紫色,但是它可以在黑暗中借助红外灯来显示图像。

现在我需要一个红外光源。由于树莓派非常流行,并且进入门槛很低,因此它有大量的外围配件和插件。也有适合它的各种红外光源,我注意到的其中一个是 Bright Pi。它可以从树莓派上供电,并且它很适合为树莓派的摄像头模块提供红外光和普通光。它唯一的缺点是太考验我的焊接技能了。

我的焊接技能还是不错的,但是可能花费的时间比其他人更长。我成功地连接了外壳上所有的红外 LEDs,并将它们连接到树莓派的 GPIO 针脚上。这意味着树莓派能够编程控制红外 LED 是否点亮,以及它的亮度。

通过一个 Web 流去公开捕获的视频也很有意义,因为这样我就可以从 Web 页面上查看温度和湿度的读数图表。进一步研究之后,我选择了一个使用 M-JPEG 捕获器的 流软件。通过 Web 页面公开 JPG 源,我可以在我的智能手机上去连接摄像头查看程序,去查看摄像头的输出。

做最后的修饰

没有哪个树莓派项目都已经完成了还没有为它选择一个合适的外壳,并且它有各种零件。在大量搜索和比较之后,有了一个显然的 赢家:SmartPi 的乐高积木式外壳。乐高的兼容性可以让我去安装温度/湿度传感器和摄像头。下面是最终的成果图:

在这以后,我对我的这个作品作了一些改变和更新:

    • 我将它从树莓派 2 Model B 升级到了树莓派 3,这意味着我可以使用 USB WiFi 模块。
    • 我用一个 TP-Link HS110 智能插头替换了 Orvibo S20。
    • 我也将树莓派插到了一个智能插头上,这样我就可以远程重启/重置它了。
    • 我从树莓派上将 MySQL 数据库移走了,它现在运行在一个 NAS 设备上的容器中。
    • 我增加了一个非常 灵活的三角夹,这样我就可以调整到最佳角度。
    • 我重新编译了 USB WiFi 模块,禁用了板载 LED 指示灯,这就是升级到树莓派 3 的其中一个好处。
    • 我因此为我的第二个孩子设计了另外一个监视器。
    • 因为没有时间去折腾,我为我的第三个孩子购买了夜用摄像头。

想学习更多的东西吗?所有的代码都在 我的 GitHub 页面上。

(https://github.com/jervine/rpi-temp-humid-monitor)

想分享你的树莓派项目吗?将你的故事和创意发送给我们。

via: https://opensource.com/article/18/3/build-baby-monitor-raspberry-pi
作者:Jonathan Ervine 译者:qhwdw 校对:wxy 来自:Linux中国

忘记网络设备或应用的默认密码怎么办?

做物联网的,少不了要跟路由器等各种网络设备、PaaS应用打交道。可是要不小心在工作中忘记设备或应用的默认密码怎么办?那可就耽误事情了。今天就给大家介绍一个小工具 —— Passhunt。

这是一款用于寻找路由器、交换机等网络设备、Web 应用等默认身份凭证的工具。大约能搜索世界各地523个供应商和他们的2084个默认密码。各位可保存好,以备不时之需。

安装:

git clone https://github.com/Viralmaniar/Passhunt.git
cd Passhunt
pip3 install -r requirements.txt
python3 Passhunt.py

使用:

1: 输出支持的设备厂商/Web应用列表。
2: 输入厂商名称并搜索默认的登陆凭据。
3: 退出程序

好了,不用谢。欢迎关注“IoT前哨站”微信和微博。

超五百万次下载的17个暗藏挖矿程序镜像被Docker移除

Docker Hub 是一个分享预配置 Docker 镜像的仓库,预配置的镜像可以节省管理员的设置时间。Docker 公司近日从 Docker Hub 移除了 17 个含有挖扩程序或 Reverse Shell 后门的恶意 Docker 镜像,这些镜像在 Docker Hub 上已存在接近一年,估计已被下载超过 500 万次。

网络安全机构Kromtech Security Center 指出,去年 7 月,用户名为 docker123321 的人上传了 3 个公开访问的镜像,它们包含了挖矿代码,有用户后来报告其中一个有后门。然而相关账号和镜像并没有在接到举报后从 Docker Hub 移除。在之后的几个月里,该账号又上传了 14 个恶意镜像。Docker Hub 直到上个月才对这些恶意镜像采取行动。与挖矿代码相关联的钱包地址显示,这些恶意镜像挖出了价值约 9 万美元的门罗币。

本次事件的时间轴记录

Docker 用户不妨检查自己的系统是否下载了相关的恶意 Docker 镜像,以采取相对应的行动,这些镜像分别是:

docker123321/tomcat

docker123321/tomcat11

docker123321/tomcat22

docker123321/kk

docker123321/mysql

docker123321/data

docker123321/mysql0

docker123321/cron

docker123321/cronm

docker123321/cronnn

docker123321/t1

docker123321/t2

docker123321/mysql2

docker123321/mysql3

docker123321/mysql4

docker123321/mysql5

docker123321/mysql6

转载自:开源中国社区

入侵 50 多国的 VPNFilter 恶意软件是何来头?

据外媒报道,美国联邦调查局(FBI)称,俄罗斯电脑黑客用 VPNFilter 恶意软件入侵了全球50多个国家数以十万计的家用和办公室路由器,可能借此收集用户资料或阻断网络流量。

美国司法部称,据信黑客来自一个名为“Sofacy”的组织,该组织受俄罗斯政府“指挥”,据信其主要目标是乌克兰。

因为“VPNFilter”恶意软件的代码与 BlackEnergy 恶意软件的代码相同,而BlackEnergy 曾多次对乌克兰发起大规模攻击。思科发布的分析报告也表明,VPNFilter 利用各国的命令和控制(C2)基础设施,以惊人的速度主动感染乌克兰境内及多个国家主机。

西方专家指出,俄罗斯对乌克兰企业展开的网络袭击已持续一年多,造成数以亿计美元的损失,以及至少一次停电事故。

不过,对于乌克兰政府指责莫斯科计划在26日的欧冠赛决赛前,对乌克兰国家机构和私营公司发动网络袭击的说法,克里姆林宫予以否认。

较早前,思科公司Talos安全团队曾透露,此次被黑客袭击的目标包括Linksys、MikroTik、NETGEAR 和 TP-Link 的路由器,以及 QNAP 网络附加存储(NAS)设备。

该团队研究分析结果显示, VPNFilter 破坏性较强,可通过烧坏用户的设备来掩盖踪迹,比简单地删除恶意软件痕迹更深入。
利用 VPNFilter 恶意软件,攻击者还可以达到多种其他目的,如监视网络流量并拦截敏感网络的凭证;窥探到 SCADA 设备的网络流量,并部署针对 ICS 基础设施的专用恶意软件;利用被感染设备组成的僵尸网络来隐藏其他恶意攻击的来源;导致路由器瘫痪并使受攻击的大部分互联网基础设施无法使用。

据悉,VPNFilter 属于高度模块化的框架,允许快速更改操作目标设备,同时能为情报收集和寻找攻击平台提供支撑。

其实施攻击的路径主要分为三个阶段:

第1阶段恶意软件会通过重新启动植入,该阶段主要目的是获得一个持久化存在的立足点,并使第2阶段的恶意软件得以部署。

第2阶段恶意软件拥有智能收集平台中所期望的功能,比如文件收集、命令执行、数据过滤和设备管理,某些版本也具有自毁功能,覆盖了设备固件的关键部分,并可重新引导设备,使其无法使用。

此外,还有多个阶段3的模块作为第2阶段恶意软件的插件,提供附加功能,当前思科Talos团队已发现了两个插件模块:一个数据包嗅探器来收集通过该设备的流量,包括盗窃网站凭证和监控 Modbus SCADA 协议,以及允许第2阶段与Tor通信的模块,据称仍然有其他几个插件模块但当前还没有发现。

目前Talos开发并部署了100多个Snort签名,用于与此威胁相关的设备的漏洞。这些规则已经部署在公共Snort集合中,大家可以使用这些规则来保护设备。也可对VPNFilter 涉及的域名/ip地址做黑名单,并将其与该威胁关联起来,进行检测拦截防御。

如果路由器和NAS设备已被感染,建议用户恢复出厂默认值,升级最新版本打上最新补丁并重新启动。

FBI的一名官员称,在黑客袭击中受影响的路由器是用户在电子展或网上购买的。但不排除互联网公司提供给客户的路由器也受影响。

与树莓派谈共享 —— Windows有现成的NFS客户端?

很多树莓玩家都在用 Winscp 等软件在 Windows 和树莓派之间来回传文件。虽然也能用,但感觉总不像Windows网上邻居的共享那么方便。

如果只跟Windows共享,用Samba倒也可以。如果要让Windows和Linux都能挂载树莓派上的共享区域呢?

其实很多朋友不知道,为了方便跟 Unix/Linux 交互,微软早就在Windows系统里准备了NFS客户端,找到“打开或关闭Windows功能”,将相关工具开启即可使用。

Windows 7及后续版本都支持,不管是服务器版还是桌面版。

步骤如下:首先在远程树莓派上设置好NFS,我的设置和共享目录如图所示。

然后在本地Windows进控制面板,打开“Windows 功能”选项卡,选择相关组件。

功能开启成功后可以对 NFS 客户端进行设置,比如选择TCP协议还是UDP协议。一般我共享视频播放的时候,会选择UDP协议。具体怎么设置请自己考虑。

软挂载和硬挂载的区别:

对硬挂载文件系统来说,如果因为某种原因远程系统的响应失败,比如NFS服务端挂掉等,则NFS客户端将会持续地尝试建立连接,这样可能导致执行df等命令出现挂死的现象。

而对软挂载文件系统来说,同样情况下,在指定的时间间隔后NFS客户端将会放弃尝试建立连接而发送一个错误消息。

默认采用硬挂载文件系统,系统硬挂载尝试失败时,对用户输入的响应也会停止。正是因为这样,有的用户更喜欢采用软挂载,它会使系统在尝试挂载失败后停止尝试。

设置完成后,可以用以下命令进行挂载树莓派上的目录,映射到本地的X盘。

挂载成功后,你会看到Windows系统中多了一个X盘符,点进去会发现树莓派共享出来的目录。

下命从X盘拷贝一个视频到桌面看看,内网速度1.16MB/秒。还凑合。当然,你也可以往里面粘贴文件,读写均可,跟网上邻居一样好用。

本文来自“IoT前哨站”,转载请注明出处。

微软在苏格兰水域部署节能数据中心

微软近日透露,作为代号Project Natick的实验计划的一部分,微软已经在苏格兰水域部署、或者更准确地说是沉浸了一个独立的数据中心。

这个40英尺长如胶囊般的数据中心拥有864台服务器和27.6PB的存储空间。据微软称,数据中心内的硬件由专门的散热器冷却,这些散热器使用最初为潜艇开发的技术,从外部泵入冷海水。

微软将利用这个胶囊来评估在海底运营数据中心的经济可行性。理论上说,利用海底的低水温可以降低计算设备的冷却成本,而这部分成本这是传统陆地设施的最大开支之一。此外这种方法也可以减轻过程中电网的负担。

对用户来说,潜在的好处是可以更快地访问在线服务。将水下数据中心置于沿海地区附近,将有助于减少居住在海岸线120英里以内、全球一半以上人口的等待时间。

当然,实现这一愿景说起来容易但做起来难。部署一批这样的海底胶囊将是非常复杂的任务,至少从目前微软部署实施所需的工作量判断是这样的。

把这个数据中心沉入海底的旅程,是从法国一家组装工厂开始的。微软工程师在完成测试将其关闭,并利用一辆18轮卡车把它运往苏格兰。从那里,一艘装有起重机的驳船将其拖到海面进行部署。

微软在一篇博客文章中详细介绍说:“团队在这个过程中使用了10台绞车、1台起重机、1台龙门驳船、和1台伴随着数据中心的遥控车辆。一辆遥控车辆从海底取回一条包含光纤和电源线的电缆,并将其连接到经过检查并连接到数据中心的表面,然后数据中心通电运行。”

Project Natick项目的工程师将在未来12个月内监控该数据中心的性能和物理状态。微软人工智能和研究部门副总裁Peter Lee认为,微软在这个过程中学到的经验不仅可以帮助推动项目本身,还可以帮助基于陆地的数据中心。

“当你向月球发射的时候,你可能永远不会登上月球。如果你这么做了,很棒。但是除此之外,你会学到很多东西,沿途都会有意想不到的收获。我们正在研究磁盘故障、机架设计、冷却系统的机械工程,这些将反馈到我们正常的数据中心。”

用 Adafruit 和 树莓派 读取 DHT11 温湿度传感器

DHT11 温湿度传感器尽管不是使用效率最高的温湿度传感器,但价格便宜被广泛应用。之前我们介绍了用树莓派从 DHT11 温度湿度传感器读取数据的教程,其原理理解起来较为复杂,下面我们介绍另一种基于Adafruit DHT 库读取 DHT11 数据的方法。

DHT11 规格

DHT11 有四个引脚,但是其中一个没有被使用到。所有有的模块会简化成3个引脚。

湿度检测范围 : 20-80% (5% 精度)
温度检测范围 : 0-50°C (±2°C 精度)

该厂商不建议读取频率小于2秒,如果这么做数据可能会有误。

硬件连接

需要在电源和数据脚之间串联一个上拉电阻(4.7K-10K),通常情况下,购买DHT11模块的话都自带了这个电阻。不同的模块型号引脚位置略有不同,下面以图上模块为说明:

数据引脚可以根据你的需要自行修改。

Python 库

DHT11 的读取需要遵循特定的信号协议完成,为了方便我们使用Adafruit DHT 库。

软件安装

开始之前需要更新软件包:

sudo apt-get update
sudo apt-get install build-essential python-dev

从 GitHub 获取 Adafruit 库:

sudo git clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT

给 Python 2 和 Python 3 安装该库:

sudo python setup.py install
sudo python3 setup.py install

示例程序
Adafruit 提供了示例程序,运行下面的命令测试。

cd ~
cd Adafruit_Python_DHT
cd examples
python AdafruitDHT.py 11 17

这两个参数分别表示 DHT11 和数据引脚所接的树莓派 GPIO 编号。成功的话会输出:

Temp=22.0* Humidity=68.0%

如何在其他 Python 程序中使用这个库
参照下面的方法引入 Adafruit 库,然后就可以使用 “read_retry” 方法来读取 DHT11 的数据了:

import Adafruit_DHT

# Set sensor type : Options are DHT11,DHT22 or AM2302
sensor=Adafruit_DHT.DHT11

# Set GPIO sensor is connected to
gpio=17

# Use read_retry method. This will retry up to 15 times to
# get a sensor reading (waiting 2 seconds between each retry).
humidity, temperature = Adafruit_DHT.read_retry(sensor, gpio)

# Reading the DHT11 is very sensitive to timings and occasionally
# the Pi might fail to get a valid reading. So check if readings are valid.
if humidity is not None and temperature is not None:
    print(‘Temp={0:0.1f}*C Humidity={1:0.1f}%’.format(temperature, humidity))
else:
    print(‘Failed to get reading. Try again!’)

另外,温度传感器还有 DS18B20,这个传感器虽然没有湿度数据,但是其易用且稳定,有兴趣的朋友可以进一步了解。

来自:树莓派实验室