ESP32 Gửi kết quả đọc cảm biến BME280 tới InfluxDB

ESP32 Gửi kết quả đọc cảm biến BME280 tới InfluxDB

Giới thiệu InfluxDB

InfluxDB là một cơ sở dữ liệu chuỗi thời gian mã nguồn mở. Nó được sử dụng để lưu trữ và thu thập dữ liệu chuỗi thời gian thường được sử dụng trong các ứng dụng IoT, phân tích dữ liệu thời gian thực, giám sát hoạt động, v.v. Một lượng lớn dữ liệu có thể được lưu trữ hiệu quả mỗi giây với dấu thời gian được liên kết với mỗi điểm dữ liệu.

Biểu trưng InfluxDB

Hãy để chúng tôi định nghĩa một số thuật ngữ khóa InfluxDB thường được sử dụng trong khi sử dụng cơ sở dữ liệu này.

Vùng lưu trữ: Vùng lưu trữ là một nơi được chỉ định nơi lưu trữ dữ liệu. Trong khi tạo vùng lưu trữ, bạn chỉ định tên và khoảng thời gian để dữ liệu bị xóa.

Điểm: Một điểm bao gồm một tập hợp dữ liệu liên tiếp. Nó bao gồm một phép đo, bộ thẻ, khóa trường, giá trị trường và dấu thời gian.

Thẻ (khóa thẻ và giá trị thẻ): Các cột trong dữ liệu được gọi là thẻ. Thẻ bao gồm một tập hợp dữ liệu cung cấp cho chúng tôi thông tin về dữ liệu khác thường được truy vấn. Mặc dù chúng là tùy chọn nhưng nó giúp tổ chức dữ liệu một cách hiệu quả. Chúng được lập chỉ mục.

Trường (khóa trường và giá trị trường): Một trường bao gồm khóa trường và giá trị trường được lưu trữ trong các cột tương ứng của chúng. Chúng không được lập chỉ mục. Ở đây, khóa trường là một kiểu chuỗi mô tả tên của trường. Mặt khác, giá trị trường mô tả giá trị của trường. Nó có thể là gõ chuỗi, phao, int hoặc boolean.

Đo lường: Dữ liệu này hiển thị dữ liệu (thẻ, trường, dấu thời gian) được lưu trữ trong các trường liên quan. Tên đo lường là một chuỗi và được chọn theo cách mô tả dữ liệu mà nó chứa.

Thiết lập cơ sở dữ liệu InfluxDB

Bây giờ chúng ta hãy xem cách dễ dàng thiết lập cơ sở dữ liệu InfluxDB của chúng ta để ghi nhật ký dữ liệu ESP32. Đầu tiên, hãy truy cập trang web chính thức của InfluxDB  và nhấp vào nút 'Get InfluxDB' như được đánh dấu bên dưới.

InfluxDB tạo tài khoản 1

Bạn sẽ phải tạo một tài khoản đám mây InfluxDB miễn phí. Bạn có thể tiếp tục với tài khoản Google hoặc Microsoft của mình hoặc đăng nhập bằng cách cung cấp thông tin chi tiết của bạn như được hiển thị bên dưới để tạo tài khoản.

InfluxDB tạo tài khoản 2

Bước tiếp theo là chọn nơi bạn muốn lưu trữ dữ liệu. Chúng tôi đang chọn Google Cloud làm bộ nhớ. Bạn cũng có tùy chọn sử dụng các dịch vụ web của Amazon và Microsoft Azure. Hơn nữa, tên công ty cũng sẽ được yêu cầu. Đừng quên đánh dấu vào thỏa thuận sau khi đọc nó.

InfluxDB lưu trữ dữ liệu

Tiếp theo, chúng tôi sẽ được yêu cầu chọn một kế hoạch. Chúng tôi sẽ gắn bó với gói 'Miễn phí' vì nó hoạt động tốt với các dự án của chúng tôi.

InfluxDB chọn kế hoạch

Bây giờ trang bắt đầu sẽ mở ra. Bây giờ chúng tôi đã đăng nhập thành công vào InfluxDB, đặt đích lưu trữ và chọn gói đám mây InfluxDB của chúng tôi. Bây giờ chúng tôi đã sẵn sàng để tải dữ liệu.

Trang bắt đầu InfluxDB

Tải dữ liệu

Để tải dữ liệu vào InfluxDB, hãy bắt đầu bằng cách nhấp vào nút Thêm như được tô sáng bên dưới.

InfluxDB tải dữ liệu

Thao tác này sẽ mở phần tải dữ liệu. Ở đây trong tab 'Nguồn', chọn Arduino làm thư viện khách hàng.

