ESP8266 教程:ESP8266 Homepie 与 OTA 笔记

Particle Photon 给我印象最深的两个特性是:其内置的WiFi,以及通过无线(OTA)更新设备的可能性。但是,使用 Photon 作为一个简单的温度传感器是相当昂贵的,在这里购买 23.00 欧元以上。

相比之下,ESP 家族的微控制器是更加便宜,我订购了几个所谓的 NodeMCU 开发工具包(每个 3.89 欧元)和 Wemos D1(每个 3.63 欧元)。在价格上,我没有弄错, 他们甚至包括从中国过来的邮资和处理。我们所需要的是两周的耐心。

ESP8266 与 Homepie

这两个都是基于 ESP8266,因此他们有板载 WiFi。 NodeMCU 可以使用支持 Lua 编程语言的固件(甚至是 BASIC)。我已经决定使用一个我或多或少感到舒服的环境,即 Arduino for ESP8266 固件,这个固件通过 Arduino IDE 进行安装是非常简单的。

这些小的微控制器能工作,但是有点麻烦的是不得不发明样板(boilerplate)代码,以便于重新连接、错误重启等。

我偶然发现了由马文·罗杰(Marvin Roger)创建的一个叫做 homie-esp8266 的项目。 它基本上是一个小型的框架,它能将 ESP8266连接到 MQTT,并提供自动连接/重新连接处理、JSON配置、可选的 Web UI 以配置最初在接入点模式下启动的微控制器,以及支持我创建的用于更新代码的 Over-the-Air (OTA)。 是的:OTA 支持和TLS。

Martin 显然仔细考虑了:一个设备应该如何与其环境进行交互,代码反映了这一点。因此,举个例子,当我的一个传感器启动时,它会发布这些保留的 MQTT 消息:

sensors/homie/cf3a07e0/$nodes light:light,temperature:temperature,relay:relay
sensors/homie/cf3a07e0/$online true
sensors/homie/cf3a07e0/$name Livingroom bookshelf
sensors/homie/cf3a07e0/$localip 192.168.1.192
sensors/homie/cf3a07e0/$fwname h-sensor
sensors/homie/cf3a07e0/$fwversion 1.0.1
sensors/homie/cf3a07e0/temperature/unit c
sensors/homie/cf3a07e0/$signal 96
sensors/homie/cf3a07e0/temperature/degrees 23.38

$nodes 通知消费者,我在设备上提供的端点类型。 $online 表示设备当前是否处于活动状态,$name 是最初分配给设备的描述,$signal 是微控制器看到的 WiFi 覆盖的指示等。然后,设备开始发布我希望从设备中,提供的温度以及其他任何传感器数据。

Hompie-ESP8266 消息处理

homie-esp8266 框架还能监听 MQTT 消息:例如,我可以使用以下命令切换已连接到 Wemos-D1 的继电器:

mosquitto_pub -t 'sensors/homie/cf3a07e0/relay/on/set' -m true

当 Homie 收到上面的发布信息时,我为该设备创建的代码被调用,然后它可以做一些事情,例如, 打开继电器,并指示 Homie 注意到发生了行动,于是 Homie 将发布一个指示当前状态的保留值(注意在本主题结尾处的 /set ):

sensors/homie/cf3a07e0/relay/on true

使用 homie-esp8266 框架可以做到这一点:

#include <Homie.h>

#define RELAY_PIN 16

HomieNode relayNode("relay", "relay");

bool relayHandler(String message)
{
    if (message == "true") {
        digitalWrite(RELAY_PIN, HIGH);
        Homie.setNodeProperty(relayNode, "on", "true");
    } else if (message == "false") {
        digitalWrite(RELAY_PIN, LOW);
        Homie.setNodeProperty(relayNode, "on", "false");
    } else {
        return false;
    }

    return true;
}

void setup()
{
    pinMode(RELAY_PIN, OUTPUT);
    digitalWrite(RELAY_PIN, LOW);

    Homie.setFirmware("h-sensor", "1.0.1");
    relayNode.subscribe("on", relayHandler);
    Homie.registerNode(relayNode);
    Homie.setup();
}

void loop()
{
    Homie.loop();
}

Homepie

我上面提到的 Homie,可以通过一个基于 Web 的界面进行配置,当一个设备最初启动时(非常清楚:截图中的站点只是托管 HTML 来与您的 Homie ESP 通讯;设备本身不会与云对话):...

一旦完成,设备将连接到您在配置期间指定的 WiFi 网络,并开始对其进行操作。 或者,我们可以将 JSON 配置文件上传到设备上的闪存文件系统,或者以编程方式创建(我使用的是一个小程序)。与实际的 Homie 固件分开存储配置的最大好处是,我可以在设备上重新编写(例如 OTA)不同的程序,并使用之前的配置设置(例如MQTT代理,端口等)。

OTA 更新是通过向 $ota 节点发布版本号来触发的;然后,Homie 验证收到的版本是否高于正在运行的版本,并指示 ESP 启动并通过 HTTP/HTTPS 获取更新。(这里的工作原理在这里有相当好的解释。)我认为有必要提到 homie-esp8266 框架是无云(cloudless)的; 它不需要云服务,而是与您配置的服务器交谈。

Homie 的文档很好,丰富,有一些例子可以让我们很快开始。 Marvin 一直非常有帮助,他很快就实现了在我请求时为 MQTT 发布一个 base_topic 的可能性。

带有板载 WiFi 和 4MB 闪存的邮票大小的芯片,可通过 TLS 使用 MQTT,并可在 4.00 欧元以下能更新OTA。非常令人兴奋。

扩展阅读:

  • Ben 找到了另一个称为 ESPEasy 的固件。 我看了一眼,看起来相当有能力,但它似乎适合那些希望在ESP上多用一个工具箱的人。

原文链接:http://jpmens.net/2016/03/22/mqtt-on-an-esp8266-thing/

尚未评分
您的评分将帮助我们做出更好的玩法

观光\评论区

Copyright © 2017 玩点什么. All Rights Reserved.