Gabriele Foddis
Published © CC BY-NC-SA

Lifely Agrumino Lemon diagnosis with display and WiFiconnect

A little firmware to run diagnostics on your Lifely Agrumino Lemon device. (Work with REV4 and REV5)

IntermediateFull instructions provided9 minutes91
Lifely Agrumino Lemon diagnosis with display and WiFiconnect

Things used in this project

Hardware components

Agrumino
Lifely Agrumino
×1
Breadboard (generic)
Breadboard (generic)
×1
Adafruit Monochrome 1.3" 128x64 OLED graphic display
×1
Micro-USB to USB Cable (Generic)
Micro-USB to USB Cable (Generic)
×1
LED (generic)
LED (generic)
Green
×1
LED (generic)
LED (generic)
Red
×1
LED (generic)
LED (generic)
Blue
×1
Resistor 220 ohm
Resistor 220 ohm
×3
Grove - 4 pin Male Jumper to Grove 4 pin Conversion Cable
Seeed Studio Grove - 4 pin Male Jumper to Grove 4 pin Conversion Cable
Alternative is a jumper wires female/male and male/male
×1

Software apps and online services

Arduino IDE
Arduino IDE
PlatformIO IDE
PlatformIO IDE

Story

Read more

Schematics

Lifely Agrumino Lemon diagnostics

Code

LifelyAgruminoLemonTesting

Arduino
/*AgruminoLemonTesting.ino - 
  Created by gabriele.foddis@lifely.cc         05/2021 last update 03/2023
  With this sketch and the Fritizing img you can try if your device work properly. 
  Testing: built-in led, GPIO connector, I2c connector, Pump Connector, Liv connector, WiFi Connection, and also... Lux, temperature and Soil Moisture sensors. 
  Look at the images in the folder library or in this link https://github.com/lifely-cc/agruminoLemonTesting 
  ******WARNING******, for this sketch need a internet connection */

#include <Arduino.h>
#include <Agrumino.h>
#include <ESP8266WiFi.h>
#include <U8g2lib.h>
#include "logo.h"  ///Lifely's logo
#define SERIAL_PORT 115200
#define CONNECTION_ATTEMPS 30

U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/U8X8_PIN_NONE);
Agrumino agrumino;

#define SSID_NAME "Lifely"///Change with your SSID" 
#define SSID_PASSWORD  "Agrumino" ///Change with your wifi password"
#define CONNECTION_ATTEMPS 30
int wifiCount = 0;
int countLogo = 0;

void wifiSetup() {

  Serial.print("Connecting to ");
  Serial.println(SSID_NAME);
  WiFi.mode(WIFI_STA);
  WiFi.begin(SSID_NAME, SSID_PASSWORD);

  while ((WiFi.status() != WL_CONNECTED) && (wifiCount < CONNECTION_ATTEMPS))
  {
    delay(500);
    wifiCount++;
    Serial.print(".");

  }

  if (wifiCount >= CONNECTION_ATTEMPS)
  {
    Serial.println("Failed to connect,....Please check your internet connection...I'm rebooting now...");
    ESP.restart();
  }
  else if (WiFi.status() == WL_CONNECTED) {

    Serial.println("I'm Connected with:"  );
    Serial.println(SSID_NAME);
    delay(100);
  }
}

void testLevel() {
  agrumino.setGPIOMode(LIV_1, GPIO_INPUT);
  int valueLiv = 0;
  valueLiv = agrumino.readGPIO(LIV_1);
  Serial.println("Level Pin is :   " + String(valueLiv));
  delay(5000);

}

void testGpio1() {
  agrumino.setGPIOMode(GPIO_1, GPIO_OUTPUT);
  agrumino.writeGPIO(GPIO_1, HIGH);
  Serial.println("Set Gpio1 HIGH");
  delay(1500);
  agrumino.writeGPIO(GPIO_1, LOW);
  Serial.println("Set Gpio1 LOW");

}

void testGpio2() {
  agrumino.setGPIOMode(GPIO_2 , GPIO_OUTPUT);
  agrumino.writeGPIO(GPIO_2, HIGH);
  Serial.println("Set Gpio2 HIGH");
  delay(1500);
  agrumino.writeGPIO(GPIO_2, LOW);
  Serial.println("Set Gpio2 LOW");

}

void testPump() {
  agrumino.turnWateringOn();
  Serial.println("Pump On");
  delay(5000);
  agrumino.turnWateringOff();
  Serial.println("Pump Off");

}

void writeTestInProgress() {
  u8g2.clearBuffer();
  u8g2.setFont(u8g2_font_ncenB12_tr);
  u8g2.drawStr(40, 12, "TEST");
  u8g2.drawStr(15, 36, "in progress");
  u8g2.sendBuffer();
  delay(500);
  
}

void drawlogo(void)
{
  u8g2.clearDisplay();
  u8g2.clearBuffer();

  for (int i = -48; i <= 10; i++)
  {
    ESP.wdtFeed();
    u8g2.drawXBM(0, i, LOGO_WIDTH, LOGO_HEIGHT, LOGO_bits);
    u8g2.sendBuffer();
  }
  delay(3000);

}