InfluxDB tải dữ liệu 2

Thao tác này cũng sẽ mở ra trang vùng lưu trữ với mã mẫu. Hiện tại chúng tôi không có bất kỳ thùng nào. Đầu tiên, chúng ta sẽ phải tạo một bucket. Nhấp vào '+ CREATE BUCKET' để tiếp tục.

InfluxDB tạo Bucket 1

Đặt tên cho vùng lưu trữ của bạn và tùy chỉnh tùy chọn xóa dữ liệu theo yêu cầu của bạn. Sau đó nhấp vào 'TẠO' để hoàn tất quá trình tạo vùng lưu trữ.

InfluxDB tạo Bucket 2

Bây giờ như bạn có thể thấy, trong trang vùng lưu trữ, chúng ta có thể xem vùng lưu trữ mà chúng ta vừa tạo. Chúng tôi đã đặt tên cho nó là 'ESP32' và nó có thể được tìm thấy trong phần xô. Nhấp đúp chuột vào nó để vùng lưu trữ được chọn.

InfluxDB tạo Bucket 3

Lấy tham số InfluxDB (URL, ORG và Bucket)

Đây là một bước rất quan trọng. Chúng ta sẽ lấy InfluxDB URL, ORG và Bucket. Các tham số này sẽ được sử dụng bên trong bản phác thảo chương trình của chúng tôi để gửi dữ liệu thành công đến InfluxDB.

Bên trong vùng lưu trữ ESP32 của chúng tôi, hãy chuyển đến phần 'Khởi tạo máy khách'. Tại đây bạn có thể xem định nghĩa của các tham số InfluxDB khác nhau. Sao chép INFLUXDB_URL, INFLUXDB_ORG và INFLUXDB_BUCKET.

InfluxDB tạo Bucket 4

Nhận API Token

Bước quan trọng tiếp theo là tạo API Token. Điều này cũng được yêu cầu để đọc/ghi an toàn vào cơ sở dữ liệu InfluxDB.

Ở phía ngoài cùng bên trái, hãy nhấp vào biểu tượng mũi tên như hình dưới đây rồi chọn Mã thông báo API.

InfluxDB API Mã thông báo 1

Bây giờ hãy nhấp vào + GENERATE API TOKEN và sau đó nhấp vào All Access API Token như được đánh dấu bên dưới:

InfluxDB API Mã thông báo 2

Cung cấp mô tả cho Mã thông báo API không giới hạn của bạn và lưu nó.

InfluxDB API Mã thông báo 3

Bây giờ mã thông báo API của bạn sẽ được tạo. Sao chép nó và lưu nó một cách an toàn. Bạn sẽ không thể xem lại.

InfluxDB API Mã thông báo 4

ESP32: Ghi lại số đọc BME280 vào InfluxDB

Bây giờ chúng ta đã sẵn sàng để gửi các điểm dữ liệu ESP32 trong InfluxDB. Vì mục đích trình diễn, chúng tôi sẽ giao diện bảng ESP32 của mình với cảm biến BME280 và gửi các chỉ số nhiệt độ, độ ẩm và áp suất hiện tại đến vùng lưu trữ ESP32 của chúng tôi trong InfluxDB.

Cảm biến BME280 được sử dụng để đo các chỉ số liên quan đến nhiệt độ môi trường, áp suất khí quyển và độ ẩm tương đối. Nó chủ yếu được sử dụng trong các ứng dụng web và di động, nơi tiêu thụ điện năng thấp là chìa khóa. Cảm biến này sử dụng \để giao tiếp dữ liệu với các bộ điều khiển vi mô. Mặc dù có một số phiên bản BME280 khác nhau có sẵn trên thị trường, nhưng phiên bản chúng tôi sẽ nghiên cứu sử dụng giao thức truyền thông I2C.

I2C có nghĩa là Mạch liên tích hợp và hoạt động theo nguyên tắc của hệ thống đa nô lệ đồng bộ, đa chủ. Với BME280 và bảng ESP, ESP32 hoạt động như một bậc thầy và cảm biến BME280 như một nô lệ vì nó là một thiết bị bên ngoài, hoạt động như một nô lệ. Các bảng phát triển ESP giao tiếp với cảm biến BME280 thông qua giao thức I2C để lấy nhiệt độ, áp suất khí quyển và độ ẩm tương đối.

Hình dưới đây cho thấy cảm biến BME280 và sơ đồ chân của nó.

Sơ đồ sơ đồ chân BME280

Sơ đồ chân BME280

  • VCC: kết nối với 3.3V

  • SCL: dùng để tạo tín hiệu đồng hồ

  • SDA: được sử dụng trong việc gửi và nhận dữ liệu

