Kiểm soát ánh sáng với NodeMcu và Ubidots


Bùi Hữu Tuấn
3 năm trước
Hữu ích 3 Chia sẻ Viết bình luận 0
Đã xem 8222

Đã bao nhiêu lần bạn vô tình để đèn của bạn bật? Đó là lý do tại sao chúng tôi tìm ra cách thiết kế một hệ thống tự động có thể tắt (và bật) đèn của bạn tùy thuộc vào ánh sáng ban ngày.

Hệ thống hoạt động với một cảm biến ánh sáng sẽ chịu trách nhiệm phát hiện số lượng và độ rõ của ánh sáng ban ngày. Nếu cảm biến phát hiện ánh sáng ban ngày, hệ thống sẽ tắt đèn của bạn và nâng rèm lên. Nếu cảm biến phát hiện không có ánh sáng, nó sẽ bật đèn và hạ rèm. Ngoài ra, sử dụng Ubidots, bạn có thể bật hoặc tắt thêm đèn bất cứ khi nào bạn muốn. 

Cách thực hiện rất đơn giản và quan trọng hơn là nó giúp bạn tiết kiệm năng lượng.

Tổng quan

Bài đăng này giải thích cách sử dụng NodeMcu với Ubidots. NodeMcu  là một thiết bị Internet of Things (IoT) với GPIO, PWM, IIC, 1-dây và ADC tất cả trong một bảng và nó có kết nối Wi-Fi. Thật dễ sử dụng - bạn chỉ cần  Arduino IDE  để học lập trình. 

Yêu cầu

Thiết lập

  1. Đầu tiên, ghép NodeMcu với lá chắn cơ sở của nó và sau đó kết nối các thành phần. 

  2. Các thành phần

    Chân khiên

    Rơle

    D3

    Đèn LED

    D5

    Cảm biến ánh sáng

    A0

    Động cơ servo


    • Dây vàng - D8
    • Dây đỏ - 3,3 V
    • Dây đen - GND


    Nó sẽ giống như thế này:

  3. Truy cập Arduino IDE, nhấp vào  Tệp -> Tùy chọn  và nhập  http://arduino.esp8266.com/urdy/package_esp8266com_index.json  vào trường "URL Trình quản lý bảng bổ sung". Bạn có thể thêm nhiều URL, phân tách chúng bằng dấu phẩy.

  4. Mở "Trình quản lý bảng" từ  Công cụ -> Menu bảng  và cài đặt nền tảng Esp8266. Đừng quên chọn bảng NodeMCU 1.0 của bạn từ menu sau khi cài đặt.

  5. Tải xuống  thư viện UbidotsESPMQTT  nếu bạn chưa có. Bây giờ, nhấp vào  Phác thảo -> Bao gồm Thư viện -> Thêm Thư viện .ZIP

  6. Chọn tệp ZIP của  Ubidots ESPMQTT  , sau đó, Chấp nhận, hoặc Chọn Chọn đối với tất cả các thư viện. Nếu bạn không thể thêm thư viện, hãy thử thủ công: giải nén RAR / ZIP đã tải xuống và sao chép thư mục từ thư viện vào đường dẫn  C: \ Users \ ubidots \ Documents \ Arduino \ library .

  7. Đóng Arduino IDE và mở lại.

Thiết lập Ubidots

  1. Thêm một Nguồn dữ liệu mới gọi là  "thủ công"  và Biến mới có tên là  "Extra_light"  (như được thấy bên dưới).

  2. Xác minh rằng tên của Nguồn dữ liệu và Biến có giống với nhãn API của chúng không. Điều này rất quan trọng vì biến của chúng tôi sẽ được đăng ký thông qua Nhãn API, cho phép giao tiếp giữa Ubidots và NodeMcu. Sau khi bạn xác minh Nguồn dữ liệu và nhãn biến, bạn có thể chỉnh sửa tên của họ chỉ bằng một cú nhấp chuột.

  3. Tạo công  tắc  cho phép bạn bật hoặc tắt đèn. Để thực hiện việc này, hãy truy cập  Bảng điều khiển  và ở phía trên bên phải của trang, nhấp vào  Thêm tiện ích . Chọn  Điều khiển -> Chuyển -> thủ công (nguồn dữ liệu) -> ánh sáng (biến) -> kết thúc. 

Lập trình ESP NodeMcu

Khi mọi thứ được kết nối chính xác, chúng tôi sẽ đến IDE và viết mã sau đây:

/****************************************
 * Include Libraries
 ****************************************/
#include "UbidotsESPMQTT.h"
#include <Servo.h>

/****************************************
 * Define Constants
 ****************************************/
#define TOKEN "...." // Your Ubidots TOKEN
#define WIFINAME "...." //Your SSID
#define WIFIPASS "...." // Your Wifi Pass
#define MQTTCLIENTNAME "..." // Your MQTT Client Name, it must be unique so we recommend to choose a random ASCCI name

Servo myservo;

int sensorPin = A0;
int ledPin = D5;
int relayPin = D3;

int state;
int lightState;

Ubidots client(TOKEN, MQTTCLIENTNAME);

/****************************************
 * Auxiliar Functions
 ****************************************/

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");

  for (int i=0;i<length;i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();
   if ((char)payload[0]=='1'){
    digitalWrite(relayPin, HIGH);
  }
   else if ((char)payload[0]=='0'){
    digitalWrite(relayPin, LOW);
  } 
}

/****************************************
 * Main Functions
 ****************************************/

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  client.wifiConnection(WIFINAME, WIFIPASS);
  client.begin(callback);
  myservo.attach(D8);
  pinMode(ledPin, OUTPUT);
  pinMode(relayPin, OUTPUT);
  client.ubidotsSubscribe("manual", "extra_light"); //Insert the dataSource and Variable's Labels
  }

void loop() {
  // put your main code here, to run repeatedly:
  if(!client.connected()){
      client.reconnect();
      client.ubidotsSubscribe("manual", "extra_light"); //Insert the dataSource and Variable's Labels
      }

      state = analogRead(sensorPin);
      lightState = digitalRead(ledPin);

      if (state <= 50)
      {
        digitalWrite(ledPin, HIGH);
        client.add("light", lightState);
        myservo.write(180);
        client.add("blind", 0);
        client.ubidotsPublish("Control");
        Serial.println("Night - Light ON, Blinds down.");
      }
      else 
      {
        digitalWrite(ledPin, LOW);
        client.add("light", lightState);
        myservo.write(0);
        client.add("blind", 1);
        client.ubidotsPublish("Control");
        Serial.println("Day - Light OFF, Blinds up.");
      }  
  client.add("luminosity", state); //Insert your variable Labels and the value to be sent
  client.ubidotsPublish("Control");
  client.loop();
  }

 

Các kết quả

Sau khi flash mã của bạn, hãy truy cập Ubidots và làm mới trang. Bạn sẽ thấy "điều khiển"  Nguồn dữ liệu mới  được tạo.

Nếu bạn muốn kiểm tra trạng thái của rèm hoặc ánh sáng, bạn có thể xây dựng bảng điều khiển của mình theo ý muốn. Nếu bạn không biết làm thế nào, hãy xem hướng dẫn này  .

Chúng tôi vừa chỉ cho bạn cách thiết kế một điều khiển ánh sáng dựa trên Internet of Things, điều này chứng tỏ những điều có vẻ phức tạp có thể được thực hiện rất dễ dàng với các công cụ phù hợp.

Hữu ích 3 Chia sẻ Viết bình luận 0
Đã xem 8222