Cấu hình UART và cài đặt thư viện WebIOPi trên Raspberry

Một phần của tài liệu ĐỀ TÀI THU THẬP DỮ LIỆU DÙNG RASPBERRY PI THÔNG QUA MẠNG INTERNET (Trang 28)

2. Nội dung thực hiện:

3.2.5. Cấu hình UART và cài đặt thư viện WebIOPi trên Raspberry

 Cấu hình UART:

Để sử dụng chức năng truyền nhận dữ liệu UART trên Raspberry cần phải cấu hình lại như sau:

- Chỉnh sửa file cmdline.txt, dùng lệnh: sudo nano /boot/cmdline.txt

Xóa đoạn sau: console=ttyAMA0,115200 kgdboc=ttyAMA0,115200

Sau đó nhấn Ctrl + X để thoát và lưu lại.

- Chỉnh sửa file inittab: sudo nano /etc/inittab

Tìm dòng

T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

rồi thêm dấu “#” vào đầu dòng để chỉnh sửa thành chú thích. Nhấn Ctrl + X để thoát và lưu lại.

- Khởi động lại để có hiệu lực: sudo reboot

 Cài đặt thư viện WebIOPi:

Trong đồ án có sử dụng thư viện WebIOPi để sử dụng trên chương trình viết bằng Python, cài đặt như sau:

• Cài đặt WebIOPi SVN:

$ sudo aptitude update

$ sudo aptitude install subversion

$ svn checkout http://webiopi.googlecode.com/svn/trunk/ webiopi-trunk $ cd webiopi-trunk

$ sudo ./setup.sh

• Cài đặt WebIOPi:

Download từ link:

https://code.google.com/p/webiopi/wiki/DOWNLOADS

Để cài đặt thư viện dùng lệnh sau:

$ tar xvzf WebIOPi-x.y.z.tar.gz $ cd WebIOPi-x.y.z

$ sudo ./setup.sh

• Chạy chương trình: $ sudo webiopi -d -c /etc/webiopi/config

3.3 PIC 16F887

3.3.1 Cấu tạo và sơ đồ chân

Hình 3.13: Sơ đồ chân của PIC16F887.

Các khối bên trong vi điều khiển bao gồm:

• Các khối thanh ghi định cấu hình cho vi điều khiển.

• Các khối bộ nhớ chương trình có nhiều dung lượng cho 5 loại khác nhau. • Khối bộ nhớ ngăn xếp 8 cấp (8 level stack).

• Khối bộ nhớ RAM cùng với thanh ghi FSR để tính toán tạo địa chỉ cho 2 cách truy xuất gián tiếp và trực tiếp.

• Có thanh ghi lệnh (Instruction Register) dùng để lưu mã lệnh nhận về từ bộ nhớ chương trình.

• Có thanh ghi bộ đếm chương trình PC dùng để quản lý địa chỉ của bộ nhớ chương trình.

• Có thanh ghi trạng thái (Status Register) cho biết trạng thái sau khi tính toán ALU. • Có thanh ghi FSR.

• Khối ALU cùng với thanh ghi working hay thanh ghi A để xử lý dữ liệu. • Khối giải mã lệnh và điều khiển (Instruction Decode and control).

• Khối các bộ định thời khi cấp điện PUT, có bộ định thời chờ dao động ổn định, có mạch reset khi có điện, có bộ định thời giám sát watchdog, có mạch reset khi phát hiện sụt giảm nguồn.

• Khối dao động nội (Internal Oscillator Block).

• Khối dao động kết nối với 2 ngõ OSC1 và OSC2 để tạo dao động.

• Khối bộ dao động cho timer1 có tần số 32 KHz kết nối với 2 ngõ vào T1OSI và T1OSO.

• Khối CCP2 và ECCP.

• Khối timer0 với ngõ vào xung đếmtừ bên ngoài là T0CKI. • Khối truyền dữ liệu đồng bộ/bất đồng bộ nâng cao.

• Khối truyền dữ liệu đồng bộ MSSP cho SPI và I2C.

