Giới thiệu công nghệ ASP.NET

Một phần của tài liệu Lưu và cập nhật động dữ liệu lên website cho mạng cảm biến không dây (Trang 60)

Từ khoảng cuối thập niên 90, ASP (Active Server Page) đã đƣợc nhiều lập trình viên lựa chọn để xây dựng và phát triển ứng dụng web động trên máy chủ sử dụng hệ điều hành Windows. ASP đã thể hiện đƣợc những ƣu điểm của mình với mô hình lập trình thủ tục đơn giản, sử dụng hiệu quả các đối tƣợng COM: ADO (ActiveX Data Object) - xử lý dữ liệu, FSO (File System Object) - làm việc với hệ thống tập tin…, đồng thời, ASP cũng hỗ trợ nhiều ngôn ngữ: VBScript, JavaScript. Chính những ƣu điểm đó, ASP đã đƣợc yêu thích trong một thời gian dài.

Tuy nhiên, ASP vẫn còn tồn đọng một số khó khăn nhƣ Code ASP và HTML lẫn lộn, điều này làm cho quá trình viết code khó khăn, thể hiện và trình bày code không trong sáng, hạn chế khả năng sử dụng lại code. Bên cạnh đó, khi triển khai cài đặt, do không đƣợc biên dịch trƣớc nên dễ bị mất source code. Thêm vào đó, ASP không có hỗ trợ cache, không đƣợc biên dịch trƣớc nên phần nào hạn chế về mặt tốc độ thực hiện. Quá trình xử lý Postback khó khăn, …

Đầu năm 2002, Microsoft giới thiệu một kỹ thuật lập trình Web khá mới mẻ với tên gọi ban đầu là ASP+, tên chính thức sau này là ASP.Net. Với ASP.Net, không những không cần đòi hỏi bạn phải biết các tag HTML, thiết kế web, mà nó còn hỗ trợ mạnh lập trình hƣớng đối tƣợng trong quá trình xây dựng và phát triển ứng dụng Web. ASP.Net là kỹ thuật lập trình và phát triển ứng dụng web ở phía Server (Server-side) dựa trên nền tảng của Microsoft .Net Framework.

Hầu hết, những ngƣời mới đến với lập trình web đều bắt đầu tìm hiểu những kỹ thuật ở phía Client (Client-side) nhƣ: HTML, Java Script, CSS (Cascading Style Sheets). Khi Web browser yêu cầu một trang web (trang web sử dụng kỹ thuật client- side), Web server tìm trang web mà Client yêu cầu, sau đó gửi về cho Client. Client nhận kết quả trả về từ Server và hiển thị lên màn hình.

ASP.Net sử dụng kỹ thuật lập trình ở phía server thì hoàn toàn khác, mã lệnh ở phía server (ví dụ: mã lệnh trong trang ASP) sẽ đƣợc biên dịch và thi hành tại Web Server. Sau khi đƣợc Server đọc, biên dịch và thi hành, kết quả tự động đƣợc chuyển sang HTML/JavaScript/CSS và trả về cho Client. Tất cả các xử lý lệnh ASP.Net đều đƣợc thực hiện tại Server và do đó, gọi là kỹ thuật lập trình ở phía server.

Lý do lựa chọn ASP.NET

 ASP.Net cho phép chọn một trong nhiều ngôn ngữ lập trình nhƣ : Visual Basic.Net, J#, C#,…

 Trang ASP.Net đƣợc biên dịch trƣớc. Thay vì phải đọc và thông dịch mỗi khi trang web đƣợc yêu cầu, ASP.Net biên dịch những trang web động thành những tập tin DLL mà Server có thể thi hành nhanh chóng và hiệu quả. Yếu tố này là một bƣớc nhảy vọt đáng kể so với kỹ thuật thông dịch của ASP.

 ASP.Net hỗ trợ mạnh mẽ bộ thƣ viện phong phú và đa dạng của .Net Framework, làm việc với XML, Web Service, truy cập cơ sở dữ liệu qua ADO.Net, …

 ASPX và ASP có thể cùng hoạt động trong 1 ứng dụng.

 ASP.Net sử dụng phong cách lập trình mới: Code behide. Tách code riêng, giao diện riêng nên dễ đọc, dễ quản lý và bảo trì.

 Kiến trúc lập trình giống ứng dụng trên Windows.

 Hỗ trợ quản lý trạng thái của các control

 Tự động phát sinh mã HTML cho các Server control tƣơng ứng với từng loại Browser

 Hỗ trợ nhiều cơ chế cache.

 Triển khai cài đặt

