Crocodile Solar Pool Sensor




This instructable shows how to build a rather special pool sensor measuring the pool temperature and transmitting it via WiFi to Blynk App and to a MQTT broker. I call it the "Crocodile Solar Pool Sensor".

It uses the Arduino programming environment and an ESP8266 board (Wemos D1 mini pro).

What's so special about this project?

  • The look is just great
  • Fully independent from power sources (solar panel feeds the LiPo battery)
  • Low power ESP8266 WiFi connected sensor
  • Rather high precision temperature sensor
  • Data transmission of temp and voltage to Blynk APP for your mobile phone
  • Data transmission of temp and voltage to a MQTT broker
  • Can be reprogrammed

Your skill level: intermediate to experienced


For this build you will need to know how work with:

  • Arduino IDE (programming environment)
  • a soldering iron
  • a drill
  • a sharp knife
  • epoxy glue
  • hot glue
  • industrial spray foam
  • spray color

Step 1: Components Needed

These things are needed to build this nice pool sensor:


  • Insolating foam sealant @ DIY market or here: (Amazon)
  • Waterproof paint @ DIY market or here: (Amazon)
  • Filler primer spray @ DIY market or here: (Amazon)
  • Car paint spray for finishing @ DIY market
  • 5 Minutes 2 component epoxy glue (Aliexpress)
  • Hot glue

You might need to use a 3D printer to print a waterproof cover for the USB port.

Step 2: Electronics

I thought it is easiest to start with some of these DIY universal prototype PCBs and I found that a 5x7cm is just perfect for this purpose.

Building steps:

  1. Prepare the D1 mini pro for using an external antenna:
    1. Unsolder 0 Ohm resistor next to ceramic antenna
    2. Turn 0 Ohm resistor downwards and solder the connection to external antenna (good explanation found here - Step5)
  2. Place the parts and decide for the layout on the prototype PCB before you start soldering
  3. Solder the the pins to the D1 mini pro
  4. Solder the standoff pins to the prototype board
  5. Solder the pins for the charger board to the prototype PCB
  6. Solder the charger board to the pins
  7. Cut the cable of the temperature sensor to a length of 20 cm
  8. Please see image above for connecting the temperature sensor
  9. Solder the cable to the solar panel
  10. DO NOT YET solder the solar panel cables to the board - these need to be glued first to the crocodile's head
  11. Follow the Fritzing schema above to solder all the remaining connections to the PCB
  12. Once all components are connected and soldered use some hot glue to fix the battery

    Please note: For putting the ESP8266 to sleep it is necessary to connect pin D1 with pin RST. Sometimes the D1 mini pro causes problems with the serial port if port D0 and RST are connected. The one I used (see Aliexpress link above) did not have this problem.
    If you are facing this problem you might need to use a jumper or a switch to deconnect the two pins for uploading new code. But (!) then you have no chance to reprogram once the crocodile head has been sealed. In this case you also do not need to bring the USB port to the outside (e.g. to drill a third hole).

Step 3: Hardware Part 1 (Preparation of the Crocodile Head)

In this step we prepare the backside of the crocodile head to get enough space for the electronics. And we are drilling some holes for the antenna, the solar panel and the USB port.

I planned my project first without the USB port. But then I thought that it would be impossible for me to do some software updates once the crocodile has been sealed again. Therefore I decided to use a short USB cable micro-USB to USB to allow an outside access to the ESP8266 board.

Next steps to do:

  • Use a sharp knife to cut a little more than 7x5 cm (size of your prototype board) off the hard surface
  • Use a spoon to remove the softer foam from the inside
  • Just make sure that you have enough space for your cables and your board
  • Try out if it fits and that there is still some space to cover it later

Now drill two or three holes into the head:

  • for the solar panel
  • for the antenna
  • (optional) for the USB port for enabling later programming

Use 2 component epoxy (5 minutes) to glue and seal these holes again. Use enough epoxy glue! Make sure that it will be waterproof afterwards!

  1. Glue the solar panel cable to the head and properly seal the hole
  2. Glue the solar panel between the eyes
  3. Glue the antenna socket to the head and properly seal the hole
  4. Glue the USB plug and properly seal the hole

To avoid any water causing corrosion to the USB port I 3D-printed a little protective cap.

Step 4: Software

You need to have a running Arduino environment. If not, please check this.

Hardware setup is straight forward (on my Mac):

LOLIN(WEMOS) D1 mini Pro, 80 MHz, Flash, 16M (14M SPIFFS), v2 Lower Memory, Disable, None, Only Sketch, 921600 on /dev/cu.SLAB_USBtoUART

Get the Arduino code here:Arduino code at Github

The code is sending the temperature and the voltage of the battery to Blynk. Just load Blynk app to your mobile phone and create a new project. Blynk will send you an Auth Token for this project. Enter this token into the Settings.h file. The default settings will send

  • the temperature to VIRTUAL PIN 11
  • the voltage to VIRTUAL PIN 12

but it is easy to change these pins in the code. Just play around with all the Blynk widgets using V11 and V12 it is fun. If you are new to this just read my friend Debasish's instructable - most of this is explained there in Step19.

The software is also prepared to use a MQTT broker.

In the Settings.h there is a global variable called MQTT. This needs to be set to true or false depending if your are using MQTT or not.