• Khối bộ nhớ Eeprom 256 byte và thanh ghi quản lý địa chỉ EEADDR và thanh ghi dữ liệu EEADATA.

• Khối chuyển đổi tín hiệu tương tự sang số ADC.

• Khối 2 bộ so sánh với nhiều ngõ vào ra và điện áp tham chiếu. • Khối các Port A, B, C, D và E.

3.3.2 Các khối chức năng được sử dụng3.3.2.1 Các thành phần trong ADC 3.3.2.1 Các thành phần trong ADC

 AN0 đến AN13 (analog) là 14 ngõ vào của 14 kênh tương tự được đưa đến mạch đa hợp.

 Điện áp tham chiếu dương Vref+ có thể lập trình nối với nguồn cung cấp dương hoặc điện áp tham chiếu bên ngoài nối với ngõ vào Vref+ của chân AN3.

 Điện cáp tham chiếu âm Vref- có thể lập trình nối với nguồn cung cấp hoặc điện áp tham chiếu bên ngoài nối với ngõ vào Vref- của chân AN2.

 Hai ngõ vào Vref+ và Vref- có chức năng thiết lập độ phân giải cho ADC.  Kết quả chuyển đổi là số nhị phân 10 bit sẽ lưu vào cặp thanh ghi 16 bit có tên

là ADRESH và ADRESL.

ADC có 14 kênh nhưng mỗi thời điểm chỉ chuyển đổi 1 kênh và chuyển đổi kênh nào thì phụ thuộc vào 4 bit chọn kênh CHS3:CHS0. Hai ngõ vào điện áp tham chiếu dương và âm có thể lập trình nối với nguồn VDD và VSS hoặc nhận điện áp tham chiếu từ bên ngoài qua 2 chân RA3 và RA2.

3.3.2.2 Timer/Counter:

 Timer/Counter0:

Hình 3.15: Sơ đồ khối của timer0 của PIC 16F887

Bộ timer/counter0 có những đặc điểm sau: • Là timer/counter 8 bit.

• Có thể đọc và ghi giá trị đếm của timer/counter.

• Có bộ chia trước 8 bit cho phép lập trình lựa chọn hệ số chia bằng phần mềm. •

• Phát sinh ngắt khi bị tràn từ FFH về 00H.

• Cho phép lụa chọn tác động cung CK cạnh lên hoặc cạnh xuống.  Timer/Counter1

Bộ timer/counter1 có những đặc điểm sau:

• Là timer/counter 16 bit bao gồm hai thanh ghi 8 bit TMR1L và TMR1H với giá trị tối đa có là 65,535.

• Cho phép hoạt động với xung nội và xung ngoại. • Có 3 bit cho phép lập trình chọn tỷ lệ chia xung. • Có chế độ xung dao động thấp LP Oscillator. • Hoạt động đồng bộ hoạt bất đồng bộ.

• Chân gate control phục vụ cho bộ so sánh. • Cho phép ngắt khi có tràm thanh ghi. • Cho phép ngắt tác động bên ngoài. • Có chế độ lưu giá trị xung.

Hình 3.16: Hình ảnh 2 thanh ghi TMR1L và TMR1H

Lựu chọn nguồn xung clock:

CLOCK SOURCE TMR1CS

FOSC / 4 0

Hình 3.18: Sơ đồ cấu trúc Timer/Counter1của Pic16F887

- Hoạt động ở chế độ LP Oscillator.

Hình 3.19: Kết nối với tụ thạch anh Bảng giá trị tụ thạch anh và tụ C1 và C2 OSCILLATOR FREQUENCY C1 C2 LP 32 kHz 33 pF 33 pF 100 kHz 15 pF 15 pF 200 kHz 15 pF 15 pF  Timer2

Bộ timer2 có những đặc điểm sau:

• Chỉ lấy xung từ nguồn dao động nội.

• Có hai bit để lập trình tỉ lệ chia xung T2CKPS1 và T2CKPS0 với 3 giá trị chia.

• Có thêm 4 bit để lập trình tỉ lệ chia xung TOUTPS0, TOUTPS1, TOUTPS2, TOUTPS3. Với 16 giá trị.

