GIỚI THIỆU CHUẨN GIAO TIẾP I2C

Một phần của tài liệu Thiết kế và thi công hệ thống giám sát nhiều vườn (Trang 29)

2.4.1. Giới thiệu chung

Đầu năm 1980 Phillips đã phát triển một chuẩn giao tiếp nối tiếp 2 dây được gọi là I2C. I2C là tên viết tắt của cụm từ Inter-Intergrated Circuit. Đây là đường Bus giao tiếp giữa các IC với nhau. Bus I2C được sử dụng làm bus giao tiếp ngoại vi cho rất nhiều loại IC khác nhau như các loại Vi điều khiển 8051, PIC, AVR, ARM... chip nhớ như: RAM tĩnh (Static Ram), EEPROM, bộ chuyển đổi tương tự số (ADC), số tương tự(DAC), IC điểu khiển LCD, LED...

2.4.2. Đặc điểm giao tiếp I2C

Một giao tiếp I2C gồm có 2 dây: Serial Data (SDA) và Serial Clock (SCL). SDA là đường truyền dữ liệu 2 hướng, còn SCL là đường truyền xung đồng hồ để đồng bộ và chỉ theo một hướng. Như thấy trên hình vẽ trên, khi một thiết bị ngoại vi kết nối vào đường bus I2C thì chân SDA của nó sẽ nối với dây SDA của bus, chân SCL sẽ nối với dây SCL.

Hình 2.8: Sơ đồ kết nối thiết bị với I2C

Mỗi dây SDA hãy SCL đều được nối với điện áp dương của nguồn cấp thông qua một điện trở kéo lên (pullup resistor). Sự cần thiết của các điện trở kéo này là vì chân giao tiếp I2C của các thiết bị ngoại vi thường là dạng cực máng hở (opendrain hay opencollector). Giá trị của các điện trở này khác nhau tùy vào từng thiết bị và chuẩn giao tiếp, thường dao động trong khoảng 1K đến 4.7k

Trở lại với hình 1, thấy có rất nhiều thiết bị (ICs) cùng được kết nối vào một bus I2C, tuy nhiên sẽ không xảy ra chuyện nhầm lẫn giữa các thiết bị, bởi mỗi thiết bị sẽ được nhận ra bởỉ một địa chỉ duy nhất với một quan hệ chủ/tớ tồn tại trong suốt thời gian kết nối. Mỗi thiết bị có thể hoạt động như là thiết bị nhận hoặc truyền dữ liệu hay có thể vừa truyền vừa nhận. Hoạt động truyền hay nhận còn tùy thuộc vào việc thiết bị đó là chủ (master) hãy tớ (slave).

Hình 2.9: Giao tiếp I2C 2

Nhìn hình trên thấy xung đồng hồ chỉ có một hướng từ chủ đến tớ, còn luồng dữ liệu có thể đi theo hai hướng, từ chủ đến tớ hay ngược lại tớ đến chủ.

2.4.3. Chế độ hoạt động (tốc độ truyền)

Các bus I2C có thể hoạt động ở ba chế độ, hay nói cách khác các dữ liệu trên bus I2C có thể được truyền trong 3 chế độ khác nhau:

 Chế độ tiêu chuẩn (Standard mode)

 Chế độ nhanh (Fast mode)

 Chế độ cao tốc High-Speed (Hs) mode

Một bus I2C có thể hoạt động ở nhiều chế độ khác nhau:

- Một chủ một tớ (one master - one slave).

- Một chủ nhiều tớ (one master - multi slave).

- Nhiều chủ nhiều tớ (Multi master - Multi slave)

Dù ở chế độ nào, một giao tiếp I2C đều dựa vào quan hệ chủ/tớ. Giả thiết một thiết bị A muốn gửi dữ liệu đến thiết bị B, quá trình được thực hiện như sau:

- Thiết bị A (Chủ) xác định đúng địa chỉ của thiết bị B (tớ), cùng với việc xác

