Mark Twain Fishing Thermometer

Keywords: #raspi #fishing #hobby

Water temperature matters a lot for fish and their behavior. So knowing the water temperature is really helpful when figuring out how you are going to fish.

At the same time, most advice given on that is based on large lake ecosystems, and often correlating season to temp for the region.

I want to science. I want to take these readings, experiment by viewing behavior and success/failure of approaches, what species do what, etc.

So I want to make something that lets me log and measure.


I may never finish this. My hobby projects are for fun. When they stop being fun I stopped forcing myself to finish. The point of a hobby is to be a rewarding and relaxing. If it turns into work, then I’m just working extra hours and not getting the purpose of being a fun and relaxing break.


The basic idea here is to have a battery powered raspberry pi setup that lets me view the temperature live, as well as log it. We’ll leverage the Mississippi River “Mark Twain” technique to do some science with fishing.



Mark Twain


Tennessee Tarpon

Parts I’m Using

USB Battery Pack

I just bought this guy: a little mini-USB battery pack. We’ll see how it works. It looks like most people keep trying to use it as a UPS, which is a terrible idea.

Seriously, if you want a UPS, buy a UPS. As I’ve described previously, I use a completely overkill 1500VA TrippLite UPS for my network gear, including a couple Raspberry Pis and a RockPro64.

But this should work well for a battery pack to get an hour or two of use out of it.


I have a waterproof DS18B20 and gave used it with Python and Go. They’re stupid easy to work with.

Raspberry Pi or Similar

Yeah, anything would work for this. I wouldn’t use a 1, because I wouldn’t use it for anything. But any other model would be fine or any of the myriad of similar boards.

You could do something similar with an Arduino, but I want to reserve the right to do things that are easier with an OS, storage, network stack, etc.

Extending the Cable

The length of the wire coming from the sensor is obviously not sufficient here. So we’ll need to extend it by splicing small wires on to the 3 leads.

And of course that will need to be waterproof. My plan is to splice, epoxy, and heat shrink wrap each lead. Then epoxy and heat shrink wrap the whole bundle. I’m looking for something with a bundle of 3-4 wires, like thermostat wire. I’m worried 18 gauge will be a little intense.

There is a consequence that will take some experimentation. You usually use a 4.7K pull up resistor. But when you add significant cabling you have to take its resistance into account. So I’ll likely need to drop to 1K. Temperature also becomes a factor there, as wire resistance is impacted by that. Fun stuff.

I may end up just needing to use 3 separate wires instead of a prefab bundle. Ugh.


There are a ton of options here from segment displays to small LCDs. I have a 7 segment LED display back from a rover project I did that I’ll reuse here.

7 seg front 7 seg back

It’s old, so it’s kind of like this but without the qwiic stuff, just the 4 pins. It’s 12C, whatever.


I’ll want buttons to turn it on and off so I’m not just burning up battery. Maybe a button to start measuring after it settles in place.

Optional: Project Box

I’ll probably mount this in some kind of project box so that it’s water resistant. That may just be a small Rubbermaid container with some silicone or something.

Mark Twain-ness

So why I call this a Mark Twain setup:

Samuel Clemens' pen name comes from a Mississippi River boat depth measuring technique. The river depth and sand bars shift and move regularly. So boats would drop a weighted rope with depth marked on it to measure and make sure they didn’t run aground. “Mark twain!” was a call to relay depth to the pilot.

Water temperature varies by depth and a variety of factors: Air temperature, sunlight, water color, the makeup of the bottom, etc.

If you’ve ever swam in deeper water, you’ve probably experienced this thermocline. It’s more predictable in large bodies of water. But I’m working with a lot of shore fishing, ponds, etc.

For docks, piers, and boat fishing, using this same method will be great. Drop it weighted into the water, use markings to hit the desired depth or find the bottom.

But for shore fishing, depth itself can be hard to tell visually as you cast further from the shore.

So I’m going to hijack my daughter’s retired little kid fishing pole and use a combination of markings on the line and a bobber to set the desired depth. I should also be able to tell if it has hit bottom by watching the bobber drift. That’s one of those “art” things you learn from experience.

The Line

I’m debating using the wiring itself as the line or using braided line as the primary line to cast and attach the bobber to, and let the wire run free. I think that would feel more like casting sinking fly line. I dunno.

The Weight

I think I’ll use a 1 or 2oz triangle weight that you would use surf casting. I have a bunch left from a trip to the Redneck Riviera. They’re heavy which will make casting from the crappy pole easier, and they sit well on the bottom without drifting.

I sometimes use them in a surf casting rig for catfish, but this will be different where it will be fixed to the line and not allow the line to drift or slide.

The Code

Decision tree for language:


Embedded stuff isn’t terrible in C. Rarely malloc() and free() or use strings. Usually just bit banging and integers. But I don’t have the patience for it much anymore, even with the Arduino .ino flavor. It’s just too easy to make a mistake that’s hard to catch until it blows up.


Python + Raspberry Pi is pretty easy. So many canned libraries and easy to sketch in.

But it’s also easy to run into runtime problems, and the library stack for a project can get pretty huge.

Efficiency is not an issue in this case.

I’m thinking I’ll at least do a first cut in it for ease, and may just leave it there.


I’ve been using Go a lot more on these small boards. I strip debugging symbols and compress the binaries with upx to not chew up disk with them.

I really like that you catch most issues at compile time, I get that nice C feeling without the foot guns.

I’ll scout out doing I2C for the display to see if it’s what I want to just start with, or do a “production” version with it after a Python first-cut. If the latter, I may never get around to it.

Sharing the Code

If I really do this, I’ll share the code on GitHub using the most liberal license my dependencies will allow. I’ll try to update that here.