Giới thiệu ngôn ngữ lập trình Python

Một phần của tài liệu Hệ thống bãi giữ xe thông minh và access control ứng dụng công nghệ RFID (Có code) (Trang 84)

4.3.1 Lịch sử:

Python là một ngôn ngữ lập trình thông dịch do Guido van Rossum tạo ra năm 1990. Python hoàn toàn tạo kiểu động và dùng cơ chế cấp phát bộ nhớ động do vậy nó tương tự Perl, Ruby, Scheme, Smalltalk và Tcl. Python được phát triển trong một dự án mã nguồn mở do tổ chức phi lợi nhuận Python Software Foundation quản lý.

Theo đánh giá của Eric S. Raymond, Python là ngôn ngữ có hình thức rất sáng sủa, cấu trúc rõ ràng, thuận tiện cho người mới học lập trình. Cấu trúc của Python còn cho phép người sử dụng viết mã lệnh với số lần gõ phím tối thiểu, như nhận định của chính Guido van Rossum trong một bài phỏng vấn của ông.

Ban đầu Python được phát triển chạy trên Unix. Nhưng rồi theo thời gian, nó đã “bành trướng” sang mọi hệ điều hành từ MS – DOS đến Mac OS, Windows, Linux và các hệ điều hành khác thuộc họ Unix. Mặc dù sự phát triển của Python có sự đóng góp của nhiều cá nhân, nhưng Guido van Rossum hiện nay vẫn là tác giả chủ yếu của Python. Ông giữ vai trò chủ chốt trong việc quyết định hướng phát triển của Python.

Hình 4.7 Guido van Rossum Sự phát triển của Python đến nay có thể chia làm các giai đoạn:

 Python 1: bao gồm các bản phát hành 1.x. Giai đoạn này kéo dài từ đầu đến cuối thập niên 1990.

- Từ năm 1990 đến 1995, Guido van Rossum làm việc tại CWI (Centrum voor Wiskunde en Informatica – trung tâm toán-tin học tại Amsterdam, Hà Lan). Vì vậy các phiên bản Python đầu tiên đều do CWI phát hành. Phiên bản cuối cùng phát hành tại CWI là 1.2 - Năm 1995, Guido van Rossum chuyển sang CNRI (Corporation for National Research

Intiatives) ở Reston, Viginia. Tại dây, ông phát hành một số Python phiên bản khác. Phiên bản 1.6 là phiên bản cuối cùng phát hành tại CNRI.

- Sau khi phát hành 1.6, Guido van Rossum rời bỏ CNRI để làm việc với các lập trình viên chuyên viết phần mềm thương mại. Tại đây ông có ý tưởng sử dụng Python với các phần

mềm theo tiêu chuẩn GPL. Sau đó CNRI và FSF (Free Software Foundation – tổ chức phần mềm tự do) đã cùng nhau đã cùng nhau hợp tác làm bản quyền Python phù hợp với GPL. - Phiên bản 1.6.1 ra đời sau đó là phiên bản đầu tiên tuan theo bản quyền GPL. Tuy nhiên

phiên bản này hoàn toàn giống 1.6 trừ một số sửa lỗi cần thiết.

 Python 2: vào năm 2000, Guido và nhóm phát triển Python đời đến BeOpen.com và thành lập BeOpen PythonLabs team. Phiên bản Python 2.0 được phát hành tại đây.Sau khi phát hành Python 2.0 Guido và các thành viên PythonLabs gia nhập Digital Creations. Python 2.1 ra đời kế thừa Python 1.6.1 và Python 2.0. Bản quyền của phiên bản này được đổi thành Python Software Foundation License. Từ thời điểm này trở đi, Python thuộc quyền sở hữu của Python Software Foundation (PSF), một tổ chức phi lợi nhuận được thành lập theo mẫu Apache Software Foundation.

 Python 3: còn gọi là Python3000 hoặc Py3K: dòng 3.x sẽ không hoàn toàn tương thích với dòng 2.x, tuy vậy có công cụ hỗ trợ chuyển đổi từ các phiên bản 2.x sang 3.x. Nguyên tắc chủ đạo để phát triển Python 3.x là “bỏ cách làm việc cũ nhằm hạn chế trùng lặp về mặt chức năng của Python”.