Không cần lock, không cần đăng ký DLL

ƒ Cho phép nhiều hình thức cấu hình ứng dụng

 Hỗ trợ quản lý ứng dụng ở mức toàn cục ƒ Global.aspx có nhiều sự kiện hơn

ƒ Quản lý session trên nhiều Server, không cần Cookies 3.5.2. Tự động quảng bá dữ liệu

Muốn quá trình tự động quảng bá dữ liệu lên Website ta phải có một phƣơng pháp để có thể đẩy những thông tin mạng WSN từ kết nối RS232 lên database của Website trên host một cách tự động liên tục và tức thời. Webservice là một lời giải của bài toán này.

Luận văn sƣ̉ dụng mô hình cơ sở dƣ̃ liệu theo kiểu client /server, chỉ có lời vấn tin khởi động ban đầu và kết quả cuối cùng cần đƣa lên mạng , phần mềm cơ sở dƣ̃ liệu chạy trên máy lƣu giữ cơ sở dữ liệu sẽ truy nhập các bản ghi cần thiết , xƣ̉ lý chúng và gọi các thủ tục cần thiết để đƣa ra kết quả cuối cùng

Ở phần tiếp theo ta sẽ tìm hiểu về Webservice và viết một Webservice để có thể thực hiện đƣợc chức năng tự động update thông tin dữ liệu của mạng WSN vào cơ sở dữ liệu trên Server.

3.5.1.1. Webservice

Theo định nghĩa của W3C (World Wide Web Consortium), dịch vụ Web là một hệ thống phần mềm đƣợc thiết kế để hỗ trợ khả năng tƣơng tác giữa các ứng dụng trên các máy tính khác nhau thông qua mạng Internet, giao diện chung và sự gắn kết của nó đƣợc mô tả bằng XML. Dịch vụ Web là tài nguyên phần mềm có thể xác định bằng địa chỉ URL, thực hiện các chức năng và đƣa ra các thông tin ngƣời dùng yêu cầu. Một dịch vụ Web đƣợc tạo nên bằng cách lấy các chức năng và đóng gói chúng sao cho các ứng dụng khác dễ dàng nhìn thấy và có thể truy cập đến những dịch vụ mà nó thực hiện, đồng thời có thể yêu cầu thông tin từ dịch vụ Web khác. Nó bao gồm các phần độc lập cho hoạt động của khách hàng và doanh nghiệp và bản thân nó đƣợc thực thi trên server.

Trƣớc hết, có thể nói rằng ứng dụng cơ bản của Dịch vụ Web là tích hợp các hệ thống và là một trong những hoạt động chính khi phát triển hệ thống. Trong hệ thống này, các ứng dụng cần đƣợc tích hợp với cơ sở dữ liệu (CSDL) và các ứng dụng khác, ngƣời sử dụng sẽ giao tiếp với CSDL để tiến hành phân tích và lấy dữ liệu.

3.5.1.2. Chƣơng trình Webservice tự động update dữ liệu vào database Các bƣớc lần lƣợt thực hiện chƣơng trình

- Tạo kết nối Webservice với SQLserver trên web.config

<add key="conn" value= "server= TRANDAT-PC\MSSQL2008; database=internetdata; uid=sa; pwd=uet"/>