void writeDataSensors()
{
  int temperature = agrumino.readTempC();
  int soilMoisture = agrumino.readSoil();
  float illuminance = agrumino.readLux();
  int soilMoistureRaw = agrumino.readSoilRaw();
  Serial.println("Temperature:       " + String(temperature) + "C");
  Serial.println("SoilMoisture:      " + String(soilMoisture) + "%");
  Serial.println("Illuminance        " + String(illuminance) + "Lum");
  u8g2.clearBuffer();
  u8g2.clearDisplay();
  u8g2.setFont(u8g2_font_6x10_mf);
  u8g2.drawStr(2,10, "Temperature C =");
  u8g2.setCursor(94,10);
  u8g2.print(temperature);
  u8g2.drawStr(2,25, "Soil_moist %  =");
  u8g2.setCursor(94,25);
  u8g2.print(soilMoisture);
  u8g2.drawStr(2,40, "Soil_moist_Mv =");
  u8g2.setCursor(94,40);
  u8g2.print(soilMoistureRaw);
  u8g2.drawStr(2,55, "Illum. =");
  u8g2.setCursor(85,55);
  u8g2.print(illuminance);
  u8g2.sendBuffer();
  delay(5000);
  u8g2.clearBuffer();
  u8g2.clearDisplay();
}

void blinkLed()
{
  agrumino.turnLedOn();
  delay(200);
  agrumino.turnLedOff();
}

void delaySec(int sec)
{
  delay(sec * 1000);
}

void setup()
{
  Serial.begin(SERIAL_PORT);
  agrumino.setup();
  agrumino.turnBoardOn();
  u8g2.begin();
  wifiSetup();
  delay(500);
}

void loop(void)

{ agrumino.turnBoardOn();

  if (countLogo <= 1 ) {
    drawlogo();
  }
  long int agruminoChipId = ESP.getChipId();
  Serial.println("My ChipId is : " + String(agruminoChipId));
  countLogo++;
  writeTestInProgress();
  blinkLed(); 
  testPump();
  testGpio1();
  testGpio2();
  u8g2.clearDisplay();
  writeDataSensors();
  //testLevel(); //View status only from serial monitor
  Serial.println("Restart.....");
  delay(3000);
  u8g2.clearDisplay();
  ESP.restart();
}

logo.h

