2
\$\begingroup\$

I have seen this in several schematics which i assume are professional since they are for popular open-source products.

arduino to esp rx tx

But i can't figure out why there is a 470 Ohms resistor in series between the RX pin of the Arduino and the TX pin of the ESP8266? Can someone please explain? Why choose this specific value since i see the same value resistor used in many schematics between the Arduino and the ESP8266?

I was also puzzling over the need for the potential divider but then i did some research and i found that there is a need for a logic-level shifter between the Arduino TX and the ESP8266 RX data line. But i can't find anything on the 470 Ohms series resistor.

\$\endgroup\$
  • 1
    \$\begingroup\$ It might just be to manage reflections. The value seems to be too high though for an actual series termination and such a thing tends not to be necessary for a UART. It could just be to slow down rise and fall times to manage noise. \$\endgroup\$ – DKNguyen Apr 10 at 19:32
  • \$\begingroup\$ which i assume are professional since they are for popular open-source products - roflmao :P You'd be surprised by the $%&#%* which makes its way into even paid-for commercial products - open-source has an even wider range of "quality". \$\endgroup\$ – brhans Apr 10 at 20:25
  • \$\begingroup\$ @brhans Remember the Arduino shield header alignment screw-up that has propagated into every subsequent Arduino for the sake of backwards compatibility? \$\endgroup\$ – DKNguyen Apr 10 at 20:28
2
\$\begingroup\$

The resistors are there because the RX/TX pins on the Arduino processor are used for multiple functions and also use 5V signals:

1) The 470 ohm resistor on the receive line is for when the ESP8266 is driving the Arduino - it is also driven by a USB to Async bridge (FTDI FT232 or similar) that also drives the line through a resistor. On the Uno it is a 1K resistor so the ESP8266 feed needs to be less than that but high enough to avoid excessive current if the FT232 is driving the processor with the ESP8266 output enabled. This could occur during programming of the Arduino.

2) The 1k/2.2k divider on the TX line is to reduce the 5V signal from the Arduino to the 3.3V maximum level that the ESP8266 requires. The resistors need to be low enough to pass signals up to the maximum speed but high enough to be easily driven by the Arduino.

When the Atmega328 is being programmed over USB it is necessary that the ESP8266 TX output is in high impedance (such as by holding it in reset) to allow the FT232 to communicate with the ATmega328.

\$\endgroup\$
  • \$\begingroup\$ Maybe... but generally speaking projects that try to use an ATmega328 Arduino's hardware UART to connect an ESP8266 are bad ideas to begin with, as they make serial debug unavailable. \$\endgroup\$ – Chris Stratton Apr 10 at 21:15
  • \$\begingroup\$ @ChrisStratton Agreed - Annoyingly the ATmega328 on most Arduino boards only has a single UART that complicates things - a soft UART could be used with some limitations. \$\endgroup\$ – Kevin White Apr 11 at 2:04
  • \$\begingroup\$ First, thank you all for the helpful responses. It is much appreciated. To make sure that i understood it correctly - the purpose of the 470 Ohms resistor is to avoid the specific case scenario when the Rx of the Arduino is set as an output instead of input, and a high (potentially damaging to the Arduino) current would flow from the Tx of the ESP8266 when it is being powered/programmed by the FT232 FTDI USB 3.3V 5.5V to TTL Serial Adapter. So, if the FTDI is not connected, then the risk of a high/damaging current to the Arduino would not exist, since the ESP8266 is powered with only 3.3 V? \$\endgroup\$ – WiredMaker Apr 11 at 2:54
  • \$\begingroup\$ @WiredMaker - it depends upon which Arduino model you're using. On the UNO the FTDI is permanently connected with 1k series resistors. What are you using? \$\endgroup\$ – Kevin White Apr 11 at 3:16
  • \$\begingroup\$ I'm using an Arduino Nano v3. \$\endgroup\$ – WiredMaker Apr 11 at 14:00
1
\$\begingroup\$

This is likely to be because the people who designed this assume that Arduino users will make mistakes, as it is an educational tool. If the user configures the pins to set them both as outputs and have one being HIGH, and one being LOW then there's a short circuit. The 470 \$\Omega\$ resistor limits the short circuit current so nothing's damaged.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.