Internet of Things với Arduino – Giám sát dữ liệu trên cloud

Kết nối cảm biến tới board Arduino

Trong hướng dẫn này, chúng ta sẽ xây dựng dự án mà ở đó chúng ta sẽ sử dụng cho phần còn lại của chương này. Chúng ta cơ bản muốn kết nối cảm biến tới board MKR1000 để liên tục đo dữ liệu. Như ví dụ trước đó, chúng ta sẽ nối quang trở (đã sử dụng trong chương đầu tiên) cũng như cảm biến DHT11 đo nhiệt độ và độ ẩm.

Sẵn sàng   

Chúng ta hãy cùng xem những thành phần bổ sung chúng ta cần cho dự án này:

  • Quang trở
  • Điện trở 10K Ohm
  • Cảm biến DHT11

Các bạn cũng có thể cần cài đặt thư viện Adafruit DHT có thể được tìm thấy bên trong phần quản lý board Arduino.

Chúng ta cũng sẽ lắp mạch cho dự án. Đầu tiên, đặt điện trở nối tiếp với quang trở trên breadboard, gần kề board MKR1000.

Bây giờ nối chân còn lại của điện trở vào cực GND trên board MKR1000 và đầu còn lại của quang trở với chân VCC của board Arduino. Cuối cùng nối chân chung giữa điện trở và quang trở vào chân tín hiệu analog A0 của board MKR1000.

Để kết nối cảm biến DHT11, đặt nó lên board. Tiếp đến kết nối chân đầu tiên của cảm biến tới VCC, chân thứ hai tới chân-5 của board Arduino, và chân cuối của cảm biến đến chân GND.

Đây là kết quả thu được:

Hình ảnh dự án được lắp hoàn thiện, từ một góc nhìn khác:

Bài viết được trích từ sách: Internet of thing với Arduino

Cách làm…

Bây giờ chúng ta sẽ viết vài dòng code để thử cảm biến. Và hãy chắc chắn mọi thứ đã được kết nối đúng, trước khi chuyển sang bước tiếp theo để gửi dữ liệu tới dịch vụ cloud:

1. Đầu tiên chúng ta sẽ thêm thư viện DHT:

#include "DHT.h"

2. Tiếp đến chúng ta định nghĩa chân mà cảm biến sẽ kết nối tới, chúng ta khai báo kiểu của cảm biến DHT như sau:

int sensorPin = A0;
#define DHTPIN 5
#define DHTTYPE DHT11

3. Chúng ta cũng cần tạo một đối tượng của cảm biến DHT:

DHT dht(DHTPIN, DHTTYPE, 15);

4. Bên trong hàm setup() của chương trình, chúng ta khởi tạo cảm biến DHT:

dht.begin();

5. Trong hàm loop() của chương trình, chúng ta đọc dữ liệu từ cảm biến DHT trước hết và in nó ra màn hình Serial:

// Reading temperature and humidity
  float humidity = dht.readHumidity();
  // Read temperature as Celsius
  float temperature = dht.readTemperature();

  // Display
  Serial.print("Temperature: ");
  Serial.print(temperature);
  Serial.println(" C");

  Serial.print("Humidity: ");
  Serial.print(humidity);
  Serial.println(" %");

6. Sau đó làm tương tự với quang trở

// Reading from analog sensor
  int sensorValue = analogRead(sensorPin);
  float lightLevel = sensorValue/1024.*100;
  // Display
  Serial.print("Light level: ");
  Serial.print(lightLevel);
  Serial.println(" %");
  Serial.println();

7. Giờ đến lúc thử dự án của chúng ta! Lấy toàn bộ code từ kho chứa Github của dự án tại https://github.com/marcoschwartz/iot-arduino-cookbook

8. Tiếp đến, nạp code cho board và mở màn hình Serial lên. Đây là thứ chúng ta sẽ thấy:

Chúc mừng nếu bạn thấy như trên, bây giờ các bạn có thể đọc dữ liệu từ cảm biến kết nối tới board MKR1000 của bạn.

Nó hoạt động như thế nào…