định địa chỉ, thiết bị A sẽ quyết định việc đọc hay ghi vào thiết bị tớ -Thiết bị A gửi dữ liệu tới thiết bị B.

- Thiết bị A kết thúc quá trình truyền dữ liệu

Khi A muốn nhận dữ liệu từ B, quá trình diễn ra như trên, chỉ khác là A sẽ nhận dữ liệu từ B. Trong giao tiếp này, A là chủ còn B vẫn là tớ. Chi tiết việc thiết lập một giao tiếp giữa hai thiết bị sẽ được mô tả chi tiết trong các mục dưới đây.

Trình tự truyền bit trên đường truyền:

Hình 2.10: Trình tự truyền Bit trong giao tiếp I2C

Thiết bị chủ tạo một điều kiện start. Điều kiện này thông báo cho tất cả các thiết bị tớ lắng nghe dữ liệu trên đường truyền. Để kết thúc quá trình giao tiếp, thiết bị chủ tạo ra một điều kiện stop.

2.4.4. Điều kiện START và STOP

START và STOP là những điều kiện bắt buộc phải có khi một thiết bị chủ muốn thiết lập giao tiếp với một thiết bị nào đó trên bus I2C. START là điều kiện

khởi đầu, báo hiệu bắt đầu của giao tiếp, còn STOP báo hiệu kết thúc một giao tiếp. Hình dưới đây mô tả điều kiện START và STOP.

Hình 2.11: Điều kiện Start và Stop trong giao tiếp I2C

Điều kiện START: một sự chuyển đồi trạng thái từ cao xuống thấp trên đường SDA trong khi đường SCL đang ở mức cao (cao = 1; thấp = 0) báo hiệu một điều kiện START

Đỉều kiện STOP: Một sự chuyển đổi trạng thái từ mức thấp lên cao trên đường SDA trong khi đường SCL đang ở mức cao. Cả hai điều kiện START và STOP đều được tạo ra bởi thiết bị chủ. Sau tín hiệu START, bus I2C coi như đang trong trạng thái làm việc (busy). Bus I2C sẽ rỗi, sẵn sàng cho một giao tiếp mới sau tín hiệu STOP từ phía thiết bị chủ.

Truyền dữ liệu:

Mỗi xung clock có một bit dữ liệu được truyền. Mức tín hiệu SDA chỉ được thay đổi khi xung clock đang ở mức thấp, và ổn định khi xung clock ở mức cao. Thiết bị tớ có thể lấy mẫu dữ liệu khi xung clock ở mức cao.

2.5. CHUẨN GIAO TIẾP 1-WIRE 2.5.1. Giới thiệu 2.5.1. Giới thiệu

Chuẩn giao tiếp 1 dây (1 wire) do hãng Dallas giới thiệu. Trong chuẩn giao tiếp này chỉ cần 1 dây để truyền tín hiệu và làm nguồn nuôi (nếu không tính dây mass). Một tính năng đặc biệt của bus là khả năng chỉ sử dụng hai dây tín hiệu: data và GND. Để thực hiện điều này, các thiết bị 1-Wire bao gồm một tụ điện 800pF để trữ điện, và cung cấp nguồn trong quá trình đường data đang hoạt động.

2.5.2. Nguyên lý hoạt động

Tín hiệu trên bus 1-wire chia thành các khe thời gian 60 µs. 1 bit dữ liệu được truyền trên bus dựa trên khe thời gian (time slots). Các thiết bị slave cho phép có thời gian nền có một chút khác biệt từ thời gian nền danh nghĩa. Tuy nhiên đối với thiết bị master cần có bộ định thời với độ chính xác cao, để đảm bảo giao tiếp đúng với các thiết bị slave có thời gian nền khác biệt. Do đó rất quan trọng để tuân theo giới hạn thời gian mô tả trong các phần sau.

Bốn thao tác hoạt động cơ bản của bus 1-wire là Reset/Presence, gửi bit 1, gửi bit 0, và đọc bit. Thao tác byte như gửi byte và đọc byte dựa trên thao tác từng bit.

