Ra mắt thư viện iNut cho Arduino, điều khiển từ xa qua Internet bằng mạch iNut cảm biến

Mô tả dự án: 

Bạn muốn làm thiết bị điện điều khiển từ xa, quản lý hệ thống cảm biến nhà vườn, nhà kính của mình qua Internet? Hay bạn muốn làm các startup liên quan đến nông nghiệp thông minh, nhà máy thông minh hay thành phố thông minh mà không biết bắt đầu từ đâu? Và đây, iNut Platform chính là giải pháp dành cho bạn. Qua bài viết này này, thư viện iNut cho Arduino sẽ giúp bạn thực hiện hóa vấn đề này, cùng khám phá nhé.

Nếu bạn đã từng làm qua sóng bluetooth với thư viện SerialCommand thì bạn sẽ thấy cực kỳ quen thuộc khi sử dụng thư viện iNut này!

Tại sao lại sử dụng iNut?

BẠN KHÔNG CẦN PHÁT TRIỂN IOT MỘT MÌNH

Ngày nay, ngành công nghiệp Internet of Things (IOT) vẫn chưa tạo ra một con đường dễ dàng cho các nhà phát triển ứng dụng vạn vật kết nối vào việc kinh doanh, sản xuất. Nhưng đó chỉ là quá khứ cho đến khi iNut Platform ra đời.

KHÓ KHĂN HIỆN NAY

Phần lớn các dự án IoT hiện nay, tập trung vào việc phát triển ứng dụng và quên đi cái cốt lõi đó chính là sự ổn định và giá cả của một node thiết bị IoT. Các tập đoàn công nghiệp lớn với đội ngũ kỹ sư, lập trình viên sẽ tự xây dựng cho riêng tập đoàn của mình một bộ IoT Platform. Tuy nhiên, với những doanh nghiệp vừa, và nhỏ, hay đối với các bạn thích tự nghiên cứu sáng tạo (DIY) thì đây là một bài toán rất khó. Vì:

  • Tương tác với dữ liệu realtime khó khăn.
  • Chi phí đầu tư server, nghiên cứu, chi phí vận hành, kiểm thử rất lớn nhưng sau đó chi phí liên tục tăng.
  • Không có kinh nghiệm trong việc mở rộng theo chiều rộng (scale out) khi số lượng thiết bị lớn (vài chục, vài trăm,...). 
  • Việc lưu trữ dữ liệu lớn trở nên khó khăn.
  • Các thiết bị bị tấn công, tuổi thọ ngắn và hoạt động kém ổn định trong môi trường wifi chập chờn.
  • Giao diện chương trình bị gò bó và khi muốn mở rộng ra cho các đối tượng khác nhau, hay các app khác nhau thì gặp the tar pit.

81% CÁC CÔNG TY CỐ GẮNG THỬ IOT MỘT MÌNH PHẢI ĐỐI MẶT VỚI CHI PHÍ VƯỢT QUÁ, CÁC SẢN PHẨM BỊ TẤN CÔNG, VÀ CÁC THIẾT BỊ CÓ TUỔI THỌ NGẮN.

Cùng iNut Platform, chúng tôi sẽ đưa bạn đến với nhóm 19% còn lại.

Một hệ thống IoT hoàn chỉnh thì như thế nào?

Chúng tôi (Arduino.vn và MySmarthome.com.vn (tiền thân là Machtudong.com.vn)) cung cấp dịch vụ, sản phẩm để kết nối thiết bị của bạn lên Intenret, bạn có thể dễ dàng truy cập vào thiết bị của mình và lấy dữ liệu về. Sự ổn định được chúng tôi tập trung phát triển và bạn sẽ yên tâm 100% về nó. Đối với các phần khác do chúng tôi cung cấp (được tô vàng), chúng tôi tập trung vào phát triển API để các bạn dễ dàng tích hợp (intergrate) vào dự án của mình. Các bạn hoàn toàn có thể tự làm một dự án của riêng mình với app của riêng mình với sự hỗ trợ về sự ổn định và khả năng mở rộng của iNut Platform.

Hãy đi cùng chúng tôi, những khó khăn về sự ổn định, bảo mật và kết nối của bạn là động lực để chúng tôi phát triển, mở rộng hệ thống iNut Platform. Hãy cùng nhau đi trên chiếc thuyền Cách mạng Công nghiệp 4.0 tại Việt Nam.

iNut - Cảm biến là gì?