4.3.2 Đặc điểm:

 Dễ học, đễ đọc: python được thiết kế để trở thành một ngôn ngữ dễ học, mã nguồn dễ đọc, bố cục trực quan, dễ hiểu.

 Từ khóa:

- Python tăng cường sử dụng từ khóa tiếng Anh, hạn chế các kí kiệu và cấu trúc, cú pháp so với ngôn ngữ khác.

- Python là một ngôn ngữ phân việt kiểu chữ hoa và chữ thường

 Khối lệnh: trong các ngôn ngữ khác, khối lệnh thường được đánh dấu bằng cặp kí hiệu hoặc từ khóa. Ví dụ trong C/C++, cặp dấu ngoặc nhọn {} được dùng để bao bọc một khối lệnh. Python, trái lại, có một đặc điểm rất đặc biệt để tạo khối lệnh đó là thụt các câu lệnh trong khối lệnh vào sâu hơn (về bên phải) so với các câu lệnh của khối lệnh cha chứa nó.

4.3.3 Khả năng mở rộng:

Python có thể được mớ rộng nếu ta biết sử dụng C, ta có thể dễ dàng viết và tích hợp vào python nhiều hàm tùy theo nhu cầu. Các hàm này sẽ trở thành hàm dựng sẵn của Python. Ta cũng có thể mở rộng chức năng của trình thông dịch, hoặc liên kết các chương trình Python với các thư viện chỉ ở dạng nhị phân (như các thư viện đồ họa do nhà sản xuất thiết bị cung cấp). Hơn thế nữa, ta cũng có thể liên kết trình thông dịch của Python với các ứng dụng viết từ C và sử dụng nó như là một mở rộng hoặc một ngôn ngữ dòng lệnh phụ trợ cho ứng dụng đó.

4.3.4 Lệnh và cấu trúc điều khiển:

Mỗi câu lệnh trong Python nằm trên một dòng mã nguồn. Ta không cần phải thêm bất kì ký tự gì. Cũng như các ngôn ngữ khác, Python cũng có các cấu trúc điều khiên. Chúng bao gồm:  Cấu trúc rẽ nhánh: cấu trúc if (có thể sử dụng thêm elif hoặc else), dùng để thực thi khi có điều

kiện cụ thể

 Cấu trúc lặp bao gồm:

- Vòng lặp for: chạy qua từng phần tử của một dãy, mỗi phần tử sẽ được đưa vào biến cục bộ để sử dụng với khối mã trong vòng lặp.

 Python cũng có từ khóa class để khai báo một lớp (sử dụng lập trình hướng đối tượng) và lệnh def dùng để định nghĩa hàm.

PHẦN II: THIẾT KẾ, THI CÔNG HỆ THỐNG Chương 5: MÔ HÌNH TỔNG QUÁT HỆ THỐNG

5.1 Mô hình hệ thống:

Cổng Cổng (adsbygoogle = window.adsbygoogle || []).push({});

Reader

Phần mềm nhận dạng biển số

Cổng vào Cổng ra Card ID Card ID Điều khiển cửa Kết nối Ethernet Card ID Kết nối Ethernet SERVER Kết nối Ethernet Ảnh Ảnh

Hình 5.2 Mô hình tại bãi giữ xe

Hình 5.3 Mô hình access control

5.2 Mô tả hoạt động hệ thống: 5.2.1 Hệ thống bãi giữ xe thông minh: 5.2.1 Hệ thống bãi giữ xe thông minh:

 Hệ thống bãi giữ xe thông minh có cổng vào và ra phân biệt.

 Khi xe vào  nhân viên và khách hàng khi vào đề phải quét thẻ RFID, lấy card id và thời gian  lưu vào server

