Hướng phát triển đề tài

Một phần của tài liệu điều khiển từ xa qua tin nhắn sms sử dụng pic (Trang 108 - 164)

3. Nội dung các phần thuyết minh:

7.2. Hướng phát triển đề tài

Do thời gian thực hiện đề tài có hạn và lượng kiến thức cá nhân mỗi thành viên của nhóm là nhất định nên đề tài thực hiện xong chỉ đáp ứng được một phần nhỏ của một hệ thống hoàn chỉnh. Vì vậy, để đề tài này thêm phong phú hơn, mang nhiều tính thực tế hơn nữa, có khả năng ứng dụng cao hơn thì đề tài cần đưa thêm vào những yêu cầu như sau:

 Ngoài việc giám sát trên máy tính, ta cũng có thể điều khiển Camera để chụp hình rồi sau đó gửi tin nhắn đa phương tiện đến điện thoại. Lúc này ta cần kết nối 1 Modem GSM thay thế cho việc kết nối điện thoại trong đề tài vì những ưu điểm của nó.

 Ngoài việc điều khiển các thiết bị trong nhà và thiết bị dân dụng, ta còn có thể sử dụng tin nhắn SMS để truy cập vào cơ sở dữ liệu SQL của WinCC và điều khiển các máy móc công nghiệp thông qua phần mềm này. Lúc này ta cần xây dựng giao diện phần mềm kết nối với SQL của WinCC và lập trình cho WinCC lấy cơ sở dữ liệu đó để thực hiện các yêu cầu.

 Sử dụng thêm nhiều loại cảm biến khác kết hợp với cảm biến nhiệt độ, chẳng hạn như cảm biến độ ẩm không khí,… và tất cả các thông số này nên được hiển thị trên cùng một giao diện phần mềm. Như thế người dùng có thể hình dung ra được toàn bộ không gian trong ngồi nhà.

 Mở rộng điều khiển được nhiều hơn nữa các thiết bị trong nhà.

 Phần cứng cho mỗi module cần được tách rời nhằm dễ dàng cho việc chỉnh sửa, thay đổi.

 Đề tài không những chỉ áp dụng cho với các tòa nhà mà nên được mở rộng áp

dụng đối với điều khiển các thiết bị sử dụng nơi công cộng.

Hy vọng với những hướng phát triển nêu trên cùng với những ý tưởng khác của các đồng nghiệp, của người đọc- những người đi sau - sẽ phát triển hơn nữa đề tài này, khắc phục những hạn chế, tồn tại của đề tài, làm cho đề tài trở nên phong phú hơn, mang tính ứng dụng cao hơn vào trong thực tế cuộc sống, phục vụ cho những lợi ích của con người trong tương lai.

PHN C

I. PHẦN MỀM VB.NET 1. GIỚI THIỆU