- Viết một chƣơng trình C# để update các thông tin mạng cảm biến không dây. Ta sẽ sử dụng một stored procedure có tên là InsertData để thực hiện quá trình này (xem thêm phần phụ lục). Viết một hàm để chèn dữ liệu trả về kết quả là int

public int InsertData(int ID, string IDSource, int DataType, float Data, float ADC) (adsbygoogle = window.adsbygoogle || []).push({});

Hàm trả về đây chính là giá trị của số lần thực hiện câu lệnh trong SQL int num = cmd.ExecuteNonQuery();

- Gọi phƣơng thức trong .asmx [WebMethod]

public int InsertData(int ID, string IDSource, int DataType, float Data, float ADC)

{

SQLServer sql = new SQLServer();

return sql.InsertData(ID, IDSource,DataType, Data, ADC); }

3.5.3. Xây dựng Website

Trƣớc đây khi chƣa kết nối đƣợc mạng WSN với mạng dây (Wan) muốn lấy thông tin từ mạng ta sử dụng phƣơng pháp khá thủ công đó là theo dõi màn hình LCD trên bo mạch nút Chủ hoặc kết nối PC với nút chủ để lấy dữ liệu hoặc là đến tận nơi đặt nút chủ đƣợc sử dụng nhƣ một datalogger có sử dụng thẻ nhớ để lấy thẻ về đọc… Các cách làm trên rất bất tiện, mất nhiều thời gian.

Sử dụng hệ thống kết nối Wan mọi việc trở nên đơn giản hơn rất nhiều. Ngƣời quản trị mạng WSN, ngƣời sử dụng cuối hoặc ngƣời phát triển các ứng dụng cho mạng WSN chỉ cần truy cập vào Website để lấy thông tin xử lý từ. Vì vậy việc xây dựng Website ứng dụng đối với mạng WSN là một việc làm rất cần thiết.

3.5.3.1. Kết nối cơ sở dƣ̃ liệu và cập nhật dƣ̃ liệu động cho Website

Trong luận văn này trình bày và thực hiện hai ứng dụng Website chính của mạng WSN là : kết nối cơ sở dữ liệu mạng WSN, đồng thời cập nhật thông tin dữ liệu mới nhất lên site. (Theo dõi thông tin và cảnh báo)

a. Kết nối cơ sở dƣ̃ liệu mạng cảm biến không dây

Tạo kết nối cơ sở dữ liệu sử dụng hàm CreateConnect()

Xuất dữ liệu thu đƣợc ra textbox sử dụng hàm GetData (xem thêm ở phụ lục) b. Để dữ liệu đƣợc update thƣờng xuyên ta sẽ sử dụng một Timer_Tick thiết đặt

cứ 15 phút lại cập nhật thông tin một lần tƣ̀ cơ sở dƣ̃ liệu mạng cảm biến không dây mới nhất lên website

protected void Timer1_Tick(object sender, EventArgs e) {

CreateConnect(); GetData(); }

Ngoài ra còn có thêm các chức năng phụ nhƣ : Hiển thị các truy vấn tới cơ sở dữ liệu khi có yêu cầu và vẽ biểu đồ. Ở phần này ta sẽ sử dụng GridView để đổ thông tin từ cơ sở dữ liệu vào bảng hoặc sử dụng vẽ đồ thị để ngƣời dùng tiện theo dõi.

3.5.3.2. Thiết kế giao diện chính cho website:

Nhờ sƣ̣ hỗ trợ của .NET ta có thể dễ dàng thiết kế đƣợc một giao diện website đơn giản với các tool công cụ hỗ trợ sẵn.

Hình 3.33: Giao diện WEBSITE

Các thành phần chính trên giao diện website: 1. Banner chính của website

2. Menu trái với các liên kết đến trang khác

3. Module Cập nhật động dữ liệu cảnh báo: cập nhật thông tin dƣ̃ liệu độ ng mạng cảm biến không dây .