Trong hướng dẫn này, chúng ta sẽ được làm quen với một loại cảm biến mới với cảm biến DHT11: cảm biến số (digital). Những loại cảm biến này thường làm việc với một thư viện dành riêng (ví dụ, cho Arduino) và chúng cũng khá dễ sử dụng. Như các bạn có thể thấy trong hướng dẫn này, chúng ta cũng đã có thể dễ dàng đo đạc nhiệt độ và độ ẩm trong chương trình.

Xem thêm: Học IoT bài bản: Internet of Thing (IoT)

Đăng dữ liệu cảm biến online

Sử dụng board MKR1000 và cảm biến kết nối với nó, chúng ta cuối cùng sẽ ghi dữ liệu online, sử dụng dịch vụ Dweet.io.

Sẵn sàng   

Cho chương này, bạn đơn giản chỉ cần thực hiện thành công hướng dẫn trước và đảm bảo rằng bạn đã kết nối các cảm biến tới board và đã kiểm thử nó bằng sketch kiểm tra.

Đến đây chúng ta đã sẵn sàng, nhưng chắc chắn rằng các bạn đã cài đặt thư viện WiFi101 bên trong Arduino IDE.

Cách làm…

Ta sẽ cấu hình board để có thể gửi giá trị đo được từ cảm biến tới Dweet.io sau mỗi khoảng thời gian đều đặn. Sketch này cũng tương tự như ở chương trước, tôi sẽ chỉ nhấn mạnh phần quan trọng nhất của chương trình ở đây:

1. Đầu tiên chúng ta cần định nghĩa thư viện sẽ dùng trong hướng dẫn này:

#include <SPI.h>
#include <WiFi101.h>
#include "DHT.h"

2. Tiếp đến chúng ta cần định nghĩa tên cho Dweet.io của chúng ta, cái này sẽ dùng để nhận lại dữ liệu sau này:

char * thingName = "mymkr1000";

3. Tiếp đến, bên trong hàm loop() của chương trình, chúng ta tiến hành đo giá trị của cảm biến ở khoảng thời gian xác định và gửi nó tới server:

if (millis() - lastConnectionTime > postingInterval) {

    // Reading temperature and humidity
    float humidity = dht.readHumidity();
    
    // Read temperature as Celsius
    float temperature = dht.readTemperature();

    // Reading from analog sensor
    int sensorValue = analogRead(sensorPin);
    float lightLevel = sensorValue/1024.*100;

    // Send request
    httpRequest(temperature, humidity, lightLevel);
  }

4. Chúng ta đã thấy hàm httpRequest() trong hướng dẫn trước nên tôi sẽ để cho bạn tự khám phá nó trong chương trình của mình.

5. Lúc này thử dự án của chúng ta nào!

Đảm bảo lấy toàn bộ mã lệnh từ kho chứa Github của sách này, và sửa tên truy cập và mật khẩu truy cập Wi-Fi trong code.

6. Cuối cùng nạp code vào board và mở màn hình Serial lên, nó sẽ trông như:

Phần quan trọng của output là:

Những con số này là kết quả đo của chúng ta và nếu bạn có thể thấy, nó có nghĩa rằng những số liệu đó đã được lưu trữ thành công trên server Dweet.io!

Nó hoạt động như thế nào…

Chương trình chỉ đơn giản gửi giá trị đo được tới Dweet.io thông qua một yêu cầu (request) CIT12. Thông tin này sau đó được lưu trữ tại đó theo định dạng JSON, mà ta đã thấy trong output.

 

Sách Arduino, ESP8266, STM32: Sách tự động hóa

Giám sát dữ liệu cảm biến từ bảng điều khiển cloud

Cho tới đây trong chương này, chúng ta đã lưu trữ dữ liệu trên Dweet.io và chúng ta cũng biết cách để lấy dữ liệu về lại từ server. Tuy nhiên, điều thậm chí còn tốt hơn đó là cách vẽ sơ đồ cho dữ liệu đó ngay bên trong bảng điều khiển trên cloud. Và đó chính là thứ chúng ta sẽ làm trong hướng dẫn này.

Sẵn sàng

Đối với hướng dẫn này, các bạn cần có 1 tài khoản Freeboard.io, nó là một dịch vụ tiện lợi mà bạn có thể sử dụng để vẽ sơ đồ trực quan. Để làm điều đó, đi đến địa chỉ:

http://freeboard.io/

Và bây giờ bên trong giao diện Freeboard.io, tạo mới một bảng điều khiển:

Các bạn cũng chắc chắn rằng dự án chúng ta dùng trong hướng dẫn trước vẫn đang chạy và tiếp tục ghi dữ liệu trên Dweet.io:

Cách làm…

Bây giờ, vào bảng điều khiển vừa mới tạo bên trong http://freeboard.io/. Và nhấp vào DATASOURCES để tạo nguồn dữ liệu mới:

Trong đó bạn cần chọn Dweet.io là kiểu nguồn dữ liệu, và bạn cũng cần đặt tên của thiết bị Dweet.io:

Nguồn dữ liệu mới tạo bây giờ đã xuất hiện trong bảng điều khiển:

Giờ chúng ta đã có nguồn dữ liệu bên trong bảng điều khiển, đã đến lúc vẽ đồ thị dữ liệu trong đó. Để thực hiện, trước tiên tạo một panel mới, và bên trong đó thêm mới một phần tử.

Để hiển thị dữ liệu của ta ở đây, chúng ta sẽ thêm đồng hồ đo. Trong hình là các tham số cho đồng hồ đo nhiệt độ:

Các bạn có thể làm điều tương tự cho độ ẩm và độ sáng. Cuối cùng, bạn sẽ có một bảng điều khiển với ba đồng hồ đo khác nhau:

Nó hoạt động như thế nào…

Freeboard.io cho phép bạn dễ dàng vẽ đồ thị dữ liệu lưu trên Dweet.io bên trong một bảng điều khiển. Bởi vì bảng điều khiển cũng ở trên server, nên dữ liệu của ta có thể truy cập khắp mọi nơi và bạn thậm chí cũng có thế chia sẻ bảng điều khiển với bạn bè để họ có thể trực quan hóa dữ liệu đến từ dự án của chúng ta.

Giám sát nhiều board Arduino cùng lúc

Trong hướng dẫn cuối này, chúng ta sẽ học cách tích hợp dữ liệu từ vài board Arduino vào cùng một bảng điều khiển, và nhờ đó bạn có thể giám sát tất cả dữ liệu của bạn trên cùng một nơi, bất cứ là ở đâu trên hành tinh này.

Sẵn sàng

Đối với hướng dẫn này, bạn sẽ cần hoàn thành hướng dẫn trước và có dự án ghi dữ liệu vào Dweet.io, cũng như liên kết tới Freeboard.io.

Vì vậy, bạn có thể thực hiện bao nhiêu dự án như thế tùy ý muốn, với cùng những thành phần tương tự trên mỗi dự án. Với hướng dẫn này, tôi sử dụng mạch MKR1000, mỗi mạch với cùng cảm biến.

Cách làm…

Các bạn có thể lập trình tất cả board của bạn. Sử dụng cùng code chương trình mà ta đã dùng trước đó trong chương này, nhưng cho mỗi thiết bị cần thay đổi tên của thiết bị trên Dweet.io. Ví dụ:

char * thingName = "mymkr1000_two";

Kế tiếp, bên trong http://freeboard.io/, bạn cần đặt nguồn dữ liệu mới cho mỗi mạch bạn dùng trong dự án, với tên thiết bị tương ứng:

Và bạn sẽ có vài nguồn dữ liệu bên trong bảng điều khiển:

Kế tiếp, với mỗi nguồn dữ liệu, thêm một đồng hồ đo bằng cách chọn nguồn dữ liệu chính xác bên trong mỗi tiện ích:

Nếu các bạn làm điều đó cho mọi phép đo và cho mọi board (tôi có 3 board khi tôi kiểm tra dự án), bạn sẽ hoàn thành bảng điều khiển tương tự như hình bên dưới:

Nó hoạt động như thế nào…

Freeboard.io cho phép bạn thêm vài nguồn dữ liệu bên trong cùng bảng điều khiển, do đó nó thực sự dễ dàng để hiển thị kết quả đo đến từ vài board Arduino bên trong cùng một bảng điều khiển cloud.

Thêm nữa…

Dĩ nhiên, bạn có thể thêm nhiều hơn 3 board bên trong dự án của mình! Bạn có thể kết hợp cảm biến bằng cách dùng một số board với cảm biến nhiệt độ và độ ẩm, board khác đo thông số khác.