如何将Cayenne IoT与ESP8266和MQTT结合使用
本教程涵盖了如何使用MQTT协议基于Cayenne IoT Platform ESP8266构建IoT系统。 涵盖:
- 使用MQTT协议将数据从ESP8266发送到Cayenne IoT
- 如何使用Cayenne IoT远程控制ESP8266。
在本分步教程中,我们将从两个不同的角度使用Cayenne IoT平台:
- 首先需要将连接到ESP8266的传感器的读数发送到IoT云平台(即Cayenne IoT平台)
- 第二个是我们必须远程控制ESP8266的位置
第一种情况发生在我们必须将从连接到ESP8266的传感器获取的数据发送到云中时。这是一个常见的场景,通常来说,它在每次需要通过MQTT采集和发送数据时发生。当需要通过MQTT远程控制设备时,会发生另一种情况。在这种情况下,我们将通过Cayenne IoT Platform的MQTT协议控制ESP8266。
我们都知道当今物联网的重要性,以及在不久的将来总会有更多连接的设备这一事实。家用电器,智能设备,可穿戴设备等将成为我们生活的一部分。显而易见,物联网(IoT)的重要性以及我们必须为下一个未来做好准备的事实。在此Cayenne IoT教程中,您将学到一些重要概念,这些概念是IoT系统的基础。
我们已经广泛地介绍了如何使用MQTT协议,如果您是新手,则应该在开始本教程之前阅读MQTT的含义和使用方法。
另一方面,Cayenne是一个物联网云平台,可提供以下几种云服务:
- 数据可视化(Data visualization)
- 物联网云(IoT cloud)
- 快讯(Alerts)
如何使用MQTT将数据从ESP8266发送到Cayenne IoT
在本项目的第一部分中,我们将介绍如何使用MQTT将数据从ESP8266发送到Cayenne IoT。 为了简单起见,此物联网项目使用一个简单的BMP280传感器。 该传感器能够测量:
- 温度(temperature)
- 湿度(humidity)
- 压力(pressure)
该Cayenne IoT项目的主要目标是专注于如何使用MQTT将数据从ESP8266发送到Cayenne IoT平台。 另一方面,我们希望使其他事情保持简单。 在深入介绍如何将BMP280传感器连接到ESP8266的描述之前,配置Cayenne IoT平台以使其接受来自我们IoT设备的数据非常有用。
如何将ESP8266连接到Cayenne IoT平台
第一步是在Cayenne IoT平台上配置设备。 为此,必须使用此链接创建一个免费帐户。
准备就绪后,移至Cayenne IoT平台,然后单击“添加新…”按钮。 选择设备/小部件,然后选择您的物联网板。 在本示例中,我们使用ESP8266。 最后,Cayenne IoT平台应显示一个Web页面,其中包含有关如何通过MQTT将Arduino连接到Cayenne的所有详细信息。
一旦正确配置了Cayenne IoT,我们就可以专注于原理图。 在下图中,显示了如何将Wemos D1连接到BMP / BME280。 无论如何,如果您使用Arduino,则原理图非常相似。

连接就绪后,我们可以集中精力配置Cayenne IoT平台以接受来自ESP8266的数据。
为MQTT配置Cayenne IoT
第一步是创建一个新设备,如下图所示:

就这样。 现在是时候连接我们的物联网设备了。 为此,您可以将Cayenne库导入到Arduino IDE中:

安装库后,可以移至“文件”->“示例”->“ CayenneMQTT”->“连接”,然后获得与IoT设备匹配的代码。 以下代码用于ESP8266:
//#define CAYENNE_DEBUG
#define CAYENNE_PRINT Serial
#include <CayenneMQTTESP8266.h>
// WiFi network info.
char ssid[] = "ssid";
char wifiPassword[] = "wifi_pwd";
// Cayenne authentication info.
// This should be obtained from the Cayenne Dashboard.
char username[] = "your usename";
char password[] = "your pwd";
char clientID[] = "your client_id";
void setup() {
Serial.begin(9600);
Cayenne.begin(username, password, clientID, ssid, wifiPassword);
}
void loop() {
Cayenne.loop();
}
CAYENNE_OUT_DEFAULT() { // Here the data we want to send }
现在,用上面图片中的参数(MQTT用户名,MQTT密码,客户端ID)替换上面的代码中的参数,并尝试通过MQTT将您的IoT设备连接到Cayenne IoT。 如果一切配置正确,您应该得到如下所示的结果:

发送数据之前的最后一步是配置通道,就像虚拟MQTT通道一样,ESP8266在该通道中将数据发送到Cayenne。 通常,我们要测量的每个物理量都应与一个通道相关。
在此示例中,由于ESP8266发送给Cayenne温度,湿度和压力,我们添加了三个不同的通道。 当我们想创建一个仪表板,其中所有数据均来自传感器时,通道非常有用。 下图显示了如何添加压力通道:

最后,是时候使用MQTT向Cayenne发送数据了。 我们必须修改源代码,以便ESP8266从传感器读取数据并将这些值发送给Cayenne。 源代码非常简单:
.... CAYENNE_OUT_DEFAULT() {
Cayenne.virtualWrite(0, millis() / 1000);
Cayenne.celsiusWrite(1, temp);
Cayenne.virtualWrite(2, press);
Cayenne.virtualWrite(3, hum);
就是这样,现在我们可以看到实时数据,或者换句话说,数据来自连接到Arduino的传感器:

您会注意到ESP8266源代码中使用的虚拟通道。 在此Cayenne IoT教程的第一部分中,您已使用MQTT将数据从ESP8266发送到Cayenne IoT。
如何通过MQTT从Cayenne控制Arduino ESP8266
在此基于Arduino和Cayenne的IoT项目的第二部分中,我们使用MQTT远程控制ESP8266(或Arduino)。
在此示例中,Neopixel条连接到ESP8266。 目标是通过Web界面(Cayenne界面)使用MQTT控制颜色。 该示例可以进一步扩展,并且可以连接其他类型的外围设备。 下图显示了Cayenne仪表板,它将控制Neopixel栏中的RGB LED:

如您所见,有三种不同的滑块可控制红色,绿色和蓝色分量。
如何将Arduino ESP8266连接到RGB LED
第一步是将Neopixels连接到ESP8266。 请注意,如果您使用Arduino板,则连接几乎相同。 下图显示了原理图:

只有三根电线:
- Vcc (5v)
- GND (Ground)
- Signal (ESP8266 D1 pin)
要控制RGB LED,有必要导入neopixel库并将以下代码添加到草图:
include <Adafruit_neopixel.h>
#define PIN D1
#define NUMPIXELS 8
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
void updateLeds() {
for (int i=0; i < NUMPIXELS;i++)
pixels.setPixelColor(i, pixels.Color(red,green,blue))
pixels.show();
}
代码非常简单,必须定义数据引脚(在此示例中为D1)和neopixel bar支持的像素数。
如何配置Cayenne IoT仪表板

重要的是要注意为每个颜色分量选择正确的通道:
- Red (channel 1)
- Green (channel 2)
- Blue (channel 3)
您必须对所有三个颜色分量重复此步骤。 最后,您将获得如上所示的Cayenne仪表板。
从代码的角度来看,我们可以重用前面步骤中显示的代码并对其进行修改:
CAYENNE_OUT_DEFAULT() { }
CAYENNE_IN(RED_CHANNEL) {
red = getValue.asInt(); // 0 to 255
CAYENNE_LOG("Channel %d, value %d", RED_CHANNEL, red); updateLeds();
}
CAYENNE_IN(BLUE_CHANNEL) {
blue = getValue.asInt(); // 0 to 255
CAYENNE_LOG("Channel %d, value %d", BLUE_CHANNEL, blue); updateLeds();
}
CAYENNE_IN(GREEN_CHANNEL) {
green = getValue.asInt(); // 0 to 255
CAYENNE_LOG("Channel %d, value %d", GREEN_CHANNEL, green); updateLeds();
}
每个频道有3种不同的CAYENNE_IN。在每个通道中,草图都处理使用MQTT发送的新值。每次Arduino ESP8266都通过MQTT从Cayenne IoT仪表板接收到新值,它会更新RGB LED以反映新的颜色分量。
如果您对电源管理感兴趣并且想要优化电池,则可以阅读有关物联网中电源管理的教程。此外,另一篇文章介绍了如何将ESP8266与Firebase实时数据库一起使用来控制连接的设备。众所周知,Cayenne IoT并不是我们可以用来构建基于ESP8266或Arduino的IoT项目的唯一一个云平台。例如,我们也可以使用Ubidots来做到这一点。在这种情况下,您可以阅读有关如何构建Arduino MQTT客户端的教程。
将设备连接到云平台以发送传感器读数并接收命令非常重要。如果您对MQTT主题感兴趣,可以阅读如何将ESP32连接到Google IoT或如何将ESP32连接到Amazon AWS。两者都提供免费帐户来试用其服务。您将发现构建物联网系统的新方法。
总结
在本文的最后,您希望获得有关如何使用MQTT集成ESP8266和Cayenne IoT平台的知识。 您已构建了一个IoT系统,该系统使用传感器进行测量,并使用MQTT协议将数据发送至云。
在第二部分中,我们探索了如何使用MQTT控制连接到ESP8266(或Arduino)的外围设备。 通过IoT Cayenne仪表板,ESP8266利用通过MQTT发送的数据选择RGB LED颜色。
这个物联网项目可以进一步扩展,您可以将相同的原理应用于不同的场景并处理不同的传感器或外围设备。
1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!3187589@qq.com
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理,有奖励!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
SO资源 » 如何将Cayenne IoT与ESP8266和MQTT结合使用