4. Module report (bảng biểu, xuất số liệu cần truy cứu từng ngày) 5. Banner quảng cáo

6. Bản quyền

3.5.3.3. Đăng ký tên miền, sƣ̉ dụng IIS7 làm máy chủ website

Tiếp theo ta sẽ phải đăng ký một tên miền để truy cập và dùng IIS 7 làm máy chủ website để mọi ngƣời có thể truy cập vào đƣợc.

- Đăng ký tên miền uetwsn.dyndns-server.com trên trang dyndns.com.

Hình 3.34: Đăng ký tên miền (adsbygoogle = window.adsbygoogle || []).push({});

- Cấu hình NAT cho modem để có thể chuyển đƣợc dƣ̃ liệu ra ngoài mạng . Modem dùng ở đầy là ZyXEL P-660-T1 v2, sƣ̉ dụng mạng ADSL của FPT.

Hình 3.35: Cấu hình NAT cho modem

- Cấu hình địa chỉ IP tĩnh cho PC. Sƣ̉ dụng phần mềm DYN update để có thể cập nhật IP của máy mỗi khi IP thay đổi . Nếu đã có sẵn IP tĩnh thì ta không cần phải thực hiện bƣớc này.

Hình 3.36: Cấu hình cho phần mềm DYN update

- Cài đặt và cấu hình IIS 7 với mã nguồn đƣợc thƣ̣c hiện ở các bƣớc phía trên đƣợc đặt trong folder WSNVINH nằm ở C:\inetpub\wwwroot.

Hình 3.37: Sơ đồ xử lý trang của ASP.NET

- Truy cập địa chỉ uetwsn.dyndns-server.com/WSNVINH để kiểm tra lại kết quả:

KẾT LUẬN

Trên cơ sở nghiên cứu tổng quan về mạng cảm nhận không dây thu thập dữ liệu môi trƣờng, đặc biệt đi sâu vào nghiên cứu cấu trúc về khung dữ liệu trong mạng, khai thác ứng dụng thu thập lƣu dữ liệu và quảng bá dữ liệu tự động, luận văn đã thực hiện đầy đủ nội dung “Lƣu và cập nhật động dữ liệu lên website cho mạng cảm biến không dây” của luận văn. Cụ thể hơn là:

Về mặt lý thuyết: Đã tìm hiểu và nghiên cứu cấu trúc khung dữ liệu của mạng WSN cách giao tiếp giữa mạng WSN với Internet, từ đó viết chƣơng trình ứng dụng thu nhận dữ liệu trên máy tính thành một cơ sở dữ liệu và tự động update thông tin lên website.

Về mặt thực nghiệm: Hệ thống thiết kế đáp ứng đầy đủ các nội dung đề tài đƣa ra

Các ƣu điểm của hệ thống trong luận văn gồm có:

- Thực hiện đƣợc vấn đề tự động lƣu trữ kết quả thành một hệ cơ sở dữ liệu chuẩn. Đây là một điểm mới trong luận văn mà các đề tài trƣớc đây chƣa làm đƣợc.

- Giải quyết vấn đề truyền thông giữa mạng WSN và mạng Internet. Tự động quảng bá thông tin lên website.

Hƣớng đi tiếp theo của đề tài: Đƣa mô hình hệ thống mạng WSN áp dụng cho một ứng dụng cụ thể. Tiến đến liên thông mạng WSN từ các nút mạng với giao thức TCP/IP và tạo cơ sở dữ liệu trên chính các nút mạng.

PHỤ LỤC Phụ lục 1: Chƣơng trình nhúng của các nút mạng Nút Chủ #include <chipcon/reg1010.h> #include "CC1010ND.H" #include "PACKET.H" #include <chipcon/hal.h> #include <stdio.h> // Node ID constants #define Node_ID 0x03 #define Master 0xFF // Data type #define Temp_LM35 0x01 #define Temp_DS18B20 0x02 #define Presure 0x03 // Protocol const #define PREAMBLE_BYTE_COUNT 10 #define PREAMBLE_BITS_SENSE 16 // Variable

