Adafruit.io


Adafruit.io 用于实时在线显示物联网项目的 数据。它是一个云服务器,可用于通过 Wi-Fi 连接物联网设备,并通过仪表板控制这些设备。它可以作为免费服务使用,并且拥有简单易用的界面来设计仪表板。身份验证密钥可以直接从用户的帐户生成,并可以包含在程序中以将物联网组件连接到相应的仪表板。数据流对于建立连接非常重要,它使用将物联网电路连接到 Adafruit 仪表板的程序。数据流是用于存储在仪表板和物联网电路之间来回传输的数据和相关信息的容器。

本文通过一个简单的示例,介绍了将物联网设备连接到使用 Adafruit.io 创建的在线仪表板的过程。连接是使用 Wi-Fi 建立的。

将物联网设备与 Adafruit 仪表板连接的步骤

步骤 1 - 使用 ESP32、BMP180 传感器和一个蓝色 LED 制造电路图。

步骤 2 - 在 Arduino IDE 中编写 C 语言程序。

步骤 3 - 打开 https://io.adafruit.com/ 并注册。登录帐户并获取密钥。

步骤 4 - 为温度、压力、海拔高度和蓝光设置数据流,然后创建一个仪表板并设置这些数据流的布局。

步骤 5 - 使用 USB 数据线将电路连接到计算机并运行程序。

步骤 6 - 使用串口监视器检查结果,并检查仪表板上的读数。

在 Adafruit.io 上设置数据流

下面介绍了在 Adafruit.io 上设置温度、压力、海拔高度和蓝光数据流的设置。这些数据流将连接到 Adafruit.io 仪表板以及 BMP180 传感器读数和蓝色 LED。

图 1:连接仪表板和物联网设备数据的所需数据流。

制作电路

将 BMP180 传感器连接到 ESP32。将 SCL 连接到 ESP32 的 D22,将 SDA 连接到 ESP32 的 D21。另外,使用 ESP32 的 D18 引脚连接蓝色 LED。将 GND 连接到负轨,将 Vin 连接到正轨。将 ESP32 的 3v3 连接到正轨,将 ESP32 的 GND 连接到负轨。

图 2:Adafruit.io 项目的电路图。

编写代码

在 Arduino IDE 中编写 C 语言程序。代码如下:

// Required library to make the connection of Arduino board through internet
#include <WiFi.h>

//required for using BMP180 sensor
#include <Adafruit_BMP085.h>
//required message queue telemetry transport protocol to subscribe and publish feeds
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"

/************************* WiFi Access Point *********************************/
//use your own SSID and password
#define WLAN_SSID    "Write SSID Here"
#define WLAN_PASS    "Write Wifi Password here"

/************************* Adafruit.io Setup *********************************/
// the adafruit server to connect
#define AIO_SERVER    "io.adafruit.com"

// the port to connect
#define AIO_SERVERPORT 1883

// get this key from your own Adafruit Account
#define AIO_USERNAME "Write your Adafruit IO username here"
#define AIO_KEY "Write Your Adafruit IO key here"

WiFiClient wclient;

Adafruit_MQTT_Client mqtt(&wclient, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);

//Feeds Settings

//temperature value that will be read through BMP180 sensor
Adafruit_MQTT_Publish temperature = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/temperature");

//pressure value that will be read through BMP180 sensor
Adafruit_MQTT_Publish pressure = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/pressure");

//altitude value that will be read through BMP180 sensor
Adafruit_MQTT_Publish altitude = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/altitude");

// Setup a feed called 'bluelight' for subscribing to changes.
Adafruit_MQTT_Subscribe bluelight = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/bluelight");

void MQTT_connect();

const int BLUE_LED = 18;

float t;
float p;
float a;

String stringOne;

Adafruit_BMP085 bmpObj;

void setup() {
   Serial.begin(9600);
   delay(10);
   
   pinMode(BLUE_LED, OUTPUT);
   digitalWrite(BLUE_LED, LOW);
   
   Serial.println("Adafruit MQTT demo");
   
   // Connect to WiFi access point.
   Serial.println(); Serial.println();
   Serial.print("Connecting to ");
   Serial.println(WLAN_SSID);
   
   WiFi.begin(WLAN_SSID, WLAN_PASS);
   while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
   }
   Serial.println();
   
   Serial.println("WiFi connected");
   Serial.println("IP address: "); Serial.println(WiFi.localIP());
   
   // Setup MQTT subscription for bluelight feed.
   mqtt.subscribe(&bluelight);
   if (!bmpObj.begin()) {
      Serial.println("BMP180 Sensor not detected ! ! !");
      while (1) {}
   }
}
uint32_t x = 0;

void loop() {
   t = bmpObj.readTemperature();
   p = bmpObj.readPressure();
   a = bmpObj.readAltitude();
   // a = bmpObj.readAltitude(102000);
   Serial.println(t);
   Serial.println(p);
   Serial.println(a);
   
   delay(100);
   
   MQTT_connect();
   
   Adafruit_MQTT_Subscribe *subscription;
   while ((subscription = mqtt.readSubscription(5000))) {
      if (subscription == &bluelight) {
         Serial.print("Got: ");
         Serial.println((char *)bluelight.lastread);
         digitalWrite(BLUE_LED, HIGH);
         
         stringOne = (char *)bluelight.lastread;
         Serial.print("stringOne: ");
         Serial.println(stringOne);
         
         if (stringOne == "ON") {
            digitalWrite(BLUE_LED, HIGH);
         }
         if (stringOne == "OFF") {
            digitalWrite(BLUE_LED, LOW);
         }
      }
   }
   if (! temperature.publish(t)) {
      Serial.println("Temperature measure Failed");
   } else {
      Serial.println("Temperature measure OK!");
   }
   if (! pressure.publish(p)) {
      Serial.println("pressure measure Failed");
   } else {
      Serial.println("pressure measure OK!");
   }
   if (! altitude.publish(a)) {
      Serial.println("Altitude measure Failed");
   } else {
      Serial.println("Altitude measure OK!");
   }
}
void MQTT_connect() {
   int8_t retvar;
   if (mqtt.connected()) {
      return;
   }
   Serial.print("Connecting to MQTT... ");
   uint8_t trytimes = 3;
   while ((retvar = mqtt.connect()) != 0) {
      Serial.println(mqtt.connectErrorString(retvar));
      Serial.println("retrying MQTT connection in 5500 mseconds...");
      mqtt.disconnect();
      delay(5500); // wait 5 seconds
      trytimes--;
      if (trytimes == 0) {
         while (1);
      }
   }
}

查看结果 - 在 Adafruit.io 仪表板

图 3:显示 Adafruit.io 上的仪表板,其中包含 BMP180 传感器读数和 LED 控制按钮。

查看结果 - 在串口监视器

图 4:显示运行程序时在串口监视器上看到的结果。

本文介绍了如何使用 BMP180 传感器、LED 和 ESP32 来使用 Adafruit.io。首先,制作电路。然后登录 Adafruit.io 并创建数据流,然后使用数据流在 Adafruit 上创建一个仪表板。然后使用 Arduino IDE 中的 C 语言编写程序并运行它,以便在 Adafruit 仪表板和串口监视器上查看结果。

更新于:2023年4月18日

浏览量 1K+

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.