Hình 3.20: Sơ đồ cấu trúc Timer2

Bảng giá trị chia tương ứng với giá trị 2 bit T2CKPS1 và T2CKPS0

T2CKPS1 T2CKPS0 PRESCALER RATE

0 0 1:1

0 1 1:4

1 X 1:16

Bảng giá trị chia tương ứng với giá trị 4 bit TOUTPS0, TOUTPS1, TOUTPS2, TOUTPS3

TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 POSTSCALER RATE

0 0 0 0 1:1 0 0 0 1 1:2 0 0 1 0 1:3 0 0 1 1 1:4 0 1 0 0 1:5 0 1 0 1 1:6 0 1 1 0 1:7 0 1 1 1 1:8 1 0 0 0 1:9 1 0 0 1 1:10 1 0 1 0 1:11 1 0 1 1 1:12 1 1 0 0 1:13 1 1 0 1 1:14

1 1 1 0 1:15

1 1 1 1 1:16

3.3.2.3 Giao thức truyền dữ liệu UART:

UART là viết tắt của Universal Asynchronous Receiver – Transmitter. Thường là một mạch tích hợp được sử dụng trong việc truyền dẫn dữ liệu nối tiếp giữa máy tính và các thiết bị ngoại vi. Rất nhiều vi điều khiển hiện nay đã được tích hợp UART, vì vấn đề tốc độ và độ điện dụng của UART không thể so sánh với các giao tiếp mới hiện nay nên các dòng PC & Laptop đời mới không còn tích hợp cổng UART.

Để bắt đầu cho việc truyền dữ liệu bằng UART, một START bit được gửi đi, sau đó là các bit dữ liệu và kết thúc quá trình truyền là STOP bit.

Hình 3.21: Khung dữ liệu truyền UART

Như hình có thể thấy, khi ở rạng thái chờ mức điện thế ở mức 1 (high). Khi bắt đầu truyền START bit sẽ chuyển từ 1 xuống 0 để báo hiệu cho bộ nhận là quá trình truyền dữ liệu sắp xảy ra. Sau START bit là đến các bit dữ liệu D0-D7 (Theo hình vẽ các bit này có thể ở mức cao hoặc thấp tùy theo dữ liệu). Sau khi truyền hết dữ liệu thì đến Bit Parity để bộ nhận kiểm tra tính đúng đắn của dữ liệu truyền. Cuối cùng là STOP bit là 1 báo cho thiết bị rằng các bit đã được gửi xong. Thiết bị nhận sẽ tiến hành kiểm tra khung truyền nhằm đảm báo tính đúng đắn của dữ liệu.

Các thông số cơ bản trong truyền nhận UART:

- Baund rate (tốc độ baund): Khoảng thời gian dành cho 1 bit được truyền. Phải được cài đặt giống nhau ở gửi và nhận.

- Frame (khung truyền): Khung truyền quy định về số bit trong mỗi lần truyền. - Start bit (bit bắt buộc) là bit đầu tiên được truyền trong 1 Frame. Báo hiệu cho thiết bị nhận có một gói dữ liệu sắp được truyền đến.

- Data: dữ liệu cần truyền. Bit có trọng số nhỏ nhất LSB được truyền trước sau đó đến bit MSB.

- Stop bit (bit bắt buộc): là 1 hoặc các bit báo cho thiết bị rằng các bit đã được gửi xong. Thiết bị nhận sẽ tiến hành kiểm tra khung truyền nhằm đảm bảo tính đúng đắn của dữ liệu.

Sơ đồ khối bộ truyền UART trong PIC 16F887:

Hình 3.22: Sơ đồ khối bộ truyền UART

 Nguyên tắc hoạt động:

- Dữ liệu cần truyền được đặt vào thanh ghi TXREG, baund rate được tạo ra, khi TXEN gán bằng 1 dữ liệu từ thanh ghi TXREG đưa vào thanh ghi TSR đồng thời baund rate tác động đến TSR, đẩy dữ liệu cần truyền ra bộ đệm sau đó xuất ra chân TX.