Giao diện cảm biến BME280 với ESP32

Cảm biến BME280 giao tiếp với ESP32

Việc kết nối BME280 với bo mạch ESP32 rất dễ dàng. Chúng ta phải kết nối thiết bị đầu cuối VCC với 3.3V, nối đất với mặt đất (mặt bằng chung), SCL của cảm biến với SCL của mô-đun và SDA của cảm biến với chân SDA của mô-đun ESP.

Chân I2C trong ESP32 cho SDA là GPIO21 và cho SCL là GPIO22.

Chúng tôi sẽ cần các thành phần sau để kết nối bo mạch ESP32 với cảm biến BME280.

  1. Bảng ESP32

  2. Cảm biến BME280

  3. Dây kết nối

  4. Breadboard

Thực hiện theo sơ đồ bên dưới cho mô-đun ESP32 và kết nối chúng cho phù hợp.

BME280 với ESP32 MicroPython

Thiết lập Arduino IDE để ghi dữ liệu cảm biến ESP32 vào InfluxDB

Chúng tôi sẽ sử dụng Arduino IDE để lập trình ESP32 của chúng tôi. Vì vậy, bạn nên có phiên bản Arduino IDE mới nhất. Ngoài ra, bạn cũng cần cài đặt plugin ESP32.

Cài đặt Thư viện InfluxDB trong Arduino IDE

Mở Arduino IDE và nhấp vào Sketch > Library > Manage Libraries

MPU-6050 Cài đặt thư viện

Cửa sổ sau sẽ mở ra.

thư viện tìm kiếm Arduino IDE

Nhập 'Influxdb' vào thanh tìm kiếm và nhấn enter. Cài đặt phiên bản mới nhất của thư viện như hình dưới đây. Thư viện này tương thích với cả bảng phát triển ESP8266 và ESP32.

Cài đặt Thư viện InfluxDB

Cài đặt Thư viện BME280 Arduino

Vì chúng tôi đang kết nối cảm biến BME280 với ESP32, vì vậy chúng tôi sẽ phải cài đặt thư viện BME280 vào mô-đun của mình. Chúng tôi sẽ yêu cầu hai thư viện cho dự án này:

Chúng tôi sẽ sử dụng Trình quản lý thư viện trong Arduino IDE của chúng tôi để cài đặt các phiên bản mới nhất của thư viện. Mở Arduino IDE của bạn và đi tới Sketch > Bao gồm thư viện > Quản lý thư viện. Nhập tên thư viện Adafruit BME280 vào thanh tìm kiếm và cài đặt cả hai.

Adafruit BME280 thư viện Arduino IDE

Mở Arduino IDE của bạn và đi tới Sketch > Bao gồm thư viện > Quản lý thư viện. Nhập tên thư viện cảm biến thống nhất Adafruit vào thanh tìm kiếm và cài đặt nó.

Cài đặt thư viện cảm biến hợp nhất Adafruit

Sau khi cài đặt các thư viện, hãy khởi động lại IDE của bạn.

Phác thảo: ESP32 Ghi dữ liệu cảm biến BME280 vào InfluxDB

Mở Arduino IDE của bạn và đi tới Tệp > Mới để mở tệp mới. Sao chép mã được cung cấp bên dưới trong tệp đó. Hãy nhớ thay đổi thông tin đăng nhập Wi-Fi, URL InfluxDB, org, tên vùng lưu trữ và mã thông báo API. Ngoài ra, hãy đặt chuỗi múi giờ theo vị trí của bạn để đồng bộ hóa thời gian một cách chính xác.

Bản phác thảo này tạo ra ba điểm dữ liệu (nhiệt độ, độ ẩm và áp suất) trên cơ sở dữ liệu với các thẻ và trường. Sau mỗi 10 giây, nó sẽ lưu các kết quả đọc cảm biến được lấy từ BME280 được kết nối với bảng phát triển ESP32.

#include <WiFiMulti.h>

#include <InfluxDbClient.h>

#include <InfluxDbCloud.h>

#include <Wire.h>

#include <Adafruit_Sensor.h>

#include <Adafruit_BME280.h>

 

WiFiMulti wifiMulti;

Adafruit_BME280 bme; 

 

float temperature;

float humidity;

float pressure;

 

#define DEVICE "ESP32"

#define WIFI_SSID "WRITE_YOUR_SSID"

#define WIFI_PASSWORD "WRITE_YOUR_PASSWORD"

#define INFLUXDB_URL "WRITE_YOUR_URL"

#define INFLUXDB_TOKEN "WRITE_YOUR_API_TOKEN"

#define INFLUXDB_ORG "WRITE_YOUR_ORG"

