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].
Ví dụ: một Project quản lý của Đại học Sư phạm kỹ thuật có đối tượng là sinh viên. Đối tượng sinh viên sẽ có các thuộc tính cơ bản như: Họ và tên, mã sinh viên, Ngành học, năm học, … và các phương thức của sinh viên là: đăng ký môn học, tham gia các cuộc thi, tha gia câu lạc bộ, … các thuộc tính và phương thức trên sẽ được xây dựng trong một class là “quản lý sinh viên” thì class quản lý đó được xây dựng một cách trừu tượng mà người quản lý sẽ biết được nó dùng để quản lý sinh viên mà không quan tâm đến các thuộc tính, phương thức cụ thể bên trong [28].
Có rất nhiều loại ngôn ngữ lập trình khác nhau. Mỗi ngôn ngữ có một ưu nhược điểm khác nhau. Mỗi nhóm hỗ trợ 1 lĩnh vực khác nhau, vì vậy cần có sự lựa chọn cho mục đích sử của sản phẩm trước khi quyết định nó được viết bởi một ngôn ngữ nào đó. 2.4.2 ngôn ngữ lập trình C#.
C# (hay C sharp) là một ngôn ngữ lập trình được xây dựng và phát triển bởi Mycrosoft vào năm 2000, là ngôn ngữ hướng đối tượng phục vụ cho việc xây dựng ứng dụng, web, game, app mobile, … C# được xây dựng trên nền tảng của hai ngôn ngữ mạnh nhất là C++ và Java [29].
Trong lập trình C# sẽ có 3 nền tảng hỗ trợ chính đó là .NET Framework, .Net core và mono. Trong đồ án sẽ sử dụng nền tảng .Net Farmwork, cụ thể là phiên bản 4.6. Các nền tảng này sẽ hỗ trợ biên dịch từ ngôn ngữ C# sang ngôn ngữ trung gian MSIL (Microsoft intermediate language) [29].
Sau đó mã này được biên dịch bởi Common Language Runtime (CLR) để trở thành mã thực thi của hệ điều hành. Hình bên dưới thể hiện quá trình chuyển đổi MSIL code thành native code [29].
C# với sự hỗ trợ mạnh mẽ của .NET Framework giúp cho việc tạo một ứng dụng Windows Forms hay WPF (Windows Presentation Foundation), phát triển game, ứng dụng Web, ứng dụng Mobile trở nên rất dễ dàng [29].
Lập trình hướng đối tượng (OOP: Object-oriented programming) là một phương pháp lập trình biến mọi thứ trở thành đối tượng. và đối tượng đó sẽ có các thuộc tính và phương thức. Phương thức là những hành động thực hiện tác động lên đối tượng hoặc do đối tượng thực hiện. Thuộc tính là các tính chất của đối tương đó. Lập trình hướng đối tượng có 4 tính chất chính. Đó là tính trừu tượng (abstraction), tính đóng gói (encapsulation), tính đa hình (polymorphism) và tính kế thừa (inheritance). C# hỗ trợ cho tất cả những đặc tính nêu trên [29].
2.4.3 Định nghĩa WPF
Hình 2.15. Giới thiệu về WPF [30].
WPF là viết tắt của thuật ngữ “Windows Presentation Foundation” nó là một nền tảng cho phép lập trình viên tạo ra các ứng dụng trên nền .NET framework sử dụng trên hệ điều hành Windows. Mục tiêu sử dụng WPF trong đề tài này để xây dựng giao diện thân thiện người dùng và có thể tùy biến chỉnh sửa, nâng cấp khi có nhu cầu. WPF là trình tạo giao diện chứ không phải trình tạo chức năng. Nó tương tự như HTML và CSS trong website, WPF thuộc về phần font end dành cho developer [30].
2.4.4 Giới thiệu về Xamarin
Xamarin được xây dựng vào tháng 5 năm 2011 bởi các kỹ sư đã tạo ra Mono, Mono cho Android và MonoTouch, mục đích là triển khai chạy ứng dụng trên nhiều nền tảng của Common Language Infrastructure (CLI) và Common Language Specifications (Thường được gọi là Microsoft .NET). Dựa trên ngôn ngữ C#, các nhà phát triển có thể sử dụng các công cụ Xamarin để viết các ứng dụng Android, iOS trên cùng một code project (Cross- platform) [31].
Hình 2.16. Giới thiệu về xamarin [31]. 2.4.5 Khái niệm về Sever firebase
Firebase là dịch vụ cơ sở dữ liệu hoạt động trên nền tảng đám mây – cloud. Kèm theo đó là hệ thống máy chủ cực kỳ mạnh mẽ của Google. Chức năng chính là giúp người dùng lập trình ứng dụng bằng cách đơn giản hóa các thao tác với cơ sở dữ liệu. Đặc biệt là dịch vụ bảo mật cực tốt và hỗ trợ các API đơn giản [32].
Firebase có hỗ trợ liên kết đăng nhập (Google, Facebook, twiter, ...) thuận tiện cho người sử dụng cũng như người phát triển ứng dụng. Phần lớn Firebase thường sử dụng làm nên tảng đăng nhập cho các ứng dụng nhỏ lẻ nhằm tăng lợi nhuận cho nhà phát triển.
Hình 2.17. Giới thiệu về Firebase [32].
Điểm nổi bật của firebase: Firebase hỗ trợ tín năng readtime Database giúp đồng bộ hóa dữ liệu người dùng kể cả khi không có kết nối mạng tạo nên trải nghiệm xuyên suốt bất chấp tình trạng internet và đây là tính năng được sử dụng chính trong đề tài điều khiển thiết bị ứng dụng công nghệ ZigBee. Ngoài ra còn có chức năng Authentication cung cấp nhiều xác thực với bảo mật cao và đơn giản hóa cho người dùng.
2.3.6 Phần mềm sử dung và các gói hỗ trợ
Đề tài sẽ sử dụng tạo ứng dụng windows và ứng dụng trên nền tảng cross platform được viết trên visual studio. Visual studio là ứng dụng được phát hành bởi Microsoft nhằm mục đích hỗ trợ cho developer phát triển các phần mềm, ứng dụng cho người dùng. Visual studio hỗ trợ đa nền tảng, đa ngôn ngữ và là ứng dụng mà hầu như lập trình viên cũng biết đến.
.Net Framework là một nền tảng lập trình và cũng là một nền tảng thực thi ứng dụng chủ yếu trên hệ điều hành Microsoft Windows được phát triển bởi Microsoft. Các chương trình được viết trên nền.NET Framework sẽ được triển khai trong môi trường phần mềm được biết đến với tên Common Language Runtime (CLR).
Nuget: nuget được hiểu như là một thư viện hỗ trợ sẵn nhằm chức năng giảm thiểu code trong project, các nuget cùng API có thể do nhà sản xuất tạo nên cũng có thể do người dùng tạo nên để tận dụng lại sau mỗi project nhằm giảm thiểu code và tăng hiệu quả quản lý code trong project.
Chương 3: Thiết kế và thi công 3.1 Tổng quan về hệ thống
3.1.1 Sơ dồ hệ thống
Thiết kế hệ thống nhà thông minh với các chức năng cơ bản là giám sát nhiệt độ, độ ẩm, khí gas nếu vượt ngưỡng giá trị đặt ra sẽ phát tín hiệu cảnh báo qua còi và app điện thoại. Bên cạnh đó hệ thống còn thực hiện nhiệm vụ điều khiển các thiết bị điện bằng nút nhấn trên mạch và nút nhấn điều khiển trên app điện thoại.
Sơ đồ hệ thống:
Hình 3.1: Sơ đồ tổng quát hệ thống. 3.1.2. Chức năng của các khối
- Node cảm biến có chức năng thu thập giá trị nhiệt độ, độ ẩm, khí gas nếu có giá trị vượt quá giới hạn đặt ra sẽ phát đi tín hiệu cảnh báo nguy hiểm. Đồng thời các giá trị đo đạt được sẽ gửi về Getway thông qua sóng ZigBee và được gửi lên server thông qua mạng internet
- Node điểu khiển tải nhận các lệnh điểu khiển tải từ server gửi về Getway và được gửi đến Node điều khiển tải để thực hiện điều khiển bật tắt thiết bị điện.
Node cảm biến Getway Node điều khiển tải
Google Firebase
iApp điện thoại, máy
Bên cạnh bật tắt bằng phần mềm thì chúng ta còn có thể điều khiển bật tắt bằng nút nhấn trên mạch
- Getway đóng vai trò quan trọng trong việc thu thập và xử lý dữ liệu. Thực hiện việc nhận dữ liệu từ các node để gửi lên sever đồng thời cũng nhận lại các tín hiệu điều khiển trên sever để gửi đến các Node
- Tất cả dữ liệu được lưu trữ ở Google Firebase đồng thời nó là môi trường trung gian để giao tiếp giữa thiết bị điện tử với thiết bị phần cứng
- Người dùng thực hiện việc giám sát và điều khiển thông qua app được cài trên điện thoại và máy tính.
3.2 Tính toán, thiết kế hệ thống
3.2.1. Tính toán, thiết kế node cảm biến
Node cảm biến có nhiệm vụ thu thập giá trị nhiệt độ, độ ẩm và khí gas để gửi về getway. Đồng thời phát cảnh báo khi giá trị khí gas vượt quá ngưỡng quy định
Từ nhiệm vụ trên ta chọn các linh kiện: - Vi điều khiển trung tâm: Arduino Nano - Mạch thu phát RF ZigBee CC2530 - Cảm biến nhiệt độ, độ ẩm: DHT22 - Cảm biến khí gas MQ2
- Màn hình LCD 16x2 - Còi báo 5V…
Tính chọn nguồn cho thiết bị:
Ta có bảng giá trị tiêu thụ điện của các linh kiện
Tên linh kiện Dòng tiêu thụ
Arduino Nano 40 mA
DHT22 2.5 mA
ZigBee CC2530 30 mA
Màn hình LCD 16 mA
Bảng 3.1. Giá trị tiêu thụ điên của linh kiện node cảm biến Từ bảng trên ta lựa chọn cấp nguồn cho mạch bằng adapter 5v – 1A
Lưu đồ thuật toán:
Hình 3.2. Lưu đồ thuật toán Node cảm biến.
Khi cấp nguồn thiết bị sẽ khởi tạo các giá trị cần thiết để cảm biến, Lcd và ZigBee hoạt động. Thiết bị tiến hành đọc các giá trị của cảm biến sau đó hiện thị ra Lcd để người dùng có thể giám sát các thông số đo đạt. Nếu phát hiện giá trị khí gas vượt quá mức giá trị mà ta set, thiết bị sẽ phát ra giá trị cảnh báo bằng còi để người dùng có thể kịp thời khắc phục sự cố. Đồng thời thiết bị cũng gửi giá trị đến Getway liên tục 4 giây một lần khi có thay đổi để người dùng giám sát từ xa.
Sơ đồ nguyên lý:
Hình 3.3 Sơ đồ nguyên lý Node cảm biến. Mạch Pcb:
Hình ảnh thực tế:
Hình 3.5 Hình ảnh thực tế node cảm biến 3.2.2. Tính toán, thiết kế node điều khiển tải
Node cảm biến tiếp nhận tín hiệu điều khiển từ getway gửi về đề điều khiển thiết bị và sẽ trả về getway trạng thái của thiết bị nếu có tác động bật tắt từ nút nhấn cơ. Ta chọn các linh kiện cho mạch:
- Vi điều khiển trung tâm: Arduino Nano. - Mạch thu phát RF ZigBee CC2530.
- Relay 5V.
- Opto quang Pc817. - Điện trở, led….
Tính toán nguồn cấp cho mạch:
Ta có bảng giá trị dòng tiêu thụ của các linh kiện
Tên linh kiện Dòng tiêu thụ
Arduino Nano 40 mA
ZigBee CC2530 30 mA
Led 20 mA
Relay 5 mA
Bảng 3.2. Dòng tiêu thụ của node nút nhấn.
Dựa vào bảng giá trị trên ta chọn nguồn cấp cho mạch là: mạch nguồn 5v - 0,5A Mạch PCB:
Hình ảnh thực tế:
Hình 3.6. Hình ảnh thực tế node điều khiển tải. Sơ đồ nguyên lý:
Hình 3.6. Sơ đồ nguyên lý Node nút nhấn. Lưu đồ thuật toán:
Hình 3.7. Lưu đồ thuật toán Node điều khiển tải.
Khi cấp nguồn mạch sẽ khởi tạo các giá trị để có thể giao tiếp giữa các module ZigBee với nhau. Khi bộ đệm Serial nhận được giá trị có chứa ký tự A ở sau cùng thì gói tin này là được gửi cho Node điều khiển tải. Khi đó Arduino sẽ tiến hành phân tích gói tin nhận được để lấy các dữ liệu điều khiển thiết bị gửi về. Nếu bộ đệm có gói tin nhưng không phải của nó thì Node sẽ bỏ qua gói tin đó và tiếp tục chờ để nhận gói tin điều khiển. Song song với việc đợi nhận gói tin điều khiển thì Node còn liên tục đọc giá trị của nút nhấn bằng ngắt timer1. Nếu có sự kiện nhấn nút thì Node sẽ tiến hành đọc giá trị của nút nhấn và tương ứng với nút nhấn để điều khiển tải cần thiết. Sau đó Node
sẽ gửi giá trị thay đổi của nút nhấn về Getway để đồng bộ trạng thái bật tắt của thiết bị trên app điện thoại và máy tính.
3.2.3. Tính toán, thiết kế getway
Getway là trung tâm gửi và nhận tín hiệu giữa các node song song với đó là truyền nhận dữ liệu với google firebase để điều khiển thiết bị. nên ta chọn các linh kiện: - Vi điều khiển: Esp 8266 Node mcu
- ZigBee CC2530
Mạch tiêu thụ dòng nhỏ nên có thể cấp nguồn trực tiếp qua cổng USB của Esp 8266 node mcu
Sơ đồ nguyên lý:
Hình 3.8. Sơ đồ nguyên lý Getway. Lưu đồ thuật toán:
Hình 3.9. Lưu đồ thuật toán Getway.
Khi cấp nguồn Getway sẽ khỏi tạo các thông số cần thiết để giao tiếp với Module ZigBee. Sau đó sẽ cập nhật các giá trị thay đổi trên Google Firebase để gửi đến Node điều khiển tải bật tắt thiết bị. Sau đó Getway sẽ chờ để nhận các gói tin từ các node, nếu gói tin nhận được có ký tự cuối là dấu “#” Getway sẽ hiều đây là gói tin của Node
cảm biến gửi về sau đó tiến hành phân tích chuỗi để nhận được các giá trị nhiệt độ, độ ẩm, khí gas gửi về Google Firebase để hiển thị giá trị thay đổi trên app. Ngược lại nếu gói tin không có ký tự "#"”ở cuối thì nó sẽ hiều là gói tin từ node điều khiển tải gửi về và tiến hành phân tích chuỗi để cập nhận giá trị lên Google firebase đề đồng bộ giá trị nút nhấn trên app.
Mạch PCB:
Hình 3.10. Mạch Pcb Getway. Hình ảnh thực tế:
3.3. Xây dựng thuật toán và code ứng dụng. 3.3.1. Phần mềm quản lý và cài đặt người dùng. 3.3.1. Phần mềm quản lý và cài đặt người dùng.
Phần mềm quản lý gồm các chức năng dành cho người quản lý hệ thống người dùng. Vì vậy phần mềm này sẽ có các chức năng chính là: Tạo tài khoản mới cho người dùng, đăng nhập vào tài khoản người dùng, trình điều khiển đề kiểm tra kết nối khi lắp đặt thiết bị, trình quản lý tài khoản người dùng nhằm hỗ trợ khách hàng khi quên mật khẩu, xử lý tình huống cấp bách khi khách hàng yêu cầu.
3.3.2. thuật toán và giao diện cho form Login.
Form Login là form cơ bản của hầu hết các ứng dụng yêu cầu tài khoản User hiện nay nhằm để quản lý người dùng nhằm bảo mật thông tin dành cho người dùng và tạo sự an toàn về thông tin cho người sử dụng. Các tài khoản đăng nhập vào form login phải được đăng kí trước, có thể đăng kí trong form đăng kí của phần mềm hoặc có thể đăng kí trực tiếp trên sever firebase.
Hình 4.1 Form Login ứng dụng.
Form login bao gồm các chức năng chính là đăng nhập vào tài khoản đã có, đăng kí tài khoản mới và load tất cả tài khoản hiện có từ sever.
Phần nhập tên đăng nhập và mật khẩu là các textbox cho phép người dùng nhập dữ liệu từ bàn phím vào. Với các thuộc tính cơ bản của textbox như font size, font style, Opacity, … Và chức năng đơn giản khi người dùng click vào để nhập thì dữ liệu sẽ xóa dữ liệu hiện có.
Nếu nhấn đăng ký thì form đăng kí tài khoản sẽ mở ra để người dùng thực hiện đăng ký. Nếu nhấn Load dữ liệu người dùng thì sẽ mở ra form để load tài khoản người dùng hiện đã đăng ký từ sever.
Nếu nhấn đăng nhập thì một chuỗi thuật toán sẽ được thực hiện. Đầu tiên nó sẽ kiểm tra dữ liệu đã nhập vào các textbox hay chưa. Nếu một trong hai textbox nhập tài khoản