@han I think you're mixing up several different topics:
monitoring that LED (or rather the signal that drives that LED, I suppose?)
For the monitoring part, it depends on the lengths you are considering. You could probably simply use interrupts to detect when the signal goes up or low, and compute the time difference to find the length of the pulse.
What kind of battery are you using? An active LoPy draws about 50 mA even when doing nothing, so even a 5000 mAh battery would only last 4 days without deep sleep.
Light sleep would help you save a bit, but you would still be talking about days or weeks, not months, unless you really have a very large battery, or have an external power supply.
If you don't use deep sleep you don't need to nvram_save/restore.
If you do go to deep sleep, you'll need to wake on pin to wake up when the LED lights up, but you may have issues measuring the first pulse, so I hope it is repeated...
Short between G28 and 3V3 it's for safe-boot (booting without executing micropython scrips or loading previous OTA firmware). This is not required.
Let's simplify and isolate problems.
upload scripts with Atom
Here make a simple print("hello") , no UART usage, yet; it should work
usage of UART class.
Here if you just want to output messages, print() method should be enough. UART 0 is already indirected to P0/P1, thru print(). The second UART (#1), it's for communicating with another device connected to the Expansion Board (not with the USB/FTDI chip).