Điều khiển 8 relay qua Internet như thế nào?

Mô tả dự án: 

1, 2, 4 relay không đủ với nhu cầu của bạn? Bạn muốn hơn thế nữa! Vậy còn chần chừ gì mà không thử với module 8 relay điều khiển độc lập qua Internet. Bạn sẽ tự làm được một app dành riêng cho mình. Là một maker thì không nên tự hạn chế mình!

Bạn sẽ làm được gì trong ngày hôm nay?

Hôm nay, bạn sẽ làm được một bộ điều khiển 8 relay của riêng bạn đó. Có thể điều khiển ở mọi nơi trên thế giới luôn nhé. Tuyệt không nào!

Bạn cần chuẩn bị những gì để bắt đầu

Phần mềm

  • Trên điện thoại di động:
    • iNut - Công tắc wifi (các bạn search trong apple store hoặc google play từ khóa inut là ra). Tải về trên Apple Store, tải về ở Google Play.
  • Trên máy tính:

Phần cứng

Nào ta cùng kết nối các thiết bị iNut vào mạng Wifi

Đối với iNut - Cảm biến

Bạn sử dụng dây sạch Micro USB của Android hoặc xuống bước dưới nối dây như hình rồi thực hiện kết nối như video sau:

Cài đặt cho mạng (iNut_<con số>) (Password: inut12345)

Cài đặt chương trình điều khiển 8 relay

Arduino Uno Module Relay iNut cảm biến
5V VCC  
4 IN1  
5 IN2  
6 IN3  
7 IN4  
8 IN5  
9 IN6  
10 IN7  
11 IN8  
GND GND GND
A4 (SDA)   D1 (SDA)
A5 (SCL)   D2 (SCL)
3v3   3v3

 

#include <Wire.h>
#define N_SENSOR  8
float sensors[N_SENSOR]; //biến lưu trữ danh sách cảm biến

#define RELAY_COUNT 8
//Relay kích ở mức thấp thì như thế này
#define ON  LOW
#define OFF HIGH
//Xóa comment 2 dòng dưới nếu là relay kích ở mức cao
//#define ON HIGH
//#define OFF LOW
const int relayPins[RELAY_COUNT] = {4, 5, 6, 7, 8, 9, 10, 11};
 
void setup() {
  Serial.begin(9600);
 
 
  Wire.begin(10); //Theo như yêu cầu của iNut Platform, các bạn sẽ dùng cổng I2C với địa chỉ là 10.
  Wire.onRequest(i2cRequestEvent); //Mỗi khi iNut - Cảm biến yêu cầu thì sẽ chạy hàm này nhằm mục tiêu gửi dữ liệu lên cho iNut - Cảm biến, cứ 01 giây sẽ yêu cầu gửi 01 lần
  //Đăng ký lệnh lắng nghe lệnh từ iNut - Cảm biến. iNut Cảm biến => Arduino
  Wire.onReceive(receiveEvent); 

  for (int i = 0 ; i < RELAY_COUNT; i++) {
    pinMode(relayPins[i], OUTPUT);
    digitalWrite(relayPins[i], OFF);
  }
  
 
  Serial.println("Xin chao iNut Platform");
}
 
void i2cRequestEvent()
{
  //phải có nhé, chỉ cần 02 dòng này là data đã được gửi đi
  char *data = (byte*)&sensors; 
  Wire.write(data, sizeof(sensors));
 
 
  //debug - Kiểm tra cho bạn dễ hình dung dữ liệu được gửi đi
  Serial.print("sizeof(sensors): ");
  Serial.println(sizeof(sensors));
  Serial.print("sizeof(float): ");
  Serial.println(sizeof(float));
}

//Các biến lưu trữ lệnh khi nhận được lệnh từ iNut - Cảm biến
volatile char buffer[33];
volatile boolean receiveFlag = false;
 
//Khi nhận được lệnh từ iNut cảm biến thì lắng nghe
void receiveEvent(int howMany)
{
  Wire.readBytes((byte *)buffer, howMany);
  buffer[howMany] = 0;
  receiveFlag = true;
}
 
