使用Raspberry Pi将基本温度记录到Internet

47

这里有很多温度记录系统的示例,但我想创建自己的并保持其美观和简单。我想尝试的另一件事是使用第三方服务将数据记录到Internet。一世’在使用我自己的基于网站的数据库之前就已经做到了,但这要涉及更多一点。

所以这是我在基本温度下的尝试“Internet of Things”希望可以帮助其他人入门或构成项目基础的设备。

硬件

基本温度记录仪该设备包括:

  • Raspberry Pi A +型
  • 基本情况
  • BMP180传感器模块
  • 带330ohm电阻的LED
  • 小开关
  • 4芯母母跳线
  • 2个2路接头

BMP180压力温度模块 传感器

我选择了BMP180传感器,因为我已经有一个可用的传感器 BMP180 I2C数字气压传感器 文章。该传感器体积小,价格便宜,可处理温度和压力。它通过I2C接口与Pi通信,因此需要最少的布线。

LED (可选)

为了提供一些视觉反馈,我添加了一个绿色LED。阳极(+ ve)通过330ohm电阻连接到引脚11(GPIO17),阴极(-ve)连接到引脚9。我选择了这两个引脚,因为它们彼此相邻,并允许我使用2引脚接头并将LED直接插入Pi’s 通用输入输出 接头.

Edimax 7811un WiFi加密狗

WiFi加密狗

当我想使用模型A +时,我需要一个WiFi加密狗以使Pi与互联网通信。一世’ve got a few 爱迪迈斯EW-7811UN USB加密狗,所以我用了其中之一。您将需要设置WiFi,以便它可以成功连接到您的网络。你可以用我的 在Raspberry Pi上设置WiFi指南。我也禁用了省电模式 使用本指南.

开关

那里的开关告诉脚本退出和/或关闭Pi。它使用另一个2针接头连接到引脚15(GPIO22)和引脚17(3V3)。默认情况下,脚本会在引脚15上启用一个内部下拉电阻,以便GPIO22为低电平。按下开关时,它已连接至3.3V并拉至高电平。该脚本监视开关,如果按下该开关,则退出。通过将AUTO_SHUTDOWN标志设置为1,Pi也可以根据需要关闭自身。

组件设置

这是我连接温度传感器,LED和开关的方式。

温度记录仪硬件电路
以下是连接详细信息:

信号名称接针
开关 通用输入输出 2215
开关 3V317
LED (+) 通用输入输出 1711
LED (-) nd 9
BMP180 VCC3V31
BMP180接地 nd 6
BMP180 SDA I2C SDA 3
BMP180 SCL I2C SCL 5

 

Thingspeak and The 物联网

对于第三方服务,我研究了多种选择。我排除了其中一些,因为它们:

  • 无法说明费用是多少(如果有)
  • 无法定义免费试用和付费选项之间的区别
  • 无法确切说明您如何提交数据
  • 免费选项仅保留几天的数据

我开始 Thingspeak.com 只是因为 一键点击他们的主页 我确切地知道提交数据所要做的事情。配置仪表板很容易,并且没有’不需要阅读任何其他帮助。确定仪表的设置需要更多阅读信息,但图表相当简单。

基本温度记录仪经过一些剪切和粘贴后,我的第一个脚本在五分钟之内起作用。还有很多其他服务,但是对于这个项目,Thingspeak非常适合我。一世’我不反对支付服务费用,但我希望每个人都可以轻松做一些事情,而不必担心成本或必须使用免费的,有时间限制的试用版。对于具有更多数据的更精致的系统,您可能需要购买功能更丰富的服务。

使用我的示例脚本 您将需要设置一个Thingspeak帐户 ,创建一个新渠道并获取“Write API Key”从API设置中。看到 官方文件 求助。

蟒蛇 脚本

主脚本读取温度和压力并将其发送到“Field 1” and “Field 2”。它依赖于一个附加文件来使用BMP180传感器。这两个脚本都是必需的,应保存在同一位置:

您可以将这两个文件直接下载到启用Internet的Pi上,或者在Web浏览器中右键单击以上链接,或者在命令提示符下运行它们:

wget //bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/bmp180.py
wget //bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/templogger.py

然后可以使用以下命令在命令行上执行脚本:

须藤python templogger.py

该脚本将文本更新打印到屏幕上。通过WiFi通过SSH启动时,我希望脚本在断开连接后继续运行,所以我改用以下命令:

须藤python templogger.py > /dev/null &

在此命令中,状态输出定向到“null”(即忽略)和&确保脚本在后台运行。

在启动时自动运行

为了避免手动启动脚本,您可以将其配置为在Pi启动时启动。您可以通过编辑rc.local文件来实现:

sudo nano /etc/init.d/rc.local

然后在文件底部添加以下行:

sudo  蟒蛇  /home/pi/templogger.py > /home/pi/templogger.log 2>&1

您可以使用[CTRL-X],[Y]和[ENTER]保存并退出Nano编辑器。

在启动时,该行运行Python脚本并将文本输出定向到日志文件。如果您要查找故障,这是一个有用的文件。日志中的值以逗号分隔,因此如果您要分析数据,可以将其加载到电子表格应用程序中。

任何时候按下开关都将导致脚本停止。如果AUTO_SHUTDOWN设置为1,则Pi将关闭。 20秒后,可以断开电源。

组态

该脚本具有一些值 你会需要 调整。最重要的一个是Thingspeak API密钥。您需要输入自己的密钥才能更新频道。您可以使用以下命令直接编辑Python脚本:

nano templogger.py

或者通过在启动分区上的配置文件中提供一组新值。如果文件名为“/boot/templogger.cfg”存在,第一行是“Temp Logger”而是使用后面的值。这是一个示例配置文件:

温度记录仪
0x77
1
17
22
10
1
ABCDEFG123456789
//api.thingspeak.com/update

您可以使用以下方法创建配置文件:

sudo nano /boot/templogger.cfg

然后按照上面的示例创建内容。

由于该文件位于/ boot分区中,因此您可以在打开设备电源之前在PC上编辑配置文件。如果您想更改读数之间的间隔,这有时会很有用。

该脚本没有’t检查文件中的错误。确保以正确的顺序指定了所有值。预期它们的顺序与原始Python脚本中列出的顺序相同。

 

最终结果

一旦设备启动并运行,您’已经配置了Thingspeak Channel,您可以产生如下输出:

温度和压力图

这些图表会随着新数据的到来实时更新。该通道还允许您以CSV,XML和Json格式下载数据。

以10分钟为间隔,每24小时为您提供144个数据点。您可以将图形设置为显示一定数量的数据点,以便进行调整以提供适当的数据分布。

我在示例中仅使用了两个数据流(温度和压力),但Thingspeak将总共接受八个数据流。

这是我的公众 RPiSpy 温度记录仪 Channel.

 

分享。