#define INFLUXDB_BUCKET "WRITE_YOUR_BUCKET"

 

// Set timezone string according to https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html

#define TZ_INFO "PKT-5"

 

// InfluxDB client instance with preconfigured InfluxCloud certificate

InfluxDBClient client(INFLUXDB_URL, INFLUXDB_ORG, INFLUXDB_BUCKET, INFLUXDB_TOKEN, InfluxDbCloud2CACert);

 

// Data points

Point sensor1("temperature_status");

Point sensor2("humidity_status");

Point sensor3("pressure_status");

 

 

void setup() {

  Serial.begin(115200);

  WiFi.mode(WIFI_STA);

  wifiMulti.addAP(WIFI_SSID, WIFI_PASSWORD);

  Serial.print("Connecting to wifi");

  while (wifiMulti.run() != WL_CONNECTED) {

    Serial.print(".");

    delay(500);

  }

  Serial.println();

 

  if (!bme.begin(0x76)) {

    Serial.println("Could not detect a BME280 sensor, Fix wiring Connections!");

    while (1);

  }

 

  // Add tags

  sensor1.addTag("device", DEVICE);

  sensor1.addTag("SSID", WiFi.SSID());

 

  sensor2.addTag("device", DEVICE);

  sensor2.addTag("SSID", WiFi.SSID());

 

  sensor3.addTag("device", DEVICE);

  sensor3.addTag("SSID", WiFi.SSID());

  

  timeSync(TZ_INFO, "pool.ntp.org", "time.nis.gov");

  

  if (client.validateConnection()) {

    Serial.print("Connected to InfluxDB: ");

    Serial.println(client.getServerUrl());

  } else {

    Serial.print("InfluxDB connection failed: ");

    Serial.println(client.getLastErrorMessage());

  }

}

 

void loop() {

  // Store measured values into points

  sensor1.clearFields();

  sensor2.clearFields();

  sensor3.clearFields();

  

  temperature = bme.readTemperature();

  humidity = bme.readHumidity();

  pressure = bme.readPressure() / 100.0F;

  

  sensor1.addField("Temperature",temperature);

  sensor2.addField("Humidity",humidity);

  sensor3.addField("Pressure",pressure);

 

  Serial.print("Writing: ");

  Serial.println(client.pointToLineProtocol(sensor1));

  Serial.println(client.pointToLineProtocol(sensor2));

  Serial.println(client.pointToLineProtocol(sensor3));

  

  // If no Wifi signal, try to reconnect it

  if (wifiMulti.run() != WL_CONNECTED) {

    Serial.println("Wifi connection lost");

  }

  // Write point

  if (!client.writePoint(sensor1)) {

    Serial.print("InfluxDB write failed for temperature: ");

    Serial.println(client.getLastErrorMessage());

  }

 

    if (!client.writePoint(sensor2)) {

    Serial.print("InfluxDB write failed for humidity: ");

    Serial.println(client.getLastErrorMessage());

  }

 

    if (!client.writePoint(sensor3)) {

    Serial.print("InfluxDB write failed for pressure: ");

    Serial.println(client.getLastErrorMessage());

  }

  Serial.println("");

  Serial.println("Delay 10s");

  delay(10000);

}

 

Mã hoạt động như thế nào?

Bước đầu tiên là bao gồm tất cả các thư viện cần thiết cho dự án này. WiFiMulti thư viện sẽ cho phép chúng tôi thêm nhiều mạng Wi-Fi bên trong bản phác thảo của mình và ESP32 kết nối với mạng mạnh nhất. Tuy nhiên, chúng tôi sẽ sử dụng một mạng duy nhất trong ví dụ này. Thứ hai, cũng bao gồm các thư viện InfluxDB mà chúng tôi vừa cài đặt. Điều này sẽ đảm bảo giao tiếp ESP32 dễ dàng và thành công với InfluxDB. Hơn nữa, các thư viện khác bao gồm chức năng BME280.

#include <WiFiMulti.h>

#include <InfluxDbClient.h>

#include <InfluxDbCloud.h>

#include <Wire.h>

#include <Adafruit_Sensor.h>

#include <Adafruit_BME280.h>

Tiếp theo, tạo một đối tượng của WiFiMulti như hình dưới đây:

WiFiMulti wifiMulti;

Sau đó, xác định đối tượng Adafruit_BME280 có tên bme bằng cách đặt nó trên các chân I2C GPIO mặc định của ESP32.

Adafruit_BME280 bme; 

Tiếp theo, khai báo các biến để giữ các chỉ số cảm biến BME280 như nhiệt độ, áp suất và độ ẩm. Chúng được khai báo là kiểu thả nổi vì chúng ta sẽ xử lý các giá trị số có thể có dấu thập phân nổi. Nói cách khác, các giá trị được trả về bởi cảm biến BME280 là các giá trị dấu phẩy động.

 

