Lập trình kéo thả cho các dự án IoT sử dụng Node-Red và iNut Platform

Mô tả dự án: 

Người nông dân Việt Nam muốn làm ra những sản phẩm nông sản chất lượng tốt, nhưng ngặt nổi với việc sử dụng các giải pháp ở Việt Nam và thế giới vẫn còn quá đắt so với lợi nhuận ròng. Trong quá trình nghiên cứu để tìm ra con đường ứng dụng những thành quả của Cách mạng công nghiệp 4.0, tôi và đội ngũ iNut Platform đã tìm ra một giải pháp lập trình kéo thả với chi phí gần như bằng không để các đối tác nghiên cứu triển khai hệ thống IoT của riêng họ một cách nhanh chóng nhất và an toàn nhất. Thống nhất lại quy chuẩn phát triển IoT với khả năng cung cấp firmware số lượng lớn và không giới hạn cho mọi dự án ở mọi kích cỡ khác nhau, ứng dụng mọi lĩnh vực không chỉ trong lĩnh vực nông nghiệp.

Hôm nay, chúng ta sẽ làm gì?

iNut Platform có thể ứng dụng trong mọi dự án ở mọi kích cỡ và mọi ngành nghề. Với bài viết ngày hôm nay, mình sẽ sử dụng 02 node thiết bị và lập trình kéo thả bằng phần mềm Node-RED. Bạn có thể phát triển mọi vấn đề mọi dự án nha, cần tư vấn thì cứ liên hệ với mình.

  • 01 thiết bị iNut 01 nút nhấn (bạn có thể sử dụng nodemcu và nạp code như ở đây - nhập mã  ToiYeuVietNam để được giảm 20% giá cho đến ngày 16/03/2018)
  • 01 thiết bị iNut Cảm biến (bạn có thể sử dụng nodemcu và nạp code như ở đây)

Bài toán của chúng ta là: Sử dụng iNut Cảm biến, nếu có giá trị mưa (analog <= 600) thì bật đèn, nếu không có giá trị mưa (analog >= 900) thì tắt đèn. Khi đèn bật thì 5s sau sẽ tắt... và còn rất nhiều điều mà bạn có thể khám phá nữa. Ở đây, mọi thứ là lập trình kéo thả thành ra bạn có thể nhanh chóng thực hiện suy nghĩ của mình mà không cần vắt óc code và debug. Sau đó, khi cần phát triển một dự án hoàn hảo hơn bạn sẽ thuê một đội outsourcing dựa trên ý tưởng ban đầu trên node-red. Có thể nói, với IoT, bạn không cần biết lập trình chỉ cần mua thiết bị về gắn vào là có ngay một trang trại bá đạo rồi.

Mắc và cài đặt thiết bị iNut vào mạch điện

Bước 1: Nối điện iNút

Bước 2: Cài đặt mạng (Password: inut12345)

 

Bước 3: Điều khiển thiết bị

Một chạm điều khiển thiết bị

 

Đọc cảm biến mưa và kiểm tra trên điện thoại thông qua phần mềm iNut

Đoạn code mà bạn sẽ nạp vào Arduino

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

//rain sensor
//Để nối chân cho gọn nên mình sử dụng luôn các chân Analog cho tiện gắn dây, các bạn muốn dùng chân nào cũng được
#define VCC A0          
#define GND A1
#define PIN_DIGITAL A2
#define PIN_ANALOG A3

void setup() {
  Serial.begin(9600); //Bật Serial Montior, các bạn dùng baudrate bao nhiêu cũng được
  
  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
  
  Serial.println("Xin chao iNut Platform");

  pinMode(VCC, OUTPUT);
  pinMode(GND, OUTPUT);
  pinMode(PIN_DIGITAL, INPUT);
  digitalWrite(VCC, HIGH);
  digitalWrite(GND, LOW);
  
}

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));
}


void loop() {
  //Nhiệm vụ của bạn là gán giá trị cảm biến vào các phần tử của mảng sensors
  sensors[0] = digitalRead(PIN_DIGITAL);
  sensors[1] = analogRead(PIN_ANALOG);

}

Đối với thiết bị iNut - Cảm biến, bạn sẽ cài đặt như Video này.

Và đây là kết quả của chúng ta:

Bạn vào cài đặt > toàn bộ > chọn thiết bị của mình > dành cho lập trình viên > chạm vào "Copy vào bộ nhớ đệm" > gửi từ điện thoại sang máy tính bằng cách gửi đến email hoặc qua facebook messenger!

Giới thiệu Node-RED

Để sử dụng Node-RED, máy tính của bạn phải được cài sẵn 02 phần mềm sau:

Sau đó, 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

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.

Giải thích về các khối lệnh

Đầu tiên là khối sự kiện - đây là khối mqtt in. Các bạn chỉ cần thay đổi mã topic cho phù hợp là được. Mã này có dạng

request/<uuid>/<node_id>/<token>

Để lấy được các mã <uuid> <node_id> <token>, các bạn làm như video hướng dẫn sau:

Ví dụ, ta có mã sau

{
	"node_id":"SJh9qNuBf",
	"uuid":"gcTGhTyNhWUPzx9mlkYBCK3sMcE3",
	"token":"4da3fbc2056084fef6051f9498a48acc506755384897"
}

thì tên topic sẽ có dạng: 

request/gcTGhTyNhWUPzx9mlkYBCK3sMcE3/SJh9qNuBf/4da3fbc2056084fef6051f9498a48acc506755384897

Okay, ổn rồi, bây giờ các bạn đã có thể lắng nghe được dữ liệu từ thiết bị iNut trong thời gian thực rồi.

Hai khối lệnh này đại diện lần lượt cho iNut - 1 nút nhấn và iNut cảm biến. Các bạn chỉ việc đổi theo đề tài của các bạn là ok thôi à ^_^.

Tiếp đến, khối lệnh vàng json là khối lệnh để chuyển dữ liệu từ iNut thành mã Json để dễ dàng cho việc "tách" dữ liệu, nhiệm vụ của bạn chỉ là if else để điều hướng sự kiện mà thôi.

Các ô màu xanh tiếp theo là ô debug, thông tin debug sẽ xuất hiện ở màn hình bên góc phải

 

Tiếp theo là khối lệnh If-Else

Ở vị trí Property các bạn sẽ thấy có cấu trúc payload[0].state. Các bạn thay con số 0 thành một số tự nhiên khác để đọc dữ liệu của cảm biến khác hoặc của nút khác. Thử xem các biến if-else còn lại để trải nghiệm.

Ô delay có nhiệm vụ là chờ thôi devil!

Sau đó, là khối chuẩn bị lệnh, đối với iNut - Nút nhấn, chúng ta có tập lệnh gồm 3 lệnh:

  • ON (bật)
  • OFF (tắt)
  • TOGGLE (đổi trạng thái)

Cấu trúc một lệnh iNut sẽ có dạng:

{"id": <thứ tự nút nhận lệnh hoặc channel cảm biến>, "command": "<tên lệnh>"}

Như hình ví dụ, ta có {"id":0,"command":"OFF"} nghĩa là đèn ở vị trí đầu tiên (vị trí 0) sẽ tắt!

Địa chỉ URL sẽ có dạng 

https://connect.mysmarthome.vn/api/1.0/request/<uuid>/<node_id>/<token>/req_device_toggle

Như ví dụ này với thiết bị inut i1 mình dùng trong bài, đường dẫn sẽ là 

https://connect.mysmarthome.vn/api/1.0/request/gcTGhTyNhWUPzx9mlkYBCK3sMcE3/SJh9qNuBf/4da3fbc2056084fef6051f9498a48acc506755384897/req_device_toggle

Như vậy, khi chuẩn bị lệnh và kết thúc lệnh bằng lệnh POST đến thiết bị iNut, chúng ta đã đổi được trạng thái thiết bị rồi!

Heroku, nhà cung cấp dịch vụ nodejs free server cho dân maker

1. Heroku là gì?

Heroku cung cấp dịch vụ máy chủ đám mây giúp dễ dàng trong việc deploy ứng dụng. Điều tuyệt vời ở Heroku là trang này bạn có thể sử dụng dịch vụ hoàn toàn miễn phí với các ứng dụng web không yêu cầu phải có tốc độ truy cập cao hay dung lượng lớn. Các dự án của maker chúng ta thì dùng heroku là số 1 rồi, vì chúng ta có thể tự do edit code của mình, thêm thắt tùy ý.

