Fair warning: I'm an electronics n00b.
I'm trying to get an Arduino Uno R3 to send data over 9600 baud serial to a Wemos D1 Mini Pro.
What worked (mostly):
Powering (5V) Arduino off a 4 AA barrel jack battery pack. Measured voltage between Vin and GND as ~4.5V (the batteries were somewhat old). 4.5V is low enough to be safe as 5V input for the (3.3V) Wemos, which can be powered off its 5V pin (it's the input to the board's 3.3V regulator). I tied the Arduino's GND and Wemos's, took the Arduino's Vin pin to Wemos's 5V pin (providing it ~4.5V), and connected Arduino's TX to Wemos's RX via a voltage divider (a 2.2 kΩ resistor and a 4.7 kΩ; verified <3.3V with a multimeter).
And, everything worked, for a few brief, glorious minutes. Arduino sent 1 byte over serial every 3 seconds, alternating the builtin LED each time. Wemos read them and served up a web page showing the latest values. But, after a few minutes, the Wemos started to read data the Arduino shouldn't be sending (0x00 bytes; the Arduino program was only sending uppercase ascii letters). I noticed that the Arduino builtin LED, that's supposed to be alternating every 3s, was blinking rapidly. I think I drained the batteries too far to provide both the Wemos and the Arduino with enough power, and the Arduino got stuck in a boot cycle (and I suppose it's sending 0x00 over its TX pin while booting).
What didn't work:
Since changing batteries frequently would be a pain, I tried plugging the Wemos into a micro USB wall adaptor, and the Arduino into a 12V 1A barrel jack wall wart, and unplugging Arduino's Vin from Wemos's 5V (leaving GND tied together). Plugged both adaptors into a single power strip, and turned it on. Both boards powered up, and were running their programs (I could connect to the Wemos over WiFi and it would serve me a page; the Arduino builtin LED was alternating every 3 seconds as expected). A multimeter read the voltage between Wemos RX and GND as 3.34V, but the Wemos wasn't receiving any serial data.
After that experiment, I switched back to the battery pack, wired Arduino Vin to Wemos 5V again, swapped out 2 of the 4 batteries, and everything works.
I powered a 5V Arduino off 12V and a 3.3V Wemos off 5V, and the Wemos couldn't read serial data being transmitted by the Arduino. When I powered them both off a 4.8V battery pack, everything worked. Why didn't it work when they had separate supplies and a common ground?
Sorry for the wordy question; I'm confused enough to not know which details are relevant!