float temperature;

float humidity;

float pressure;

Thông số InfluxDB

Chỉ định tên của thiết bị mà bạn sẽ sử dụng. Trong trường hợp của chúng tôi, đó là ESP32.

#define DEVICE "ESP32"

Bước tiếp theo rất quan trọng. Xác định cẩn thận SSID Wi-Fi, mật khẩu Wi-Fi, URL InfluxDB, InfluxDB ORG, mã thông báo API InfluxDB và tên vùng lưu trữ InfluxDB. Các tham số liên quan đến InfluxDB là những tham số mà trước đây chúng tôi đã có được và lưu lại.

#define WIFI_SSID "WRITE_YOUR_SSID"

#define WIFI_PASSWORD "WRITE_YOUR_PASSWORD"

#define INFLUXDB_URL "WRITE_YOUR_URL"

#define INFLUXDB_TOKEN "WRITE_YOUR_API_TOKEN"

#define INFLUXDB_ORG "WRITE_YOUR_ORG"

#define INFLUXDB_BUCKET "WRITE_YOUR_BUCKET"

Bây giờ, hãy xác định múi giờ theo vị trí của bạn. Điều này là cần thiết để đồng bộ hóa thời gian.

Tham khảo liên kết được cung cấp bên dưới để có được múi giờ gần nhất với vị trí của bạn và xác định múi giờ đó trong mã.

Chúng tôi đã đặt múi giờ cho Châu Á / Karachi, do đó chúng tôi sử dụng PKT-5.

// Set timezone string according to https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html

#define TZ_INFO "PKT-5"

Bước tiếp theo là tạo một phiên bản InfluxDBCliant. Thao tác này sẽ tạo ra một máy khách an toàn với chứng chỉ được định cấu hình sẵn.

InfluxDBClient client(INFLUXDB_URL, INFLUXDB_ORG, INFLUXDB_BUCKET, INFLUXDB_TOKEN, InfluxDbCloud2CACert);

Ở đây chúng ta sẽ tạo ba điểm dữ liệu được gọi là 'temperature_status', 'humidity_status' và 'pressure_status' trong cơ sở dữ liệu InfluxDB. Chúng sẽ bao gồm phép đo, bộ thẻ, khóa trường, giá trị trường và dấu thời gian. Trong trường hợp này, các trường hợp điểm được gọi là sensor1, sensor2 và sensor3 tương ứng cho ba lần đọc.

Point sensor1("temperature_status");

Point sensor2("humidity_status");

Point sensor3("pressure_status");

thiết lập()

Bên trong hàm setup(), chúng ta sẽ mở giao tiếp nối tiếp với tốc độ truyền là 115200. Sau đó, chúng tôi sẽ đặt ESP32 ở chế độ trạm.

Serial.begin(115200);

WiFi.mode(WIFI_STA);

Sau đó, thêm mạng Wi-Fi cho ESP32 để kết nối. Điều này sẽ được thực hiện bằng phương thức addAP() trên đối tượng WiFiMulti. Ở đây chúng tôi sẽ chỉ định hai tham số. Tham số đầu tiên là SSID và tham số thứ hai là mật khẩu. Bạn có thể thêm bao nhiêu mạng tùy thích. Chúng tôi chỉ thêm một mạng duy nhất.

wifiMulti.addAP(WIFI_SSID, WIFI_PASSWORD);

Chúng ta sẽ sử dụng phương thức run() trên đối tượng WiFimulti, để kết nối ESP32 với kết nối Wi-Fi mạnh nhất. Thao tác này trả về trạng thái của kết nối Wi-Fi.

Các dòng mã sau đây sẽ được sử dụng để theo dõi xem ESP32 có được kết nối hay không. Trong khi kết nối bị mất, nó sẽ cố gắng kết nối lại.

Serial.print("Connecting to wifi");

  while (wifiMulti.run() != WL_CONNECTED) {

    Serial.print(".");

    delay(500);

  }

  Serial.println();

Kiểm tra xem cảm biến BME280 có được khởi tạo hay không.

  if (!bme.begin(0x76)) {

    Serial.println("Could not detect a BME280 sensor, Fix wiring Connections!");

    while (1);

  }

Bây giờ thêm các thẻ vào các điểm dữ liệu. Điều này được thực hiện bằng cách sử dụng phương thức addTag() trên các trường hợp điểm. Nó có hai tham số. Đầu tiên là khóa thẻ và thứ hai là giá trị thẻ.