Trong lĩnh vực Internet of Things (IoT), có hai loại thing chính: đó là device và sensor. Trước đó, với sự hỗ trợ của loại device nút nhấn đã tạo nên một làn sóng ứng dụng IoT vào các thiết bị nhà thông minh như bảng điều khiển, cửa cuốn,... Tuy nhiên, với việc nhu cầu thị trường mở rộng, iNut Platform đã hỗ trợ thêm loại thiết bị iNut - Cảm biến hỗ trợ mọi loại cảm biến hiện nay trên thị trường. Bất kể công nghệ nào, điển hình như: digital, analog, serial, i2c, spi, rs232, r485,... đều có thể được tích hợp vào iNut - Cảm biến bằng việc sử dụng board mạch đệm quen thuộc là Arduino. Bạn có thể dễ dàng biến một mạch NodeMCU hiện có của mình trở thành một thiết bị iNut cảm biến bằng cách nạp firmware iNut Cảm biến.

Thư viện iNut cho Arduino

Lắng nghe yêu cầu của người dùng, iNut Platform đã viết thành một thư viện để giúp cho người dùng Arduino hay các bo mạch có thể được lập trình bằng ngôn ngữ Arduino như (STM8/STM32/ATtiny85,...) có thể dễ dàng tiếp cận với công nghệ iNut. 

Cùng khám phá với tôi nhé.

Bạn cần chuẩn bị gì?

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ối dây iNut cảm biến với Arduino

iNut cảm biến
Arduino UNO R3
GND
GND
3v3
3v3
D1
SDA
D2
SCL

Cài đặt mạng cho iNut Cảm biến 

Mật khẩu mạng wifi của iNut là: inut12345

Code mẫu

Bạn tải thư viện tại https://github.com/ngohuynhngockhanh/iNut-Arduino-library (tải nhanh)

Gửi dữ liệu cảm biến lên Internet (1 chiều lên Internet)

Trong đoạn code dưới, sử dụng 8 luồng đồng bộ tín hiệu của inut cảm biến. Bạn có thể gán giá trị của cảm biến nhiệt độ, độ ẩm, áp suất, ph, CO,... rất nhiều thứ, bạn chỉ việc đọc và gán giá trị là xong nhé!

#include <iNut.h>
iNut sensor;
void setup() {
  Serial.begin(9600); //bật baudrate ở mức 9600

  Serial.println("San sang nhan lenh");
  
  //Khai báo số lượng luồn cảm biến
  sensor.setup(8); //Sẽ có 08 luồn cảm biến

}

void loop() {


  for (byte i = 0; i < 8; i++) {
    unsigned long value = random() % 10000; //trả về giá trị random - "hên xui" - tự do
    sensor.setValue(i, value); //gán giá trị trên vào luồn
  }
  sensor.loop();
}

Gửi dữ liệu cảm biến lên Internet (2 chiều lên Internet)

Bạn có thể gửi lệnh từ Internet xuống Arduino mà không cần phải NAT PORT, không cần phải lo lắng về lập trình mạng và server. Tất cả mọi thứ hạ tầng mạng, iNut Platform đã lo lắng giùm bạn.

#include <iNut.h>
iNut sensor;

#define LED 13 //chân 13 là chân LED 
void setup() {
  Serial.begin(9600); //bật baudrate ở mức 9600

  Serial.println("San sang nhan lenh");

  pinMode(LED, OUTPUT);
  digitalWrite(LED, HIGH); //Bật đèn LED sáng
  
  //Khai báo số lượng luồn cảm biến
  sensor.setup(8); //Sẽ có 08 luồn cảm biến

  sensor.addCommand("LED", ledFunction); //xử lý khi nhận lệnh LED
  sensor.setDefaultHandler(defaultHandler);
}

void loop() {

  sensor.setValue(0, digitalRead(LED)); //đọc giá trị của đèn LED

 
  //giá trị cho các luồn từ 1-7 là giá trị random
  ///Tại sao lại sử dụng random? Vì đây là thử nghiệm, bạn có thể thay thế giá trị random bằng một giá trị cảm biến hoặc trị số mà bạn mong muốn đồng bộ lên Internet!
  for (byte i = 1; i <= 7; i++) {
    unsigned long value = random() % 10000; //trả về giá trị random - "hên xui" - tự do
    sensor.setValue(i, value); //gán giá trị trên vào luồn
  }
  sensor.loop();
}