Chụp 2 hình trước và sau xe và nhận dạng biển số xe

 Khi xe vào  phần mềm nhận dạng sẽ chụp 2 bức ảnh. Một ảnh biển số xe vào và một ảnh chủ nhân xe  lưu vào server

 Phần mềm nhận dạng làm nhiệm vụ nhận diện biển số xe tử ảnh, tách kí tự rồi chuyển ảnh kí tự từ dạng ảnh sang dạng text  lưu vào server

 Khi xe ra  nhân viên và khách quét thẻ RFID, lấy thời gian ra  lưu vào server (để kiểm tra sau này)

 Phần mềm nhận dạng ở ngõ ra sẽ lấy ảnh chủ nhân xe, biến số và card id lúc xe vào từ server so sánh với biển số nhận được, ảnh chủ nhân xe và card id lúc xe ra.

 Nếu hợp lệ  cho xe ra

5.2.2 Hệ thống access control:

 Bộ access control gồm module Raspberry Pi và reader RFID RDM880

 Trên module Raspberry Pi chứa một cơ sở dữ liệu ngay trên nó (local database) đã khi báo sẵn thông tin nhân viên được phép ra vào phòng và thời gian nhân viên được phép ra vào (ví dụ: công ty làm việc từ 7h đến 18h thì nhân viên chỉ được ra – vào trong khoảng thời gian này).

 Khi nhân viên quét thẻ RFID (lúc vào)  bộ access control đọc mã thẻ và kiểm tra trong cơ sở dữ liệu dữ liệu local, nếu card id phù hợp thì điều khiển mở cửa. Đồng thời bộ access control cũng lấy thời điểm nhân viên vào cơ sở dữ liệu local và gửi về server (remote database).

 Khi nhân viên quét thẻ RFID (lúc ra)  bộ access control thực hiện chức năng tương tự, lưu thời điểm nhân viên ra vào cơ sở dữ liệu local và gửi về server (remote database).  Bộ access control còn được nhúng web  để điều khiển thiết bị (thay đổi khoảng thời gian ra vào); thêm – xóa – sửa – tìm kiếm nhanh nhân viên trong từng phòng; xuất file thông tin local database trong trường hợp server bị hỏng.

5.2.3 Server:

 Chứa toàn bộ thông tin của hệ thống

 Có chương trình quản lý nhân viên để thêm nhân viên tùy ý vào từng phòng ở hệ thống access control. Chương trình cũng cho phép lấy dữ liệu thời gian ra – vào của nhân viên để kiểm tra nhân viên có đúng giờ hay không, tính tiền lương nhân viên và điểu chỉnh giá giữ xe.

5.3 Phần cứng hệ thống: 5.3.1 Phần cứng bộ access control: 5.3.1 Phần cứng bộ access control: Chú thích: (1) Raspberry Pi (2) Reader RDM880 (3) Anten reader RDM880

(4) Module thời gian thực (RTC) DS1307

(5) Mạch chuyển đổi giao tiếp giữa UART và TTL

Raspberry Pi

Ở đây, nhóm xin trình bày về phần cứng của Raspberry Pi phiên bản B+, đây là phiên bản mới nhất và được sử dụng phổ biến nhất hiện nay.

Raspberry Pi có cấu tạo giống như một máy tính thu nhỏ. Cấu tạo của Raspberry Pi dựa vào hình sau:

- Tổng quan phần cứng của Raspberry Pi:

Hình 5.4 Phần cứng bộ access control (adsbygoogle = window.adsbygoogle || []).push({});

(1)

(4) (3)

(5)

Hình 5.5 Cấu tạo Raspberry Pi model B+ (mặt trên)

Hình 5.6 Cấu tạo Raspberry Pi model B và model B+ (mặt dưới)

 Vi xử lý: “trái tim” của Raspberry Pi giống như vi xử lý cỉa Iphone 3G hay Kindle 2; như vậy từ việc nhìn vào 2 sản phẩm kia, ta có thể hình dung được “khả năng” của Raspberry Pi. Chip xử lý này được xây dựng trên kiến trúc ARM11 có thông số 32 bit, 700MHz và tích hợp RAM 512MB.

 Khe cắm thẻ nhớ: Có thể nhận thấy sẽ không có ổ cứng trên Raspberry Pi và thay vào đó là thẻ nhớ. Tất cả dữ liệu được lưu trên thẻ nhớ này. Điểm khác biệt giữa model B và model B+ là model B dùng thẻ nhớ SD còn model B+ dùng thẻ micro SD.

 Cổng USB: model B có 2 cổng USB, model B+ có 4 cổng USB.  Cổng Ethernet: chuẩn RJ45.

 Cổng HDMI: dùng để truyền tín hiệu video và audio số. Có tới 14 chuẩn video được hỗ trợ và tín hiệu HDMI có thể dễ dàng chuyển thành các chuẩn khác như DVI, RCA hoặc SCART.

 Các led trạng thái: có 5 led trạng thái:

Led Màu sắc Trạng thái

ACT Xanh Sáng khi thẻ nhớ

truy cập thành công

PWR Đỏ Cấp nguồn 3.3V

thành công

FDX Xanh Sáng nếu network

adapter truyền nhận song công toàn phần

LNK Xanh Báo trạng thái

network

100 Vàng Sáng nếu tốc độ

network là 100Mbps Bảng 5.1 trạng thái led của Raspberry Pi

 Ngõ ra analog audio: ngõ ra này là giác cắm chuẩn 3.5mm, hỗ trợ cho người dùng không có điều kiện sở hữu màn hình HDMI. Âm thanh lấy từ cổng này có chất lượng kém hơn một chút so với từ cổng HDMI.

 Ngõ ra composite video: đây là giắc theo tiêu chuẩn RCA, cung cấp tín hiệu video loại NTSC hoặc PAL. Tín hiệu video lấy từ ngõ ra này có chất lượng thấp hơn so với từ cổng HDMI.

 Cổng cấp nguồn: một trong những điều nhận thấy là Raspberry Pi không có nút nguồn. Micro USB được chọn làm cổng cấp nguồn.

Hình 5.7 GPIO và Header của Raspberry Pi

GPIO:

(General Purpose Input and Output): giống như các chân của vi điều khiển, các IO của Raspberry Pi cũng được sử dụn để xuất tín hiệu ra led, thiết bị hoặc đọc tín hiệu từ các nút nhấn, công tắc….Ngoài ra còn có các IO tích hợp các chuẩn truyền dữ liệu UART, I2C và SPI.

Hình 5.8 Sơ đồ chân GPIO của Raspberry Pi

Chú ý, Raspberry Pi có hai cách đánh số chân GPIO. Cần xác định rõ đang chọn cách đánh số chân nào để viết code lập trình cho chính xác.

HEADER: (adsbygoogle = window.adsbygoogle || []).push({});

Cổng DSI (Display Serial Interface): cổng này dùng để kết nối với LCD hoặc màn hình OLED.

Cổng CSI (Camera Serial Interface): cổng này dùng để kết nối module riêng của Raspberry Pi.

(6) Reader RDM880

Giới thiệu Reader RDM880:

Hình 5.9 Reader RFID RDM880 - Thông số kỹ thuật:

Model No. RDM880

R/W chip MFRC 500

Tiêu chuẩn ISO/IEC14443 - A Loại card hỗ

trợ

Mifare One S50, Mifare One Ultralight, Mifare One S70, Mifare Pro, AT88RF020, 66CL160S, SR176….

Tần số 13.56MHz

Tốc độ baud 9600 – 115200 bit/s (default 9600) Nguồn cung cấp 5 VDC (5%) Dòng <70mA Tầm hoạt động 10 – 300 mm Chuẩn giao tiếp TTL/RS232 Nhiệt độ hoạt động -10 đến 70oC Nhiệt độ bảo quản -20 đến 80oC

Bảng 5.2 Thông số kỹ thuật RDM 880 - Giao thức hoạt động: 1) Data format: Default setting là: Baud rate Data bits Start bit Stop bit Parity 9600 8 1 1 None Bảng 5.3 Data format 2) Packet format:

Có hai loại gói tin là:

 Gói tin gửi từ host (PC, MCU) đến reader RDM880 gọi là command message

 Gói tin gửi từ reader RDM880 trở lại host gọi là reply message

Mô tả thành phần cấu trúc gói tin:

Trường Độ dài Miêu tả Chú ý

STX 1 0xAA – “start of text”. Mở đầu gói tin data

DADD 1 Địa chỉ của thiết bị dùng ở mode multi – drop. Chỉ những reader nào phù hợp với địa chỉ cài đặt trước mới trả lời gói tin command message