Ngôn ngữ BASIC (Beginner's All Purpose Symbolic Instruction Code) đã có từ năm 1964. BASIC rất dễ học và dễ dùng. Trong vòng 15 năm đầu, có rất nhiều chuyên gia tin học và công ty tạo các chương trình thông dịch (Interpreters) và biên dịch (Compilers) cho ngôn ngữ làm BASIC trở nên rất phổ thông. Năm 1975, Microsoft tung ra thị trường sản phẩm đầu tay Microsoft BASIC và tiếp đó Quick BASIC (còn gọi là QBASIC) và đã thành công rực rỡ.

Quick BASIC phát triển trong nền Windows nhưng vẫn khó khăn khi tạo giao diện kiểu Windows. Sau đó nhiều năm, Microsoft bắt đầu tung ra 1 sản phẩm mới cho phép ta kết hợp ngôn ngữ dễ học BASIC và môi trường phát triển lập trình với giao diện bằng hình ảnh (Graphic User Interface - GUI) trong Windows. Đó là Visual Basic Version 1.0.

Sự chào đời của Visual Basic Version 1.0 vào năm 1991 thật sự thay đổi bộ mặt lập trình trong Công Nghệ Tin Học. Trước đó, ta không có 1 giao diện bằng hình ảnh (GUI) với một IDE (Integrated Development Environment) giúp các chuyên gia lập trình tập trung công sức và thì gìờ vào các khó khăn liên hệ đến doanh nghiệp của mình. Mỗi người phải tự thiết kế giao diện qua thư viện có sẵn Windows API (Phương pháp Aplication Programming Interface) trong nền Windows. Điều này tạo ra những trở ngại không cần thiết làm phức tạp việc lập trình.

Visual Basic giúp ta bỏ qua những hệ lụy đó, chuyên gia lập trình có thể tự vẽ cho mình giao diện cần thiết trong ứng dụng ( Phương pháp Aplication) 1 cách dễ dàng và như vậy, tập trung nổ lực giải đáp các vần đề cần giải quyết trong doanh nghiệp hay kỹ thuật.

Ngoài ra, còn nhiều công ty phụ phát triển thêm các khuôn mẫu (modules), công cụ (tools, controls) hay ứng dụng (phương pháp Application) phụ giúp dưới hình thức VBX cộng thêm vào giao diện chính càng lúc càng thêm phong phú.

Khi Visual Basic phiên bản 3.0 được giới thiệu, thế giới lập trình lại thay đổi lần nữa. Kỳ này, ta có thể thiết kế các ứng dụng (aPhương pháplication) liên hệ đến Cơ Sở Dữ Liệu (Database) trực tiếp tác động (interact) đến người dùng qua DAO (Data Access Object). Ứng dụng này thường gọi là ứng dụng tiền diện (front-end phương pháp application) hay trực diện.

Phiên bản 4.0 và 5.0 mở rộng khả năng VB nhắm đến Hệ Điều Hành Windows 95. Phiên bản 6.0 đưa ra 1 phương pháp mới đối với Cơ Sở Dữ Liệu (Database) qua sự kết hợp của ADO (Active Data Object). ADO còn giúp các chuyên gia phát triển mạng nối với Cơ Sở Dữ Liệu (Database) khi dùng Active Server Pages (ASP).Visual Basic.NET (VB.NET) là ngôn ngữ lập trình khuynh hướng đối tượng (Object Oriented Programming Language) do Microsoft thiết kế lại từ con số không. Visual Basic.NET

(VB.NET) không kế thừa VB6 hay bổ sung, phát triển từ VB6 mà là một ngôn ngữ lập trình hoàn toàn mới trên nền Microsoft 's .NET Framework. Do đó, nó cũng không phải là VB phiên bản 7. Thật sự, đây là ngôn ngữ lập trình mới và rất mạnh, không những lập nền tảng vững chắc theo kiểu mẫu đối tượng như các ngôn ngữ lập trình hùng mạnh khác đã vang danh C++, Java mà còn dễ học, dễ phát triển và còn tạo mọi cơ hội hoàn hảo để giúp ta giải đáp những vấn đề khúc mắc khi lập trình. Hơn nữa, dù không khó khăn gì khi cần tham khảo, học hỏi hay đào sâu những gì xảy ra bên trong ... hậu trường Visual Basic.NET (VB.NET) giúp ta đối phó với các phức tạp khi lập trình trên nền Windows và do đó, ta chỉ tập trung công sức vào các vấn đề liên quan đến dự án, công việc hay doanh nghiệp mà thôi.

2. CÁC TẬP LỆNH SỬ DỤNG

Người lập trình dùng Microsoft’s.NET Framework có thể sử dụng SerialPort class để truy cập vào thiết bị cổng COM. Những ứng dụng có thể sử dụng thuộc tính, những phương pháp và sự kiện của class để truy cập mà không phải dùng đến lập trình mức thấp hoặc Window API .

Truy cập đến PORT

Để truy cập vào cổng COM, ta đặt các tham số truyền tin, và mở một kết nối đến cổng .

Tìm Cổng

GetPortNames của lớp SerialPort là phương pháp trả về 1 mảng tên của tất cả cổng COM của hệ thống. Các yếu tố của mảng không được đảm bảo để là những chữ cái .

Phương pháp Sort có thể sắp xếp lại nếu cần .

VB Dim nameArray() As String

‘khai báo biến namArray

nameArray = SerialPort.GetPortNames

‘nhận dữ liệu vào nameArray.

Array.Sort(nameArray)

‘sắp xếp các chữ cái.

Mở Cổng

Trước khi truyền tin qua 1 cổng thì ứng dụng phải mở 1 kết nối đến SerialPort . Dùng phương pháp OPEN sử dụng những thông số được chỉ định hay thông số mặc dịnh chưa được chỉ định trước đó :

COM1.OPEN()

Để ngăn ngừa những điều không mong muốn, ứng dụng có thể đọc thuộc tính

VB If (Not COM1.IsOpen) Then COM1.Open()

End If

TIMEOUT

Là thời gian mà cổng chưa muốn nhận hoặc gửi dữ liệu thì nó sẽ thoát ra

VB myComPort.ReadTimeout = 3000

myComPort.WriteTimeout = 5000

Giá trị mặc định của cổng SerialPort.InfiniteTimeout, không bao giờ hết thời gian.

Receive Threshold (Nhận giá trị ngưỡng)

Sự kiện DataReceived cho biết được ứng dụng đang đọc dữ liệu vào bộ đệm nhận hay không . Thuộc tính ReceivedBytesThreshold xác định xem có bao nhiệu Byte được có mặt trước khi xảy ra sự kiện . Mặc dịnh là 1 byte . Nếu bạn đặt thuộc tính với số quá lớn

Close Port

Một ứng dụng mà hoàn tất việc truyền tin thì cổng sẽ đóng và trả cổng cho ứng dụng khác . Phướng pháp Close sẽ đóng cổng và xóa bộ đệm truyền, nhận . Phương pháp Dispose sẽ đóng cổng và giải phóng các nguồn đang dược sử dụng để nó có thể mở cổng lại ngay sau khi đóng cổng.

Trước khi đóng thì nên xem xét xem cổng đang đóng hay chưa. Khi Cổng đang truyền mà ta thực hiện đóng cổng có thể sẽ gây ra lỗi hệ thống . để tránh điều này thì ta phải đợi tất cả dữ liệu được truyền xong trước khi đóng cổng. Thuộc tính WriteTimeout được sử dụng, vì khi time out thì BytetoWrite của cổng được đặt về 0, điều này sẽ không xảy ra lỗi khi đóng cổng .

VB If (Not (COM1 Is Nothing)) Then

‘ nếu cổng tồn tại If COM1.IsOpen Then ‘ nếu cổng đang mở Do While (COM1.BytesToWrite > 0) ‘ dữ liệu đang truyền Loop COM1.Dispose()

‘ truyền xong thì đóng cổng và xóa bộ đệm

End If End If

Có một cách khác để đóng cổng là sử dụng khối Using …

End Using

COM1.PortName = "COM1" COM1.BaudRate = 9600 COM1.Open()

COM1.WriteLine("hello") End Using

;sau khi truyền xong thì tự động đóng cổng và xóa đệm

Chú ý: đóng cổng mất một khoảng thời gian nên cần delay trước khi mở lại cổng.

Transmit data (Truyền dữ liệu)

NetFrameWork hỗ trợ nhiều phương pháp cho đọc và gửi dữ liệu cổng COM Lớp SerialPort cung cấp phương pháp đọc và ghi ra Port . Ứng dụng cũng có thể sử dụng thuộc tính BaseStream của SerialPort để chứa BinaryReader, BinaryWriter, StreamReader, and StreamWriter

Loại dữ liệu cơ bản cho dữ liệu cổng COM là loại dư liệu mảng

Oject Method Data Type Blocking

Write Byte array, Char array or

subarray, String Yes

Write line String+NewLine. NewLine

or NewLiney. Yes

Serial Port

Write Byte Byte Yes

Trong những ứng dụng để truyền những dữ liệu dạng TEXT, có số lượng lớn hơn Byte. Ta có lớp SerialPort bao gồm phương pháp mã hóa và giải mã những dữ liệu loại này. Cho ví dụ, những ứng dụng mà muốn gửi “CMD1”:

VB Dim datatosend(4) As Byte

Datatosend(0) = Asc(“C”)

Datatosend(1) = Asc(“M”)

Datatosend(2) = Asc(“D”)

Datatosend(3) = Asc(“1”)

COM1.write(datatosend,0,4)

VB Dim datatosend As String

Datatosend = “CMD1”

COM1.Writeline (datatosend)

Đó là phương thức truyền mảng kí tự theo lệnh Write Ta có thể truyền 1 chuỗi như trên với lệnh Writeline Còn truyền theo Byte thì có WriteByte

Lớp SerialPort cung cấp 5 giải pháp để đọc một văn bản.

Phương pháp ReadExisting trả về nội dung của một chuỗi tất cả các kí tự có trong bộ đệm nhận được. Nếu bộ đệm rỗng, thì phương pháp sẽ trả về 1 chuỗi rỗng tương tự.

Dim receivedText as String

receivedText = myComPort.ReadExisting

Phương pháp ReadLine là đọc tất cả các dữ liệu nhận được cho đến khi gặp kí tự xuống dòng mới:

Dim receivedText as String

receivedText = myComPort.ReadLine

Chuỗi trả về chứa mọi dữ liệu cho đến khi cập nhật Newline. Kí tự NewLine

được gỡ bỏ chi bộ đệm nhận. Nếu nộ đệm nhận không chứa đựng một NewLine, thì

Phương pháp sẽ đợi đến khi có giá trị ReadTimeout

Phương pháp ReadTo cũng giống như ReadLine nhưng cho phép xác định một vài giá trị như dấu phân cách

Phương pháp Read co thể sao chép kí tự nhận cho trước thành dạng kí tự mảng tại địa chỉ OffSet đặt trước

Ví dụ này ta cho đọc đến 3 kí tự nhận, và lưu trữ những Bytes này bắt đầu tại địa chỉ Offset 0 trong mảng Byte, và hiển thị ra kết quả:

Dim charBuffer(7) As Char Dim count As Integer

myComPort.Read(charBuffer, 0, 3) For count = 0 To 2

Console.WriteLine(CStr(charBuffer(count))) Next count

Nếu bộ đệm nhận chứa các kí tự “a”,”b”,”c” thì sẽ hiển thị như sau Số Bytes nhận = 3

a b c

Những kí tự mà đã được đọc thì không còn trong bộ đệm nhận.

Khi đọc một mảng Byte, phương pháp Read lưu trữ một Byte trong mỗi phần tử của màng.

Khi đọc một mảng Kí tự thì phương pháp read lưu trữ dữ liệu nhận như kí tự Unicode. Mỗi phần tử trong mảng kí tự biểu diễn cho một kí tự.

Phương pháp ReaDECLAREhar đọc 1 kí tự đơn từ bộ đệm nhận. Phương pháp này trả về một số nguyên mà chứa một kí tự được mã hóa.

Dim charToRead As Integer

charToRead = myComPort.ReaDECLAREhar() Console.WriteLine(ChrW(charToRead))

3. GIAO DIỆN CHƯƠNG TRÌNH ĐIỀU KHIỂN Giao diện lúc đăng nhập:

Gii thiu các thành phn :

Khung Username : nhập tên người dùng, mặc định là “SPKT”

Khung Password : nhập mật mã do người dùng đặt, mặc định là “1234”. Ta có thể thay đổi trong chương trình chính.

Khi nhập sai tên và mật khẩu trong 3 lần thì chương trình sẽ tự tắt.

Chú ý : khi trong quá trình đăng nhập không được bấm dấu “X” để thoát ra. Vì khi đăng nhập thì chương trình chính vẫn được Load lên nhưng các chức năng được ẩn

đi nên muốn tắt chương trình thì bấm nút Cancel

Lp trình :

Imports System.IO 

Public Class LoginForm1 

Public username As String 

Public i As Integer 

Private Sub OK_Click(ByVal sender As System.Object, ByVal e As 

System.EventArgs) Handles OK.Click 

Dim pw As New StreamReader("password.txt") 

password = pw.ReadLine 

pw.Close() 

If UsernameTextBox.Text = username Then 

If PasswordTextBox.Text = password Then 

form1.Enabled = True  form1.username = Me.username  Me.Close()  End If  Else  i = i ‐ 1 

MsgBox("Bạn còn " & " " & i & " " & " lần nhập", MsgBoxStyle.Information, 

"Thông Báo")  End If  If i = 0 Then  form1.Close()  Me.Close()  End If  End Sub 

Private Sub Cancel_Click(ByVal sender As System.Object, ByVal e As 

System.EventArgs) Handles Cancel.Click 

Me.Close() 

My.Forms.form1.Close() 

End Sub 

Private Sub LoginForm1_Load(ByVal sender As System.Object, ByVal e As 

System.EventArgs) Handles MyBase.Load 

i = 3 

username = "SPKT" 

End Class   

4. GIAO DIỆN CHÍNH LÚC CHƯA KẾT NỐI THIẾT BỊ

5. CHƯƠNG TRÌNH “ĐỌC TIN NHẮN VÀ TRUYỀN DỮ LIỆU ĐIỀU KHIỂN CHO PIC”

Public bitspersecond As Integer Public databits As Integer

Public parity As String Public stopbit As String Public handshaking As String ‘ Khai báo biến SerialPort1.BaudRate = ComboBox3.Text SerialPort1.PortName = ComboBox1.Text SerialPort2.PortName = ComboBox2.Text SerialPort2.BaudRate = bitspersecond SerialPort2.DataBits = databits

If stopbit = "None" Then SerialPort2.StopBits = StopBits.None

If stopbit = "One" Then SerialPort2.StopBits = StopBits.One

If stopbit = "Two" Then SerialPort2.StopBits = StopBits.Two

If parity = "None" Then SerialPort2.Parity = Ports.Parity.None

If parity = "Odd" Then SerialPort2.Parity = Ports.Parity.Odd

If parity = "Even" Then SerialPort2.Parity = Ports.Parity.Even

If handshaking = "None" Then SerialPort2.Handshake = Handshake.None

If handshaking = "XOnOff" Then SerialPort2.Handshake = Handshake.XOnXOff

If handshaking = "RequestToSend" Then

SerialPort2.Handshake = Handshake.RequestToSend ‘ chọn thuộc tính

If Not SerialPort1.IsOpen Then SerialPort1.Open()

End If

If (Not SerialPort2.IsOpen) Then SerialPort2.Open()

End If

time.Text = TimeOfDay

If light1.Text = "Open" Then trangthai1 = "off" If light1.Text = "Close" Then trangthai1 = "on" If light2.Text = "Open" Then trangthai2 = "off" If light2.Text = "Close" Then trangthai2 = "on" If light3.Text = "Open" Then trangthai3 = "off" If light3.Text = "Close" Then trangthai3 = "on" If light4.Text = "Open" Then trangthai4 = "off" If light4.Text = "Close" Then trangthai4 = "on" If light5.Text = "Open" Then trangthai5 = "off" If light5.Text = "Close" Then trangthai5 = "on" If light6.Text = "Open" Then trangthai6 = "off" If light6.Text = "Close" Then trangthai6 = "on" If light7.Text = "Open" Then trangthai7 = "off" If light7.Text = "Close" Then trangthai7 = "on" If light8.Text = "Open" Then trangthai8 = "off"

If light8.Text = "Close" Then trangthai8 = "on" ‘ truyền lệnh điều khiển xuống Pic16F877A

If SerialPort1.IsOpen Then Dim RC As String

SerialPort1.Write("at+cmgl=" & """" & "REC UNREAD" & """" & vbCrLf)

RC = SerialPort1.ReadExisting

If InStr(RC, phonenumbers(0)) Then 'kiểm tra số điện thoại cài sẵn

If InStr(RC, "status") Or InStr(RC, "Status") Then SerialPort1.Write("at+csms=1" + vbCrLf)

SerialPort1.WriteLine("at+cmgs=" + """" + phonenumbers(0) + """" + vbCrLf + "Report :light1" & trangthai1 &

",light2" & trangthai2 & ",temperature : " &

TextBox1.Text + Char.ConvertFromUtf32(26) + vbCrLf) SerialPort1.DiscardOutBuffer()

End If

If InStr(RC, "open") Or InStr(RC, "Open") Then SerialPort2.WriteLine(222)

End If

If InStr(RC, "light1") Or InStr(RC, "Light1") Then

PictureBox1.ImageLocation = path & "\den1" + den + ".jpg" light1.Text = trangthai

SerialPort2.WriteLine(1 & bit) End If

If InStr(RC, "light2") Or InStr(RC, "Light2") Then

PictureBox2.ImageLocation = path & "\den1" + den + ".jpg" light2.Text = trangthai

SerialPort2.WriteLine(2 & bit) End If

If InStr(RC, "light3") Or InStr(RC, "Light3") Then

Piclight3.ImageLocation = path & "\den1" + den + ".jpg" light3.Text = trangthai

SerialPort2.WriteLine(3 & bit) End If

If InStr(RC, "light4") Or InStr(RC, "Light4") Then

Piclight4.ImageLocation = path & "\den1" + den + ".jpg" light4.Text = trangthai

SerialPort2.WriteLine(4 & bit) End If

If InStr(RC, "light5") Or InStr(RC, "Light5") Then

Piclight5.ImageLocation = path & "\den1" + den + ".jpg" light5.Text = trangthai

SerialPort2.WriteLine(5 & bit) End If

If InStr(RC, "light6") Or InStr(RC, "Light6") Then

Piclight6.ImageLocation = path & "\den1" + den + ".jpg" light6.Text = trangthai

SerialPort2.WriteLine(6 & bit) End If

If InStr(RC, "light7") Or InStr(RC, "Light7") Then

Piclight7.ImageLocation = path & "\den1" + den + ".jpg" light7.Text = trangthai

SerialPort2.WriteLine(7 & bit) End If

If InStr(RC, "light8") Or InStr(RC, "Light8") Then

Piclight8.ImageLocation = path & "\den1" + den + ".jpg" light8.Text = trangthai

SerialPort2.WriteLine(8 & bit) End If

If InStr(RC, "all light") Then

PictureBox2.ImageLocation = path & "\den1" & den & ".jpg" light1.Text = trangthai light2.Text = trangthai light3.Text = trangthai light4.Text = trangthai

Một phần của tài liệu điều khiển từ xa qua tin nhắn sms sử dụng pic (Trang 108 - 164)

Tải bản đầy đủ (PDF)

(164 trang)