Gửi bit 1 (“Write 1” signal): Thiết bị master kéo bus xuống mức thấp trong khoảng 1 đến 15µs. Sau đó nhả bus (releases the bus) cho đến hết phần còn lại của khe thời gian.

Hình 2.13: Gửi tín hiệu bit “1”

Gửi bit 0 ("Write 0" signal): Kéo bus xuống mức thấp trong ít nhất 60µs, với chiều dài tối đa là 120 µs.

Hình 2.14: Gửi tín hiệu bit “0”

Lưu ý: giữa các lần gửi bit (0 hoặc 1), phải có khoảng thời gian phục hồi bus (recovery time) tối thiểu 1 µs.

Đọc bit: Thiết bị master kéo bus xuống mức thấp từ 0 -15µs. Khi đó thiết bị tớ khi đó sẽ giữ bus ở mức thấp nếu muốn gửi bit 0, Nếu muốn gửi bit 1 đơn giản là nhả bus. Bus nên lấy mẫu 15 µs sau khi bus kéo xuống mức thấp.

Hình 2.15: Đọc bit

Reset/Presence: Tín hiệu Reset và Presence (báo hiện diện) được trình bày như hình bên dưới. Thiết bị master kéo bus xuống thấp ít nhất 8 khe thời gian (tức là 480 µs) và sau đó nhả bus. Khoảng thời gian bus ở mức thấp đó gọi là tín hiệu reset. Nếu có thiết bị slave gắn trên bus nó sẽ trả lời bằng tín hiệu Presence tức là thiết bị tớ sẽ kéo bus xuống mức thấp trong khoảng thời gian 60µs. Nếu không có tín hiệu Presence, thiết bị master sẽ hiểu rằng không có thiết bị slave nào trên bus, và các giao tiếp sau đó sẽ không thể diễn ra.

Hình 2.16: Tín hiệu Reset và Presence

2.6. CHUẨN GIAO TIẾP UART 2.6.1. Giới thiệu 2.6.1. Giới thiệu

UART chuyển đổi giữa dữ liệu nối tiếp và song song. Một chiều UART chuyển đổi dữ liệu song song bus hệ thống ra dữ liệu nối tiếp để truyền đi. Một chiều khác UART chuyển đổi dữ liệu nhận được dạng dữ liệu nối tiếp thành dạng dữ liệu song song cho CPU có thể đọc vào bus hệ thống.

Hình 2.18: Truyền dữ liệu UART

2.6.2. Các thông số cơ bản của chuẩn truyền UART

Baud rate (tốc độ Baud): Khi truyền nhận không đồng bộ để hai module hiểu được nhau thì cần quy định một khoảng thời gian cho 1bit truyền nhận, nghĩa là trước khi truyền thì tốc độ phải được cài đặt đầu tiên. Theo định nghĩa thì tốc độ baud là số bit truyền trong một giây.

Frame (khung truyền): Do kiểu truyền thông nối tiếp này rất dễ mất dữ liệu nên ngoài tốc độ, khung truyền cũng được cài đặt từ ban đầu để giảm bớt sự mất mát dữ liệu này. Khung truyền quy định số bit trong mỗi lần truyền, các bit thông báo như start, stop, các bit kiểm tra như parity, và số bit trong một data.

Bit Start: Là bit bắt đầu trong khung truyền. Bit này nhằm mục đích báo cho thiết bị nhận biết quá trình truyền bắt đầu. Trên AVR bit Start có trạng thái là 0.

Data: Dữ liệu cần truyền data không nhất thiết phải 8 bit có thể là 5, 6, 7, 8, 9. Trong UART bit LSB được truyền đi trước, bit MSB được truyền đi sau.

Parity bit: Là bit kiểm tra dữ liệu. Có 2 loại parity: chẵn (even parity), lẻ (old parity). Parity chẵn là bit parity thêm vào để tổng số 1 trong data + parity = chẵn. Parity lẻ là bit parity thêm vào để tổng số 1 trong data + parity = lẻ. Bit parity là không bắt buộc nên có thể dùng hoặc không.