//thực hiện khi nhận lệnh LED
void ledFunction() {
  char *arg = sensor.next();
  if (strcmp(arg, "ON") == 0) { //nếu tham số 1 là ON. LED ON. Thì đèn sáng
    digitalWrite(LED, HIGH);
    Serial.println("Bat den");
  } else if (strcmp(arg, "OFF") == 0) { // LED OFF. Đèn tắt
    digitalWrite(LED, LOW);
    Serial.println("Tat den");
  } else if (strcmp(arg, "TOGGLE") == 0) { //Đảo trạng thái của LED
    digitalWrite(LED, !digitalRead(LED)); 
    Serial.println("Doi trang thai den");
  } else {
    Serial.println("Khong nam trong tap hop lenh");
  }
}

//Nếu nhận được lệnh không phải từ những lệnh được đăng ký trước thì sẽ ghi ra ở đây
void defaultHandler(const char *command) {
  Serial.print(F("---Not found handler: "));
  Serial.println(command);


  //Đoạn chương trình dưới chỉ dùng để debug, để các bạn biết chương trình của mình ở lỗi ở đâu để khắc phục, cũng không cần hiểu nha.
  int idx = 0;
  char *arg;
  while ((arg = sensor.next()) != NULL) { //còn tham số nào thì in ra
    Serial.print("-----> Gia tri thu #");
    Serial.print(idx);
    Serial.print(": ");
    Serial.println(arg);
    idx++;
  }
}

Vậy làm thế nào để viết app điều khiển qua Internet? Cùng khám phá với tôi nhé.

Lập trình qua Internet

Các bạn có thể dùng thông qua REST API, Socket.IO hoặc MQTT để truyền lệnh đến iNut cảm biến nếu bạn là một lập trình viên phần mềm.

Tuy nhiên, nếu bạn là một người mới thì có 02 cách là sử dụng Node-red kéo thả hoặc App inventor. Trong đó, về App inventor các bạn có thể tham khảo qua 2 dự án:

Trong khuôn khổ bài viết, mình sẽ hướng dẫn các bạn sử dụng Node-red để tích hợp iNut vào dự án của bạn vì nó rất bá đạo, bạn có thể làm một app nhưng chạy mọi nền tàng bằng công nghệ webapp. Rất phù hợp cho việc thay đổi và sửa chữa.

Bạn có thể tham khảo rất nhiều bài viết về các dự án với iNut Platform tại đây nhé.

Okay, trong bài này, mình sẽ dựa vào nội dung của bài viết Đọc toàn bộ giá trị của iNut - Cảm biến / Kiểm thử iNut - cảm biến - Xem thử iNut cảm biến có hoạt động không? để hướng dẫn các bạn nhé. 

Để cài đặt chương trình kiểm thử iNut 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 sensor-serial-monitor

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

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

Các bạn lần lượt làm theo các video sau:

Good, các bạn đã thành công, bây giờ các bạn có thể khám phá rất nhiều mẫu ví dụ về Node-red để tự làm một giao diện sáng tạo tại Cộng đồng Arduino Việt Nam - Cộng đồng học thuật chất lượng về tự động hóa tốt nhất.

Bạn yêu cầu chi cứ comment phía dưới hoặc gọi trực tiếp Mr.Khánh 097 276 8491 (tư vấn về mảng này nhé)

lên
10 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ả

Nạp firmware cho Arduino bằng Xloader - Nạp chương trình cho Arduino bằng Xloader

Trong một số trường hợp bạn chỉ có File hex không có file chương trình hay muốn nạp cho nhiều mạch ứng dụng, dùng phần mềm Arduino IDE sẽ hơi bất tiện và mất nhiều thời gian hơn. Hoặc đơn giản hơn, bạn muốn bảo vệ source code của mình khi gửi cho khách. Đó là lý do chúng ta biên dịch ra file hex và gửi file hex thay vì gửi chương trình.

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

kLaserCutter - Tự làm máy cắt laser bằng mã nguồn người Việt - Phần 1: "In" máy cắt của chính bạn

Tớ là một người rất thích bộ môn nghệ thuật Kirigami – cắt giấy. Tuy nhiên, tớ không phải là một người khéo tay và thường xuyên cắt phạm giấy hoặc bị thương. Nhưng không vì thế mà khiến tớ bỏ qua bộ môn nghệ thuật đòi hỏi sự sáng tạo này. Các bạn thấy đấy, tớ đã đặt mục tiêu xây dựng chiếc máy cắt laser dưới 1 triệu đồng và đã hoàn thiện được nó. Tuy nhiên, trong phiên bản đó, vẫn có những điều tớ chưa hài lòng và cuối cùng những điều đó đã được khắc phục trong phiên bản máy cắt laser mã nguồn và phần cứng mở kLaserCutter - dự án phần cứng cùng với phần mềm mở đầu tiên ở Việt Nam.

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