CHƯƠNG 1 TỔNG QUÁT ARDUINO VÀ ESP8266 1. TỔNG QUAN VỀ ARDUINO VÀ ESP 8266 1. Giới thiệu Arduino là một bo mạch vi xử lý được dùng để lập trình, tương tác với các thiết bị phần cứng như: cảm biến, động cơ, đèn hoặc các thiết bị khác. Đặc điểm nổi bật của arduino là môi trường phát triển ứng dụng rất dễ sử dụng, với ngôn ngữ lập trình có thể họcảmột cách nhanh chóng ngay cả với người ít am hiểu về điện tử và lập trình cũng có thể sử dụng một cách dễ dàng.
Arduino có mức giá thấp, phù hợp với nhu cầu người dùng, có tính chất nguồn mở và cộng đồng người dùng đông đảo. Với lợi thế đến từ giá thành cũng như lợi thế về cộng đồng người dùng, arduino đang ngày càng trở nên phổ biến hơn, người dùng arduino trải rộng từ học sinh phổ thông đến sinh viên đại học. Board mạch arduino được sử dụng để thực hiện nhiều ứng dụng như: điều khiển robot, điều khiển và giám sát nhiệt độ độ ẩm phòng thí nghiệm, điều khiển xe mô hình… Hình 1.1: Các loại Board Arduino 4 1. Phần cứng Arduino Phần cứng arduino bao gồm một board mạch nguồn mở được thiết kế trên nền tảng là vi xử lý AVR Atmel 8-bit, hoặc ARM Atmel 32-bit.
Board arduino sẽ đưa ra hầu hết các chân I/O của vi điều khiển để sử dụng cho những mạch ngoài. Những mẫu hiện tại thường được trang bị gồm 1 cổng giao tiếp USB, nhiều chân đầu vào analog và chân I/O kỹ thuật số tương thích với nhiều board mở rộng khác nhau. Điều này giúp người dùng dễ dàng lập trình và có thể mở rộng với các mạch khác, cácảmodule thêm vào có thể dễ dàng chuyển đổi, được gọi là shield. Một số shield kết nối với board arduino trực tiếp thông qua các chân khác nhau, ngoài ra còn một số shield được định địa chỉ thông qua serial bus I2C, người dùng có thể kết nối nhiều shield với arduino dưới dạng song song.
Arduino thường sử dụng các dòng chip MegaAVR, đặc biệt là ATMega8, ATMega168, ATMega328, ATMega1280, và ATMega2560. Theo nguyên tắc, khi sử dụng phần mềm arduino, tất cả các board được lập trình thông qua một kết nối RS-232, nhưng cách thức thực hiện lại tùy thuộc vào đời phần cứng. Các board serial arduino có chứa một mạch chuyển đổi giữa RS- 232 sang TTL. Các board arduino hiện tại được lập trình thông qua cổng USB, thực hiện thông qua chip chuyển đổi USB-to-serial như là FTDI FT232.
Phần mềm Arduino IDE Giao diện phần mềm lập trình arduino IDE bao gồm 3 phần chính như hình 1.2 dưới đây: 5 Hình 1.2: Giao diện phần mềm Arduino IDE 1. Bao gồm các nút lệnh (File, Edit, Sketch, Tools, Help). Phía dưới là các biểu tượng cho phép sử dụng nhanh các chức năng thường dùng. Chức năng lần lượt của các biểu tượng được trình bày trong hình dưới đây: Hình 1.3: Chức năng các biểu tượng trong Arduini IDE 2.
Vùng viết chương trình: Là nơi đế người dùng viết chương trình, phần mềm arduino IDE sử dụng ngôn ngữ C/C++ để lập trình cho arduino. Vùng thông báo: Những thông báo từ IDE sẽ được hiển thị tại vùng thông báo. Ở dưới cùng bên phải hiển thị loại board arduino và cổng COM đang được sử dụng.2 MODULE WIFI ESP8266 NODEMCU Hình 1.1: Module thu phát Wifi ESP8266 NodeMCU Lua CP2102 ESP8266 là vi điều khiển tích hợp WiFi (WiFi SoC) được phát triển bởi Espressif Systems. Với Vi điều khiển và WiFi tích hợp, ESP8266 cho phép lập trình viên có thể lập trình trên mô đun này để thực hiện các ứng dụng khác nhau, đặc biệt là các ứng dụng IoT.
NodeMCU phát triển dựa trên Chip WiFi ESP8266EX bên trong. Board còn tích hợp IC CP2102, giúp dễ dàng giao tiếp với máy tính thông qua Micro USB để thao tác với board. Và có sẵn nút nhấn, led báo hiệu. Module thu phát Wifi ESP8266 NodeMCU Lua CP2102 là một module thu phát Wifi được thiết kế dựa trên vi điều khiển ESP8266 của hãng Espressif.
Module này được tích hợp sẵn trình điều khiển Wifi và hỗ trợ giao tiếp thông qua giao thức TCP/IP. Ngoài ra, module còn tích hợp một số chức năng khác như GPIO, UART, I2C, SPI, ADC, PWM, và các chức năng khác. Module này được lập trình bằng ngôn ngữ Lua và có thể được lập trình thông qua một trình biên dịch Lua trên máy tính. Module cũng được tích hợp sẵn một cổng USB để kết nối với máy tính và cung cấp nguồn cho module.
7 Nguyên lý hoạt động của module này là sử dụng vi điều khiển ESP8266 để kết nối với mạng Wifi và giao tiếp với các thiết bị khác thông qua giao thức TCP/IP. Module cũng có thể được sử dụng để điều khiển các thiết bị khác thông qua các chức năng GPIO, UART, I2C, SPI, ADC, PWM, và các chức năng khác.3: sơ đồ chân module ESP8266 NODEMCU Tính năng của NODEMCU ESP8266 - Thông số kĩ thuật: - IC chính: ESP8266 Wifi SoC. - Phiên bản firmware: NodeMCU Lua - Chip nạp và giao tiếp UART: CP2102. - GPIO tương thích hoàn toàn với firmware Node MCU.
- Cấp nguồn: 5VDC MicroUSB hoặc Vin. - GIPO giao tiếp mức 3.3VDC - Tích hợp Led báo trạng thái, nút Reset, Flash. - Tương thích hoàn toàn với trình biên dịch Arduino. - Kích thước: 25 x 50 mm 8 Thông số kỹ thuật: - Chip: ESP8266EX - WiFi: 2.4 GHz hỗ trợ chuẩn 802.11 b/g/n - Điện áp hoạt động: 3.3V - Điện áp vào: 5V thông qua cổng USB - Số chân I/O: 11 (tất c các chân I/O đều có Interrupt/PWM/I2C/Onewire, - trừ chân D0) - Số chân Analog Input: 1 (điện áp vào tối đa 3.3V) - Bộ nhớ Flash: 4MB - Giao tiếp: Cáp Micro USB - Hỗ trợ bảo mật: WPA/WPA2 - Tích hợp giao thức TCP/IP 1.2Giao tiếp I2C I2C ( Inter – Integrated Circuit) là 1 giao thức giao tiếp nối tiếp đồng bộ được phát triển bởi Philips Semiconductors, sử dụng để truyền nhận dữ liệu giữa các IC với nhau chỉ sử dụng hai đường truyền tín hiệu.
Các bit dữ liệu sẽ được truyền từng bit một theo các khoảng thời gian đều đặn được thiết lập bởi 1 tín hiệu đồng hồ. Bus I2C thường được sử dụng để 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, cảm biến, EEPROM, …. I2C, viết tắt của từ Inter-Integrated Circuit, là một chuẩn truyền thông do hãng điện tử Philips Semiconductor sáng lập, cho phép giao tiếp một thiết bị chủ với nhiều thiết bị tớ với nhau. Truyền dữ liệu theo chuẩn I2C.
9 - R là điện trở nối lên nguồn nuôi VDD. Hệ thống các thiết bị giao tiếp theo chuẩn I2C. Chuẩn giao tiếp I2C có 2 đường tín hiệu tên là SDA (serial data) có chức năng truyền tải dữ liệu và tín hiệu SCL (serial clock) truyền tải xung clock để dịch chuyển dữ liệu. Trong hệ thống truyền dữ liệu I2C, thiết bị nào cung cấp xung clock thì được gọi là chủ (master), thiết bị nhận xung clock được gọi là tớ (slave).
Mỗi dây SDA hay 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 (pull‐up 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ở (open‐drain or open‐collector). 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. Thiết bị chủ chỉ có 1, thiết bị tớ thì có nhiều, mỗi thiết bị tớ sẽ có 1 địa chỉ độc lập, chuẩn truyền ban đầu dùng địa chỉ 7 bit nên có thể 1 chuẩn giao tiếp với 128 thiết bị tớ.
Các thiết bị sau này tăng thêm số bit địa chỉ nên có thể giao tiếp nhiều hơn. Địa chỉ của thiết bị tớ thường do nhà chế tạo thiết bị thiết lập sẵn. Trình từ truyền bit trên đường truyền: 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.
Sau đó, thiết bị chủ sẽ gửi đi một địa chỉ của thiết bị tớ mà thiết bị chủ muốn giao tiếp và cờ đọc/ghi dữ liệu. Thiết bị tớ mang địa chỉ đó trên bus I2C sẽ phản hồi lại bằng một xung ACK. Khi đó, việc giao tiếp giữa thiết bị chủ - tớ bắt đầu. Bộ truyền gửi 8 bit dữ liệu đến bộ nhận, bộ nhận trả lời với 1 bit ACK.
Để kết thúc, thiết bị chủ tạo ra một điều kiện STOP. Bus I2C chuẩn truyền 8‐bit dữ liệu có hướng trên đường truyền với tốc độ là 100Kbits/s – Chế độ chuẩn (Standard mode). Tốc độ truyền có thể lên tới 10 400Kbits/s – Chế độ nhanh (Fast mode) và cao nhất là 3,4Mbits/s – Chế độ cao tốc (High‐speed 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) Hình 1.
Chế độ một chủ nhiều tớ. Chế độ nhiều chủ nhiều tớ. - Bit Read/Write: Bit này dùng để xác định quá trình là truyền hay nhận dữ liệu từ thiết bị Master. Nếu Master gửi dữ liệu đi thì ứng với bit này bằng ‘0’, và ngược lại, nhận dữ liệu khi bit này bằng ‘1’.
11 - Bit ACK/NACK: Viết tắt của Acknowledged / Not Acknowledged. Dùng để so sánh bit địa chỉ vật lý của thiết bị so với địa chỉ được gửi tới. Nếu trùng thì Slave sẽ được đặt bằng ‘0’ và ngược lại, nếu không thì mặc định bằng ‘1’. - Khối bit dữ liệu: Gồm 8 bit và được thiết lập bởi thiết bị gửi truyền đến thiết bị nhân.
Sau khi các bit này được gửi đi, lập tức 1 bit ACK/NACK được gửi ngay theo sau để xác nhận rằng thiết bị nhận đã nhận được dữ liệu thành công hay chưa. Nếu nhận thành công thì bit ACK/NACK được set bằng ‘0’ và ngược lại. Quá trình truyền nhận dữ liệu: - Bắt đầu: Thiết bị Master sẽ gửi đi 1 xung Start bằng cách kéo lần lượt các đường SDA, SCL từ mức 1 xuống 0. - Tiếp theo đó, Master gửi đi 7 bit địa chỉ tới Slave muốn giao tiếp cùng với bit Read/Write.
- Slave sẽ so sánh địa chỉ vật lý với địa chỉ vừa được gửi tới. Nếu trùng khớp, Slave sẽ xác nhận bằng cách kéo đường SDA xuống 0 và set bit ACK/NACK bằng ‘0’. Nếu không trùng khớp thì SDA và bit ACK/NACK đều mặc định bằng ‘1’. 12 - Thiết bị Master sẽ gửi hoặc nhận khung bit dữ liệu.
Nếu Master gửi đến Slave thì bit Read/Write ở mức 0. Ngược lại nếu nhận thì bit này ở mức 1. - Nếu như khung dữ liệu đã được truyền đi thành công, bit ACK/NACK được set thành mức 0 để báo hiệu cho Master tiếp tục.