2.7. ỨNG DỤNG BLYNK 2.7.1. Giới thiệu 2.7.1. Giới thiệu

Hình 2.19: App Blynk

Blynk là một ứng dụng iOS và Android để kiểm soát thiết bị Esp8266, Arduino, Raspberry Pi và thiết bị khác trên Internet.

Blynk không bị ràng buộc với những phần cứng. Thay vào đó, nó hỗ trợ phần cứng lựa chọn. Cho dù Arduino hoặc Raspberry Pi muốn kết nối đến Internet qua Wi- Fi, Ethernet hoặc chip ESP8266, Blynk sẽ giúp nó làm việc và sẵn sàng kiểm soát trên Internet.

2.7.2. Các chức năng chính của Blynk

Các chức năng của Blynk:

● Cung cấp API & giao diện người dùng tương tự cho tất cả các thiết bị và phần

cứng được hỗ trợ

● Kết nối với server bằng cách sử dụng: Wifi, Bluetooth, Ethernet, USB(serial), GSM….

● Các tiện ích trên giao diện được nhà phát hành cung cấp dễ sử dụng

● Thao tác kéo thả trực tiếp giao diện mà không cần viết mã

● Dễ dàng tích hợp và thêm chức năng mới bằng cách sử dụng các cổng kết nối ảo

được tích hợp trên Blynk app

● Theo dõi lịch sử dữ liệu

● Thông tin liên lạc từ thiết bị đến thiết bị bằng Widget

2.7.3. Nguyên lý hoạt động của Blynk

Có ba thành phần chính trong nền tảng:

Blynk App - cho phép tạo giao diện cho sản phẩm bằng cách kéo thả các widget khác nhau mà nhà cung cấp đã thiết kế sẵn.

Blynk Server - chịu trách nhiệm xử lý dữ liệu trung tâm giữa điện thoại, máy tính bảng và phần cứng. Có thể sử dụng Blynk Cloud của Blynk cung cấp hoặc tự tạo máy chủ Blynk riêng. Vì đây là mã nguồn mở, nên có thể dễ dàng kết nối vào các thiết bị và thậm chí có thể sử dụng Raspberry Pi làm server.

Library Blynk – hỗ trợ cho hầu hết tất cả các nền tảng phần cứng phổ biến - cho phép giao tiếp với máy chủ và xử lý tất cả các lệnh đến và đi.

Ví dụ hoạt động: giả sử có nút nhấn kết nối với Blynk, mỗi khi nhấn một nút trong ứng dụng Blynk, yêu cầu sẽ chuyển đến server của Blynk, server sẽ kết nối đến phần cứng thông qua library. Tương tự thiết bị phần cứng sẽ truyền dữ liệu ngược lại đến server.

2.8. XÂY DỰNG WEB SERVER 2.8.1. Ngôn ngữ HTML 2.8.1. Ngôn ngữ HTML

a. Giới thiệu

Ngôn ngữ HTML (HyperText Markup Language – ngôn ngữ siêu văn bản) là một trong các loại ngôn ngữ được sử dụng trong lập trình web. Khi truy cập một trang web cụ thể là click vào các đường link, sẽ được dẫn tới nhiều trang khác nhau, các trang này được gọi là một tài liệu HTML (tập tin HTML).

Một trang HTML như vậy được cấu thành bởi nhiều phần tử HTML nhỏ và được quy định bằng các thẻ tag. Có thể phân biệt một trang web được viết bằng ngôn ngữ HTML hay PHP thông qua đường link của nó. Ở cuối các trang HTML thường hay có đuôi là .HTML hoặc .HTM.

HTML là ngôn ngữ lập trình web được đánh giá là đơn giản. Mọi trang web, mọi trình duyệt web đều có thể hiển thị tốt ngôn ngữ HTML. Hiện nay, phiên bản mới nhất của HTML là HTML 5 với nhiều tính năng và chất lượng hơn so với các phiên bản cũ.

b. Vai trò