PACKET xdata txDataBuffer; PACKET xdata rxDataBuffer;

extern byte halRFReceivePacket2(byte timeOut, byte* packetData, byte maxLength); /*****************************************************************************

MAIN PROGRAM

*****************************************************************************/ void main(void) {

byte result;

RF_RXTXPAIR_SETTINGS code RF_SETTINGS = { 0x43, 0x2F, 0x15, // Modem 0, 1 and 2: NRZ, 2.4 kBaud 0x75, 0xA0, 0x00, // Freq A

0x58, 0x32, 0x8D, // Freq B 0x01, 0xAB, // FSEP 1 and 0 0x40, // PLL_RX 0x30, // PLL_TX 0x6C, // CURRENT_RX 0xF3, // CURRENT_TX 0x32, // FREND 0xFF, // PA_POW 0x00, // MATCH 0x00, // PRESCALER }; // Calibration data

RF_RXTXPAIR_CALDATA xdata RF_CALDATA; WDT_ENABLE(FALSE);

// Setup UART0 with polled I/O

UART0_SETUP(57600, CC1010EB_CLKFREQ, UART_NO_PARITY | UART_RX_TX | UART_POLLED); // ADC setup halConfigADC(ADC_MODE_SINGLE | ADC_REFERENCE_INTERNAL_1_25, CC1010EB_CLKFREQ, 0); ADC_SELECT_INPUT(ADC_INPUT_AD1); ADC_POWER(TRUE);

// Initialize peripherals RLED_OE(TRUE); YLED_OE(TRUE); GLED_OE(TRUE); BLED_OE(TRUE); BLED = LED_OFF; RLED = LED_OFF; GLED = LED_OFF; YLED = LED_OFF;

// Set optimum settings for speed and low power consumption MEM_NO_WAIT_STATES();

FLASH_SET_POWER_MODE(FLASH_STANDBY_BETWEEN_READS); // Ready for acknowledge

txDataBuffer.packet.source = Node_ID; txDataBuffer.packet.target = Master; txDataBuffer.packet.type = Temp_LM35; txDataBuffer.packet.dat = 0x00; // Calibration halRFCalib(&RF_SETTINGS, &RF_CALDATA); while (TRUE) { // RX YLED = LED_ON; (adsbygoogle = window.adsbygoogle || []).push({});

// Turn on RF, receive test string packet,

halRFSetRxTxOff(RF_RX, &RF_SETTINGS, &RF_CALDATA); result = halRFReceivePacket2(0, rxDataBuffer.buffer, PACKET_LENGTH); YLED = LED_OFF; GLED = LED_OFF; RLED = LED_OFF; BLED = LED_OFF; // Success/failure indicators if (result == PACKET_LENGTH) { GLED = LED_ON; if(rxDataBuffer.packet.target == Node_ID) { BLED = LED_ON;

// Power up the ADC and sample the temperature ADC_SAMPLE_SINGLE();

txDataBuffer.packet.dat = ADC_GET_SAMPLE_10BIT(); halRFSetRxTxOff(RF_TX, &RF_SETTINGS, &RF_CALDATA);

halRFSendPacket(PREAMBLE_BYTE_COUNT, txDataBuffer.buffer, PACKET_LENGTH); BLED = LED_OFF; } } else RLED = LED_ON; } } // end of main() NÚT 1 #include <chipcon/reg1010.h> #include "CC1010ND.H" #include "PACKET.H" #include <chipcon/hal.h> #include <stdio.h> // Node ID constants

#define Node_ID 0x01 #define Master 0xFF // Data type #define Temp_LM35 0x01 #define Temp_DS18B20 0x02 #define Presure 0x03 // Protocol const #define PREAMBLE_BYTE_COUNT 10 #define PREAMBLE_BITS_SENSE 16 // Variable

PACKET xdata txDataBuffer; PACKET xdata rxDataBuffer;