2. Đăng ký tài khoản ở Heroku?

Đầu tiên, bạn hãy chuyển đến trang Đăng ký.

... và nhập các thông tin cần thiết.

... sau đó bạn vào email để xác nhận tài khoản.

Lúc này, bạn sẽ tiến hành tạo password!

Như vậy là xong rồi.

3. Tải về Heroku console app và cài đặt tài khoản

Sau khi bạn đã tạo tài khoản xong, bạn cần như không cần quan tâm đến phần dashboard của heroku, hãy tin mình, đi theo các bước sau đây để tạo app trước đã rồi sau này quay lại dashboard để khám phá app đã tạo thì vui hơn nhiều.

Ở các bài trước, chúng ta đã dùng git cli để lưu và tải về các project, và ở bài nay, chúng ta sẽ dùng heroku cli. Để bắt đầu với nodejs với heroku, bạn có thể đọc tài liệu ở đây. Mình sẽ lược dịch những phần và ghi chú cần thiết để giúp bạn đi nhanh hơn.

Đầu tiên, các bạn hãy tải về Heroku CLI để có thể đi tiếp.

Sau khi tải về và cài đặt xong, các bạn hãy mở command line lên và đăng nhập vào dịch vụ heroku bằng lệnh

heroku login

Nhập địa chỉ email và password và đăng nhập hoy!

4. Đưa app socket server đầu tiên ra ngoài internet

Upload app ra Internet

Ví dụ như ta đang ở trong thư mục code mẫu

Tiếp đó, chúng ta sẽ tạo một project heroku.

heroku create

pacific-reef-39331 là tên project mà heroku tự tạo cho chúng ta, bạn có thể vô dashboard của heroku để đổi lại tùy ý. Khi bạn thực hiện lệnh heroku create thì nó sẽ tạo ra một tên khác, bạn hãy ghi nhớ tên đó để thực hiện các phần tiếp theo.

Để upload code lên heroku server chúng ta chạy lệnh

git push heroku master

Để xem logs trên heroku, bạn có thể chạy lệnh

heroku logs --tail

Lưu ý: Đây là chế độ chỉ xem mà thôi.

Như vậy chương trình của bạn đã chạy trên Internet rồi!

Đi xa hơn...

Heroku 30 phút là sẽ tắt app của bạn vì không có request. Các bạn nên xem bài viết này nếu muốn dùng heroku cho production mà lại không tốn phí. Tuy nhiên, tui khuyên bạn nên dùng máy tính ở nhà hoặc một server mini hoặc một con Orange Pi / Raspberry Pi để host heroku app.

Các bạn có thể dễ dàng làm prototype để thể hiện ý tưởng IoT với iNut Platform chỉ trong vòng 30 phút. Đi thi hackathon dùng iNut là auto win vì quá nhanh và stable! Đỡ phải nạp code đổi wifi! Có sẵn các tính năng bảo mật rồi!

Chúc các bác thành công với những ý tưởng sáng tạo tuyệt vời!

lên
4 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

Bộ điều khiển PID - ứng dụng phần 2 - xe dò line dùng thuật toán PID

Tiép nối bài viết về xe dò line cảm ơn Đỗ Hữu Toàn đã viết hộ mình phần 4. hôm nay mình sẽ làm cho chiếc xe dò line đi mượt và có hồn hơn 

lên
34 thành viên đã đánh giá bài viết này hữu ích.
Các bài viết cùng tác giả

Bài 10: Đếm số lần nhấn một button - ButtonStateChange

Nếu bạn đã đọc qua Bài 3: Xác định trạng thái của một nút nhấn (button) thì chắc hẳn bạn đã biết cách sử dụng một button. Nhưng đôi khi bạn muốn button của bạn đặc biệt hơn một tí, chẳng hạn như là nhấn vài ba lần thì mới thực hiện chức năng của nó. Để làm được điều này, bạn cần biết được lúc nào button được nhấn và lúc nào button được thả ra, và đếm số lần. Hôm nay, tôi sẽ hướng dẫn bạn giải quyết vấn đề này.

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

Bài 1: Một chương trình trên Arduino cần tối thiểu những gì?

Trong bài viết này, tôi muốn chỉ cho các bạn biết để viết một chương trình Arduino, bạn cần chuẩn bị TỐI THIỂU những điều gì!

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