47条留言

  1. 克里斯多夫·德波

    不错的项目,几乎是我’m looking for!
    I’d。想监控冰箱的温度。我不’t think it’将pi放入冰箱是一个好主意….
    有谁知道温度传感器可以将数据发送到pi,因此pi可以发送到Thingspeak?

    亲切的问候,
    克里斯多夫

  2. 我收到以下错误:

    文件“templogger.py”, line 127, in
    主要()
    文件“templogger.py”, line 101, in main
    通用输入输出 .setup(LEDGPIO,GPIO.OUT)
    UnboundLocalError:局部变量‘LEDGPIO’分配前引用

  3. 很棒的文章,节省了我很多时间。转换为可与DHT11温湿度传感器配合使用。迪登’我不了解Thingspeak,所以再次感谢。

  4. 嗨,马特
    在全新的A +和最近下载的NOOBS上,该程序停在第一行,即’t找到系统管理总线模块。我直接从您那里下载了清单。一世’在配置A +时遇到其他问题,但是… I’我曾尝试将smbus更改为SMBus,但没有任何更改!

    It’这是一个很棒的项目构想,因为我在离家三个月的时间里度过了冬天,并且需要记录温度来猜测要给家带来多少热量!

    感谢您的任何建议。

    杰弗里

  5. 嗨,马特,

    记录仪工作正常– up to a point! See //thingspeak.com/channels/62333

    它保持停止,而没有任何数量的样本或时间运行模式。从2小时到36小时不等。您可以看到一些差距,然后才能手动重新启动它。
    我想到了与加密狗有关的节电问题,因此运行了iwconfig:

    pi @ raspberrypi〜$ iwconfig
    wlan0 IEEE 802.11bgn ESSID:”BTHub4-CG6F”
    模式:管理频率:2.412 GHz接入点:18:83:BF:45:46:99
    比特率= 65 Mb / s Tx功率= 20 dBm
    重试短时限制:7 RTS thr:off片段thr:off
    电源管理:关闭
    链路质量= 61/70信号电平= -49 dBm
    接收无效nwid:0接收无效crypt:0接收无效碎片:0
    Tx过多重试:303无效的杂项:660丢失的信标:0

    没有无线扩展。

    …所以我想省电不是问题。
    还有其他想法吗?
    The A+ is running with a 功率 ed hub and in the same room as the router. (for the moment. 最终我 need it to run in the loft!). The dongle is an RT5370.

    最终我’我希望记录仪能为我提供鸽舍的温度,以便在1月’ March, I’在国外,我可以调节楼下的温度以适应农村的冬天。如果我能’为了使其始终如一地工作,我将问如何从Android设备通过网络重新启动它!

    杰弗里

  6. 嗨,马特。

    很棒的帖子。感谢您使一切变得如此容易。只是想知道您是否知道如何提取数据以进行鸣叫。一世’拖曳了互联网并不断尝试从任何地方到任何地方破解代码,但我可以’获取相关字符串以更新Twitter。一世’m使用Tweepy,因为它看起来非常简单。

    感谢您(或其他任何人)可以提供的任何指导。

    乔纳森

  7. 嗨,马特,

    我们注意到,如果Internet连接一段时间后,此脚本将停止。有没有一种方法可以重新启动脚本,而无需直接与控制台打交道或重新启动pi?简单的启动自动启动无助于此,似乎templogger.py代码本身并未停止执行,但可能是urllib或urllib2库。这是移动宽带连接的问题,如果延迟会有所帮助“lost connection”而不丢失代码执行。无论如何,感谢您提供的出色代码,来自芬兰的问候-

  8. 你好,马特。
    首先,我要祝贺一个伟大的项目。
    我是从Rasberry开始的,但我对此并不了解。
    我有一个问题和要求。
    是否有可能在该项目中添加两个额外的传感器DS18B20和DHT11,以及在ThinkSpeak上像BMP180一样进行传输测量?
    如果是这样,可以用一些简单的方式来解释如何做吗?
    我对PY和Raspberry不太了解。
    谢谢您的帮助。
    对不起我的英语,我希望我写得通俗易懂。
    再次感谢你。
    问候达米安

  9. 如何在此草皮中添加DHT11以获得湿度和第二温度?
    我可以使用Adafriut-DHT-library读取传感器,但是我的python对于sendData来说还不够好-

  10. 嗨,马特

    好贴。寻找物联网。既然物联网在这里,我’d想问一些问题。

    功耗呢?由于物联网也意味着低功耗。您将如何处理‘problem’?

    最好的祝福,

    塞缪尔

    • 最终,如果您使用的是Pi,则会陷入所使用模型的功耗问题。如果您确实需要将其降低到最低限度,则最好使用其他设备。功耗是为什么我更喜欢A +而不是B + / Pi 2或Pi 3的原因。对于温度记录,您可以使用基于Arduino的设备,并且有很多例子可以证明这一点。

  11. 我对此很陌生,这篇文章很棒!我太新了,无法弄清楚如何以及在哪里将温度从摄氏温度更改为华氏温度(以及在美国使用的mBar中使用!)。有解决方案的人吗?

    谢谢!!

  12. 感谢你的这篇文章。发生错误时如何再次处理sendData的异常‘无法到达服务器’。或者捕获错误并继续运行,直到到达下一个睡眠时间。

    • 您可以将sendData行包装在try块中:

      try:
        sendData(THINGSPEAKURL,THINGSPEAKKEY,'field1','field2',temperature,pressure)
      except:
        time.sleep(0.1)
  13. 这是一篇很棒的文章,但我知道’已经很老了,所以我想知道情况是否已经改变。

    当我跑步时…

    须藤python templogger.py

    我收到以下错误…

    追溯(最近一次通话):
    文件“templogger.py”, line 26, in
    导入bmp180#传感器库
    ImportError:没有名为bmp180的模块

    我错过了什么吗?

    谢谢

  14. 嗨,我发现我使用ThingSpeak开户时收到的最初的3个API代码导致了错误,因为那是我使用的那个。发现写API是要使用的一种。现在已经在在线图表上获得了数据。
    但这仍然使用我修改为可用的python程序templogger .py

发表评论

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.