Ian Zahn
Published © CC BY

Christmas Tree Water Level via Cayenne and MKR1000

When you have a 'real' Christmas tree, it is important to keep it watered. This project monitors the water level and emails alerts.

BeginnerShowcase (no instructions)3 hours3,669

Things used in this project

Hardware components

Arduino MKR1000
Arduino MKR1000
water level sensor
LED (generic)
LED (generic)
Resistor 220 ohm
Resistor 220 ohm
Jumper wires (generic)
Jumper wires (generic)
Breadboard (generic)
Breadboard (generic)
USB-A to Micro-USB Cable
USB-A to Micro-USB Cable

Software apps and online services

Arduino IDE
Arduino IDE
Arduino Web Editor
Arduino Web Editor
myDevices Cayenne


Read more


Fritzing breadboard layout


Christmas tree water level code

Cayenne MKR1000 Example

This sketch connects to the Cayenne server using an Arduino/Genuino MKR1000 and runs the main communication loop.

The Cayenne Library is required to run this sketch. If you have not already done so you can install it from the Arduino IDE Library Manager.

1. Install the Arduino SAMD Boards from the Arduino Boards Manager if you have not done so already.
2. Install the WiFi101 library (https://github.com/arduino-libraries/WiFi101) from the Arduino Library Manager if you have not done so already.
3. Select the Arduino/Genuino MKR1000 board and the correct port in the Arduino IDE.
4. Set the token variable to match the Arduino token from the Dashboard.
5. Set the network name and password.
6. Compile and upload this sketch.

For Cayenne Dashboard widgets using digital or analog pins this sketch will automatically
send data on those pins to the Cayenne server. If the widgets use Virtual Pins, data
should be sent to those pins using virtualWrites. Examples for sending and receiving
Virtual Pin data are under the Basics folder.

#define CAYENNE_DEBUG         // Uncomment to show debug messages
#define CAYENNE_PRINT Serial  // Comment this out to disable prints and save space
#include <CayenneMKR1000.h>

// Cayenne authentication token. This should be obtained from the Cayenne Dashboard.
char token[] = "put your token here";
// Your network name and password.
char ssid[] = "put your ssid here";
char password[] = "put your wifi password here";

int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 5;

void setup()
  // initialize the digital pins as an outputs.
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  Cayenne.begin(token, ssid, password);

void loop()

  // read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  // print out the value you read:
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);
  digitalWrite(led3, LOW);
  digitalWrite(led4, LOW);
  if (sensorValue > 10) {digitalWrite(led1, HIGH); }
  if (sensorValue > 250) {digitalWrite(led2, HIGH); }
  if (sensorValue > 350) {digitalWrite(led3, HIGH); }
  if (sensorValue > 390) {digitalWrite(led4, HIGH); }

  delay(250);        // delay in between reads for stability

// These functions are called when the Cayenne widget requests data for the Virtual Pin.
  Cayenne.virtualWrite(V0, analogRead(A0));

create.arduino.cc code

Opens code in the Arduino Web Editor


Ian Zahn

Ian Zahn

2 projects • 5 followers
I've been tinkering with electronics for the better part of 40 years, I've learned it is good to keep the smoke inside.