Arduino
Use this to show. Ref logo.h in the code
#define LOGO_WIDTH 128
#define LOGO_HEIGHT 48
static unsigned char LOGO_bits[] = {

    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0xe0, 0x3f, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0xf0, 0x83, 0x1f,
    0xf0, 0x7f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x00, 0x80, 0x03, 0x03, 0x00,
    0x00, 0xf0, 0x83, 0x1f, 0xf8, 0x73, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x00,
    0x80, 0x83, 0x07, 0x00, 0x00, 0xf0, 0x83, 0x3f, 0xf8, 0x61, 0x00, 0x80,
    0x1f, 0x00, 0x00, 0x00, 0x80, 0xc3, 0x07, 0x00, 0x00, 0xf0, 0x83, 0x1f,
    0xfc, 0x21, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0xc0, 0xe7, 0x0f, 0x00,
    0x00, 0xf8, 0x01, 0x1f, 0xfc, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x00,
    0xc0, 0xe7, 0x0f, 0x00, 0x00, 0xf8, 0x01, 0x06, 0xfc, 0x00, 0x00, 0xc0,
    0x0f, 0x00, 0x00, 0x00, 0xe0, 0xf7, 0x0f, 0x00, 0x00, 0xf8, 0x01, 0x00,
    0xfc, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x1f, 0x01,
    0x00, 0xf8, 0x01, 0x00, 0xfc, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x00,
    0xe0, 0xff, 0x1f, 0x01, 0x00, 0xfc, 0xc1, 0x0f, 0xfe, 0x07, 0xfe, 0xe0,
    0x07, 0x7e, 0xf0, 0x01, 0xf0, 0xff, 0xbf, 0x03, 0x00, 0xfc, 0xc0, 0x0f,
    0xfe, 0x02, 0xff, 0xe1, 0x07, 0x7e, 0xf8, 0x01, 0xf0, 0xff, 0xbf, 0x03,
    0x00, 0xfc, 0xc0, 0x0f, 0x7e, 0xc0, 0xcf, 0xe1, 0x07, 0x3f, 0xf8, 0x01,
    0xf0, 0xff, 0xff, 0x07, 0x00, 0xfc, 0xe0, 0x07, 0x7e, 0xe0, 0xc7, 0xe3,
    0x07, 0x3f, 0xf8, 0x01, 0xf0, 0xff, 0xff, 0x07, 0x00, 0xfc, 0xe0, 0x07,
    0x7e, 0xe0, 0xc3, 0xf3, 0x07, 0x3f, 0xf8, 0x01, 0xf8, 0xff, 0xff, 0x0f,
    0x00, 0x7e, 0xe0, 0x07, 0x3f, 0xf0, 0xc3, 0xf1, 0x03, 0x3f, 0xfc, 0x00,
    0xf8, 0xff, 0xff, 0x0f, 0x00, 0x7e, 0xe0, 0x07, 0x3f, 0xf0, 0xc1, 0xf1,
    0x03, 0x3f, 0xfc, 0x00, 0xf8, 0xff, 0xff, 0x0f, 0x00, 0x7e, 0xf0, 0x03,
    0x3f, 0xf8, 0xe1, 0xf1, 0x83, 0x1f, 0xfc, 0x00, 0xf8, 0xff, 0xff, 0x0f,
    0x00, 0x7e, 0xf0, 0x03, 0x3f, 0xf8, 0xe1, 0xf0, 0x83, 0x1f, 0xfc, 0x00,
    0xfc, 0xff, 0xff, 0x0f, 0x00, 0x7f, 0xf0, 0x83, 0x3f, 0xfc, 0x71, 0xf8,
    0x81, 0x1f, 0xfe, 0x00, 0xfc, 0xff, 0xff, 0x0f, 0x00, 0x3f, 0xf0, 0x83,
    0x1f, 0xfc, 0x3c, 0xf8, 0x81, 0x1f, 0x7e, 0x00, 0xfc, 0xff, 0xff, 0x1f,
    0x00, 0x3f, 0xf8, 0x83, 0x1f, 0xfc, 0x1f, 0xf8, 0xc1, 0x0f, 0x7e, 0x00,
    0xfc, 0xff, 0xff, 0x1f, 0x00, 0x3f, 0xf8, 0x81, 0x1f, 0xfc, 0x03, 0xf8,
    0xc1, 0x0f, 0x7e, 0x00, 0xec, 0xff, 0xff, 0x3f, 0x00, 0x3f, 0xf8, 0x81,
    0x1f, 0xfc, 0x00, 0xf8, 0xc1, 0x0f, 0x7e, 0x00, 0xfc, 0xff, 0xff, 0x3f,
    0x00, 0x3f, 0xf8, 0xc1, 0x1f, 0xfe, 0x00, 0xfc, 0xc0, 0x0f, 0x7f, 0x00,
    0xfc, 0xff, 0xff, 0x1f, 0x80, 0x1f, 0xfc, 0xc1, 0x0f, 0xfc, 0x00, 0xfe,
    0xe0, 0x0f, 0x3f, 0x00, 0xe8, 0xff, 0xff, 0x3f, 0x80, 0x1f, 0xfc, 0xe1,
    0x0f, 0xfc, 0x00, 0xff, 0xe0, 0x8f, 0x3f, 0x00, 0x78, 0xff, 0xff, 0x1f,
    0x80, 0x3f, 0xff, 0xf1, 0x0f, 0xfc, 0x80, 0xfd, 0xf9, 0xcf, 0x3f, 0x00,
    0xf8, 0xff, 0xff, 0x1e, 0x80, 0xff, 0xfb, 0xff, 0x0f, 0xfc, 0xff, 0xfc,
    0xdf, 0xff, 0x3f, 0x00, 0xf0, 0xff, 0xff, 0x1f, 0x00, 0xff, 0xf9, 0xff,
    0x07, 0xf8, 0x7f, 0xf8, 0xcf, 0xff, 0x1f, 0x00, 0x60, 0xff, 0xff, 0x1d,
    0x00, 0xff, 0xf1, 0xef, 0x07, 0xf8, 0x3f, 0xf8, 0x8f, 0xbf, 0x1f, 0x00,
    0xe0, 0xfb, 0xff, 0x0f, 0x00, 0x3c, 0xe0, 0xe1, 0x07, 0xe0, 0x07, 0xe0,
    0x01, 0xcf, 0x1f, 0x00, 0xc0, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0xfc,
    0x07, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0x80, 0xff, 0xbf, 0x03,
    0x00, 0x00, 0x00, 0xe7, 0x07, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x1f, 0x00,
    0x00, 0xff, 0xff, 0x03, 0x00, 0x00, 0x80, 0xf1, 0x03, 0x00, 0x00, 0x00,
    0x00, 0xc6, 0x1f, 0x00, 0x00, 0xfa, 0x7f, 0x00, 0x00, 0x00, 0xc0, 0xf0,
    0x03, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x0f, 0x00, 0x00, 0xf8, 0x6f, 0x00,
    0x00, 0x00, 0xc0, 0xf0, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x0f, 0x00,
    0x00, 0xd8, 0x0d, 0x00, 0x00, 0x00, 0xc0, 0xf8, 0x03, 0x00, 0x00, 0x00,
    0x00, 0xe3, 0x0f, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0xc0, 0xf9,
    0x01, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x07, 0x00, 0x00, 0xc0, 0x00, 0x00,
    0x00, 0x00, 0xc0, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0xff, 0x07, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00,
    0x00, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f,
    0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00};

Credits

Gabriele Foddis
7 projects • 5 followers
Production Manager- IIoT Business Designer - R&D
Contact

Comments

Please log in or sign up to comment.