Ở đây chúng tôi đang thêm hai thẻ vào ba điểm dữ liệu. Một cho tên thiết bị và một cho SSID Wi-Fi.

  sensor1.addTag("device", DEVICE);

  sensor1.addTag("SSID", WiFi.SSID());

 

  sensor2.addTag("device", DEVICE);

  sensor2.addTag("SSID", WiFi.SSID());

 

  sensor3.addTag("device", DEVICE);

  sensor3.addTag("SSID", WiFi.SSID());

Tiếp theo, chúng ta sẽ đồng bộ hóa thời gian với máy chủ NTP bằng hàm timeSync().

timeSync(TZ_INFO, "pool.ntp.org", "time.nis.gov");

Cuối cùng, máy khách InfluxDB xác nhận kết nối của nó với máy chủ. Một thông báo có liên quan sẽ được in trong màn hình nối tiếp trong cả hai trường hợp nếu máy khách có được kết nối hay không.

 

  if (client.validateConnection()) {

    Serial.print("Connected to InfluxDB: ");

    Serial.println(client.getServerUrl());

  } else {

    Serial.print("InfluxDB connection failed: ");

    Serial.println(client.getLastErrorMessage());

  }

vòng lặp()

Bên trong hàm loop(), chúng ta lưu trữ dữ liệu đến điểm. Trước hết, chúng tôi sẽ xóa tất cả các trường của các trường hợp điểm.

  sensor1.clearFields();

  sensor2.clearFields();

  sensor3.clearFields();

Sau đó, chúng tôi sẽ truy cập các chỉ số cảm biến BME280 và lưu chúng trong các biến phao nhiệt độ, độ ẩm và áp suất. Số đọc nhiệt độ có được thông qua bme.readTemperature(). Số đọc áp suất và độ ẩm được truy cập bằng cách sử dụng các hàm bme.readPressure ()/ 100.0F và bme.readHumidity() tương ứng.

  temperature = bme.readTemperature();

  humidity = bme.readHumidity();

  pressure = bme.readPressure() / 100.0F;

Tiếp theo, chúng ta thêm trường Nhiệt độ vào điểm temperature_status, trường Độ ẩm vào điểm humidity_status và trường Áp suất vào điểm pressure_status của chúng ta Điều này được thực hiện bằng cách sử dụng phương thức addField() trên các trường hợp Điểm. Chúng tôi chỉ định khóa là tham số đầu tiên và giá trị là tham số thứ hai.

  sensor1.addField("Temperature",temperature);

  sensor2.addField("Humidity",humidity);

  sensor3.addField("Pressure",pressure);

Sau đó, chúng tôi sẽ hiển thị trên màn hình nối tiếp thông tin đang được ghi vào các điểm. Dữ liệu sẽ được hiển thị trong biểu mẫu Giao thức dòng.

  Serial.print("Writing: ");

  Serial.println(client.pointToLineProtocol(sensor1));

  Serial.println(client.pointToLineProtocol(sensor2));

  Serial.println(client.pointToLineProtocol(sensor3));

Ngoài ra, hãy kết nối với mạng Wi-Fi trong trường hợp ngắt kết nối.

  if (wifiMulti.run() != WL_CONNECTED) {

    Serial.println("Wifi connection lost");

  }

Cuối cùng, viết điểm vào cơ sở dữ liệu sau mỗi 10 giây. Điều này được thực hiện bằng cách sử dụng client.writePoint() và truyền điểm làm tham số bên trong nó.

if (!client.writePoint(sensor1)) {

    Serial.print("InfluxDB write failed for temperature: ");

    Serial.println(client.getLastErrorMessage());

  }

 

    if (!client.writePoint(sensor2)) {

    Serial.print("InfluxDB write failed for humidity: ");

    Serial.println(client.getLastErrorMessage());

  }

 

    if (!client.writePoint(sensor3)) {

    Serial.print("InfluxDB write failed for pressure: ");

    Serial.println(client.getLastErrorMessage());

  }

  Serial.println("");

  Serial.println("Delay 10s");

  delay(10000);

Cuộc biểu tình

Chọn đúng bảng và cổng COM trước khi tải mã của bạn lên bảng.
Đi tới Bảng > Công cụ và chọn Mô-đun Nhà phát triển ESP32.

Chọn bảng ESP32

Tiếp theo, đi tới Công cụ > Cổng và chọn cổng thích hợp mà qua đó bảng của bạn được kết nối.

Chọn COM PORT ESP32

Nhấp vào nút tải lên để tải mã lên bảng phát triển ESP32. Sau khi bạn đã tải mã của mình lên bảng phát triển ESP32, hãy nhấn nút ENABLE của nó.

Nút đặt lại bật ESP32

