Hướng dẫn dùng arduino strtok trong PHP

CHÚ Ý : Từ 2019 MLAB có thêm một website cho riêng Raspberry Pi và trở thành website chính về Raspberry Pi tại MLAB, các thông tin về sản phẩm - tin tức cập nhật về Raspberry Pi - Bài viết kỹ thuật hỗ trợ cho Raspberry Pi, ... MLAB cập nhật tại website : pivietnam.com.vn 

MLAB trân trọng thông báo tới quý khách hàng!!! 

Các bạn có thể tham khảo các bài viết hỗ trợ kỹ thuật và các tin tức mới nhất tại phần "tin tức"trên website PVIETNAM.COM.VN

Bài viết hỗ trợ kỹ thuật tại website PIVIETNAM.COM.VN - Bài 12: Lập trình web-server trên Raspberry Pi - Phần 3 [Link here]

1. Giới thiệu

Trong phần 3 này mình sẽ làm bản demo cuối cùng cho loạt bài web-server. Mình sẽ sử dụng trình duyệt trên máy tính/ điện thoại truy cập vào server trên Raspberry của mình để điều khiển bật tắt bóng đèn. Tuy demo đơn giản nhưng qua đó các bạn sẽ nhìn được hệ thống một cách tiệm cận trực quan hơn.

2. Chuẩn bị

Chắc chắn rằng các bạn đã đọc và thực hiện 2 bài trước : phần 1 và phần 2.

Phần cứng gồm có:

-      Raspberry Pi

-      ESP8266 Evaluation Board

-      Đèn 12V

-      Nguồn 12V

Kết nối :

ESP8266 evaluation board gồm có một module wifi esp8266 version 7 và được tích hợp thêm Relay 5V. Chân điều khiển relay kết nối với chân số 5 của esp. Relay sẽ được dùng để điều khiển bóng đèn. Các bạn cũng có thể lấy ngay bóng đèn điện phòng của mình để điểu khiển.

Raspberry Pi phải được kết nối mạng. Máy tính/ điện thoại cùng mạng LAN với Pi.

Thông tin thêm :

ESP8266 v7 được tích hợp vi xử lý bên trong có thể lập trình được. Có thể dùng nó như một vi điều khiển bình thường ngoại trừ hạn chế về mặt bộ nhớ hay các cổng ngoại vi. Thư viện lập trình cho ESP8266 được viết trên nền tảng arduino – dùng phần mềm arduino có thể lập trình được. Các bạn có thể xem hướng dẫn cài đặt và sử dụng thư viện ở đây.

3. Thực hiện

Để thực hiện một cơ chế quản lý tốt các thiết bị cần phải giải quyết nhiều vấn đề khác nhau. Điều đầu tiên phải quan tâm tới là phân biệt các thiết bị để điều khiển. Vì các thiết bị và web-server đều kết nối tới trung tâm qua phương thức TCP-IP nên cũng cần phải phân biệt được web-server.  Cách bóc tách dữ liệu từ server và gửi dữ liệu đó tới thiết bị.

a] Khởi tạo thiết bị

Mỗi thiết bị sẽ có một mã ID riêng; khi thiết bị kết nối tới trung tâm [Master] nó sẽ gửi thông tin khởi tạo thiết bị gồm có mã ID để Master xác nhận. Chú ý rằng Master sẽ biết trước rằng có những thiết bị nào. Nếu thiết bị nằm trong danh sách quản lý, nó sẽ chấp nhận việc khởi tạo thiết bị và lưu lại thông tin. Chính thông tin này được dùng làm để phân biệt thiết bị.

Hãy cùng xem thuật toán khởi tạo thiết bị dưới đây. Gồm các 2 phía thiết bị [client] và trung tâm [Master]

Hình 1: khởi tạo thiết bị

Thuật toán bên Master :

B1.      Chờ tín hiệu kết nối từ client.

B2.      Kiểm tra thông tin đó có phải thông tin khởi tạo hay không.

B3.      Nếu đúng là thông tin khởi tạo thì kiểm tra xem trong danh sách thiết bị có thiết bị đó không.

B4.      Nếu có thì lưu lại thông tin thiết bị [có thể là địa chỉ IP]. Thực chất trong chương trình này lưu lại file-descriptor tương ứng với thiết bị.

B5.      Gửi thông báo phản hồi đã khởi tạo thành công.

Thuật toán bên Client :

B1.      Kết nối tới Master.

B2.      Gửi thông tin khởi tạo. Thông tin khởi tạo có thể là chuỗi ký tự  trong đó có chuỗi ký tự đặc biệt thể hiện đó là khởi tạo. Ví dụ dữ liệu khởi tạo : “INIT:L2”. Trong đó “INIT” thông báo cho Master biết đây là thông tin khởi tạo và mã thiết bị là “L2”.

B3.      Chờ tín hiệu phản hồi từ Master. Nếu không có tín hiệu trả về là “OK” thì sẽ thực hiện việc gửi lại thông tin khởi tạo [sau một khoảng thời gian : 5s].

Chương trình bên Master :

Danh sách quản lý thiết bị là một mảng bao gồm 3 thông tin là tên thiết bị, mã ID thiết bị, và file-desciptor tương ứng của thiết bị.

char *IdDevice[4][3] = { {"Living Room Light", "L1", NULL},
                    {"Toilet Light", "L2", NULL},
                    {"Bed Room Light", "L3", NULL},
                    {"Font Door", "D1", NULL},
};

Chú ý tên thiết bị như là "Living Room Light" phải giống hệt như trong cơ sở dữ liệu. Vì tên này sẽ nằm trong dữ liệu từ web-server gửi sang, nó dùng làm tham chiếu tới thiết bị. Mã ID của thiết bị là “L1”, “L2” v.vv . Và cuối cùng file-descriptor mặc định là NULL. “file-descriptor” thực chất là số kiểu int. Khi sử dụng nó ta phải chuyển lại kiểu int để sư dụng còn lưu trữ ta phải đổi sang kiểu xâu ký tự.

Trong bảng có thể sự trùng lặp giữa tên thiết bị nhưng mã thiết bị và file-descriptor phải khác nhau. Lý do là vì có thể trong “Living Room Light” có thể có nhiều thiết bị đèn khác nhau. Vì thế ta có thể điều khiển chung một nhóm thiết bị.

bool IdentifyDevice[int clntSock, char *str] {
 
    for [int i = 0; i  addr, localhost] ] {   
    printf[". Web server: %s\n", buffer];
    ServerCommand[buffer];
}
 
 
void ServerCommand[char *str] {
 
    char *header = strtok[str, ":"];
    char *content = strtok[NULL, ":"];
    for [int i = 0; i 

Bài Viết Liên Quan

Chủ Đề