I did a quick test with a laptop(Putty) and Arduino in the vehicle and was able to to get OBD info, so I guess the connections are fine. And the 1996 Ram even started afterwards. I added some new handling for 'SEARCHING...' after this. Looks like there's a bunch of parsing to do depending on what you actually want to implement. The data can be bit-fields or values and are dependent on the mode/pid.

***
atsp0 -->
OK
***
atdp -->
AUTO
***
01 00 -->
5000
*** TIMEOUT!
SEARCHING...
***
01 00 -->
*** send(): chars are still available!
524932484832666932516932665632495232131362***
41 00 BE 3E B8 14
***
atdp -->
AUTO, ISO 9141-2
***
01 01 -->
41 01 83 07 61 21
***
01 03 -->
41 03 00 00
***
01 04 -->
41 04 00
***
01 05 -->
41 05 31
***
01 06 -->
41 06 80
***
01 07 -->
41 07 80
***
01 0B -->
41 0B 1F
***
01 0C -->
41 0C 00 00
***
01 0D -->
41 0D 00
***

I wrote some simple ESP8266 code using the same Arduino OBD library and a basic server to display a log, looping on ATI (info) requests. I loaded it on a NodeMCU board and stuck it on a breadboard with a Sparkfun TXB0104 breakout. It failed - first with spurious resets (forgot about NOT powering from a computer USB port), and then totally bad comm data. I switched to a Sparkfun BOB-12009 level converter, and it's working. I guess that's good enough for now. I assume the TXB0104 is too weak.

This project is leaving the Dark Ages and is going to use websockets for bidi communication. I pulled in an Arduino/ESP8266 lib and made some small changes and it's working pretty well. The initial static data is served normally and then all comm is over a websocket with JSON data. The console is sending commands and receiving responses, but I'll have to get everything running on a single power supply and try it in a vehicle again. Then I can do some looping on real PID commands.