Trong Arduino IDE của bạn, hãy mở màn hình nối tiếp và đặt tốc độ truyền thành 115200. Đầu tiên, bo mạch sẽ kết nối với Wi-Fi cục bộ sau đó thời gian sẽ đồng bộ hóa. Tiếp theo, máy khách được kết nối với máy chủ InfluxDB và bạn có thể xem dữ liệu được ghi vào cơ sở dữ liệu sau mỗi 10 giây.

ESP32 gửi số đọc BME280 đến màn hình nối tiếp InfluxDB

Trực quan hóa dữ liệu trong InfluxDB

Bây giờ chúng ta hãy trực quan hóa dữ liệu mà chúng ta đã gửi đến InfluxDB Cloud. Đăng nhập vào tài khoản InfluxDB của bạn và truy cập Data Explorer như hình dưới đây.

InfluxDB Trình khám phá dữ liệu

Thao tác này sẽ mở trang Data Explorer. Ở đây chúng ta sẽ có thể vẽ đồ thị dữ liệu đang được gửi đến đám mây InfluxDB. Đầu tiên hãy nhấp vào vùng lưu trữ ESP32. Sau đó, để xem số đọc nhiệt độ, nhấp temperature_status bên dưới bộ lọc đo, SSID đang được sử dụng trong bộ lọc SSID, Nhiệt độ là thẻ trường bên dưới bộ lọc trường và ESP32 trong bộ lọc thiết bị. Nhấp vào Gửi để hiển thị dữ liệu.

ESP32 gửi số đọc BME280 đến InfluxDB dữ liệu thám hiểm nhiệt độ 1

Bây giờ bạn có thể xem dữ liệu nhiệt độ đang được vẽ trong biểu đồ. Bạn cũng có thể tùy chỉnh nó.

ESP32 gửi số đọc BME280 đến InfluxDB dữ liệu thám hiểm nhiệt độ 2

Để xem số đọc áp suất, nhấp pressure_status bên dưới bộ lọc đo, SSID đang được sử dụng trong bộ lọc SSID, Áp suất là thẻ trường dưới bộ lọc trường và ESP32 trong bộ lọc thiết bị. Nhấp vào Gửi để hiển thị dữ liệu.

Bây giờ bạn có thể xem dữ liệu áp suất đang được vẽ trong biểu đồ.

ESP32 gửi số đọc BME280 đến áp suất khám phá dữ liệu InfluxDB

Tương tự, để xem số đọc độ ẩm, hãy nhấp humidity_status bên dưới bộ lọc đo, SSID đang được sử dụng trong bộ lọc SSID, Độ ẩm là thẻ trường bên dưới bộ lọc trường và ESP32 trong bộ lọc thiết bị. Nhấp vào Gửi để hiển thị dữ liệu.

Bây giờ bạn có thể xem dữ liệu độ ẩm đang được vẽ trong biểu đồ.

ESP32 gửi số đọc BME280 đến độ ẩm khám phá dữ liệu InfluxDB

Hơn nữa, bạn cũng có thể hiển thị dữ liệu ở nhiều định dạng khác nhau bao gồm băng tần, thước đo, biểu đồ tần suất, bản đồ, v.v. Chỉ cần chọn nó từ menu thả xuống bên dưới.

InfluxDB Trình khám phá dữ liệu 4

Xây dựng InfluxDB BME20 Dashboard

Bây giờ hãy để chúng tôi chỉ cho bạn cách hiển thị dữ liệu ở các định dạng khác nhau trên cùng một trang. Chúng tôi sẽ tạo một bảng điều khiển. Đi tới biểu tượng Bảng điều khiển và nhấp vào nó.

InfluxDB Tạo Dashboard

Thao tác này sẽ mở Bảng điều khiển mở. Hiện tại, chúng tôi không có bất kỳ bảng điều khiển nào được tạo. Nhấp vào nút '+ TẠO BẢNG ĐIỀU KHIỂN' như được đánh dấu bên dưới:

InfluxDB Tạo Bảng điều khiển 1

Đặt tên cho trang tổng quan của bạn. Sau đó bấm THÊM Ô để thêm trực quan hóa.

InfluxDB Tạo Bảng điều khiển 2

Nhiệt độ

Chỉ định tên của ô. Chúng tôi đã đặt cho nó cái tên 'BME280 Temperature Reading Celsius'. Tiếp theo, chọn trực quan hóa từ menu thả xuống. Chúng tôi đã chọn Single Stat.