extern byte halRFReceivePacket2(byte timeOut, byte* packetData, byte maxLength); /*****************************************************************************

MAIN PROGRAM

*****************************************************************************/ void main(void) {

byte result;

RF_RXTXPAIR_SETTINGS code RF_SETTINGS = { 0x43, 0x2F, 0x15, // Modem 0, 1 and 2: NRZ, 2.4 kBaud 0x75, 0xA0, 0x00, // Freq A

0x58, 0x32, 0x8D, // Freq B 0x01, 0xAB, // FSEP 1 and 0 0x40, // PLL_RX 0x30, // PLL_TX 0x6C, // CURRENT_RX 0xF3, // CURRENT_TX 0x32, // FREND 0xFF, // PA_POW 0x00, // MATCH 0x00, // PRESCALER }; // Calibration data

RF_RXTXPAIR_CALDATA xdata RF_CALDATA; WDT_ENABLE(FALSE);

// Setup UART0 with polled I/O

UART0_SETUP(57600, CC1010EB_CLKFREQ, UART_NO_PARITY | UART_RX_TX | UART_POLLED); // ADC setup halConfigADC(ADC_MODE_SINGLE | ADC_REFERENCE_INTERNAL_1_25, CC1010EB_CLKFREQ, 0); ADC_SELECT_INPUT(ADC_INPUT_AD1); ADC_POWER(TRUE); // Initialize peripherals RLED_OE(TRUE); YLED_OE(TRUE); GLED_OE(TRUE); BLED_OE(TRUE); BLED = LED_OFF; RLED = LED_OFF; GLED = LED_OFF; YLED = LED_OFF;

// Set optimum settings for speed and low power consumption MEM_NO_WAIT_STATES();

// Ready for acknowledge txDataBuffer.packet.source = Node_ID; txDataBuffer.packet.target = Master; txDataBuffer.packet.type = Temp_LM35; txDataBuffer.packet.dat = 0x00; // Calibration halRFCalib(&RF_SETTINGS, &RF_CALDATA); while (TRUE) { // RX YLED = LED_ON;

// Turn on RF, receive test string packet,

halRFSetRxTxOff(RF_RX, &RF_SETTINGS, &RF_CALDATA); result = halRFReceivePacket2(0, rxDataBuffer.buffer, PACKET_LENGTH); YLED = LED_OFF; GLED = LED_OFF; RLED = LED_OFF; BLED = LED_OFF; // Success/failure indicators if (result == PACKET_LENGTH) { GLED = LED_ON; if(rxDataBuffer.packet.target == Node_ID) { BLED = LED_ON;

// Power up the ADC and sample the temperature ADC_SAMPLE_SINGLE();

txDataBuffer.packet.dat = ADC_GET_SAMPLE_10BIT(); halRFSetRxTxOff(RF_TX, &RF_SETTINGS, &RF_CALDATA);

halRFSendPacket(PREAMBLE_BYTE_COUNT, txDataBuffer.buffer, PACKET_LENGTH); BLED = LED_OFF; } } else RLED = LED_ON; } } // end of main() NÚT 2

// Node mang ket noi voi DS18B20 #include <chipcon/reg1010.h> #include <chipcon/hal.h> #include <stdio.h> #include "CC1010ND.H" #include "DS18B20.H" #include "PACKET.H" // Node ID constants #define Node_ID 0x02 #define Master 0xFF // Data type #define Temp_LM35 0x01 #define Temp_DS18B20 0x02 #define Presure 0x03 // Protocol const #define PREAMBLE_BYTE_COUNT 10 #define PREAMBLE_BITS_SENSE 16

// Variable

PACKET xdata txDataBuffer; PACKET xdata rxDataBuffer;

extern byte halRFReceivePacket2(byte timeOut, byte* packetData, byte maxLength);

Một phần của tài liệu Lưu và cập nhật động dữ liệu lên website cho mạng cảm biến không dây (Trang 60)