- Bit TXIF dùng để báo trạng thái trong thanh ghi TXREG, nếu có dữ liệu trong TXREG thì TXIF = 1. Nếu dữ liệu được truyền xuống thanh TSR thì TXIF =0. Tương tự bit TRMT dùng để báo trạng thái thanh ghi TSR.

Như vậy các bước cho quá trình gửi dữ liệu bao gồm: + Khởi tạo baund rate: ở thanh ghi SPBRG

Cho phép quá trình truyền thông không đồng bộ bằng cách thiết lập SPEN=1; SYNC = 0;

+ Cho phép truyền dữ liệu bằng cách thiết lập bit TXEN = 1; + Khi cần truyền dữ liệu thì cần set dữ liệu đó lên TXREG. Thanh ghi quy định chế độ truyền:

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R-1 R-0 CSRC TX9 TXEN SYNC SEND8 BRGH TRMT TX9D

bit 7 bit 0

CSRC: bit chọn nguồn xung clock TX9: Cho phép truyền nhận chế độ 9 bit TX9 = 1; // Hoạt động với chế độ 9 bit. TX9 = 0; // Hoạt động với chế độ 8 bit. TXEN: Cho phép truyền UART

TXEN = 1; // Cho phép

TXEN = 0; // Không cho phép SYNC: Cho phép chế độ đồng bộ SYNC = 1; // Truyền chế độ đồng bộ. SYNC = 0; // Truyền chế độ bất đồng bộ. BRGH: Chọn chế độ baund rate BRGH = 1; // Tốc độ cao (bất đồng bộ). BRGH = 0; // Tốc độ thấp (bất đồng bộ). TRMT: Trạng thái thanh ghi truyền. TRMT = 1; // Thanh ghi TSR trống TRMT = 0; // Thanh ghi TSR có dữ li ệu.

TX9D: Dữ liệu bit thứ 9 trong chế độ truyền 9 bit.  Sơ đồ khối bộ nhận UART trong PIC 16F887

Hình 3.23: Sơ đồ khối bộ nhận UART

Khi có dữ liệu được truyền đến chân RX và bit SPEN được cho phép thì dữ liệu sẽ được đồng bộ với khối tạo xung, vì baund rate giữa 2 khối bằng nhau nên xung baund rate mang từng bit vào thanh ghi RSR, khi một farm được truyền hoàn tất (xuất hiện bit stop) thì dữ liệu được truy ền xuống thanh ghi RCREG, bit thứ 9 được truyền xuống RX9D, nếu có lỗi thì các bit OERR, FERR dùng để thông báo. Quá trình nhận cũng tạo ra ngắt RCIF = 1, bằng cách thiết lập bit RCIE = 1 mỗi khi có dữ liệu truyền đến thì sẽ sinh ra ngắt và PIC sẽ tạm dừng chương trình hiện thời để xử lý dữ liệu vừa nhận được. Như vậy các bước cho quá trình nhận dữ liệu bao gồm:

- Khởi tạo baund rate: ở thanh ghi SPBRG

Cho phép quá trình truyền thông không đồng bộ bằng cách thiết lập SPEN=SYNC=0; - Cho phép ngắt quá trình nhận dữ liệu CREN = 1;

- Cho phép ngắt toàn cục: CIE = 1; PEIE = 1;

- Xử lý các phần khác của chương trình khi có ngắt xảy ra thì xử lý dữ liệu.

Thanh ghi quy định chế độ nhận:

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 SPEN RX9 SREN CREN ADDEN FERR OERR RX9D

bit 7 bit 0

SPEN: Khởi tạo cổng nối tiếp

SPEN = 1; // Cho phép cổng nối tiếp SPEN = 0; // Không cho phép

RX9: Cho phép nhận 9 bit RX9 = 1; // Cho phép nhận 9 bit RX9 = 0; // Nhận 8 bit

CREN: Cho phép nhận liên tục CREN = 1; // Cho phép

CREN = 0; // Không cho phép

ADDEN: Bit cho phép phát hiện địa chỉ (sử dụng ở chế độ truyền nhận bất đồng bộ 9 bit)