In my case I am using an MQTT broker (Orange PI Zero, Mosquitto, Node-Red) and a dashboard where all my sensor data comes together. If you are new to MQTT then let Google help you to set it up.

If you are familiar with MQTT, I am pretty sure that you will understand the code.

Step 5: Hardware Part 2 (Sealing Again)

In this step we need to pack all the electronics (software loaded and tested) and seal the belly of our crocodile again. I personally see two possible solutions:

  1. Using a acrylic glass and glue it with epoxy glue waterproof to the belly. For the temperature sensor cable use a waterproof cable duct (I regret that I did not chose this option - after all I went through I would highly recommend to go this way.)
  2. Using an industrial foam and fill the gaps again, then use waterproof paint to seal. And finish it with filler and paint.

So I decided for option 2. The steps are as follows:

  1. Solder solar panel cable to the board
  2. Connect antenna cable
  3. Connect USB cable to ESP8266 board (AND NOT to the charging board)
  4. Squeeze all cable and the board into the hole
  5. Leave 5-10cm of the temperature sensor cable hanging out
  6. Use the industrial foam to fill all the gaps (Watch out - the foam expands heavily)
  7. Let it dry and cut the foam afterwards with a sharp knife
  8. Now use some waterproof paint (is used to fix roofs) and paint it all over
  9. Let it dry and use the filler paint spray to produce a hard crust (you need to do this over and over)
  10. After this dried - use some shiny car paint to give a finishing coating.
  11. Let it dry - FINISHED!

Sensors Contest

This is an entry in the
Sensors Contest



    • Sensors Contest

      Sensors Contest
    • Stone Concrete and Cement Contest

      Stone Concrete and Cement Contest
    • Paint Challenge

      Paint Challenge

    22 Discussions


    Question 18 hours ago

    Thanks for all your help so far. I'm seeing the light at the end of the tunnel (or, rather, the temperature on my iPhone)!!!

    Blynk, however, is not showing the battery voltage. In Blynk, the display settings are the same for each blynk virtual port. I am sure that I am using virtual port 12 for voltage, and that all the specs on the blynk side are the same as those for the pool temps in centigrade and farenheit. Voltage is showing up fine on the serial monitor, but is not getting to blynk.

    As always, thanks in advance.


    ********** writing data to Blynk *******************************/
    Blynk.virtualWrite(10, PoolTemp); // virtual pin 11
    Blynk.virtualWrite(11, PoolTempF); // virtual pin 10
    Blynk.virtualWrite(12, batteryVoltage); // virtual pin 12

    Serial.println("Data written to Blink ...");
    1 answer

    Reply 7 hours ago

    Hi Steve. This is rather strange, since you are saying that you see the voltage on the serial monitor. You might try other virtual pins, like 0, 1 and 2. And test again.


    2 days ago

    I wanted the monitor to report temp in Farenheit as well as Celsius. That was easy.
    After the line PoolTemp = total / numReadings;
    I modified the first line to show degrees Celsius
    and added the lines to show the temp converted to Farenheit
    Serial.print("Measured pool temperature c: ");
    Serial.print("Measured pool temperature f: ");

    2 replies

    Reply 2 days ago

    Tank you Steve - good solution. You can also add a second variable declaration like "float PoolTempF". Assign it with PoolTempF = PoolTemp*1.8+32; and send it similar to the PoolTemp variable to BLYNK or MQTT.


    2 days ago

    There is an orange button right above the comments section saying "I Made it".

    Bildschirmfoto 2019-07-14 um 12.14.44.png

    4 days ago

    I know my wife would hate the croc head; I'm building mine using an inexpensive ($7.99) floating chlorinator. I'm sealing the openings. It will also be easier to remove and replace the circuitry.

    1 reply

    4 days ago on Step 3

    Good idea! Could you add an alarm that would set off a horn if someone fell in when nobody has permission to be in the pool! Think of the lives you could save of kids, pets Good luck if you choose to except this challenge!

    1 reply

    Reply 4 days ago

    This is a good idea - and not that difficult. Will have a look how to do this. Maybe the next instructable...

    Shawn Harper

    5 days ago

    Love this! How easy would it be to add a "tilt sensor" as a means of detecting when a child has fallen into a pool? That would be a worthy upgrade.

    2 replies
    GregS278Shawn Harper

    Reply 4 days ago

    Good idea I had the same thought, great minds work alike!

    3KU_DeltaShawn Harper

    Reply 4 days ago

    I like this idea very much - it would be relatively easy to do. Needs just a sensor more and the rest is software - maybe some loudspeaker to play a siren or a rooaaarr if someone falls into the water and waves are occurring.


    4 days ago

    Very clever idea, I love it!


    4 days ago

    Needs the addition of some green plastic under the water behind it to give the impression of it's body, then a motor to make it swim around !
    I just wish I had a pool :-)


    5 days ago

    I don't have a pool but if I had one I would make one of those! Very clever. Nice way to keep people out of the pool :p


    7 days ago

    Your crocodile wins man! This is one of the best and funny things I found around in the latest months. Thanks for your sharing.

    1 reply

    Reply 6 days ago

    Thank you - yeah, would be nice winning...

    Alex in NZ

    7 days ago

    This is a great design for a sensor, but I am finding it hard to give it the thought and respect it deserves because the 'gator head is just _so_ hilarious/terrifying/creepy. Thank you for sharing such an impressive circuit design and such an amusing way for housing it. :-)

    1 reply