Để có được dữ liệu, hãy thực hiện một truy vấn như chúng ta đã làm trước đây trong trình khám phá dữ liệu. Đầu tiên hãy nhấp vào vùng lưu trữ ESP32, sau đó đánh dấu vào temperature_status bên dưới bộ lọc đo, SSID đang được sử dụng trong bộ lọc SSID, Nhiệt độ là thẻ trường dưới bộ lọc trường và ESP32 trong bộ lọc thiết bị. Nhấp vào nút gửi để các thay đổi diễn ra. Bạn sẽ có thể xem trực quan hóa. Vì chúng tôi đang hiển thị số đọc nhiệt độ dưới dạng một chỉ số duy nhất, do đó chúng tôi có số đọc 29.99. Bạn cũng có thể tùy chỉnh trực quan hóa từ nút TÙY CHỈNH. Sau khi bạn hài lòng, hãy nhấp vào nút đánh dấu để ô được thêm vào bảng điều khiển.

ESP32 gửi bài đọc BME280 đến dữ liệu InfluxDB Tạo Dashboard 1

Như bạn có thể thấy, việc đọc bây giờ có thể được nhìn thấy trong bảng điều khiển của chúng tôi.

ESP32 gửi bài đọc BME280 đến dữ liệu InfluxDB Tạo Dashboard 2

Để thêm trực quan hóa khác, hãy nhấp lại vào 'THÊM Ô' và làm theo quy trình như được mô tả trước đây.

Áp lực

Bên cạnh việc thêm hình ảnh trực quan cho các bài đọc áp lực, chúng ta sẽ tạo một ô khác. Đặt tên cho nó. Chúng tôi đã đặt cho nó cái tên 'BME280 Pressure Readings'. Tiếp theo, chọn trực quan hóa từ menu thả xuống. Chúng tôi đã chọn Biểu đồ lần này.

Để có được dữ liệu, hãy thực hiện một truy vấn như chúng ta đã làm trước đây trong trình khám phá dữ liệu. Đầu tiên hãy nhấp vào vùng lưu trữ ESP32, sau đó đánh dấu vào pressure_status bên dưới bộ lọc đo, SSID đang được sử dụng trong bộ lọc SSID, Áp suất là thẻ trường dưới bộ lọc trường và ESP32 trong bộ lọc thiết bị. Nhấp vào nút gửi để các thay đổi diễn ra. Bạn sẽ có thể xem trực quan hóa. Chúng tôi đã tùy chỉnh biểu đồ bằng cách thêm Áp suất nhãn trục y (hPa). Sau khi bạn hài lòng, hãy nhấp vào nút đánh dấu để ô được thêm vào bảng điều khiển.

ESP32 gửi bài đọc BME280 đến dữ liệu InfluxDB Tạo Dashboard 3

Độ ẩm

Tương tự, chúng tôi thêm hình ảnh trực quan cho các bài đọc độ ẩm. Tạo một ô mới và đặt tên cho nó. Chúng tôi đã đặt cho nó cái tên 'BME280 Humidity Reading'. Tiếp theo, chọn trực quan hóa từ menu thả xuống. Chúng tôi đã chọn Gauge lần này.

Để có được dữ liệu, hãy thực hiện một truy vấn như chúng ta đã làm trước đây trong trình khám phá dữ liệu. Đầu tiên hãy nhấp vào vùng lưu trữ ESP32, sau đó đánh dấu vào humidity_status bên dưới bộ lọc đo, SSID đang được sử dụng trong bộ lọc SSID, Độ ẩm là thẻ trường dưới bộ lọc trường và ESP32 trong bộ lọc thiết bị. Nhấp vào nút gửi để các thay đổi diễn ra. Bạn sẽ có thể xem trực quan hóa. Chúng tôi đã tùy chỉnh thước đo bằng cách thêm % làm hậu tố. Sau khi bạn hài lòng, hãy nhấp vào nút đánh dấu để ô được thêm vào bảng điều khiển.

ESP32 gửi bài đọc BME280 đến dữ liệu InfluxDB Tạo Dashboard 4

Đây là cách bảng điều khiển Đọc cảm biến ESP32 BME280 của chúng tôi trông như thế nào với ba ô được thêm vào. Bạn cũng có thể thay đổi cài đặt để đặt thời gian làm mới bảng thông tin của mình.

ESP32 gửi bài đọc BME280 đến dữ liệu InfluxDB Tạo Dashboard 5

 

Bài viết cùng chuyên mục

NHANH

NHANH

Vì Đổi mới liên tục nên Nhanh hơn

ĐÚNG

ĐÚNG

Coi trọng và ưu tiên việc làm Đúng

ĐỦ

ĐỦ

Tìm và mua Đủ Đơn hàng hơn

KỊP THỜI

KỊP THỜI

Hiệu suất tối ưu bởi Kịp Thời hơn