ADDEN = 1; // Cho phép phát hiện địa chỉ, cho phép ngắt và tải bộ đệm nhận khi RSR<8 > được set.

ADDEN = 0; // Không cho phép phát hiện địa chỉ, tất cả byte được nhận và bit thứ 9 dùng làm bit parity.

FERR: Bit báo lỗi frame FERR = 1; // Có lỗi

FERR = 0; // Không có lỗi OERR: Lỗi OVERRUN OEER = 1; // Có lỗi OEER = 0; // Không lỗi

RX9D: Lưu dữ liệu nhân của bit thứ 9

Thanh ghi TXREG: Dùng để chứa dữ liệu truyền đi. Thanh ghi RCREG: Dùng để lưu dữ liệu từ ngoài vào. Thanh ghi SPBRG: Thiết lập baud rate của PIC.

3.4 Web server

3.4.1 Tổng quan về Internet và web

Mạng máy tính là một hệ thống các máy tính được kết nối với nhau, có thể chia sẽ dữ liệu cho nhau. World Wide Web (WWW) là một hệ thống server chứa thông tin (siêu văn bản) mà người dùng có thể sử dụng thông qua web browser.

Mô hình mạng máy tính có dạng Client – Server trong đó Server (máy chủ) là máy tính sử dụng để các máy tính truy cập, các máy tính truy cập được gọi là Client. Ví dụ khi người dùng truy cập vào một trang web www.google.com thì Server là máy chủ chứa dữ liệu của www.google.com còn Client là máy tính cá nhân của người dùng.

TCP/IP là giao thức truyền dữ liệu giữa 2 máy tính, mỗi máy tính có một địa chỉ IP (Internet Protocol) xác định. Địa chỉ IP là cụm gồm 4 số giới hạn từ 0 – 255 có dạng A.B.C.D. Ví dụ như 193.168.1.93

Domain name (tên miền) là một định danh để xác định vị trí của một máy tính trên mạng internet. Domain name chỉ có duy nhất và không trùng nhau. Ví dụ như www.google.com là duy nhất.

Website được chia thành 2 dạng: website tĩnh và website động. Website tĩnh là những website không có khả năng tương tác với người dùng, thường sử dụng các ngôn ngữ như HTML, DHTML… Website động là những website có tính tương tác cao giữa người dùng và quản trị, được xây dụng bằng ngôn ngữ ASP, PHP…cùng với sự

kết hợp của cơ sở dữ liệu. Website động có phần quản trị web để cập nhập nội dung website như website tin tức, bán hàng… có phần bình luận cho các thành viên trong diễn đàn…

Như vậy, để tạo một web server đòi hỏi người dùng cần chuẩn bị cho mình: • Web browser (trình duyệt web) như Internet Explorer, Google Chrome,

Mozzila Firefox…

• Trình soạn thảo văn bản: Notepad, Notepad ++, PHP Designer… • Chương trình chạy web server.

3.4.2 Thiết lập web server bằng Apache

Apache là một phần mềm có nhiều tính năng mạnh và linh hoạt dùng để làm webserver. Một số đặc điểm của Apache như sau:

• Hỗ trợ đầy đủ những giao thức HTTP trước đây như HTTP/1.1 • Miễn phí và được cộng đồng người dùng hỗ trợ lớn.

• Có thể cấu hình và mở rộng những module.

• Cung cấp mã nguồn đầy đủ và đăng ký không hạn chế. • Chạy trên nhiều hệ điều hành như Linux, Windows…  Cài đặt web server Apache trên Raspberry Pi

Raspberry Pi sử dụng hệ điều hành Linux là Raspbian, được tạo ra từ nền tảng của hệ điều hành Debian. Nên việc cài đặt cũng tương tự, ngoài ra do nhà phát triển cũng đã tích hợp Apache sẵn có trong kho ứng dụng nên chỉ cần dùng lệnh sau để cài

Một phần của tài liệu ĐỀ TÀI THU THẬP DỮ LIỆU DÙNG RASPBERRY PI THÔNG QUA MẠNG INTERNET (Trang 28)

w