Địa chỉ 0x00 là địa chỉ đặc biệt cho giao tiếp điểm – điểm. Reader sẽ trả lời tất cả gói dữ liệu có địa chỉ “0” Data length

1 Chiều dài byte của gói dữ liệu Length = Number_of_byte (TIME/STATUS + DATA[0..N])

Chiều dài bao gồm

TIME/STATUS và trường data, không chứa BCC CDM 1 Trường lệnh chứa 1 byte lệnh

STATUS 1 Trạng thái trả lời từ reader đến máy chủ

Chỉ được dùng cho gói tin reply DATA

[0..N]

0 – 255 Trường dữ liệu có chiều dài thay đổi phụ thuộc vào lệnh

Nếu trường data của gói tin command hoặc reply dài hơn 80 bytes thì reader sẽ không trả lời mà xem như là lỗi hoặc chờ lệnh tiếp theo

BCC 1 8 bit kiểm tra check sum. Việc kiểm tra sẽ bao gồm tất cả các byte trong gói tin trừ STX và ETX (adsbygoogle = window.adsbygoogle || []).push({});

ETX 1 0xBB : “end of text” chỉ ra kết thúc của gói tin

3) Đọc thẻ RFID:

Để đọc card ID thì phải gửi chuỗi AA 00 03 25 26 00 00 BB (dạng hex) qua Uart đến Reader RDM880. Reader sẽ trả lời một chuỗi chứa Card ID.

4) Set buzzer:

- Dùng để báo hiệu khi đọc thẻ. Trong file protocol kèm theo của reader RDM880 muốn phát âm thanh ra loa ta dùng chuỗi AA 00 03 89 18 0A 98 BB (chuỗi hex). Tuy nhiên chuỗi này sẽ phát khoảng 10 tiếng bip liên tục. Nếu chỉ muốn phát một tiếng, chúng ta phải tính lại chuỗi

- Trong đề tài luận văn này để phát một tiếng píp ra loa chúng em dùng chuỗi

Module thời gian thực (RTC) DS1307

Hình 5.10 Module thời gian thực DS1307

- DS 1307 Board: sử dụng giao thức I2C cho phép đếm giây, phút, giờ, ngày trong tuần, ngày trong tháng và năm. Có sẵn pin backup, cho phép duy trì thời gian ngay cả khi mất điện.

- Sử dụng module này kèm theo Raspberry Pi thì ngay cả khi tắt Pi hoặc không có Internet chúng ta vẫn có được thời gian chính xác.

- Kết nối dây:

 VCC trên DS1307 nối với GPIO 5V của Pi  GND trên DS1307 nối với GPIO GND của Pi  SDA trên DS1307 nối với GPIO SDA0 của Pi  SCL trên DS1307 nối với GPIO SCL0 trên Pi

Mạch chuyển đổi giao tiếp giữa UART và TTL

Hình 5.11 Sơ đồ nguyên lý mạch chuyển RS232 -TTL

Hình 5.12 layout Mạch RS232-TTL D1 LED 0 RX VCC JP1 HEADER 4 1 2 3 4 D2 LED VCC Q2 NPN BCE 1 2 3 VCC R7 1k + C5 10u U2 RDM 880 1 2 3 4 5 6 7 8 9 10 11 12 AT+ AT- buz ledR ledG nc nc RS RX TX gnd VCC R4 R TX R2 JP3 HEADER 2X2 1 2 3 4 VCC SU1 BUZZER 0 0 + C3 0.1u 0 + C1 0.1u G N D JP2 HEADER 2 1 2 + C4 0.1u GND D3 LED R6 5.1k U3 MAX2323 1 2 3 4 5 6 7 8 16 15 14 13 12 11 10 9 C1+ VS+ C1- 4 5 6 out in vcc gnd 1_out 1_in T2_out T1_in T_in T_out VC C + C2 0.1u GND R3 R5 10 C6 100nf

Hình 5.14 Camera A4tech

Một phần của tài liệu Hệ thống bãi giữ xe thông minh và access control ứng dụng công nghệ RFID (Có code) (Trang 84)