Monday, January25, 2021
Privacy Policy

DIY Boat Monitoring Software

Arduino code

I have posted the setup function that controls the entire monitor below. You can see from the image above that there are many modules called by this main thread. The code executes once and then sleeps. Each module has a function, for example reading the voltage. I believe I have given enough information in the course of this article for you to write the modules that will do the things you want to do for your boat. The important thing is to have a structure to put the modules in and I am posting that, without any warranty etc etc. This project is your responsibility and you will have to make it work. I am happy to answer questions. Just use the CONTACT form.

The two significant modules are the WiFi send module which you can basically get from the link I gave in the WiFi section and the Voltage Measurement HERE. If you want to send email with a G2 netwrok please read the article on Sending email with ESP32-SIM800 HERE.

#include "ESP32_MailClient.h"
#include "definitions.h"
//#define DEBUG
#define  MOREEMAIL
#define VERSION "11"
#define UNIT 2
// note, time goal was changed. 2 changes

 * HERE is the program
void setup(){
  delay(100);  // wait for serial to process
  digitalWrite(LED_BUILTIN, ON);
  // measure time and check if just powered up
  time(&now);// the timer count for now in seconds
  if( now < 100) delay(2000); //let things settle when power first applied

  //Print the wakeup reason for ESP32
  wakeup_reason = esp_sleep_get_wakeup_cause();


  if( checkMainPower() == ON){// basically turn unit off if going sailing
  //Test for problems. A problem will send an email on the next half hour or sooner if it was from an interrupt



  if( checkPumps()== ON){
    Serial.println("Large Pump went on");

  // test if time of day to send status
  Serial.println("time is " + String(now));
  Serial.println("target time is " + String(targetTime));

  if (now >= targetTime){ //this is the once a day message, clear problem sent flats
    clearFlags = TRUE;

  if(now >= targetTime || problem){
    targetTime = sendEmail(voltageBat1,voltageBat2,pumpRunTime,message);
    Serial.print("Send this many hours from now: ");
    Serial.println( (double)(targetTime - now) / (60*60));
  else Serial.println("not time to send email yet");

  /* The unit will sleep for half an hour (typically) if the email was sent.
  If the email was not sent, it will wait 5 minutes. It will retry MAX_RETRY 
  times and then give up. When the unit wakes up past the target email time, 
  and email will be sent. If the email was not sent, the target time will 
  cause an emial to be sent.

void loop() {
  //nothing in here as sketch never gets here. It goes to sleep.


Cookie Policy:
This website uses cookies to save your settings. No personal information is saved. I do not collect statistics on your visit. You can disable cookies in your browser if you like but it is not recommended for this site. I do not sell cookies. Go to a bakery for that. In fact I do not sell anything. To disable cookies from, please refer to the Help button in your browser.
Privacy Policy:
I do not sell or share any user data or anything else for that matter. The only personal information I save is in the site log which has a line for each page view which includes the IP address your browser sends in the header as well as which page you requested. I use this to block hackers and other bad actors. I do not use this raw data to create profiles on users. I periodically delete the log files. Google supplies the ads on this site. Because I do not track who you are, I cannot customize how these ads are served. They may be personalized to improve the ad experience. If you do not want personalized ads, please adjust the settings on the Google site HERE. NOTE: The best I can determine, this site is not subject to CCPA but I am doing my best to comply anyway.
The information on this web site has not been checked for accuracy. It is for entertainment purposes only and should be independently verified before using for any other reason. There are five sources. 1) Documents and manuals from a variety of sources. These have not been checked for accuracy and in many cases have not even been read by anyone associated with I have no idea of they are useful or accurate, I leave that to the reader. 2) Articles others have written and submitted. If you have questions on these, please contact the author. 3) Articles that represent my personal opinions. These are intended to promote thought and for entertainment. These are not intended to be fact, they are my opinions. 4) Small programs that generate result presented on a web page. Like any computer program, these may and in some cases do have errors. Almost all of these also make simplifying assumptions so they are not totally accurate even if there are no errors. Please verify all results. 5) Weather information is from numerous of sources and is presented automatically. It is not checked for accuracy either by anyone at or by the source which is typically the US Government. See the NOAA web site for their disclaimer. Finally, tide and current data on this site is from 2007 and 2008 data bases, which may contain even older data. Changes in harbors due to building or dredging change tides and currents and for that reason many of the locations presented are no longer supported by newer data bases. For example, there is very little tidal current data in newer data bases so current data is likely wrong to some extent. This data is NOT FOR NAVIGATION. See the XTide disclaimer for details. In addition, tide and current are influenced by storms, river flow, and other factors beyond the ability of any predictive program.