I agree a MOSFET is probably a better choice because they can carry more current with less heat. (The calculations/approximations are easier for a MOSFET.) But with a MOSFET 3.3V may not be enough to turn it fully-on and you'll probably need a transistor or another MOSFET (and a higher voltage source) to drive it.
With an NPN transistor's datasheet, find the base resistance I need to use that will make the emitter output enough current to fully light up a channel in the LED strip
If a single transistor will not be able to achieve the desired current, how do I calculate the same as above but using a Darlington pair?
I assume you know Ohm's Law?
The Base-Emitter saturation voltage is about 0.7V, so as an approximation we can assume (pretend) that you'll have ~5V across the base resistor and we can calculate the base current from Ohm's Law.
A transistor is a current amplifier. The current gain is the Beta specification on the datasheet. If the Beta is 100, we need at least 1/100th of the collector-emitter current into the base. For example, if we need 10 Amps, we'll need at least 100mA into the base. 5V/0.1A = 50 Ohms. But since we want to make darn-sure we fully-saturate the transistor, we'd want to use 25 Ohms or less.
With a Darlington the Betas are multiplied and the TIP121 is specified at 2500 (so you can use a higher-value base resistor).
- How many LEDs can 1 Arduino (specifically an ESP8266) control before we see some kind of lag?
I don't know but I'd be concerned about that too... There are 3 factors...
-
How fast can the LED strips operate? What's the data-rate/bitrate and how many bits/bytes does it take to "command" an LED?
-
How fast can the Arduino transmit serial data?
-
How much other processing is the Arduino doing and how much does that slow-down data transmission? (That would have to be done experimentally... Run something like 100,000 or 1 million loops and check the millis() timer to see how fast it's running.)
Another factor could be memory... The current on/off state of 2000 LEDs requires 2000 bits (250 bytes) or with 8-bit dimming it's 2000 bytes. Of course, the LED strips have their own memory so depending on what your doing you might not need to save that in RAM. Or, you may need to save multiple "patterns" and you may need even more memory.
Also, if you put a bunch of neopixel strips in a string a failure or bad connection anywhere along the string will shut-down ALL of the following LEDs.