HTTP là viết tắt của HyperText Transfer Protocol, một giao thức ứng áp dụng cho các hệ thống thông tin siêu phương tiện phân tán, cộng tác, cho phép người dùng giao tiếp dữ liệu trên World Wide Web. Cụ thể hơn, HTTP là một giao thức yêu cầu/phản hồi không trạng thái, nơi các Client yêu cầu thông tin từ Server và Server sẽ phản hồi các yêu cầu này theo đó (mỗi yêu cầu độc lập với yêu cầu khác). Nó cho phép tìm nạp các tài nguyên, chẳng hạn như tài liệu HTML [19].
Dữ liệu HTTP truyền trên giao thức TCP, đảm bảo độ tin cậy của việc phân phối và chia nhỏ các yêu cầu và phản hồi dữ liệu lớn thành các phần mạng có thể quản lý được [19].
Đây là cách nó hoạt động: lúc đầu, client gửi một gói SYN đến Server và sau đó Server sẽ phản hồi với gói SYN-ACK để xác nhận việc nhận thành công. Tiếp theo, Client lại gửi một gói ACK, bao gồm một thiết lập kết nối – điều này cũng thường được gọi là bắt tay 3 bước. Ngoài ra, Client gửi một yêu cầu HTTP đến Server để tìm tài nguyên và đợi nó phản hồi một yêu cầu. Sau đó webserver sẽ xử lý yêu cầu, tìm tài
nguyên và gửi phản hồi đến Client. Nếu Client không yêu cầu thêm tài nguyên, nó sẽ gửi gói FIN để đóng kết nối TCP [19].
Giao thức HTTP được sử dụng để khởi động World Wide Web để truyền dữ liệu dưới dạng văn bản, âm thanh, hình ảnh và video từ Server đến trình duyệt web của người dùng và ngược lại. HTTP hiện là nền tảng truyền dữ liệu của ứng dụng duyệt web ngày nay và được sử dụng rộng rãi trong hệ thống Internet of Things. Mặc dù giao thức Http có nhiều nhược điểm trong việc truyền dữ liệu và không phù hợp bằng các giao thức tối ưu khác như MQTT, CoAP, AMQP sử dụng cho IoT, nhưng giao thức này vẫn phổ biến trong lĩnh vực nhà thông minh cũng như việc sử dụng nhiều trong bộ vi điều khiển và vi xử lý tiên tiến. Ví dụ, các hệ thống dựa trên thế hệ Raspberry Pi mới sử dụng giao thức http để truyền dữ liệu. Arduino cũng sử dụng giao thức này để giao tiếp với các thiết bị khác. Bên cạnh đó, có thêm 3 phiên bản mới của http ra đời nhằm bù đắp những nhược điểm của phiên bản cũ và được áp dụng cho những trường hợp người điều khiển mong muốn [19].
Hình 2.4. Dữ liệu truyền qua internet bằng giao thức HTTP. 2.2.3. Constrained Application Protocol (CoAP)
CoAP là một giao thức đơn giản chi phí thấp được thiết kế riêng cho các thiết bị hiệu năng thấp (chẳng hạn như vi điều khiển) và nơi mạng có băng thông thấp. Giao thức này được sử dụng để trao đổi dữ liệu M2M và rất giống với HTTP [19].
Mô hình tương tác CoAP tương tự như mô hình Client/Server của HTTP.CoAP sử dụng cấu trúc 2 lớp. Lớp dưới là lớp bản tin được thiết kế liên quan đến UDP và chuyển tiếp không đồng bộ, Lớp yêu cầu/phản hồi liên quan đến phương thức giao tiếp và xử lý bản tin yêu cầu/phản hồi [19].
Mô hình bản tin CoAP:Lớp bản tin hỗ trợ 4 loại bản tin: CON (có thể xác nhận), NON (không thể xác nhận), ACK (đã xác nhận), RST (đặt lại).
- Truyền tải bản tin tin cậy: Một bản tin có thể xác nhận (CON) được truyền đi truyền lại cho đến khi Server gửi lại bản tin xác nhận (ACK) với cùng một ID. Sử dụng thời gian chờ mặc định và giảm thời gian đếm theo cấp số nhân khi truyền bản tin CON. Nếu Server không thể xử lý bản tin truyền đến, nó sẽ phản hồi bằng cách thay thế bản tin xác nhận (ACK) bằng bản tin đặt lại (RST).
- Truyền tải bản tin không tin cậy: Một bản tin không yêu cầu gửi tin cậy, có thể được gửi bằng bản tin không tin cậy. Nó sẽ không được xác nhận, nhưng nó vẫn có ID để phát hiện trùng lặp.
Ứng dụng CoAP cho nhà thông minh:
- Thiết bị thông tin, thiết bị điều khiển và thiết bị truyền thông trong mạng nhà thông minh có đặc điểm là chi phí thấp và nhẹ. Do đó, CoAP có thể được coi là sự lựa chọn giao thức tốt nhất cho mạng truyền thông gia đình.
- Mạng nhà thông minh cung cấp khả năng điều khiển và giám sát năng lượng tiêu thụ của các thiết bị trong nhà. Hệ thống kiểm soát năng lượng sử dụng ổ cắm thông minh để giám sát thiết bị tiêu thụ điện năng để cung cấp thông tin điện áp, dòng điện và năng lượng khác. Nó có thể nhận ra cảnh báo mất an toàn, điều khiển từ xa và tiết kiệm năng lượng chủ động. Mọi nút thu thập dữ liệu với Client, CoAP có thể trao đổi thông tin với các nút khác. CoAP có thể được cài đặt trong mạng LAN hoặc Internet. Không giống như nhiều giao thức không dây cho các thiết bị tự động trong gia đình, CoAP được thiết kế không bị giới hạn trong mạng cục bộ mà cung cấp nền tảng cơ bản của web.
- Trong hệ thống trên, các nút thu thập dữ liệu bao gồm một proxy, ổ cắm thông minh và mô-đun thu thập dữ liệu không dây. Thông tin năng lượng và thông tin môi trường của thiết bị được ổ cắm thông minh thu thập và chuyển đến mô-đun thu thập dữ liệu thông qua kênh không dây, sau đó gửi dữ liệu nối tiếp đến proxy để xử lý và đóng gói dữ liệu. Server điều khiển phân tích tất cả dữ liệu và lưu trữ chúng trong cơ sở dữ liệu. Hệ thống tích hợp mạng gia đình và Internet, người dùng có thể truy cập trang web của hệ thống để điều khiển từ xa công tắc, quản lý cấu hình, truy vấn mức tiêu thụ năng lượng, v.v.
Hình 2.5. Dữ liệu truyền qua internet bằng giao thức CoAP [19]. 2.3. Các phần cứng trong đề tài
2.3.1. Arduino Nano
Arduino Nano là một trong những phiên bản của board Arduino. Arduino Nano sử dụng MCU ATmega328P làm vi điều khiển trung tâm. Nhờ việc sử dụng IC dán của ATmega328P thay cho IC cắm trên Aruino Uno nên Arduino nana được mở rộng them hai chân Analog. Các số liệu tham khảo ở bảng 2.1:
Arduino Nano có 14 cổng in/out digital. Với mức điện áp làm việc tối đa là 5V. Mỗi chân có thể cung cấp hoặc nhận dòng điện 40mA và có điện trở kéo lên đến 50kΩ. Các chân có thể được sử dụng làm đầu vào hoặc đầu ra, sử dụng các hàm cơ bản pinMode(), digitalWrite () và digitalRead ().
Arduino nano có 6 chân đầu vào tương tự nhưng Arduino Nano có 8 đầu vào tương tự (19 đến 26), được đánh dấu A0 đến A7. Như vậy, bạn có thể kết nối tối đa 8 kênh đầu vào tương tự để xử lý. Mỗi chân tương tự này có một ADC có độ phân giải 1024 bit (do đó nó sẽ cho giá trị 1024). Theo mặc định, các chân được đo từ mặt đất đến 5V. Tuy nhiên chúng ta có thể sử dụng điện áp tham chiếu từ 0 đến 3.3V bằng cách kết nối với nguồn 3.3V cho chân AREF (pin thứ 18) và sử dụng chức năng analogReference (). Tương tự như các chân digital trong Nano, các chân analog cũng có một số chức năng khác.
Hình 2.6. Giới thiệu Arduino nano [10].
Arduino Nano Thông số kỹ thuật
Số chân analog I/O 8
Cấu trúc AVR
Tốc độ xung 16 MHz
Dòng tiêu thụ I/O 40 mA
Số chân Digital I/O 22
Bộ nhớ EEPROM 1KB
Bộ nhớ Flash 32 KB of which 2 KB used by
Bootloader
Điện áp ngõ vào (7-12) volts
Vi điều khiển ATmega328P
Điện áp hoạt động 5V
Kích thước bo mạch 18 x 45 mm
Nguồn tiêu thụ 19mA
Ngõ ra PWM 6
SRAM 2KB
Cân nặng 7 gms
2.3.2. ESP 8266
Kít ESP8266 node Mcu phát triển dựa trên nền chíp Wifi SoC ESP8266 được tích hợp sẵn mạch nạp sử dụng chíp CP2102 trên borad. ESP8266 có sẵn một lõi vi sử lý chính vì thế mà người dùng có thể lập trình cho cho ESP8266 mà không cần thêm bất kì vi xử lý nào nữa. Có hai ngôn ngữ dùng để lập trình cho ESP8266, sử dụng phần mềm IDE của Arduino để lập trình nhờ sự hỗ trợ của bộ thư viện riêng hoặc có thể sử dụng phần mềm node MCU [21].
Hình 2.7. Giới thiệu ESP 8266 Node Mcu [21].
ESP 8266 Thông số kỹ thuật
Microcontroller ESP8266 Tensilica 32-bit
Serial to USB Converter CP2102
Operating Voltage 3.3V
Input Voltage (recommended) 7-12V
PWM I/O Pins (Shared with Digital I/O) 10
Analog Input Pins 1(10-bit)
DC Current per I/O Pin 12mA (Max)
Hardware Serial Ports 1
Flash Memory 4 MBytes
Instruction RAM 64 KBytes
Data RAM 96 KBytes
Clock Speed 80MHz
Network IEEE 802.11 b/g/n WiFi
Built-in LED Attached to digital pin 13
USB Connector Style Micro-B Female
Bảng 2.2: Thông số kỹ thuật ESP 8266 Node Mcu. [21]. 2.3.3. Mạch thu phát RF ZigBee CC2530
Mạch sử dụng IC CC2530 từ TI, được lập trình sẵn firmware, chúng ta sẽ phải cài đặt kênh, tốc độ baud và lập trình nhúng vào theo nhu cầu và mục đích sử dụng. Module ZigBee sẽ giao tiếp với module ZigBee khác bằng giao thức ZigBee, Module giao tiếp với vi điều khiển bằng giao thức Uart [22].
Các cấu hình cho mạch thu phát RF ZigBee CC2530:
Bước 1: Không cấp nguồn, nhấn giữ phím key, sau đó cấp nguồn, quan sát 4 led trên module sẽ chớp nháy báo hiệu vào chế độ cấu hình, thả nút nhấn key ra chúng ta sẽ vào chế độ cấu hình baud cho kết nối UART đầu tiên, nhấn để thay đổi các led, dựa vào thông tin 4 led đối chiếu với tốc độ baud mà nhà phát hành ấn định.
Bước 2: Sau khi chọn xong tốc độ baud phù hợp cho kết nối UART, nhấn giữ lại phím key để lưu thiết đặt sẽ thấy 4 led cùng chớp báo hiệu chuyển qua chế độ cấu hình tiếp theo: kênh - Chanel, có 16 kênh có thể lựa tùy theo trạng thái 4 led hiển thị, lưu ý các module muốn truyền nhận được với nhau phải có cùng chanel (không nhất thiết phải cùng baud vì baud chỉ dùng để giao tiếp với Vi điều khiển).
Bước 3: Sau khi chọn chanel, nhấn giữ phím key cho đến khi thấy 4 led cùng chớp báo hiệu lưu thành công và chuyển qua chế độ cấu hình tiếp theo: chọn kiểu truyền nhận, có 2 kiểu truyền là Point to Point và Broadcast.
Point to Point: chỉ duy nhất 2 module kết nối với nhau trong 1 Chanel, cấu hình 1 Module là A, 1 Module là B trong 1 Chanel và cả hai có thể truyền dữ liệu qua lại.
Boardcast: Nhiều Module kết nối với nhau trong 1 chanel, đây là mô hình mạng lưới trong ZigBee. Để làm được điều này thì tất cả các module cần được cấu hình là
Broadcast và chung 1 chanel, khi 1 module truyền, tất cả các module còn lại sẽ nhận, và dựa trên địa chỉ nhận để thực thi kết quả.
Bước 4: Sau khi cấu hình kiểu truyền nhận, nhấn tì phím key lần cuối cùng sẽ thấy 4 Led cùng chớp báo hiệu hoàn thành cấu hình, tất cả các thông số được lưu và module bắt đầu hoạt động
Hình 2.8. Giới thiệu module CC2530 [22].
Module CC2530 Thông số kỹ thuật
IC chính RF ZigBee SoC CC2530 từ TI.
Điện áp sử dụng 3 - 5.5VDC
Dòng tiêu thụ < 30mA
Chuẩn truyền sóng ZigBee 2.4Ghz.
Tốc độ truyền sóng tối đa 3300bps
Công suất truyền 4.5dbm
Khoảng cách truyền lý tưởng 250m.
Giao thức kết nối UART TTL (3.3VDC hoặc 5VDC)
Kích thước 15.5x31.5mm
Bảng 2.3: Thông số kỹ thuật module ZigBee CC2530 [22]. 2.3.4. I2C LCD
LCD có rất nhiều ưu điểm so với các dạng hiển thị khác: Nó có khả năng hiển thị kí tự đa dạng, trực quan (chữ, số và kí tự đồ họa), dễ dàng đưa vào mạch ứng dụng
theo nhiều giao thức giao tiếp khác nhau, tốn rất ít tài nguyên hệ thống và giá thành rẻ. I2C LCD giúp kết nối màn hình Lcd với vi điều khiển dễ dàng hơn với giao tiếp I2C (SCL, SDA). Hỗ trợ cho tất cả các Lcd sử dụng driver HD44780 và tương thích với hầu hết các loại vi điều khiển. Với các thông số kỹ thuật trong bảng 4: [23].
I2C LCD Thông số kỹ Thuật
Điện áp hoạt động 2.5-6V DC
Hỗ trợ màn hình LCD1602,1604,2004 (driver HD44780)
Giao tiếp I2C
Địa chỉ mặc định 0X27
Bảng 2.4: Thông số kỹ thuật I2C LCD [23].
Hình 2.9: Giao tiếp I2C LCD với Arduino [23]. 2.3.5. Cảm biến nhiệt độ, độ ẩm DHT22
Cảm biến độ ẩm, nhiệt độ DHT22 (Temperature Humidity) Sensor sử dụng giao tiếp 1 Wire để kết nối và giao tiếp với Vi điều khiển. DHT22 là phiên bản cải tiến của DHT11 với giá trị đo chính xác hơn và ổn định hơn trong quá trình sử dụng [24].
Nguồn sử dụng 3~5VDC
Dòng sử dụng 2.5mA max (khi truyền dữ liệu)
Khoảng giá trị đo độ ẩm 0100%RH với sai số 2-5%
Khoảng giá trị đo nhiệt độ -40 to 80°C sai số ±0.5°C
Tần số lấy mẫu tối đa 0.5Hz (2 giây 1 lần)
Kích thước 27mm x 59mm x 13.5mm
Bảng 2.5: Thông số kỹ thuật cảm biến nhiệt độ, độ ẩm DHT22 [24].
Hình 2.10. Giới thiệu cảm biến DHT22 [24]. 2.3.6. Relay
Vì trong đối tượng điều khiển của chúng ta là các tải xoay chiều nên không thể đóng các trực tiếp bằng Vi điều khiển mà phải thông qua các Relay trung gian để đảm bảo an toàn cho mạch [25].
Bản chất của relay là một nam châm điện và các tiếp điểm đóng cắt được thiết kế module hóa giúp dễ dàng lắp đặt. Khi có dòng điện chạy qua cuộn dây nó sẽ hút tiếp điểm lại giúp mạch điện trở thành mạch kín [25].
Hình 2.11. Cấu tạo Relay [25].
Thông số Giá trị
Điện áp tải tối đa AC 250V-10A / DC 30V-10A
Điện áp điều khiển 5 VDC
Dòng kích Relay 5mA
Trạng thái kích Mức thấp (0V)
Đường kính Lỗ ốc 3.1 mm
Kích thước 50 * 26 * 18.5 mm
Bảng 2.6: Thông số kỹ thuật Relay [25]. 2.3.7. Arduino ide
Arduino IDE được viết tắt (Arduino Integrated Development Environment) là một trình soạn thảo văn bản, giúp bạn viết code để nạp vào bo mạch Arduino.
Arduino ide là một trình soạn, biên dịch để lập trình viên viết code và nạp vào các dòng sản phẩm của arduino. Bản thân arduino là một một nền tảng mã nguồn mở bao gồm phần cứng và phần mềm. Phần cứng bao gồm các board mạch được thiết kế sẵn với các vi điều khiển và linh kiện hỗ trợ hoàn chỉnh (hiện nay đã có đến hơn 300000 bo mạch khác nhau được thương mại). Còn phần mềm của arduino cho phép bạn can thiệp vào các điều khiển dựa trên tín hiệu đầu vào, đầu ra của các vi điều khiển trên arduino [26].
Arduino ide được viết bằng ngôn ngữ lập trình Java là ứng dụng đa nền tảng (cross- platform). Ngôn ngữ code cho các chương trình của arduino là bằng C hoặc C++. Bản thân arduino ide đã được tích hợp một lượng lớn thư viện phầm mềm thường gọi là "wiring", từ các chương trình "wiring" ban đầu sẽ giúp bạn thực hiện thao tác code dễ dàng hơn. Một chương trình chạy trong arduino được gọi là một sketch, chương trình được định dạng dưới dạng filename.ino [ 26].
Hình 2.13. Giao diện lập trình Arduino ide. 2.4 Nền tảng xây dựng ứng dụng.
2.4.1. Các khái niệm về ngôn ngữ lập trình (phần mềm)
Ngôn ngữ lập trình là một dạng ngôn ngữ máy tính, được dùng để viết ra phần mềm, tập lệnh hoặc các hướng dẫn cho máy tính làm theo. Hiện nay có rất nhiều ngôn ngữ lập trình đang được sử dụng. Mặc dù các ngôn ngữ cũng có điểm chung tương đồng nhưng mỗi ngôn ngữ lại có các cú pháp sử dụng riêng. Công việc của các lập trình viên là họ phải học các quy tắc, cú pháp và cấu trúc ngôn ngữ rồi thực hiện viết mã nguồn trong một trình soạn thảo hoặc IDE và biên dịch code thành ngôn ngữ máy để máy tính có thể hiểu được [28].
Lập trình hướng đối tượng là một kỹ thuật lập trình cho phép lập trình viên tạo ra các đối tượng trong code để sử dụng cho nhiều mục đích khác nhau bằng cách trừu tượng hóa các thuộc tính, phương thức của đối tượng đó. Thuộc tính chỉ thông tin, đặc điểm, tính chất của đối tượng còn phương thức thể hiện thao tác, hành động của đối tượng đó [28].
Class: Là một kiểu dữ liệu bao gồm các thuộc tính và các phương thức của các đối tượng. Đây được xem như là sự trừu tượng của một hoặc nhiều đối tượng [28].