Hỏi về Broad mở rộng chân IO PCF8574 dùng cho ESP8266

Em có Broad mở rộng chân IO PCF8574 dùng cho ESP8266 em loay hoay test hoài mà vẫn chưa thành công mong mọi người chỉ bảo giúp em
sơ đồ chân e nối :
VCC - 3.3v
GND -GND
SDA - GPIO 4
SCL - GPIO 5
SDA, SCL nối qua điện trở 10 Oom kéo lên VCC
em test qua 2 con LEd nối vào chân P0, P1
https://drive.google.com/file/d/1sfxPvJAv4sJr1Ob2ThL-NdSLe3qUzV-t/view?usp=sharing

  1. Tại sao lại nối SDA và SCL vào GPIO4 và GPIO5?
  2. Dùng trở 10 Ohm là sai, phải dùng trở 10k
  3. Code của bạn là một chân đọc button, 1 chân output ra LED, tại sao bạn lại nối vào 2 con LED?
  4. Bạn có hiểu mình rõ đang làm gì không? Hay là làm theo hướng dẫn ở đâu đó và thử nghiệm?
5 Likes

đầu tiên cảm ơn bạn đã quan tâm câu hỏi của em.
Tiếp là 10k ôm em viết thiếu , và code e tham khảo trên trang web tiếng anh có demo băng hình ảnh nên làm theo. em Muốn mở rộng thêm chân GPIO cho Esp8266 a có cách nào tốt hơn gợi ý cho em để e thực hành .

Mình upload lại source code của bạn lên đây cho mọi người dễ tham khảo:

#include "Arduino.h"
#include "PCF8574.h"

// Set i2c HEX address
PCF8574 pcf8574(0x20);//Cấu hình địa chỉ I2C
unsigned long timeElapsed;

void setup(){
  Serial.begin(115200);

  pcf8574.pinMode(P0, INPUT);
  pcf8574.pinMode(P1, OUTPUT);

  pcf8574.begin();
}

void loop(){
  uint8_t val = pcf8574.digitalRead(P1);            // Read the value of pin P0        
  if (val == HIGH)  pcf8574.digitalWrite(P0, HIGH); // If Button is Pressed
  else              pcf8574.digitalWrite(P0, LOW);  // When Button is Released
  delay(50);
}

  1. Bạn chưa trả lời câu hỏi này:
  1. Bạn có thể chụp hình thực tế và schematic mạch của bạn hay không?
    Hình bạn upload lên không thể hiện đúng và đầy đủ mô tả ban đầu của bạn.

  2. Bạn có chắc rằng bạn có thể điều khiển được con ESP8266 không? Ví dụ như bạn có thể bật tắt LED thông qua GPIO của nó? Việc này để chắc rằng bạn không chọn sai config cho compiler của bạn (mình đoán là Arduino IDE).

  3. P0P1 của bạn define là gì?

Bạn vui lòng đọc kỹ và trả lời từng câu rõ ràng.

4 Likes

Cảm thấy chững hững khi người ta chạy mất. :mask:

3 Likes

pcf8574.pinMode(P0, INPUT) => pcf8574.digitalWrite(P0, HIGH); ???
tại sao cấu hình là input mà lại write vậy ạ
bạn giải thích giúp mình với

Có vẻ 2 chân P0 và P1 của bạn đang bị đảo nhau.
Theo mình nhìn thì HIGH ở đây đc define là 1 hả?? Thử kiểm tra if (pcf8574.digitalRead(P1)== HIGH) xem sao.

Do người ta code sai đó bạn. :rofl:
Trong thực tế thì có một trường hợp mà bạn phải write HIGH vào chân INPUT, để cho nó giữ mức cao lúc init là không bị Floating. Nhưng việc này tùy thuộc vào loại chip đang sử dụng.

Trong trường hợp cụ thể này thì code đó bị sai, và code đó của bạn kia chứ không phải của mình. Mình chỉ cố hướng dẫn bạn ấy debug nhưng bạn ấy chỉ hỏi và chạy mất.

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?