Là một loại ngôn ngữ đánh dấu siêu văn bản, giúp cấu thành các cấu trúc cơ bản trên một website (chia khung sườn, bố cục các thành phần trang web) và góp phần hỗ trợ khai báo các tập tin kĩ thuật số như video, nhạc, hình ảnh.

Để xây dựng được một website hoàn chỉnh, trên bất kỳ nền tảng nào khác đều cũng phải cần sự hỗ trợ của HTML, dù ít hay nhiều.

c. Ưu và nhược điểm

Bất kể thử gì cũng đều có ưu và nhược điểm của riêng nó.

Ưu điểm:

 Ngôn ngữ được sử dụng rộng lớn, có nguồn tài nguyên hỗ trợ và cộng đồng

sử dụng rộng lớn

 Sử dụng mượt trên mọi loại trình duyệt.

 Dễ dàng tích hợp các ngôn ngữ backend khác như PHP và Node.js.

 Mã nguồn mở và hoàn toàn miễn phí

 Dùng chủ yếu cho web tĩnh. Đối với các tính năng động, cần sử dụng JavaScript hoặc ngôn ngữ backend bên thứ 3 như PHP.

 Một số trình duyệt chậm hỗ trợ tính năng mới.

 Khó kiểm soát logs của trình duyệt.

d. Cấu trúc

Để hoàn thiện một file HTML, cần sử dụng thẻ <html> để bắt đầu và kết thúc bằng thẻ </html>. Bên trong một file gồm có 2 phần cơ bản:

Phần tiêu đề: bắt đầu bằng thẻ <head> và kết thúc bởi thẻ </head>. Phần này chưa tiêu đề được hiển thị trên thanh điều hướng của trang web. Tiêu đề nằm trong title, bắt đầu bằng thẻ <title> và kết thúc bằng thẻ </title>. Đây là phần rất quan trọng vì nắm vai trò trong việc tìm kiếm thông tin, nói cách khác chính là từ khóa cho công cụ tìm kiếm.

Phần thân: nằm sau phần tiêu đề. Bao gồm văn bản, hình ảnh, video và các nội dung khác muốn hiển thị trên trang web. Bắt đầu bằng thẻ <body> và kết thúc bằng thẻ </body>.

e. Các thẻ HTML cơ bản

Headings (Tiêu đề)

Headings được sử dụng để trình bày tiêu đề cho phần nội dung hiển thị trên trang Web.

Những phần tiêu đề được hiển thị to và in đậm hơn để phân biệt chúng với các phần còn lại của văn bản. Cũng có thể hiển thị phần tiêu đề theo một trong sáu kích thước từ h1 đến h6. Tất cả những gì làm là định rõ kích thước h1, h2… Thẻ h1 dành cho các tiêu đề quan trọng nhất và giảm dần đến h6.

Thẻ khối <span>, <div>, <p>

Có những trường hợp muốn chia văn bản trong một trang web thành những khối thông tin logic khi đó phần tử div và span được sử dụng để nhóm nội dung lại với nhau. Thẻ div rất thường được sử dụng trong thiết kế website layout.

 Phần tử div dùng để chia tài liệu thành các thành phần có liên quan với nhau.

 Phần tử span dùng để định nghĩa nội dung trong dòng (in-line) còn phần tử div

 Phần tử p định nghĩa một đoạn văn bản.

Chèn ảnh

Thẻ <img> dùng để chèn hình ảnh vào trong HTML. Cũng có thể đặt thẻ

<img> tại vị trí mà hình ảnh được hiển thị. Thẻ <img> không có nội dung, nó hiển thị nội dung bằng cách xác định thuộc tính src. Cú pháp là:

<img src = “url”>

Trong đó src (source) là thuộc tính và giá trị là một url, chỉ vị trí chính xác của file ảnh.

Thuộc tính align của thẻ <img> có thể được sử dụng để điều chỉnh canh lề

Một phần của tài liệu Thiết kế và thi công hệ thống giám sát nhiều vườn (Trang 29)