psvanstrom / esphome-p1reader

ESPHome custom component for reading P1 data from electricity meters.
MIT License
267 stars 116 forks source link

ESP8266 I/O 5V restistant #10

Open HenkeGoransson opened 3 years ago

HenkeGoransson commented 3 years ago

is the NPN-transistor really needed? Shouldn't it be possible to connect TX directly to RX without level shifting? Would make the entire wireing alot easier.

bortek commented 3 years ago

I am not sure if you can run w/o it. Why dont you remove it and test without it?

Anteus commented 3 years ago

Searched a bit on that too. And some report it is fine and some say it's speced at 3.3V and might fry the microcontroller but still reported it working with 5V for an extended period. But might decrease lifespan of it.

HenkeGoransson commented 3 years ago

I have a Wemos mini D1 which I plan to test this on. Can get back to you when i've tested.

weigu1 commented 3 years ago

Hi, Normally Rx is open collector. So if you use a pull-up (10k) to 3.3V, you have only 3.3V. The serial signal is inverted, but the newer core software of the ESPs is capable to invert the signal!

Serial.begin(115200, SERIAL_8N1, SERIAL_FULL, 1, true); // true inverts the signal

You find the circuit on: http://weigu.lu/microcontroller/smartyReader_P1/index.html

jdrozdnovak commented 2 years ago

Hello, Were you successful with removing the NPN?

HenkeGoransson commented 2 years ago

The D1 can handle 5v but it needs the invertion. Haven't tried what weigu1 mentioned that you can initialize it with inverted function.

jagheterfredrik commented 2 years ago

I tried with an ESP32, it worked fine with inverting there instead of using the NPN. I tried using the internal pullup resistor but I don’t think it’s large enough so I added a 10k resistor to 3.3V. I did have to use additional capacitors (2x10uF) to get the ESP32 to power correctly.

If the ESP8266 can power fine without additional caps, I think all you need is a 10k resistor.

robinelfving commented 2 years ago

Does this mean that i can connect D1 like this:

5V and RTS to 5V. Data GND and GND to GND. TX to RX and invert the pin in code.

In other words exclude the voltage divider and NPN-transistor?

jagheterfredrik commented 2 years ago

No transistor nor divider needed. Pullup resistor and a capacitor (if the energy meter doesn’t supply enough current)

robinelfving commented 2 years ago

Thank you Fredrik!

Anteus commented 1 year ago

For those who want to do the same to invert the pin in software just change uart to below. Might need to change GPIO ports if not on NodeMCU ESP8266.

logger:
  level: INFO

uart:
  id: uart_bus
  rx_pin:
    number: RX
    inverted: true
  baud_rate: 115200
  rx_buffer_size: 1024