GPIO esp8266

Digital I/O

Tên của GPIO được sử sụng trực tiếp tương tự như Arduino với các hàm sau: pinMode, digitalRead và digitalWrite:

pinMode

Mặc định khi esp8266 khi khởi động sẽ set các GPIO ở trạng thái INPUT, vì vậy tùy theo mục đích sử dụng GPIO các bạn nên set chức năng cho chúng trong hàm setup hoặc các hàm muốn sử dụng đến GPIO theo cú pháp:

loading...
pinMode(pin number, mode);
VD: pinMode(1, INPUT);

Các GPIO 0 – 15 có các mode: INPUT, OUTPUT, INPUT_PULLUP

GPIO6 có các mode: INPUT, OUTPUT, INPUT_PULLDOWN

Chú ý: khi sử dụng mode INPUT_PULLUP, hoặc INPUT_PULLDOWN để chọn điện trở kéo lên hoặc kéo xuống tránh nhầm lẫn giữa các GPIO.

digitalRead

Hàm này có chức năng đọc về trạng thái của GPIO và trả về HIGH / 1 nếu GPIO đó ở mức logic 1 và LOW / 0 nếu nó ở mức 0. Chú ý là nó sử dụng được cho GPIO ở cả trạng thái INPUT và OUTPUT. Sử dụng theo cú pháp:

digitalRead(pin number);
VD: digitalRead(1);

digitalWrite

Hàm này có chức năng set trạng thái của GPIO. Chú ý là nó sử dụng được cho GPIO ở trạng thái  OUTPUT, hãy chắc chắn đã sử dụng pinMode OUTPUT trước khi sử dụng nó. Sử dụng theo cú pháp:

digitalWrite(pin number, value);  // value = HIGH or LOW
VD: digitalWrite(1, HIGH);

Analog input

ESP8266 chỉ có duy nhất 1 GPIO để chuyển đổi ADC, nó có 2 chức năng( chú ý chỉ dùng 1 trong 2):

  • Đọc giá tri điện áp nguồn (VCC) sử dụng qua hàm setup: ADC_MODE(ADC_VCC) và đọc giá trị thông qua hàm ESP.getVcc(), chú ý GPIO ADC không được kết nối tới bất kỳ đâu.
  • Đọc giá trị điện áp ngoài đặt lên ADC GPIO ( => ADC chính hiệu), đọc giá trị bằng hàm: analogRead(A0). Chú ý quan trọng: điện áp để đọc ADC nằm trong khoảng 0 – 1V

Analog output

Thực ra Tearm sáng lập ra Arduino đặt tên chức năng là “Analog output” có vẻ không hay cho lắm, vì nó dễ gây ra hiểu lầm là chức năng DAC tuy nhiên thực tế nó là bộ băm xung PWM như các dòng vi điều khiển khác. Để sử dụng hết sức đơn giản, dùng hàm analogWrite(pin, value) với:

  • pin: 0 – 16: tương ứng với GPIO0 – 16
  • value: 0 – PWMRANGE, mặc định PWMRANGE = 1023, có thể thay đổi PWMRANGE  thông qua hàm analogWriteRange(new_range)
  • tần số xung mặc định là 1kHz, sử dụng hàm analogWriteFreq(new_frequency) nếu muốn set tần số khác.

Các chuẩn giao tiếp ngoại vi

Ngoài tính năng logic tại các GPIO, chúng còn được tích hợp các chuẩn giao tiếp phổ biến như Serial, I2C, SPI, và các GPIO sử dụng cho các giao tiếp đó liệt kê trong datasheet. Dưới đây là datasheet của dòng ESP8266 rất phổ biến: ESP12

esp12-pinout

Các GPIO 6 – 11 không thấy trong hình vì chúng được sử dụng để kết nối với bộ nhớ Flash, bản thân esp8266 không có bộ nhớ chương trình nên nó cần tới bộ nhớ ngoài này. Tất cả các module esp8266 ngoài thị trường đều tích hợp sẵn chip Flash này nên các bạn đừng quá lo lắng. Và chú ý rất quan trọng là đa số chip Flash hoạt động ở mode QIO nên trong các hàm hay dự án của các bạn không được sử dụng những GPIO này, nó có thể phá hỏng chip Flash.

Ở một số board hoặc module( như: ESP-12ED, NodeMCU 1.0)  chip Flash hoạt động ở mode DIO nên được ra chân sẵn 2 GPIO 9 và 11, bạn có thể sử dụng chúng bình thường.

Ngắt ngoài

ESP8266 hỗ trợ ngắt ngoài ở hầu hết các GPIO ngoại trừ GPIO16, hỗ trợ các sườn ngắt: CHANGE, RISING, FALLING. Dễ dàng sử dụng thông qua các hàm attachInterrupt, detachInterrupt của Arduino.

[xyz-ihs snippet=”Adnow5x1″]

[xyz-ihs snippet=”Adnow1x5Mobile”]

Gửi phản hồi

Website này sử dụng Akismet để hạn chế spam. Tìm hiểu bình luận của bạn được duyệt như thế nào.