Có thể nói để xây dựng được thành công một mini webserver, thu thập dữ liệu cũng như điều khiển các cơ cấu chấp hành từ xa cần làm rất nhiều công việc. Chúng ta sẽ bắt đầu với những vấn đề cơ bản về giao tiếp qua http trước, sau đó bắt tay xây dựng giao diện.
Toàn bộ loạt bài viết này sẽ sử dụng các ngôn ngữ lập trình và board sau:
+ Ngôn ngữ: php, mysql, html, bootstrap cho giao diện và xử lý tại server, c++ cho client đọc dữ liệu cảm biến và giao tiếp với server.
+ Board: Raspberry Pi làm miniserver, ESP8266 làm client
Cơ chế làm việc của mô hình thu thập dữ liệu, điều khiển qua httpNhìn trên sơ đồ trên, ta thấy việc giao tiếp truyền nhận dữ liệu của esp với server cơ bản dựa trên bản tin request và response của giao thức http.
Vậy giao thức http hoạt động thế nào?
– HTTP là chữ viết tắt từ HyperText Transfer Protocol (giao thức truyền tải siêu văn bản). Đây là giao thức cơ bản mà World Wide Web sử dụng để truyền tải nội dung các trang web. HTTP xác định cách các thông điệp (các file văn bản, hình ảnh đồ hoạ, âm thanh, video, và các file multimedia khác được định dạng và truyền tải ra sao, và hoạt động của Web Server và các trình duyệt Web).
– Trong mô hình của HTTP, Webserver đồng thời cũng là TCP Server, mở sẵn port mặc định dành cho dịch vụ HTTP là TCP 80 (ở chế độ listen), sẵn sàng đợi yêu cầu kết nối từ các Client.
– Các Client sẽ khởi tạo kết nối TCP thông qua port này, sau khi Webserver chấp nhận kết nối, Client sẽ gửi một bản tin HTTP (HTTP message) gọi là HTTP request tới Server trên kết nối TCP vừa thiết lập.
– Server sẽ trả lời lại bằng một bản tin HTTP khác là HTTP response. Bản tin này sẽ chứa nội dung trang Web yêu cầu (được viết bằng ngôn ngữ HTML).
Với các đặc điểm được nói đến ngắn gọn ở trên, công việc để sử dụng webserver cho việc thu thập dữ liệu và điều khiển có thể dễ dàng nhận thấy bằng việc nhúng các trường dữ liệu cảm biến vào trong các request và response của http.
Ví dụ về nhúng các trường dữ liệu vào bản tin request:
Giả sử chúng ta gõ đường dẫn sau https://luuvachiase.net?LED=1
Khi chúng ta truy cập vào đường dẫn này, nghĩa là đã thực hiện việc gửi đi một request theo phương thức GET đến server, lúc này tại server nếu chúng ta sử dụng hàm để tách giá trị của bản tin GET, ở đây là biến LED có giá trị là 1, có nghĩa, ta đã bước đầu giao tiếp giữa client và server thông qua http. Việc này dễ dàng được thực hiện trên nền tảng ESP8266.
VD: client.print (String(“POST “) + “/up_load_data.php?temp=20” + “HTTP/1.1\r\n” + “Host: ” + 192.168.1.1+ “\r\n” + “Connection:close\r\n\r\n”);
Trên đây là đoạn code dùng trên nền tảng Arduino cho Esp8266. Đoạn mã này dùng cho việc gửi đi một bản tin request đến một server có địa chỉ 192.168.1.1, bằng phương thức POST. ( với phương thức GET, dữ liệu có thể dễ dàng được quan sát trên đường dẫn, nhưng với POST tất cả sẽ được ẩn đi). Lúc này đường dẫn sẽ gửi tới file up_load_data.php biến temp có giá trị bằng 20.
Và dưới đây là ví dụ về đoạn mã tại server, nhận request và tách trường dữ liệu temp từ request.
if (isset($_POST[‘temp’]))
{
$temp_php = $_POST[“temp”];
}
Đoạn mã trên là một đoạn mã PHP, có ý nghĩa là nếu tồn tại bản tin POST, đi kèm biến temp, thì gán giá trị biến temp và biến của PHP là $temp_php
Công việc sau đó là lưu giá trị biến $temp_php này vào cơ sở dữ liệu để sẳn sàng cho xử lý hiển thị.
$sql=”UPDATE sensor SET values_sensor =’$temp_php’ WHERE user_id = $user_find[user_id]”;
Đoạn mã trên là thực hiện lưu giá trị temp_php vào cột values_sensor trong mysql, nơi mà có user_id= user_id
Trên đây là bài viết tổng quát và bước đầu cho người đọc biết cách thức sử dụng bản tin request và response trong việc upload dữ liệu từ esp8266. Tôi sẽ mô tả từng phần nhỏ một để xây dựng được một server hoàn chỉnh, có chức năng hiển thị dữ liệu cũng như điều khiển esp8266 trog các bài tiếp theo.