Tự học Arduino cho người mới bắt đầu: Phần 2

pdf
Số trang Tự học Arduino cho người mới bắt đầu: Phần 2 84 Cỡ tệp Tự học Arduino cho người mới bắt đầu: Phần 2 36 MB Lượt tải Tự học Arduino cho người mới bắt đầu: Phần 2 44 Lượt đọc Tự học Arduino cho người mới bắt đầu: Phần 2 124
Đánh giá Tự học Arduino cho người mới bắt đầu: Phần 2
4.3 ( 6 lượt)
Nhấn vào bên dưới để tải tài liệu
Đang xem trước 10 trên tổng 84 trang, để tải xuống xem đầy đủ hãy nhấn vào bên trên
Chủ đề liên quan

Nội dung

Arduino cho người mới bắt đầu 105/188 Chuẩn giao tiếp truyền nhận dữ liệu SPI Chương này chúng ta sẽ tìm hiểu về một chuẩn giao tiếp khá thông dụng trong truyền nhận dữ liệu, đó là chuẩn giao tiếp truyền nhận SPI. Điểm qua 1 số nội dung sẽ tìm hiểu ở chương này: • Giới thiệu về chuẩn SPI, lịch sử hình thành và nguyên lí hoạt động. • Một số ví dụ sử dụng SPI trong truyền, nhận dữ liệu như điều khiển LED matrix và đọc giá trị nhiệt độ, áp suất, độ cao bằng cảm biến BMP280 hiển thị giá trị lên màn hình OLED. 106/188 Giao thức SPI Giới thiệu Với tốc độ phát triển của công nghệ ngày nay thì việc truyền dữ liệu qua các chuẩn truyền I2C, UART chưa đáp ứng được đối với các dự án cần truyền dữ liệu với tốc độ cao, để đáp ứng điều đó hãng Motorola đã đề xuất ra chuẩn truyền SPI. SPI là chữ viết tắt của Serial Peripheral Interface, chuẩn giao tiếp nối tiếp đồng bộ tốc độ cao do hãng Motorola đề xuất được sử dụng cho truyền thông khoảng cách ngắn, chủ yếu là trong các hệ thống nhúng. Giao diện được Motorola phát triển vào giữa những năm 1980 và đã trở thành tiêu chuẩn trong thực tế. Các ứng dụng điển hình như Secure Digital cards (các loại thẻ nhớ SD ví dụ: miniSD, microSD cards) và liquid crystal displays (màn hình tinh thể lỏng). Đôi khi SPI còn được gọi là chuẩn truyền thông "4 dây" vì nó có 4 đường giao tiếp là SCK (Serial Clock), MISO (Master Input/Slave Output), MOSI (Master Output/Slave Input) và SS(Slave Select). • SCK (Serial Clock): Là đường xung giữ nhịp cho chuẩn SPI, là chân output từ master, do chuẩn SPI là giao tiếp đồng bộ nên phải cần dùng một đường giữ nhịp. Đây là sự khác biệt giữa truyền thông đồng bộ và truyền thông không đồng bộ như chuẩn giao tiếp UART. SCK giúp chuẩn SPI có tốc độ truyền/nhận dữ liệu cao và ít xảy ra lỗi trong quá trình truyền/nhận dữ liệu. • MISO (Master Input/Slave Output): Với master thì MISO là chân input và với slave là chân output, 2 chân MISO của master và slave nối trực tiếp với nhau. • MOSI (Master Output/Slave Input): Với chip master thì MOSI là chân output và với chip slave là chân input, 2 đường MOSI của master và slave nối trực tiếp với nhau. • SS (Slave Select): Là chân chọn thiết bị slave cần giao tiếp, trên thiết bị slave sẽ có một chân slave kết nối với chân SS của master và trên thiết bị master sẽ có nhiều chân SS điều khiển thiết bị slave. Chân SS trên các chip slave sẽ ở mức cao khi không giao tiếp, nếu chip master kéo đường SS của một slave nào đó xuống mức thấp thì master sẽ giao tiếp với slave đó. Chuẩn truyền SPI sử dụng kiểu truyền thông master-slave, với một master có thể điều khiển nhiều slave thông qua việc lựa chọn các đường SS (Slave Select), muốn điều khiển slave nào thì chỉ cần chọn SS của slave đó. Các thiết bị sử dụng chuẩn truyền SPI sẽ truyền dữ liệu song công (duplex communication) là truyền và nhận dữ liệu cùng lúc, master có thể gửi dữ liệu đến slave và nhận dữ liệu từ slave cùng một thời điểm. IoT Maker Viet Nam Arduino cho người mới bắt đầu 107/188 Hình 88. Hình ảnh cách kết nối các thiết bị trong giao thức SPI (Nguồn en.wikipedia.org) SPI, ưu và nhược điểm Ưu điểm • Chuẩn truyền thông nối tiếp SPI có tốc độ truyền dữ liệu và ít lỗi phát sinh trong quá trình truyền/nhận dữ liệu hơn các chuẩn truyền nối tiếp khác. • Hỗ trợ truyền thông song công (duplex communication) là dữ liệu có thể truyền và nhận cùng một thời điểm. • Có giao diện phần cứng khá đơn giản. • Không giới hạn tốc độ xung clock, cho phép truyền dữ liệu với tốc độ cao. • Hỗ trợ điều khiển nhiều slave. Nhược điểm: • Tốn năng lượng. • Chỉ hỗ trợ một master. • Không có giao thức kiểm tra lỗi. • SPI đòi hỏi các slave có một đường SS (slave Select) riêng biệt, vì thế nếu cần nhiều slave thì sẽ cần nhiều đường SS sẽ làm tốn chân của chip master và nhiều dây sẽ gây rối. 108/188 Nguyên lý hoạt động Thiết bị master và slave mỗi thiết bị có thanh ghi dữ liệu 8 bit. Khi đường SCK của master tạo ra một xung nhịp thì một bit trong thanh ghi dữ liệu của master truyền qua slave trên đường MOSI, và ngược lại một bit dữ liệu từ slave sẽ truyền qua master trên đường MISO, do 2 dữ liệu được truyền cùng một lúc trên một nhịp xung nên quá trình truyền dữ liệu này gọi là truyền dữ liệu "song công". Hình 89. Quá trình truyền nhận dữ liệu trong giao thức SPI (Nguồn learn.sparkfun.com) IoT Maker Viet Nam Arduino cho người mới bắt đầu 109/188 SPI, các ví dụ mẫu Hiển thị chữ trên LED matrix Yêu cầu Đây là một ví dụ cơ bản của chuẩn giao tiếp nối tiếp SPI. Vi điều khiển giao tiếp với module LED matrix để hiển thị chữ. Hình 90. Hình ảnh module LED ledmatrix LED matrix 8x8 MAX7219 dùng IC 7219 để điều LED matrix 1 cách dễ dàng và đơn giản hơn, dùng 3 dây dữ liệu để truyền dữ liệu và 2 dây nguồn. Module 8x8 LED matrix sử dụng khá đơn giản, có thể điều chỉnh độ sáng của LED ngay trên phần mềm. Linh kiện cần dùng • Board IoT Maker UnoX • Module LED matrix MAX7219 • Dây cắm breadboard male-female Kết nối IoT Maker UnoX với LED matrix Board IoT Maker UnoX sẽ là master và LED matrix sẽ là slave. • Master sẽ gửi dữ liệu ra từ chân D11 (MOSI) và slave sẽ nhận dữ liệu bằng chân DIN. • Chân D13 (SCK) của master sẽ tạo xung clock qua chân CLK của slave mỗi nhịp sẽ gửi 1bit dữ liệu qua slave. • Chân D10 (SS) của master nối với chân CS của slave khi muốn giao tiếp với slave thì chân D10 (SS) của master sẽ kéo chân CS của slave xuống mức thấp. 110/188 Bảng 13. Bảng kết nối LED matrix và board IoT Maker UnoX LED matrix Board IoT Maker UnoX VCC 5V GND GND DIN D11 (MOSI ) CLK D13 (SCK) CS D10 (SS) Hình 91. Hình ảnh kết nối module LED matrix với board IoT Maker UnoX Thư viện cần dùng: Với những thư viện không có sẵn trong trình biên dịch Arduino IDE thì cần phải clone (dùng với git) hoặc Download về máy và add vào chương trình. Các thư viện cần dùng cho ứng dụng được kiệt kê bên dưới: • Thư viện "SPI.h" là thư viện đã có sẵn trong trình biên dịch Arduino IDE. • Thư viện bitBangedSPI. • Thư viện MAX7219_Dot_Matrix. Source code IoT Maker Viet Nam Arduino cho người mới bắt đầu 111/188 #include #include #include MAX7219_Dot_Matrix display (chips, 10); // Chân D10 là chân SS của board Iotmaker Uno X const byte chips = 1; // Số chip MAX7219 được sử dụng const char message [] = "IOT MAKER VN"; // Nội dung được hiển thị unsigned long lastMoved = 0; unsigned long MOVE_INTERVAL = 40; // Thời gian chạy chữ đơn vị (ms) int messageOffset; void updateDisplay () { // Hiển thị chữ của mảng message, bắt đầu từ pixel mesageOffset display.sendSmooth (message, messageOffset); // Mỗi thời gian hiển thị một pixel từ phải qua trái if (messageOffset++ >= (int) (strlen (message) * 8)) messageOffset = -chips * 8; } void setup () { display.begin (); } // Khởi tạo hiển thị void loop () { // Nội dung được hiển thị lại sau khi chạy if (millis() - lastMoved >= MOVE_INTERVAL) { updateDisplay (); lastMoved = millis(); } } Kết quả 112/188 Đọc dữ liệu từ cảm biến BMP280, hiển thị trên OLED Yêu cầu Ứng dụng này giúp chúng ta đọc dữ liệu từ cảm biến áp suất và hiển thị giá trị lên màn hình OLED. Module cảm biến áp suất BMP280 Hình 92. Hình ảnh module cảm biến áp suất BMP280 BPM280 là cảm biến nâng cấp thế hệ tiếp theo cho BMP085/BMP180/BMP183. Với chi phí thấp, độ chính xác cao. Module có chức năng đo áp suất khí quyển và nhiệt độ. Chúng ta cũng có thể sử dụng nó như một module đo độ cao (sai số ± 1m) bởi mối liên hệ giữa áp suất và độ cao. Linh kiện cần dùng • Board IoT Maker UnoX • Module cảm biến áp suất BPM280 • Màn hình OLED • Dây cắm breadboard male-female Kết nối : • Arduino sẽ là master và cảm biến BMP280 sẽ là slave, slave sẽ gửi dữ liệu qua đường SDI. • Mỗi nhịp xung clock từ chân SCK (D13) của master tạo ra sẽ ứng với 1bit dữ liệu được truyền. • Chân D10 (SS) của master nối với chân CS của slave khi muốn giao tiếp với slave thì chân D10 (SS) của master sẽ kéo chân CS của slave xuống mức thấp. IoT Maker Viet Nam Arduino cho người mới bắt đầu 113/188 Bảng 14. Bảng đấu nối cảm biến BMP280 và board IoT Maker UnoX BMP280 IoT Maker UnoX VCC 3.3V GND GND SDI D11 (MOSI ) SCK D13 (SCK) CSE D10 (SS) SDO D12(MISO) Hình 93. Hình ảnh kết nối module cảm biến áp suất BMP280 với board IoT Maker UnoX Kết nối board IoT Maker UnoX với OLED Xem chương I2C để hiểu hơn về giao tiếp Arduino giao tiếp với OLED, chúng ta có thể cắm trực tiếp OLED vào header đã được thiết kế sẵn trên board IoT Maker UnoX hoặc kết nối theo hướng dẫn bên dưới. Bảng 15. Bảng đấu nối OLED với board IoT Maker UnoX OLED IoT Maker UnoX VCC 3.3V GND GND SDA SDA(hoặc A4) SCL SCL(hoặc A5) 114/188 Hình 94. Hình ảnh kết nối OLED SSD1306 với board IoT Maker UnoX Thư viện cần dùng: • Thư viện "SPI.h" và "Wire.h" là hai thư viện có sẵn trong Arduino IDE. • Thư viện Adafruit_SSD1306.h. • Thư viện Adafruit_GFX.h. • Thư viện Adafruit_Sensor.h. • Thư viện Adafruit_BMP280.h. Source code #include #include #include #include #include #include #define #define #define #define #define BMP_SCK BMP_MISO BMP_MOSI BMP_CS OLED_RESET 13 12 11 10 4 Adafruit_SSD1306 display(OLED_RESET); // Chọn giao tiếp SPI (BMP280 có 2 chuẩn giao tiếp SPI và I2C) Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK); void setup() { Serial.begin(9600); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay(); display.setTextColor(WHITE); display.setTextSize(1); display.setCursor(15, 15); IoT Maker Viet Nam // // // // // Lấy Lệnh Chọn Chọn Chọn địa chỉ I2C của oled xóa màn hình hiển thị màu chữ kích thước chữ vị trí của chữ
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.