void loop() {
  for (int i = 0 ; i < RELAY_COUNT; i++) {
    int state = digitalRead(relayPins[i]); // đọc trạng thái của các relay
    if (state == ON) {
      sensors[i] = (i + 1) * 10 + 2;
    } else if (state == OFF) {
      sensors[i] = (i + 1) * 10 + 1;
    }
  }

  if (receiveFlag) { //khi có tín hiệu là đã nhận được lệnh
    
    String command = buffer; //chép lệnh vào biến String cho dễ xử lý
    
    
    Serial.print(command);// in ra lệnh
    Serial.print(' ');
    Serial.println(millis());//in ra thời gian theo millis tính từ lúc arduino chạy để debug

    int index = command[0];
    int state = command[1];

    if ('1' <= index && index <= '8') { // Chúng ta chỉ có 8 relay, đánh số từ 0-7
      index -= '1'; // Chuyển từ ký tự số sang số. '1' => 0, '2' => 1. Vì khi lập trình, mảng bắt đầu bằng số 0
      Serial.print("Relay thu ");
      Serial.println(index);
      if (state == '1' || state == '2') { // Nếu state truyền là 0 => Tắt relay, 1 => Bật relay
        if (state == '1') {
          Serial.println("OFF");
          digitalWrite(relayPins[index], OFF);
        } else if (state == '2') {
          Serial.println("ON");
          digitalWrite(relayPins[index], ON);
        }
      }
    }
    
 
    receiveFlag = false; //đánh dấu đã xử lý xong lệnh, không cần đọc nữa
  }
}

 

Cài đặt chương trình điêu khiển nút nhấn trong mạng Local

Để cài đặt chương trình điều khiển 8 relay các bạn làm theo các hướng dẫn sau đây:

Các bạn mở Windows command line lên bằng cách nhấn tổ hợp phím Windows + R (phím Windows là phím giữa Alt và Ctrl á). Sau đó gõ lệnh cmd và nhấn OK.

Trong bản lệnh hiện ra, bạn lần lượt chạy các lệnh sau (chép và dán vào từng lệnh một cho chắc nhé)

Clone code về

git clone https://github.com/ngohuynhngockhanh/iNut-Node-RED-Kickstarter

cd iNut-Node-RED-Kickstarter

git checkout 8-relay

Cài đặt

npm install

Chạy chương trình

npm start

Sau khi cài đặt xong, bạn sẽ có một thông báo như thế này:

Và các bạn truy cập vào http://127.0.0.1:1880/... nhé! Đây là giao diện của chúng ta.

Các bạn truy cập vào địa chỉ http://localhost:1880/ui/... để xem giao diện đồ họa nhé.

Okay, cài đặt xong rồi, bước tiếp theo là cập nhập các mã thông tin trong ví dụ mẫu cho phù hợp với các thiết bị iNut của bạn. 

Cách chép mã Node-Red topic từ phần mềm iNut

Bạn sửa topic trong khối lệnh trên bằng mã iNut cảm biến của bạn nhé. Để lấy mã mqtt topic của bạn, làm ơn xem video dưới dây.

Cách chép mã REST API từ phần mềm iNut

Bạn sửa URL trong khối lệnh trên bằng mã iNut cảm biến của bạn nhé. Để lấy mã REST API của bạn, làm ơn xem video dưới dây.

Chúc các bạn thành công!

lên
9 thành viên đã đánh giá bài viết này hữu ích.
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

Bài 6: Đọc hiệu điện thế của một nguồn điện qua cổng Analog.

Đã bao giờ, bạn từng hỏi bản thân mình làm sao cái đồng hồ điện nó đọc được hiệu điện thế của một nguồn hay chưa? Bạn vẫn thắc mắc nguyên lý và vẫn chưa tìm ra lời giải? Vậy hãy đọc bài này. Chúng ta sẽ tìm cách để đọc tín hiệu từ analog từ đó suy ra giá trị hiệu điện thế của một vị trí xác định. Hiệu điện thế này tối đa chỉ 5V thôi bạn nhé. Nếu muốn đo cao hơn, bạn phải nghiên cứu nhiều hơn nữa!

lên
8 thành viên đã đánh giá bài viết này hữu ích.

Giấy phép nguồn mở, giấy phép tài liệu mở - Quyền lợi, nghĩa vụ của bạn trong thế giới nguồn mở

Trong thời đại số này, việc tiếp cận và sử dụng những tri thức đã không còn khó khăn, bạn chỉ cần một trình duyệt và một máy tính cùng với đường truyền mạng mà đã có thể truy cập vào nguồn tri thức rộng lớn trên thế giới. Nhưng, có bao giờ bạn tự nghĩ, ngoài quyền lợi cực lớn là được tiếp xúc với tri thức mở và được tác giả hỗ trợ khi gặp lỗi, bạn có trách nhiệm và nghĩa vụ gì? Và khi là bạn là tác giả, bạn sẽ được những quyền gì và với việc ý thức được quyền của mình, bạn sẽ cảm thấy tự tin hơn trong thế giới nguồn mở. Bạn sẽ hiểu được: không phải thứ gì mình có source thì nó đều là "nguồn mở", không phải thứ gì cho mình dùng miễn phí đều là nguồn mở,... Ý thực được điều này, giúp bạn đi nhanh và xa trong thế giới nguồn mở thế giới!

lên
12 thành viên đã đánh giá bài viết này hữu ích.