For generic codes, get one of the cheap ELM327 units from Amazon and download a phone app. These will cover most of the common/generic OBD-II codes out there. $25-ish? I had one go bad on me, but I exchanged it and the replacement has worked fine. There are many out there. Bluetooth.
If you need vehicle-specific codes and coverage for SRS (airbag/seat belt) and ABS (anti-lock braking system and traction control) codes, the Bluedriver is what you'd want. $99, Bluetooth. Sometimes mine is a little slow to read the entire set of codes, but it is very thorough and provides me with a printable page of the results if I want it. This one is my keeper.
Autel makes a great line of scanners, but you have to purchase them carefully since they each have different capabilities. Their top scanners are into the four digits (which includes extensive diagnostics and possibly two-way communication so you can monitor and test individual circuits and sensors--basically something a repair shop would own), but they have a whole line even down to inexpensive scanners that, again, will read your common/generic OBD-II codes.
I have an Autel reader/programmer for the radio-based TPMS sensors. Very specialized tool but again, it does come in handy.