Smart Sourdough Starter

Our group members are Armando, Damien, Jadon, and Jian Hao. Our project aims to allow easy maintenance of the sourdough for the user.

 

Smart Sourdough Starter

Things used in this project

 

Hardware components

HARDWARE LIST
DFRobot gravity:Analog pH Sensor V2
M5Stack FIRE IoT Development Kit (PSRAM 2.0)
M5Stack ENV II Unit with Temperature Humidity Pressure Sensor(SHT30+BMP280)
M5Stack Earth Module Grove Compatible Soil monitoring

Story

 

Project Introduction

 

Our Project, Smart Sourdough Starter, aims to develop a solution to allow users to maintain their sourdough more easily by applying what we have learnt in this module. By using this Smart Sourdough Starter, we can reduce the workload required when people ferment sourdough since it will monitor the sourdough for them.

 

Problem Statement

 

How can we design a device to monitor the status of the sourdough when it is fermenting?

 

Background Information

 

Sourdough is used to make a type of bread. Some people want to grow sourdough at home but they may not know how to do it properly or they are not able to keep track of it daily. Therefore we made this project to assist them in checking their sourdough to ensure it ferments correctly and safely. Sourdough is used to make sour bread and requires specific conditions to ferment properly. How it ferments will affect the quality of the bread and if not fermented properly, it can be wasted. Some people want to ferment sourdough at home but they may not know how to do it properly or they are not able to keep check of it daily. Therefore we made this project to assist them in checking their sourdough to ensure it ferments correctly and safely.

 

What happens when a sourdough starter is not taken care of:

 

Moldy sourdough starter

 

Moldy sourdough starter

 

Background Research

 

Optimal conditions for the sourdough starter to ferment are as follows:

 

Temperature: 21.1°C to 26.7°C, Humidity: 60% to 80%, Moisture: 60% to 80%, pH value: 3.5 to 5

A rough summary on the process of sourdough:

 

Sourdough is a mix of one part flour and one part water. Sourdough needs to be “fed” daily with flour and water when fermentin Once it is done fermenting, it can be used to make bread by adding part of the sourdough starter to strongflour, water, and salt. The dough needs to be proved (left aside) in a container twice for about 3 hours before being baked. 

Some common issues and mistakes when growing sourdough:

 

Wrong temperature 

- Excessive heat will kill the yeast. Insufficient heat will slow the fermentation.

 

Sourdough neglected for too long 

- Mold and harmful bacteria will develop if not maintained.

 

Too acidic 

- Baking soda can help neutralise the sour flavour of the sourdough

 

Wrong humidity 

- Humidity affect the moisture of the dough and change its consistency. Excessive humidity can cause mold to grow on the dough.

 

Schematics

 

M5Stack Connections

 

This is a picture from our storyboard of the connections of our M5Stack

 

 

Block Diagram

 

This is a block diagram of how we connected the M5Stack and its sensors

 


 

Code

 

M5Stack 1 (pH sensor)

Python

Code for M5Stack 1 which is connected to the pH sensor.

It reads the input from the pH sensor then sends the data to M5Stack 2 via ESP-Now

CODE
from m5stack import *
from m5ui import *
from uiflow import *
import espnow
import wifiCfg
import time
from easyIO import *


setScreenColor(0x222222)


gradient = None
counter = None
data = None
current_month = None
current_day = None
first_day = None
first_month = None
my_4pH_voltage = None
my_7pH_Voltage = None
pH = None
yIntercept = None
voltsReading = None

wifiCfg.wlan_ap.active(True)
wifiCfg.wlan_sta.active(True)
espnow.init()

rectangle0 = M5Rect(0, 0, 320, 45, 0xFFFFFF, 0xFFFFFF)
label0 = M5TextBox(106, 12, "Data Read", lcd.FONT_DejaVu18, 0x000000, rotate=0)
label7 = M5TextBox(68, 70, "pH Value:", lcd.FONT_DejaVu18, 0xFFFFFF, rotate=0)
label5 = M5TextBox(142, 210, "Done", lcd.FONT_Default, 0xFFFFFF, rotate=0)
label8 = M5TextBox(184, 70, "Text", lcd.FONT_DejaVu18, 0xFFFFFF, rotate=0)
label6 = M5TextBox(20, 134, "Text", lcd.FONT_Default, 0xFFFFFF, rotate=0)
label2 = M5TextBox(61, 224, "^", lcd.FONT_Default, 0xFFFFFF, rotate=0)
label3 = M5TextBox(244, 224, "^", lcd.FONT_Default, 0xFFFFFF, rotate=0)
label1 = M5TextBox(50, 197, "Text", lcd.FONT_Default, 0xFFFFFF, rotate=0)
label4 = M5TextBox(233, 197, "Text", lcd.FONT_Default, 0xFFFFFF, rotate=0)




espnow.add_peer('98:f4:ab:6b:9f:7d', id=1)
current_month = 1
current_day = 1
first_day = 1
first_month = 1
while not (btnB.isPressed()):
  if btnA.isPressed():
    first_day = first_day + 1
    if first_day > 31:
      first_day = 1
    label1.setText(str(first_day))
    wait(1)
  elif btnC.isPressed():
    first_month = first_month + 1
    if first_month >= 5:
      first_month = 1
    label4.setText(str(first_month))
    wait(1)
  label6.setText(str((str('First Date of recording') + str(((str(first_day) + str(((str('/') + str(first_month))))))))))
wait(1)
espnow.send(id=1, data=str(({'first_day':first_day,'first_month':first_month})))
my_4pH_voltage = 0.715
my_7pH_Voltage = 0.536
pH = 0
gradient = (4 - 7) / (my_4pH_voltage - my_7pH_Voltage)
yIntercept = 7 - gradient * my_7pH_Voltage
while True:
  while not (btnB.isPressed()):
    if btnA.isPressed():
      current_day = current_day + 1
      if current_day >= 32 or current_day < first_day and current_month <= current_month:
        current_day = first_day
      label1.setText(str(current_day))
      wait(1)
    elif btnC.isPressed():
      current_month = current_month + 1
      if current_month >= 4 or current_day < first_day and current_month <= current_month:
        current_month = current_month
      label4.setText(str(current_month))
      wait(1)
    label6.setText(str((str('Current date of recording') + str(((str(current_day) + str(((str('/') + str(current_month))))))))))
  voltsReading = 0
  for count in range(6):
    voltsReading = (analogRead(36)) / 1000 + voltsReading
  voltsReading = voltsReading / 6
  pH = gradient * voltsReading + yIntercept
  data = {'pH':pH,'current_month':current_month,'current_day':current_day}
  label8.setText(str(pH))
  espnow.send(id=1, data=str(data))
  wait(3)
  wait_ms(2)

M5Stack 2 (Earth&ENV sensor)

Python

Code for M5Stack 2 which is connected to the Earth and pH sensor.

It reads the input from the Earth and Env sensors as well as recieves data from M5Stack 1 and sends the data to M5Stack 3 via ESP-Now

CODE
from m5stack import *
from m5ui import *
from uiflow import *
import espnow
import wifiCfg
import json

import unit


setScreenColor(0x222222)
env3_0 = unit.get(unit.ENV3, unit.PORTA)
earth_0 = unit.get(unit.EARTH, unit.PORTB)


mac = None
Data_send = None
total_days = None
current_month = None
current_day = None
first_day = None
months = None
first_month = None

wifiCfg.wlan_ap.active(True)
wifiCfg.wlan_sta.active(True)
espnow.init()

rectangle0 = M5Rect(0, 0, 320, 45, 0xFFFFFF, 0xFFFFFF)
label5 = M5TextBox(16, 224, "Text", lcd.FONT_Default, 0xFFFFFF, rotate=0)
label1 = M5TextBox(16, 59, "Mac Address:", lcd.FONT_Default, 0xFFFFFF, rotate=0)
label2 = M5TextBox(16, 88, "Text", lcd.FONT_Default, 0xFFFFFF, rotate=0)
label3 = M5TextBox(12, 134, "Data Sent:", lcd.FONT_Default, 0xFFFFFF, rotate=0)
label4 = M5TextBox(12, 167, "Text", lcd.FONT_Default, 0xFFFFFF, rotate=0)
label0 = M5TextBox(126, 14, "Data Sent", lcd.FONT_Default, 0x000000, rotate=0)




def recv_cb(_):
  global mac,Data_send,total_days,current_month,current_day,first_day,months,first_month
  mac, _, Data_send = espnow.recv_data(encoder='str')
  total_days = 0
  Data_send = Data_send.replace("'", '"')
  Data_send = json.loads(Data_send)
  if len(Data_send) <= 2:
    first_day = Data_send['first_day']
    first_month = Data_send['first_month']
  else:
    current_day = Data_send['current_day']
    current_month = Data_send['current_month']
  label5.setText(str(Data_send))
  if current_day != 0:
    if first_month != current_month:
      while not first_month == current_month:
        current_month = current_month - 1
        total_days = (months[current_month]) + total_days
      total_days = current_day + total_days
    elif first_month == current_month:
      total_days = current_day
    total_days = total_days - first_day
    Data_send = {'pH':(Data_send['pH']),'humid':(env3_0.humidity),'temp':(env3_0.temperature),'moist':(earth_0.analogValue),'total time':total_days}
    espnow.send(id=1, data=str(Data_send))
    label4.setText(str(Data_send))

  pass
espnow.recv_cb(recv_cb)



espnow.add_peer('f0:08:d1:c7:31:59', id=1)
label2.setText(str(espnow.get_mac_addr()))
current_month = 0
current_day = 0
months = {1:31,2:28,3:31,0:0}

M5Stack 3 (Reciever)

Python

M5Stack 3 is not connected to any sensors.

It recieves readings and data from M5Stack 2 and displays the data for the user

CODE
import math

from m5stack import *
from m5ui import *
from uiflow import *
import espnow
import wifiCfg
import unit
import json
BACKGROUND_COLOR = 0x59b2de
setScreenColor(BACKGROUND_COLOR)

wifiCfg.wlan_ap.active(True)
wifiCfg.wlan_sta.active(True)
espnow.init()

tempLabel = M5TextBox(6, 68, "Daily Temperature:", lcd.FONT_DejaVu18, 0xFFFFFF, rotate=0)
tempValLabel = M5TextBox(210, 68, "0", lcd.FONT_UNICODE, 0xFFFFFF, rotate=0)

phLabel = M5TextBox(14, 180, "Daily pH Value:", lcd.FONT_DejaVu18, 0xFFFFFF, rotate=0)
phValLabel = M5TextBox(176, 180, "0", lcd.FONT_DejaVu18, 0xFFFFFF, rotate=0)

humidityLabel = M5TextBox(14, 103, "Daily Humidity:", lcd.FONT_DejaVu18, 0xFFFFFF, rotate=0)
humidityValLabel = M5TextBox(187, 103, "0", lcd.FONT_DejaVu18, 0xFFFFFF, rotate=0)

moistureLabel = M5TextBox(14, 140, "Daily Moisture:", lcd.FONT_DejaVu18, 0xFFFFFF, rotate=0)
moistureValLabel = M5TextBox(176, 140, "0", lcd.FONT_DejaVu18, 0xFFFFFF, rotate=0)


titleBorder = M5Rect(0, 0, 320, 45, 0xFFFFFF, 0xffffff)
title = M5TextBox(56, 9, "Daily Conditions", lcd.FONT_DejaVu24, 0xff0000, rotate=0)

dailyMsgLabel = M5TextBox(24, 119, "text", lcd.FONT_DejaVu18, 0x000000, rotate=0)
buttonB_label = M5TextBox(129, 224, "Message", lcd.FONT_Default, 0xFFFFFF, rotate=0)
buttonA_label = M5TextBox(50, 224, "Daily", lcd.FONT_Default, 0xFFFFFF, rotate=0)

huge_box = M5Rect(0, 0, 320, 250, BACKGROUND_COLOR, BACKGROUND_COLOR)

menu_list = {
    "HOME": [
        titleBorder,
        title,

        tempLabel,
        tempValLabel,

        phLabel,
        phValLabel,

        humidityLabel,
        humidityValLabel,

        moistureLabel,
        moistureValLabel,

        buttonA_label,
        buttonB_label,
    ],

    "MESSAGE": [
        dailyMsgLabel,
        buttonA_label,
        buttonB_label,
    ]
}

TOTAL_TEMP = 0
TOTAL_HUMID = 0
TOTAL_PH = 0
TOTAL_MOIST = 0
TOTAL_DAY = 1
bad = False

DATA_RECEIVED = None
def show_menu(menuName: str):
    global CURRENT_MENU, TOTAL_PH, TOTAL_TEMP, TOTAL_MOIST, TOTAL_HUMID

    if CURRENT_MENU == menuName:
        return

    huge_box.hide()

    for menuItem in menu_list[menuName]:
        menuItem.show()
    if type(DATA_RECEIVED)==type({}):
        if menuName == "HOME":
            updateValLabels("AVERAGE")
        elif menuName == "MESSAGE":
            if bad:
                dailyMsgLabel.setText("Something's wrong! Check Data!")
            else:
                dailyMsgLabel.setText("Everything is doing fine")

    CURRENT_MENU = menuName

CURRENT_MENU = ""
show_menu("HOME")

def updateValLabels(updateWith: str):
    def ave(val):
        return round(val/TOTAL_DAY, 2)

    if updateWith == "AVERAGE":
        phValLabel.setText(str(ave(TOTAL_PH)))
        moistureValLabel.setText(str(ave(TOTAL_MOIST)))
        humidityValLabel.setText(str(ave(TOTAL_HUMID)) + "%")
        tempValLabel.setText(str(ave(TOTAL_TEMP)) + "C")
valThresholds = [ #ph
                 (60, 80),
                (-1, 1000),
                    (3.5, 6),#humid
                (21.1, 30), #temp
                ] #hmoist

def recv_cb(_):

    global mac, DATA_RECEIVED, TOTAL_DAY, TOTAL_PH, TOTAL_TEMP, TOTAL_HUMID, TOTAL_MOIST, bad
    mac, _, DATA_RECEIVED = espnow.recv_data(encoder='str')
    DATA_RECEIVED = DATA_RECEIVED.replace("'", '"')
    DATA_RECEIVED = json.loads(DATA_RECEIVED)

    counter = 0
    bad = False
    for key in DATA_RECEIVED:
        if key == "total time":
            continue
        if not (DATA_RECEIVED[key] > valThresholds[counter][0] and DATA_RECEIVED[key] < valThresholds[counter][1]):
            bad = True
            break
        counter += 1

    if bad==False:
        rgb.setColorAll(0x00FF00)
    else:
        rgb.setColorAll(0xFF0000)

    TOTAL_TEMP += DATA_RECEIVED["temp"]
    TOTAL_PH += DATA_RECEIVED["pH"]
    TOTAL_HUMID += DATA_RECEIVED["humid"]
    TOTAL_MOIST += DATA_RECEIVED["moist"]
    TOTAL_DAY = DATA_RECEIVED["total time"]

    if CURRENT_MENU == "HOME":
        updateValLabels("AVERAGE")

def showHome():
  show_menu("HOME")

def showMessage():
  show_menu("MESSAGE")

espnow.recv_cb(recv_cb)
btnA.wasPressed(showHome)
btnB.wasPressed(showMessage)

M5Stack 1 Blocky Code (pH sensor)

Python

Blocky code version

CODE
{"components":[{"id":"____screen","createTime":1675817385628,"name":"screen","x":0,"y":0,"width":320,"height":240,"backgroundColor":"#222222","backgroundImage":"","type":"screen"},{"id":"____buttonA","createTime":1675817385628,"name":"ButtonA","buttonIndex":0,"x":35,"y":216,"width":64,"height":24,"text":"ButtonA","visibility":false,"type":"button"},{"id":"____buttonB","createTime":1675817385628,"name":"ButtonB","buttonIndex":1,"x":125,"y":216,"width":64,"height":24,"text":"ButtonB","visibility":false,"type":"button"},{"id":"____buttonC","createTime":1675817385628,"name":"ButtonC","buttonIndex":2,"x":215,"y":216,"width":64,"height":24,"text":"ButtonC","visibility":false,"type":"button"},{"id":"W*iwM+fcy44$Ofc*","createTime":1675817406127,"name":"rectangle0","x":0,"y":0,"width":320,"height":45,"borderColor":"#FFFFFF","backgroundColor":"#FFFFFF","type":"rectangle","layer":4},{"id":"zM!bjiX5n#QuOz!Y","createTime":1675817426303,"isCoreTwo":false,"isPaper":false,"name":"label0","x":106,"y":12,"color":"#000000","text":"Data Read","font":"lcd.FONT_DejaVu18","rotation":0,"type":"label","layer":5},{"id":"5bM&uY+D*u5WFvvr","createTime":1675817480404,"isCoreTwo":false,"isPaper":false,"name":"label7","x":68,"y":70,"color":"#FFFFFF","text":"pH Value:","font":"lcd.FONT_DejaVu18","rotation":0,"type":"label","layer":12},{"id":"jHvK_uhBb#UO5qaH","createTime":1675817480404,"isCoreTwo":false,"isPaper":false,"name":"label8","x":184,"y":70,"color":"#FFFFFF","text":"Text","font":"lcd.FONT_DejaVu18","rotation":0,"type":"label","layer":13},{"id":"-2piaTspPefi$uw#","createTime":1675866304604,"isCoreTwo":false,"isPaper":false,"name":"label1","x":50,"y":197,"color":"#FFFFFF","text":"Text","font":"lcd.FONT_Default","rotation":0,"type":"label","layer":26},{"id":"Z`z+sb20uH4MDO3k","createTime":1675867768832,"isCoreTwo":false,"isPaper":false,"name":"label4","x":233,"y":197,"color":"#FFFFFF","text":"Text","font":"lcd.FONT_Default","rotation":0,"type":"label","layer":29},{"id":"mr!JKBXEF+w%b`mx","createTime":1675885624809,"isCoreTwo":false,"isPaper":false,"name":"label5","x":142,"y":210,"color":"#FFFFFF","text":"Done","font":"lcd.FONT_Default","rotation":0,"type":"label","layer":12},{"id":"#dF$QN4azBi+5wqc","createTime":1675885675620,"isCoreTwo":false,"isPaper":false,"name":"label6","x":20,"y":134,"color":"#FFFFFF","text":"Text","font":"lcd.FONT_Default","rotation":0,"type":"label","layer":13},{"id":"A+kA2bIoxmK00ngC","createTime":1675886979384,"isCoreTwo":false,"isPaper":false,"name":"label2","x":61,"y":224,"color":"#FFFFFF","text":"^","font":"lcd.FONT_Default","rotation":0,"type":"label","layer":18},{"id":"1RGlDr0Iv=Xkg0*=","createTime":1675886992001,"isCoreTwo":false,"isPaper":false,"name":"label3","x":244,"y":224,"color":"#FFFFFF","text":"^","font":"lcd.FONT_Default","rotation":0,"type":"label","layer":19}],"type":"fire","versions":"Beta","units":[],"hats":[],"blockly":"<variables><variable id=\"m]5dUxJ+Y{F:F*vd=(0,\">gradient</variable><variable id=\"?s0aU/_AF,:wPZJ^-59b\">counter</variable><variable id=\"CXCfadItPvi1[]:/FDN3\">data</variable><variable id=\"_HeRH{o(:Dr]U7XX%`OD\">current_month</variable><variable id=\"6GUZobtL8U;Vf4r(XMKt\">current_day</variable><variable id=\"reut22T~Zmli@+XBPzH.\">first_day</variable><variable id=\"=U|l_o(Ls6dvKY}1M4n[\">first_month</variable><variable id=\"D[LVOSyFVO!F3w0p%wD:\">4pH_voltage</variable><variable id=\"a6t+hA/0+tk}-H0D|PUd\">7pH_Voltage</variable><variable id=\"jnXn[.Dhm?*Qa[Cl/SeZ\">pH</variable><variable id=\"Ta[L5!0/5i@G9T3[SLmk\">yIntercept</variable><variable id=\"LGGq^8)J-FF69@]s4iLH\">voltsReading</variable></variables><block type=\"basic_on_setup\" id=\"setup_block\" deletable=\"false\" x=\"351\" y=\"360\"><next><block type=\"espnow_add_peer\" id=\",Zf?2]+~!bW8e3UCza^`\"><field name=\"MAC\">98:f4:ab:6b:9f:7d</field><field name=\"ID\">1</field><next><block type=\"variables_set\" id=\"UT#M2/43#HZxxO%!xgsd\"><field name=\"VAR\" id=\"_HeRH{o(:Dr]U7XX%`OD\">current_month</field><value name=\"VALUE\"><block type=\"math_number\" id=\"l(O;p~j/1UzW3Kr)k3--\"><field name=\"NUM\">1</field></block></value><next><block type=\"variables_set\" id=\"Wtn0nyA~Dps`J?XkY1RG\"><field name=\"VAR\" id=\"6GUZobtL8U;Vf4r(XMKt\">current_day</field><value name=\"VALUE\"><block type=\"math_number\" id=\"AU7qx9R|2bWas*K12,47\"><field name=\"NUM\">1</field></block></value><next><block type=\"variables_set\" id=\"2N*$~Wz`R|3/,;@MOa)Y\"><field name=\"VAR\" id=\"reut22T~Zmli@+XBPzH.\">first_day</field><value name=\"VALUE\"><block type=\"math_number\" id=\"Q*(SwILh6Q8LmlNfeSL@\"><field name=\"NUM\">1</field></block></value><next><block type=\"variables_set\" id=\"ntAb:Io(MflIXMtpgk]U\"><field name=\"VAR\" id=\"=U|l_o(Ls6dvKY}1M4n[\">first_month</field><value name=\"VALUE\"><block type=\"math_number\" id=\"@d]/|9;V_FJWCDM1ZR(A\"><field name=\"NUM\">1</field></block></value><next><block type=\"controls_whileUntil\" id=\"W-LCP:QQ;^0PQZ?L#a:[\"><field name=\"MODE\">UNTIL</field><value name=\"BOOL\"><block type=\"button_ispressed\" id=\"@Yk,Y0sq|#1~P.69zm`R\"><field name=\"BUTTON\">B</field><field name=\"EVENT\">isPressed</field></block></value><statement name=\"DO\"><block type=\"controls_if\" id=\"kYdMd]~Q}[Uv08bo,;zz\"><mutation elseif=\"1\"></mutation><value name=\"IF0\"><block type=\"button_ispressed\" id=\"+I4vr+$krC}31qXl@5c)\"><field name=\"BUTTON\">A</field><field name=\"EVENT\">isPressed</field></block></value><statement name=\"DO0\"><block type=\"variables_set\" id=\"V0ZRJQ2A#ui|;Xffz-G.\"><field name=\"VAR\" id=\"reut22T~Zmli@+XBPzH.\">first_day</field><value name=\"VALUE\"><block type=\"math_arithmetic\" id=\"wd=pGWAp;svRpbiGO(KN\"><field name=\"OP\">ADD</field><value name=\"A\"><block type=\"variables_get\" id=\"0FEw3Q+?+oM,zltZ3sW-\"><field name=\"VAR\" id=\"reut22T~Zmli@+XBPzH.\">first_day</field></block></value><value name=\"B\"><block type=\"math_number\" id=\"|~Rpi:ik4V_Z?fRx|pSh\"><field name=\"NUM\">1</field></block></value></block></value><next><block type=\"controls_if\" id=\"j|r5F4v)SaY,L]a]31;*\"><value name=\"IF0\"><block type=\"logic_compare\" id=\"]Jw]ZCg{gj,e/[;VMwnc\"><field name=\"OP\">GT</field><value name=\"A\"><block type=\"variables_get\" id=\"DT:NM=![s85NU4w6j_HD\"><field name=\"VAR\" id=\"reut22T~Zmli@+XBPzH.\">first_day</field></block></value><value name=\"B\"><block type=\"math_number\" id=\"_6k2RIlNjw.G28r[OzV=\"><field name=\"NUM\">31</field></block></value></block></value><statement name=\"DO0\"><block type=\"variables_set\" id=\"xhm$KIL${WB_fzxE1p)B\"><field name=\"VAR\" id=\"reut22T~Zmli@+XBPzH.\">first_day</field><value name=\"VALUE\"><block type=\"math_number\" id=\"5aS2,0ySXuK10fM61q;4\"><field name=\"NUM\">1</field></block></value></block></statement><next><block type=\"label_set_text\" id=\"2jRbJ.,L.yo,qy*;EDN#\"><field name=\"COMPONENT\">label1</field><value name=\"TEXT\"><shadow type=\"text\" id=\"7*J;=Rf-X8bN[qFu:|~P\"><field name=\"TEXT\">Hello M5</field></shadow><block type=\"variables_get\" id=\"GY94-X3+-q_U4{^6;7*y\"><field name=\"VAR\" id=\"reut22T~Zmli@+XBPzH.\">first_day</field></block></value><next><block type=\"timer_delay\" id=\"WKKB.*6UdU]wRHVzPp/-\"><value name=\"DELAY\"><shadow type=\"math_number\" id=\"([h$t280O}BU.239N;0)\"><field name=\"NUM\">1</field></shadow></value></block></next></block></next></block></next></block></statement><value name=\"IF1\"><block type=\"button_ispressed\" id=\"(svPes}M8Be^xby-Y9eF\"><field name=\"BUTTON\">C</field><field name=\"EVENT\">isPressed</field></block></value><statement name=\"DO1\"><block type=\"variables_set\" id=\"*[dzho-4l^(Mun$q!LdJ\"><field name=\"VAR\" id=\"=U|l_o(Ls6dvKY}1M4n[\">first_month</field><value name=\"VALUE\"><block type=\"math_arithmetic\" id=\"]]5yM$deoFsVforj!Hij\"><field name=\"OP\">ADD</field><value name=\"A\"><block type=\"variables_get\" id=\"|,^Oh#O;VTsiO]y5W,ma\"><field name=\"VAR\" id=\"=U|l_o(Ls6dvKY}1M4n[\">first_month</field></block></value><value name=\"B\"><block type=\"math_number\" id=\";;,z,2wC8Nau5Z?-vb:$\"><field name=\"NUM\">1</field></block></value></block></value><next><block type=\"controls_if\" id=\"Mfgpqy^zPZrj)vUjJF#u\"><value name=\"IF0\"><block type=\"logic_compare\" id=\":/I}cIFl{GasqKH#B6H{\"><field name=\"OP\">GTE</field><value name=\"A\"><block type=\"variables_get\" id=\"UY;^1/=(bIq9SNv1NVaB\"><field name=\"VAR\" id=\"=U|l_o(Ls6dvKY}1M4n[\">first_month</field></block></value><value name=\"B\"><block type=\"math_number\" id=\"2G[)/ZoOB`EELaU6o$D5\"><field name=\"NUM\">5</field></block></value></block></value><statement name=\"DO0\"><block type=\"variables_set\" id=\"`Sm2BRIW1P`2uvSC5F_$\"><field name=\"VAR\" id=\"=U|l_o(Ls6dvKY}1M4n[\">first_month</field><value name=\"VALUE\"><block type=\"math_number\" id=\"EWI6NLUEna@Bkc3~Z/|T\"><field name=\"NUM\">1</field></block></value></block></statement><next><block type=\"label_set_text\" id=\"mceg]NE3nJ3xes:PEs[!\"><field name=\"COMPONENT\">label4</field><value name=\"TEXT\"><shadow type=\"text\" id=\".^XKL*7GkPoJbTV+o33_\"><field name=\"TEXT\">Hello M5</field></shadow><block type=\"variables_get\" id=\"Dj$MDoq*V1tLRm{B]j_H\"><field name=\"VAR\" id=\"=U|l_o(Ls6dvKY}1M4n[\">first_month</field></block></value><next><block type=\"timer_delay\" id=\"Q(4!Zgg7BT`0j)dx45+:\"><value name=\"DELAY\"><shadow type=\"math_number\" id=\"*;EF2#q2;,.cH{9;_T.f\"><field name=\"NUM\">1</field></shadow></value></block></next></block></next></block></next></block></statement><next><block type=\"label_set_text\" id=\"VQy|;Z!r8.#P:r[U[8NK\"><field name=\"COMPONENT\">label6</field><value name=\"TEXT\"><shadow type=\"text\" id=\";.p=CO5ogSdr[j*$x_a-\"><field name=\"TEXT\">Hello M5</field></shadow><block type=\"text_add\" id=\"wLkE:CT66]@mv/CXYmlu\"><value name=\"arg0\"><shadow type=\"text\" id=\"D_w]cBgmuHsT-5CSsV*M\"><field name=\"TEXT\">First Date of recording</field></shadow></value><value name=\"arg1\"><block type=\"text_add\" id=\"S?;MVX`*h)E4])mUIo`t\"><value name=\"arg0\"><shadow type=\"text\" id=\"lRqSbL;8(80_vw4t$m$i\"><field name=\"TEXT\"></field></shadow><block type=\"variables_get\" id=\"?:zbNync@}x!$2DNWW[e\"><field name=\"VAR\" id=\"reut22T~Zmli@+XBPzH.\">first_day</field></block></value><value name=\"arg1\"><block type=\"text_add\" id=\"!1^u|J~19TYp?d2%n$W[\"><value name=\"arg0\"><shadow type=\"text\" id=\"cF9A-)10B7uQPkw`hNeF\"><field name=\"TEXT\">/</field></shadow></value><value name=\"arg1\"><block type=\"variables_get\" id=\"t#g5e2-MNqTC_lgX%ThA\"><field name=\"VAR\" id=\"=U|l_o(Ls6dvKY}1M4n[\">first_month</field></block></value></block></value></block></value></block></value></block></next></block></statement><next><block type=\"timer_delay\" id=\"pRVFqaBBpsM{6gb]Y6^@\"><value name=\"DELAY\"><shadow type=\"math_number\" id=\"UYofkW.o$h}$h.qTyuti\"><field name=\"NUM\">1</field></shadow></value><next><block type=\"espnow_send\" id=\"$t8[-Qwe/@c`?6de])Zs\"><field name=\"ID\">1</field><value name=\"DATA\"><shadow type=\"text\" id=\",pk;$2Unw[Q{P?1@BBG3\"><field name=\"TEXT\"></field></shadow><block type=\"map_on_loop\" id=\"fnuIs)`4;.XwDM3,[rmD\"><statement name=\"LOOP\"><block type=\"create_map_key\" id=\"5cnF5K25DNmE}7Nu!@p(\"><value name=\"key\"><block type=\"text\" id=\"GF9+gxeaKvQf[#[$On9F\"><field name=\"TEXT\">first_day</field></block></value><value name=\"value\"><block type=\"variables_get\" id=\"RLiuCtzq8S~}*=tM34tD\"><field name=\"VAR\" id=\"reut22T~Zmli@+XBPzH.\">first_day</field></block></value><next><block type=\"create_map_key\" id=\"BAa??nBxtCjT@hu?-L}$\"><value name=\"key\"><block type=\"text\" id=\"I?epAnhF]5xv$;6M7:hS\"><field name=\"TEXT\">first_month</field></block></value><value name=\"value\"><block type=\"variables_get\" id=\"Gu1L{!G$CJ8id;*wN:;X\"><field name=\"VAR\" id=\"=U|l_o(Ls6dvKY}1M4n[\">first_month</field></block></value></block></next></block></statement></block></value><next><block type=\"variables_set\" id=\"L)a2-l7vt3lfv7|Jpyj-\"><field name=\"VAR\" id=\"D[LVOSyFVO!F3w0p%wD:\">4pH_voltage</field><value name=\"VALUE\"><block type=\"math_number\" id=\":5({QGTM%K1)zJB,L*NJ\"><field name=\"NUM\">0.715</field></block></value><next><block type=\"variables_set\" id=\"czMGbA5jT9~Y%krqk$[2\"><field name=\"VAR\" id=\"a6t+hA/0+tk}-H0D|PUd\">7pH_Voltage</field><value name=\"VALUE\"><block type=\"math_number\" id=\"*HNV6SMviS17.B{^;]!K\"><field name=\"NUM\">0.536</field></block></value><next><block type=\"variables_set\" id=\"jFl$8mc9iQw80~`KkG64\"><field name=\"VAR\" id=\"jnXn[.Dhm?*Qa[Cl/SeZ\">pH</field><value name=\"VALUE\"><block type=\"math_number\" id=\"PXrGC`Ktngkv5jvJxnI}\"><field name=\"NUM\">0</field></block></value><next><block type=\"variables_set\" id=\"NCp.BgFAqZDR8B={01Vg\"><field name=\"VAR\" id=\"m]5dUxJ+Y{F:F*vd=(0,\">gradient</field><value name=\"VALUE\"><block type=\"math_arithmetic\" id=\"oAPhW:cYNn}@q/wz2(OP\"><field name=\"OP\">DIVIDE</field><value name=\"A\"><block type=\"math_arithmetic\" id=\"vL].^e@suP/NT}~KY[jr\"><field name=\"OP\">MINUS</field><value name=\"A\"><block type=\"math_number\" id=\"{I%W/*r:ieIb{O~!-~}n\"><field name=\"NUM\">4</field></block></value><value name=\"B\"><block type=\"math_number\" id=\"TPZ8$9fZr)PD0Wf}1kRy\"><field name=\"NUM\">7</field></block></value></block></value><value name=\"B\"><block type=\"math_arithmetic\" id=\"lqT7C]1e6fR#FAK[fG)s\"><field name=\"OP\">MINUS</field><value name=\"A\"><block type=\"variables_get\" id=\"lR0?:{Sw`;XDk^6e/HW*\"><field name=\"VAR\" id=\"D[LVOSyFVO!F3w0p%wD:\">4pH_voltage</field></block></value><value name=\"B\"><block type=\"variables_get\" id=\"o1HdZrbp@9,y!Dwfim$_\"><field name=\"VAR\" id=\"a6t+hA/0+tk}-H0D|PUd\">7pH_Voltage</field></block></value></block></value></block></value><next><block type=\"variables_set\" id=\"+a5A]tCH::V4+Up}Goq7\"><field name=\"VAR\" id=\"Ta[L5!0/5i@G9T3[SLmk\">yIntercept</field><value name=\"VALUE\"><block type=\"math_arithmetic\" id=\"fSVP,PiTx2:*B!WUg^G)\"><field name=\"OP\">MINUS</field><value name=\"A\"><block type=\"math_number\" id=\"0qFUXDA1T;l)BZwn%Sn4\"><field name=\"NUM\">7</field></block></value><value name=\"B\"><block type=\"math_arithmetic\" id=\"Oh,g5.3ss_fpF.zBu{{U\"><field name=\"OP\">MULTIPLY</field><value name=\"A\"><block type=\"variables_get\" id=\"^C{7bRcRUk{D7gT+MdP(\"><field name=\"VAR\" id=\"m]5dUxJ+Y{F:F*vd=(0,\">gradient</field></block></value><value name=\"B\"><block type=\"variables_get\" id=\"t%=Q^2Br1TcodMZ;WQWX\"><field name=\"VAR\" id=\"a6t+hA/0+tk}-H0D|PUd\">7pH_Voltage</field></block></value></block></value></block></value><next><block type=\"basic_on_loop\" id=\"6B}?8N8Dd6Mgt|+pIdmY\"><statement name=\"LOOP\"><block type=\"controls_whileUntil\" id=\"S$~b/`?_[IrHD]!PX;iT\"><field name=\"MODE\">UNTIL</field><value name=\"BOOL\"><block type=\"button_ispressed\" id=\"pdWM4;9Z/@%ohrj4?H._\"><field name=\"BUTTON\">B</field><field name=\"EVENT\">isPressed</field></block></value><statement name=\"DO\"><block type=\"controls_if\" id=\"pS9qQdT,PMFg/~*00xjx\"><mutation elseif=\"1\"></mutation><value name=\"IF0\"><block type=\"button_ispressed\" id=\"pM_oWCDcN]YGV{hvmW0D\"><field name=\"BUTTON\">A</field><field name=\"EVENT\">isPressed</field></block></value><statement name=\"DO0\"><block type=\"variables_set\" id=\"D(bN/~Qfd3;2e^91XnQ:\"><field name=\"VAR\" id=\"6GUZobtL8U;Vf4r(XMKt\">current_day</field><value name=\"VALUE\"><block type=\"math_arithmetic\" id=\"Q;y`}S:Fq$-o(70PpBUT\"><field name=\"OP\">ADD</field><value name=\"A\"><block type=\"variables_get\" id=\",E:b0Z=)jqF=*Th.9={g\"><field name=\"VAR\" id=\"6GUZobtL8U;Vf4r(XMKt\">current_day</field></block></value><value name=\"B\"><block type=\"math_number\" id=\"Lkue(7|45T@e9(!HzpF9\"><field name=\"NUM\">1</field></block></value></block></value><next><block type=\"controls_if\" id=\"C3wX;ezo1tc2O*C.w|ah\"><value name=\"IF0\"><block type=\"logic_operation\" id=\"ZN[+3bPFH.O,L//4sOOn\"><field name=\"OP\">OR</field><value name=\"A\"><block type=\"logic_compare\" id=\"L,1HoBMd#+L}s1B}0zzS\"><field name=\"OP\">GTE</field><value name=\"A\"><block type=\"variables_get\" id=\"o}U~!?QD`qj(th~]xDPo\"><field name=\"VAR\" id=\"6GUZobtL8U;Vf4r(XMKt\">current_day</field></block></value><value name=\"B\"><block type=\"math_number\" id=\"qePhC#dy^jP5PoGrLm;N\"><field name=\"NUM\">32</field></block></value></block></value><value name=\"B\"><block type=\"logic_operation\" id=\"SR[$,jg3v3j4@O(zpMZM\"><field name=\"OP\">AND</field><value name=\"A\"><block type=\"logic_compare\" id=\"^A:8xv}dTC;F-N(#S4Ft\"><field name=\"OP\">LT</field><value name=\"A\"><block type=\"variables_get\" id=\"e~pzN%+gZ8}yKx|?a4?N\"><field name=\"VAR\" id=\"6GUZobtL8U;Vf4r(XMKt\">current_day</field></block></value><value name=\"B\"><block type=\"variables_get\" id=\"+dJmVZwIs#Ax5Cy!A=;A\"><field name=\"VAR\" id=\"reut22T~Zmli@+XBPzH.\">first_day</field></block></value></block></value><value name=\"B\"><block type=\"logic_compare\" id=\"2E9A[mewbA4,HIA5Nt2+\"><field name=\"OP\">LTE</field><value name=\"A\"><block type=\"variables_get\" id=\"l,t2YFG%k`_y0qFOccdQ\"><field name=\"VAR\" id=\"_HeRH{o(:Dr]U7XX%`OD\">current_month</field></block></value><value name=\"B\"><block type=\"variables_get\" id=\"4Xp.7DW8tsKUMi),6036\"><field name=\"VAR\" id=\"_HeRH{o(:Dr]U7XX%`OD\">current_month</field></block></value></block></value></block></value></block></value><statement name=\"DO0\"><block type=\"variables_set\" id=\"/ib@*2E!f+ws4gEIMVkt\"><field name=\"VAR\" id=\"6GUZobtL8U;Vf4r(XMKt\">current_day</field><value name=\"VALUE\"><block type=\"variables_get\" id=\"H!FE[4x7J{s/PLTR0Mhg\"><field name=\"VAR\" id=\"reut22T~Zmli@+XBPzH.\">first_day</field></block></value></block></statement><next><block type=\"label_set_text\" id=\"T!zwpQk2Eix~Z.ypAt$A\"><field name=\"COMPONENT\">label1</field><value name=\"TEXT\"><shadow type=\"text\"><field name=\"TEXT\">Hello M5</field></shadow><block type=\"variables_get\" id=\"_,3+D0RPg%Nj/flxOVV#\"><field name=\"VAR\" id=\"6GUZobtL8U;Vf4r(XMKt\">current_day</field></block></value><next><block type=\"timer_delay\" id=\"2eKpMYWbQxqCKZ@C$pol\"><value name=\"DELAY\"><shadow type=\"math_number\" id=\"l#oSh$kcm__6_=bopvce\"><field name=\"NUM\">1</field></shadow></value></block></next></block></next></block></next></block></statement><value name=\"IF1\"><block type=\"button_ispressed\" id=\"i6D,Lsqs%MJ!.s;+La~U\"><field name=\"BUTTON\">C</field><field name=\"EVENT\">isPressed</field></block></value><statement name=\"DO1\"><block type=\"variables_set\" id=\"P6|A5zimS|Y+ONTLY4FN\"><field name=\"VAR\" id=\"_HeRH{o(:Dr]U7XX%`OD\">current_month</field><value name=\"VALUE\"><block type=\"math_arithmetic\" id=\"8{,7LXn1Kl]A_AwWCRcN\"><field name=\"OP\">ADD</field><value name=\"A\"><block type=\"variables_get\" id=\"C[DtQLLC;Rve)}P7P1;W\"><field name=\"VAR\" id=\"_HeRH{o(:Dr]U7XX%`OD\">current_month</field></block></value><value name=\"B\"><block type=\"math_number\" id=\"]kzNeyXLuuM5(fUH+_#p\"><field name=\"NUM\">1</field></block></value></block></value><next><block type=\"controls_if\" id=\"WUdE#kJT7O^e-`#zE4GV\"><value name=\"IF0\"><block type=\"logic_operation\" id=\"yGs?*AW2lvjOf@ZPBj,7\"><field name=\"OP\">OR</field><value name=\"A\"><block type=\"logic_compare\" id=\"t$Bh$G6@z9n*Fb3R:4R0\"><field name=\"OP\">GTE</field><value name=\"A\"><block type=\"variables_get\" id=\"AU=KCd2vWy{hbW3k+HDM\"><field name=\"VAR\" id=\"_HeRH{o(:Dr]U7XX%`OD\">current_month</field></block></value><value name=\"B\"><block type=\"math_number\" id=\"Qy,g[uCmWK[H{J3:LvPK\"><field name=\"NUM\">4</field></block></value></block></value><value name=\"B\"><block type=\"logic_operation\" id=\"e/Ar,-gG}hqZWh-M%e5`\"><field name=\"OP\">AND</field><value name=\"A\"><block type=\"logic_compare\" id=\"VCb)h]|JHEhHtev@R/D@\"><field name=\"OP\">LT</field><value name=\"A\"><block type=\"variables_get\" id=\"`SzG|9sYsF8~-g$wVHY4\"><field name=\"VAR\" id=\"6GUZobtL8U;Vf4r(XMKt\">current_day</field></block></value><value name=\"B\"><block type=\"variables_get\" id=\"jbMi?CnuF:1Tw6B/N/_D\"><field name=\"VAR\" id=\"reut22T~Zmli@+XBPzH.\">first_day</field></block></value></block></value><value name=\"B\"><block type=\"logic_compare\" id=\"gtU9:^|T(9?^)0gF2:3S\"><field name=\"OP\">LTE</field><value name=\"A\"><block type=\"variables_get\" id=\"|zKsB%]IA/*lxz}T{0vm\"><field name=\"VAR\" id=\"_HeRH{o(:Dr]U7XX%`OD\">current_month</field></block></value><value name=\"B\"><block type=\"variables_get\" id=\"Cq?$6G(r~.8uQyJw_e/*\"><field name=\"VAR\" id=\"_HeRH{o(:Dr]U7XX%`OD\">current_month</field></block></value></block></value></block></value></block></value><statement name=\"DO0\"><block type=\"variables_set\" id=\"S$N#Dy/Ey/VZENmLW(,?\"><field name=\"VAR\" id=\"_HeRH{o(:Dr]U7XX%`OD\">current_month</field><value name=\"VALUE\"><block type=\"variables_get\" id=\"%tN-C%pchyO80l:.FR*,\"><field name=\"VAR\" id=\"_HeRH{o(:Dr]U7XX%`OD\">current_month</field></block></value></block></statement><next><block type=\"label_set_text\" id=\"LwcEf$BToov/?4HLlL^6\"><field name=\"COMPONENT\">label4</field><value name=\"TEXT\"><shadow type=\"text\"><field name=\"TEXT\">Hello M5</field></shadow><block type=\"variables_get\" id=\"_!jJW8e+2TGHSC-iN5[7\"><field name=\"VAR\" id=\"_HeRH{o(:Dr]U7XX%`OD\">current_month</field></block></value><next><block type=\"timer_delay\" id=\"ZE;7Qa0(XXw+bx/d)+DL\"><value name=\"DELAY\"><shadow type=\"math_number\" id=\"b6wRE[aH8DoxSBqjDpiu\"><field name=\"NUM\">1</field></shadow></value></block></next></block></next></block></next></block></statement><next><block type=\"label_set_text\" id=\"c6RW8XR(QOFgkF?p9uxH\"><field name=\"COMPONENT\">label6</field><value name=\"TEXT\"><shadow type=\"text\" id=\"{th3S6tz|0:v;R])x{rA\"><field name=\"TEXT\">Hello M5</field></shadow><block type=\"text_add\" id=\"utpEM+.%6%!=hSi$t38*\"><value name=\"arg0\"><shadow type=\"text\" id=\"YGv001h./k52D!=z?`UV\"><field name=\"TEXT\">Current date of recording</field></shadow></value><value name=\"arg1\"><block type=\"text_add\" id=\";ei$MZ*`Bpi^{`yRB%CP\"><value name=\"arg0\"><shadow type=\"text\"><field name=\"TEXT\"></field></shadow><block type=\"variables_get\" id=\"U^/,}%=!,$NvFm^LkQXG\"><field name=\"VAR\" id=\"6GUZobtL8U;Vf4r(XMKt\">current_day</field></block></value><value name=\"arg1\"><block type=\"text_add\" id=\"{Qn|Y$;PlrAJ=5.DDfwd\"><value name=\"arg0\"><shadow type=\"text\" id=\"v]gVzgzzHb3J?uVaFzH|\"><field name=\"TEXT\">/</field></shadow></value><value name=\"arg1\"><block type=\"variables_get\" id=\"Iu6FigH2$%LnsRlsLOnS\"><field name=\"VAR\" id=\"_HeRH{o(:Dr]U7XX%`OD\">current_month</field></block></value></block></value></block></value></block></value></block></next></block></statement><next><block type=\"variables_set\" id=\"oio:D;a@4@A!$^Wh;CCV\"><field name=\"VAR\" id=\"LGGq^8)J-FF69@]s4iLH\">voltsReading</field><value name=\"VALUE\"><block type=\"math_number\" id=\"!~/QjdQmZMTMI05TV_aW\"><field name=\"NUM\">0</field></block></value><next><block type=\"controls_repeat\" id=\"SAAJrE]YlTS#cP2@/@K|\"><field name=\"TIMES\">6</field><statement name=\"DO\"><block type=\"variables_set\" id=\"nW4BoEbd]A|YVX?FQ~|i\"><field name=\"VAR\" id=\"LGGq^8)J-FF69@]s4iLH\">voltsReading</field><value name=\"VALUE\"><block type=\"math_arithmetic\" id=\"p(3igptK@$N[Yi}GLX/e\"><field name=\"OP\">ADD</field><value name=\"A\"><block type=\"math_arithmetic\" id=\"{npULO[ib1*=@l5=W#;$\"><field name=\"OP\">DIVIDE</field><value name=\"A\"><block type=\"pins_analog_read\" id=\"WcgH#}wUVnzss~S]:IzA\"><field name=\"PIN\">36</field></block></value><value name=\"B\"><block type=\"math_number\" id=\"qa[!pI,=ttFf$dO.8q#4\"><field name=\"NUM\">1000</field></block></value></block></value><value name=\"B\"><block type=\"variables_get\" id=\"{Sjo`|CN[/}g=y}isOM2\"><field name=\"VAR\" id=\"LGGq^8)J-FF69@]s4iLH\">voltsReading</field></block></value></block></value></block></statement><next><block type=\"variables_set\" id=\"4]VZFg)]eCJ,@z$+-f1d\"><field name=\"VAR\" id=\"LGGq^8)J-FF69@]s4iLH\">voltsReading</field><value name=\"VALUE\"><block type=\"math_arithmetic\" id=\"uE2C;_]kAPr5|B0Y)S|)\"><field name=\"OP\">DIVIDE</field><value name=\"A\"><block type=\"variables_get\" id=\"{?,n;ssmw@@G)U$K2KM6\"><field name=\"VAR\" id=\"LGGq^8)J-FF69@]s4iLH\">voltsReading</field></block></value><value name=\"B\"><block type=\"math_number\" id=\",lDG^j#yFn7!$)XA}5Fe\"><field name=\"NUM\">6</field></block></value></block></value><next><block type=\"variables_set\" id=\"PEwq`Hru2`Y+Tq^^ofPu\"><field name=\"VAR\" id=\"jnXn[.Dhm?*Qa[Cl/SeZ\">pH</field><value name=\"VALUE\"><block type=\"math_arithmetic\" id=\"0e9Q~^@lS)x%[aN[MwTs\"><field name=\"OP\">ADD</field><value name=\"A\"><block type=\"math_arithmetic\" id=\"4TVOrjNFRX^RubakDbUR\"><field name=\"OP\">MULTIPLY</field><value name=\"A\"><block type=\"variables_get\" id=\"~#mi`+^:~sqrIO)J$@z~\"><field name=\"VAR\" id=\"m]5dUxJ+Y{F:F*vd=(0,\">gradient</field></block></value><value name=\"B\"><block type=\"variables_get\" id=\"rBEbWnf?w3PJaI?J3Lh#\"><field name=\"VAR\" id=\"LGGq^8)J-FF69@]s4iLH\">voltsReading</field></block></value></block></value><value name=\"B\"><block type=\"variables_get\" id=\"k+ssj0Jep{N()!d*{_DL\"><field name=\"VAR\" id=\"Ta[L5!0/5i@G9T3[SLmk\">yIntercept</field></block></value></block></value><next><block type=\"variables_set\" id=\"OqB/^I6M0Swanx{To7i:\"><field name=\"VAR\" id=\"CXCfadItPvi1[]:/FDN3\">data</field><value name=\"VALUE\"><block type=\"map_on_loop\" id=\"F6/A.~;@PeVFY-($4uwl\"><statement name=\"LOOP\"><block type=\"create_map_key\" id=\"A]{n9P/9;-4*n*vM9^D!\"><value name=\"key\"><block type=\"text\" id=\"3yPvG]:!mo#j|d}tzv#e\"><field name=\"TEXT\">pH</field></block></value><value name=\"value\"><block type=\"variables_get\" id=\"t))27r6TRcV+^06n};,K\"><field name=\"VAR\" id=\"jnXn[.Dhm?*Qa[Cl/SeZ\">pH</field></block></value><next><block type=\"create_map_key\" id=\"[7uuOcuCb}Ix-~$W!=A7\"><value name=\"key\"><block type=\"text\" id=\"=s;*?;=D}t=$p_E]riFh\"><field name=\"TEXT\">current_month</field></block></value><value name=\"value\"><block type=\"variables_get\" id=\"a1?aID8(!1?vKEH|!CsP\"><field name=\"VAR\" id=\"_HeRH{o(:Dr]U7XX%`OD\">current_month</field></block></value><next><block type=\"create_map_key\" id=\"1gi~;P99xB6{#GLWR{6^\"><value name=\"key\"><block type=\"text\" id=\"LuojCPxJJhNDPRxEw(l0\"><field name=\"TEXT\">current_day</field></block></value><value name=\"value\"><block type=\"variables_get\" id=\"Efa|m6x]b5IufkWPu]qC\"><field name=\"VAR\" id=\"6GUZobtL8U;Vf4r(XMKt\">current_day</field></block></value></block></next></block></next></block></statement></block></value><next><block type=\"label_set_text\" id=\".0CiZzF@@(0:t~/cVT3G\"><field name=\"COMPONENT\">label8</field><value name=\"TEXT\"><shadow type=\"text\" id=\"|}.Az.Ty8RUom9~2jWqB\"><field name=\"TEXT\">Hello M5</field></shadow><block type=\"variables_get\" id=\"ztbAWA+J1tF#f]?[HEzb\"><field name=\"VAR\" id=\"jnXn[.Dhm?*Qa[Cl/SeZ\">pH</field></block></value><next><block type=\"espnow_send\" id=\"Dqg;uYNH7^kEg[I62d;J\"><field name=\"ID\">1</field><value name=\"DATA\"><shadow type=\"text\" id=\"Ob]l%w9z2a.v`Q8ieQi0\"><field name=\"TEXT\"></field></shadow><block type=\"variables_get\" id=\")_B#`dk+0HSlyq_-]rRN\"><field name=\"VAR\" id=\"CXCfadItPvi1[]:/FDN3\">data</field></block></value><next><block type=\"timer_delay\" id=\"5+8(E^3Sm+jTyNe2xx5Q\"><value name=\"DELAY\"><shadow type=\"math_number\" id=\"fL8uo6#_Wp}(9`z3;Wa2\"><field name=\"NUM\">3</field></shadow></value></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></statement></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block><block type=\"variables_get\" id=\"$g@l~``*U!=V_9T^f?hU\" disabled=\"true\" x=\"830\" y=\"570\"><field name=\"VAR\" id=\"m]5dUxJ+Y{F:F*vd=(0,\">gradient</field></block><block type=\"math_number\" id=\"4oko}=ZN}HbN2R-=_kJ@\" disabled=\"true\" x=\"850\" y=\"630\"><field name=\"NUM\">0.536</field></block><block type=\"math_number\" id=\"OM.Yr^MdW!gR9uXEY!Ze\" disabled=\"true\" x=\"885\" y=\"1233\"><field name=\"NUM\">31</field></block><block type=\"variables_set\" id=\"]=T~]GK^b!Q72/`A8+;E\" disabled=\"true\" x=\"382\" y=\"1371\"><field name=\"VAR\" id=\"?s0aU/_AF,:wPZJ^-59b\">counter</field><value name=\"VALUE\"><block type=\"math_number\" id=\"i3m``Qd5LoSV@yRyWJvd\" disabled=\"true\"><field name=\"NUM\">1</field></block></value></block><block type=\"math_number\" id=\"mKb;:l%%!/vg8WWQ}Duk\" disabled=\"true\" x=\"647\" y=\"1449\"><field name=\"NUM\">0</field></block><block type=\"math_number\" id=\"Tt$XqMX3?~yQFF^wDX#]\" disabled=\"true\" x=\"695\" y=\"1762\"><field name=\"NUM\">0</field></block><block type=\"variables_get\" id=\"t+%{v1jLHT#%5k,Kn#NQ\" disabled=\"true\" x=\"765\" y=\"2237\"><field name=\"VAR\" id=\"CXCfadItPvi1[]:/FDN3\">data</field></block><block type=\"get_map_key\" id=\";p=:jY5}!(v|w,BM)9j!\" disabled=\"true\" x=\"641\" y=\"2442\"><value name=\"key\"><block type=\"text\" id=\"27Gx9Sy`e$Z[/k`De+T5\" disabled=\"true\"><field name=\"TEXT\">pH</field></block></value></block>","Blockly.Remotes":[],"Blockly.RemotePlus":[{"id":"__title","blockId":"","createTime":1675940120696,"name":"M5RemoteTitle","dragAndDrop":false,"resizable":false,"options":{"minWidth":1,"minHeight":1,"maxWidth":6,"maxHeight":10,"defaultWidth":2,"defaultHeight":1},"w":2,"h":1,"bgColor":"#0080FF","color":"#fff","fontsize":"M","label":"M5Remote","interval":3000,"code":"","event":"","dataSource":"none","ezdataToken":"","topic":"","needShadow":false,"type":"title","x":0,"y":0}],"modules":[],"cbIdList_":[],"eventCBIdList_":[]}

M5Stack 2 Blocky Code (Earth&ENV sensor)

Python

Blocky code version

CODE
{"components":[{"id":"____screen","createTime":1675944164186,"name":"screen","x":0,"y":0,"width":320,"height":240,"backgroundColor":"#222222","backgroundImage":"","type":"screen"},{"id":"____buttonA","createTime":1675944164186,"name":"ButtonA","buttonIndex":0,"x":35,"y":216,"width":64,"height":24,"text":"ButtonA","visibility":false,"type":"button"},{"id":"____buttonB","createTime":1675944164186,"name":"ButtonB","buttonIndex":1,"x":125,"y":216,"width":64,"height":24,"text":"ButtonB","visibility":false,"type":"button"},{"id":"____buttonC","createTime":1675944164186,"name":"ButtonC","buttonIndex":2,"x":215,"y":216,"width":64,"height":24,"text":"ButtonC","visibility":false,"type":"button"},{"id":"x*1c8CPg^lqX#axe","createTime":1675944188496,"isCoreTwo":false,"isPaper":false,"name":"label0","x":126,"y":14,"color":"#000000","text":"Data Sent","font":"lcd.FONT_Default","rotation":0,"type":"label","layer":33},{"id":"Tav74Kmqz6e+O5m@","createTime":1675944191189,"name":"rectangle0","x":0,"y":0,"width":320,"height":45,"borderColor":"#FFFFFF","backgroundColor":"#FFFFFF","type":"rectangle","layer":3},{"id":"dN^Hp8jy`!FWAcTa","createTime":1675944239505,"isCoreTwo":false,"isPaper":false,"name":"label1","x":16,"y":59,"color":"#FFFFFF","text":"Mac Address:","font":"lcd.FONT_Default","rotation":0,"type":"label","layer":29},{"id":"7HW*1N1rcBdr5RAa","createTime":1675944251296,"isCoreTwo":false,"isPaper":false,"name":"label2","x":16,"y":88,"color":"#FFFFFF","text":"Text","font":"lcd.FONT_Default","rotation":0,"type":"label","layer":30},{"id":"6emX#jli4H#XclXH","createTime":1675944254671,"isCoreTwo":false,"isPaper":false,"name":"label3","x":12,"y":134,"color":"#FFFFFF","text":"Data Sent:","font":"lcd.FONT_Default","rotation":0,"type":"label","layer":31},{"id":"rVom6c^FFueuBKJn","createTime":1675944264331,"isCoreTwo":false,"isPaper":false,"name":"label4","x":12,"y":167,"color":"#FFFFFF","text":"Text","font":"lcd.FONT_Default","rotation":0,"type":"label","layer":32},{"id":"b&LD3MR0qe*U0#Vz","createTime":1675945253232,"isCoreTwo":false,"isPaper":false,"name":"label5","x":16,"y":224,"color":"#FFFFFF","text":"Text","font":"lcd.FONT_Default","rotation":0,"type":"label","layer":10,"width":null,"height":null,"radius":null}],"type":"fire","versions":"Beta","units":[{"id":"=RFM1VqaKptpZJV2","createTime":1675945563358,"hidden":false,"type":"env3","name":"env3_0","port":"A","default":["A","E","PAHUB","Custom"],"pb_port":[0,1,2,3,4,5],"new_pb_port":"0","user_port":["21","22"],"icon":"env3.png"},{"id":"veq6CADZM+*iN%vU","createTime":1675945567726,"stickType":"stick","type":"earth","name":"earth_0","port":"B","default":["B","D","Custom"],"user_port":["21","22"],"icon":"earth.png"}],"hats":[],"blockly":"<variables><variable id=\"3hxo7=7SV+G$h=N$SV[Z\">mac</variable><variable id=\"BOCQUORM$f]`@xh|)lmd\">Data_send</variable><variable id=\"pbu4qg~+P9p5IVc;#qQo\">total_days</variable><variable id=\"@Nk/-/ZLstJ)o8vR_`UA\">current_month</variable><variable id=\"Jypy0kJz97lB;yT_Av(_\">current_day</variable><variable id=\"3E`?7_E89VCz]oKYD%YR\">first_day</variable><variable id=\"ItOMZ$1t=1=.q~6J-yW~\">months</variable><variable id=\"7Q0fV}nq3qEaeB]*P~H^\">first_month</variable></variables><block type=\"basic_on_setup\" id=\"setup_block\" deletable=\"false\" x=\"-10\" y=\"110\"><next><block type=\"espnow_add_peer\" id=\"(K2a{H[QG=WA!8^)Nl#D\"><field name=\"MAC\">f0:08:d1:c7:31:59</field><field name=\"ID\">1</field><next><block type=\"label_set_text\" id=\"YD__C4HW=!YG[=W{LASn\"><field name=\"COMPONENT\">label2</field><value name=\"TEXT\"><shadow type=\"text\" id=\"#vLO#OdH2bq?7s4g~`s-\"><field name=\"TEXT\">Hello M5</field></shadow><block type=\"espnow_get_mac_addr\" id=\"O)EWn/e~ku90#}?cmD{e\"></block></value><next><block type=\"variables_set\" id=\"s}b#~,FPO+,2R8cJUH{z\"><field name=\"VAR\" id=\"@Nk/-/ZLstJ)o8vR_`UA\">current_month</field><value name=\"VALUE\"><block type=\"math_number\" id=\"H]QKIxV#a3u$]]JTPWh3\"><field name=\"NUM\">0</field></block></value><next><block type=\"variables_set\" id=\".$Y=Asdj/npJ8|Bkn-3q\"><field name=\"VAR\" id=\"Jypy0kJz97lB;yT_Av(_\">current_day</field><value name=\"VALUE\"><block type=\"math_number\" id=\"1_Jw_h4v.A2^/Xn1SPDB\"><field name=\"NUM\">0</field></block></value><next><block type=\"variables_set\" id=\"tw|hOlfJR.pX@CjxD)MA\"><field name=\"VAR\" id=\"ItOMZ$1t=1=.q~6J-yW~\">months</field><value name=\"VALUE\"><block type=\"map_on_loop\" id=\"oW3s+jO@Q?mVYPPd:jt%\"><statement name=\"LOOP\"><block type=\"create_map_key\" id=\"SDxOakwszHF7di[]q6E[\"><value name=\"key\"><block type=\"math_number\" id=\"4OJ}YUEQVg:j67v$BMs1\"><field name=\"NUM\">1</field></block></value><value name=\"value\"><block type=\"math_number\" id=\"]=~2]{yiT)t?Qg%!6w9K\"><field name=\"NUM\">31</field></block></value><next><block type=\"create_map_key\" id=\"|Qp+@~==2#h|H`kxW7he\"><value name=\"key\"><block type=\"math_number\" id=\")m`XRF31jhSwTE`7ybtP\"><field name=\"NUM\">2</field></block></value><value name=\"value\"><block type=\"math_number\" id=\"uaiPB,7|Um;)w,$/P!i.\"><field name=\"NUM\">28</field></block></value><next><block type=\"create_map_key\" id=\"|/V=rm^{_?JKdA_/8Ev^\"><value name=\"key\"><block type=\"math_number\" id=\"59ri=-#Ad$0oC==%]Z%Y\"><field name=\"NUM\">3</field></block></value><value name=\"value\"><block type=\"math_number\" id=\"0_e#{H9,KdO;Y{RhU5I1\"><field name=\"NUM\">31</field></block></value><next><block type=\"create_map_key\" id=\"@G0fKH)@[Ro$at%~pnD5\"><value name=\"key\"><block type=\"math_number\" id=\"Y]gDd@FdT9)NLoboKNmE\"><field name=\"NUM\">0</field></block></value><value name=\"value\"><block type=\"math_number\" id=\"+A}*y=[5fKx4UI.[y5A4\"><field name=\"NUM\">0</field></block></value></block></next></block></next></block></next></block></statement></block></value></block></next></block></next></block></next></block></next></block></next></block><block type=\"espnow_recv_cb\" id=\",:U?FmGY_0+p3FB|M(Jg\" x=\"430\" y=\"150\"><value name=\"MAC_ADDR\"><block type=\"variables_get\" id=\"#(ZY*xFrdF(qf))LqGD~\"><field name=\"VAR\" id=\"3hxo7=7SV+G$h=N$SV[Z\">mac</field></block></value><value name=\"DATA\"><block type=\"variables_get\" id=\",Z=VWLlsUUw1I}G4wv`p\"><field name=\"VAR\" id=\"BOCQUORM$f]`@xh|)lmd\">Data_send</field></block></value><statement name=\"FUNC\"><block type=\"variables_set\" id=\"Co_@o%~IrPVfNJ=Wxh(=\"><field name=\"VAR\" id=\"pbu4qg~+P9p5IVc;#qQo\">total_days</field><value name=\"VALUE\"><block type=\"math_number\" id=\"nD-IeeJDjb)XkYHcJ}cB\"><field name=\"NUM\">0</field></block></value><next><block type=\"variables_set\" id=\"xI4iMwv6h0@BZ)n5-]A}\"><field name=\"VAR\" id=\"BOCQUORM$f]`@xh|)lmd\">Data_send</field><value name=\"VALUE\"><block type=\"text_replace\" id=\"+M/X^$;IfVaUAhG9sXEH\"><value name=\"FROM\"><block type=\"text\" id=\"CdAx0#ZN3#YTNLHD$p~S\"><field name=\"TEXT\">'</field></block></value><value name=\"TO\"><block type=\"text\" id=\"wg{`+}l=~Dd-*O4dA48j\"><field name=\"TEXT\">\"</field></block></value><value name=\"TEXT\"><block type=\"variables_get\" id=\"T,o@VpM%oMud-z|$wsmK\"><field name=\"VAR\" id=\"BOCQUORM$f]`@xh|)lmd\">Data_send</field></block></value></block></value><next><block type=\"variables_set\" id=\"ZbAc=*u}S!8=rUm6z4FL\"><field name=\"VAR\" id=\"BOCQUORM$f]`@xh|)lmd\">Data_send</field><value name=\"VALUE\"><block type=\"loads_json\" id=\"RVs*EATDtz0W%C2%{!.c\"><value name=\"JSON_VAR\"><block type=\"variables_get\" id=\"ClW@(QDI,{g)6B]);+j!\"><field name=\"VAR\" id=\"BOCQUORM$f]`@xh|)lmd\">Data_send</field></block></value></block></value><next><block type=\"controls_if\" id=\"|s2o*hAaq`bi[BfrPjIZ\"><mutation else=\"1\"></mutation><value name=\"IF0\"><block type=\"logic_compare\" id=\"x}ysx?.|b!)BI@qg_Y*/\"><field name=\"OP\">LTE</field><value name=\"A\"><block type=\"lists_length\" id=\"TBTfQx67!g4a[Gr=c:^:\"><value name=\"VALUE\"><block type=\"variables_get\" id=\"5*a|gitWH?XlD/.hu0ZK\"><field name=\"VAR\" id=\"BOCQUORM$f]`@xh|)lmd\">Data_send</field></block></value></block></value><value name=\"B\"><block type=\"math_number\" id=\"45wP:`kjbJquIRo-[D`{\"><field name=\"NUM\">2</field></block></value></block></value><statement name=\"DO0\"><block type=\"variables_set\" id=\"B?Az_nj2Ti)JW|u?B`{,\"><field name=\"VAR\" id=\"3E`?7_E89VCz]oKYD%YR\">first_day</field><value name=\"VALUE\"><block type=\"get_map_key\" id=\"b!A*-PhW2/7KEWg]uRz5\"><value name=\"key\"><block type=\"text\" id=\"J?Svkumz+@lpql:n)0Qs\"><field name=\"TEXT\">first_day</field></block></value><value name=\"map\"><block type=\"variables_get\" id=\".a[uT925_2k9z3yZy:@|\"><field name=\"VAR\" id=\"BOCQUORM$f]`@xh|)lmd\">Data_send</field></block></value></block></value><next><block type=\"variables_set\" id=\"hrE%LU3,$]5jO#N.^FX:\"><field name=\"VAR\" id=\"7Q0fV}nq3qEaeB]*P~H^\">first_month</field><value name=\"VALUE\"><block type=\"get_map_key\" id=\"UFFl/:)5(^bf|nRSfjuP\"><value name=\"key\"><block type=\"text\" id=\"k+vqCYHhiJM_2q=}^#Qw\"><field name=\"TEXT\">first_month</field></block></value><value name=\"map\"><block type=\"variables_get\" id=\"?.iyx}jjCQHi7@cK5KhM\"><field name=\"VAR\" id=\"BOCQUORM$f]`@xh|)lmd\">Data_send</field></block></value></block></value></block></next></block></statement><statement name=\"ELSE\"><block type=\"variables_set\" id=\"IQ?4J!U$V,5VD8!:I~f3\"><field name=\"VAR\" id=\"Jypy0kJz97lB;yT_Av(_\">current_day</field><value name=\"VALUE\"><block type=\"get_map_key\" id=\"5eOk3M6J16vr95G#dpj7\"><value name=\"key\"><block type=\"text\" id=\"pYo/?Dv[/Z7Ei1$uSY;D\"><field name=\"TEXT\">current_day</field></block></value><value name=\"map\"><block type=\"variables_get\" id=\"(X1u.uaGO/%18roZs?13\"><field name=\"VAR\" id=\"BOCQUORM$f]`@xh|)lmd\">Data_send</field></block></value></block></value><next><block type=\"variables_set\" id=\"ir{fW4T(A!^oUV!WP.Aj\"><field name=\"VAR\" id=\"@Nk/-/ZLstJ)o8vR_`UA\">current_month</field><value name=\"VALUE\"><block type=\"get_map_key\" id=\"5+-hCG51_:T$5d+M(%4R\"><value name=\"key\"><block type=\"text\" id=\"OhlGUC9YO0nnJ0[u=X*l\"><field name=\"TEXT\">current_month</field></block></value><value name=\"map\"><block type=\"variables_get\" id=\"_0yrETU0=z]C)ST5eoW9\"><field name=\"VAR\" id=\"BOCQUORM$f]`@xh|)lmd\">Data_send</field></block></value></block></value></block></next></block></statement><next><block type=\"label_set_text\" id=\"?[P!el`O|aOq=+)FbE9,\"><field name=\"COMPONENT\">label5</field><value name=\"TEXT\"><shadow type=\"text\" id=\"_M]qF3AvFre;E={?]2hS\"><field name=\"TEXT\">Hello M5</field></shadow><block type=\"variables_get\" id=\"*{D}EcUQ/y:EWN369dPM\"><field name=\"VAR\" id=\"BOCQUORM$f]`@xh|)lmd\">Data_send</field></block></value><next><block type=\"controls_if\" id=\"Ni^$|?FD~~Fbo!i#z?~5\"><value name=\"IF0\"><block type=\"logic_compare\" id=\"dOm=TMx-+[~?Uk=Leg34\"><field name=\"OP\">NEQ</field><value name=\"A\"><block type=\"variables_get\" id=\",afX#)Cb1.S{1X5(h^p]\"><field name=\"VAR\" id=\"Jypy0kJz97lB;yT_Av(_\">current_day</field></block></value><value name=\"B\"><block type=\"math_number\" id=\"qTh7e6i/gs7:1egC`[dO\"><field name=\"NUM\">0</field></block></value></block></value><statement name=\"DO0\"><block type=\"controls_if\" id=\"-;o!=_sThLkCqgv|#X{I\"><mutation elseif=\"1\"></mutation><value name=\"IF0\"><block type=\"logic_compare\" id=\"$gOsR_3NV,IxRLvYGa#B\"><field name=\"OP\">NEQ</field><value name=\"A\"><block type=\"variables_get\" id=\"dBF.YgU7:h8_|bQt}}v?\"><field name=\"VAR\" id=\"7Q0fV}nq3qEaeB]*P~H^\">first_month</field></block></value><value name=\"B\"><block type=\"variables_get\" id=\"lu7ExOR[-tL+0WEwg$ob\"><field name=\"VAR\" id=\"@Nk/-/ZLstJ)o8vR_`UA\">current_month</field></block></value></block></value><statement name=\"DO0\"><block type=\"controls_whileUntil\" id=\"/`^dpl41JbY}O{^syG6Z\"><field name=\"MODE\">UNTIL</field><value name=\"BOOL\"><block type=\"logic_compare\" id=\"F;W5zp8-K}mAQ%_Df)`@\"><field name=\"OP\">EQ</field><value name=\"A\"><block type=\"variables_get\" id=\"0FCB0SI9nHzl44-^*P%c\"><field name=\"VAR\" id=\"7Q0fV}nq3qEaeB]*P~H^\">first_month</field></block></value><value name=\"B\"><block type=\"variables_get\" id=\"/yIQgstV9+qHDrA-w[3_\"><field name=\"VAR\" id=\"@Nk/-/ZLstJ)o8vR_`UA\">current_month</field></block></value></block></value><statement name=\"DO\"><block type=\"variables_set\" id=\"57`X8q+,!G8Bzr;6a|Md\"><field name=\"VAR\" id=\"@Nk/-/ZLstJ)o8vR_`UA\">current_month</field><value name=\"VALUE\"><block type=\"math_arithmetic\" id=\"tj+Y`8$1N4om}Xl+j#V)\"><field name=\"OP\">MINUS</field><value name=\"A\"><block type=\"variables_get\" id=\"bNvKhHI8:MhIwt$n$QIA\"><field name=\"VAR\" id=\"@Nk/-/ZLstJ)o8vR_`UA\">current_month</field></block></value><value name=\"B\"><block type=\"math_number\" id=\"Pe/IJzGatiWE;wxtV$97\"><field name=\"NUM\">1</field></block></value></block></value><next><block type=\"variables_set\" id=\"16sGWFDV2ejdJ{NEwApf\"><field name=\"VAR\" id=\"pbu4qg~+P9p5IVc;#qQo\">total_days</field><value name=\"VALUE\"><block type=\"math_arithmetic\" id=\"^QggkbFk[zB;TL$KV4Ji\"><field name=\"OP\">ADD</field><value name=\"A\"><block type=\"get_map_key\" id=\"VIpbFbCC!7/dprQTzvh@\"><value name=\"key\"><block type=\"variables_get\" id=\"Nj6b+hY0?2eC@M,iYR46\"><field name=\"VAR\" id=\"@Nk/-/ZLstJ)o8vR_`UA\">current_month</field></block></value><value name=\"map\"><block type=\"variables_get\" id=\"+U^`r2ZfgM(HVWQ)]bNn\"><field name=\"VAR\" id=\"ItOMZ$1t=1=.q~6J-yW~\">months</field></block></value></block></value><value name=\"B\"><block type=\"variables_get\" id=\"B.fm;p)x}?m;VQPBsqzs\"><field name=\"VAR\" id=\"pbu4qg~+P9p5IVc;#qQo\">total_days</field></block></value></block></value></block></next></block></statement><next><block type=\"variables_set\" id=\"fK;,j0?~JYezG/B%2E1$\"><field name=\"VAR\" id=\"pbu4qg~+P9p5IVc;#qQo\">total_days</field><value name=\"VALUE\"><block type=\"math_arithmetic\" id=\"^FRy{4Ek?$~M(iY~ktM3\"><field name=\"OP\">ADD</field><value name=\"A\"><block type=\"variables_get\" id=\".+j%h4,#/M@/j{MieZdO\"><field name=\"VAR\" id=\"Jypy0kJz97lB;yT_Av(_\">current_day</field></block></value><value name=\"B\"><block type=\"variables_get\" id=\".+y+AZALSAYctzs/,(DK\"><field name=\"VAR\" id=\"pbu4qg~+P9p5IVc;#qQo\">total_days</field></block></value></block></value></block></next></block></statement><value name=\"IF1\"><block type=\"logic_compare\" id=\"hZ!vO#=b*q07BaXU91V~\"><field name=\"OP\">EQ</field><value name=\"A\"><block type=\"variables_get\" id=\"7*Jj9lBi_G=g5J]FOs1V\"><field name=\"VAR\" id=\"7Q0fV}nq3qEaeB]*P~H^\">first_month</field></block></value><value name=\"B\"><block type=\"variables_get\" id=\"v.Z}-6(z9kV!shJ|DFdN\"><field name=\"VAR\" id=\"@Nk/-/ZLstJ)o8vR_`UA\">current_month</field></block></value></block></value><statement name=\"DO1\"><block type=\"variables_set\" id=\"hYOeNheF!RE#:G]FxscE\"><field name=\"VAR\" id=\"pbu4qg~+P9p5IVc;#qQo\">total_days</field><value name=\"VALUE\"><block type=\"variables_get\" id=\"pN$#trvZYt=H]Nz;Tbpa\"><field name=\"VAR\" id=\"Jypy0kJz97lB;yT_Av(_\">current_day</field></block></value></block></statement><next><block type=\"variables_set\" id=\"cm2Gb.H*~lFxA5W3z~.S\"><field name=\"VAR\" id=\"pbu4qg~+P9p5IVc;#qQo\">total_days</field><value name=\"VALUE\"><block type=\"math_arithmetic\" id=\"EM]ljyd2:vo,6T5%vz^D\"><field name=\"OP\">MINUS</field><value name=\"A\"><block type=\"variables_get\" id=\"CIilMiEueLxFWoPK@hwk\"><field name=\"VAR\" id=\"pbu4qg~+P9p5IVc;#qQo\">total_days</field></block></value><value name=\"B\"><block type=\"variables_get\" id=\"zVKvh-u*zRwBcNRX$[(-\"><field name=\"VAR\" id=\"3E`?7_E89VCz]oKYD%YR\">first_day</field></block></value></block></value><next><block type=\"variables_set\" id=\"yxpFp|pzFu/eh6N_Mp@a\"><field name=\"VAR\" id=\"BOCQUORM$f]`@xh|)lmd\">Data_send</field><value name=\"VALUE\"><block type=\"map_on_loop\" id=\"}l_pJQ#{rc/3V,z9wf/6\"><statement name=\"LOOP\"><block type=\"create_map_key\" id=\"e8gk7SqVHt:1tBi#0p5m\"><value name=\"key\"><block type=\"text\" id=\"1jm5zD]%v/IbxV!mpr{(\"><field name=\"TEXT\">pH</field></block></value><value name=\"value\"><block type=\"get_map_key\" id=\"E@gYTm,?lnPX)cWuIuhU\"><value name=\"key\"><block type=\"text\" id=\"$_~zFqZfhCnAMfLLp39O\"><field name=\"TEXT\">pH</field></block></value><value name=\"map\"><block type=\"variables_get\" id=\"4W%g1qyup[kWe|@(7w@;\"><field name=\"VAR\" id=\"BOCQUORM$f]`@xh|)lmd\">Data_send</field></block></value></block></value><next><block type=\"create_map_key\" id=\"zz4DT_oF7?G,pg~r/D/3\"><value name=\"key\"><block type=\"text\" id=\"L]}IlQT4EIRk~%N#M1Bs\"><field name=\"TEXT\">humid</field></block></value><value name=\"value\"><block type=\"dht12_get_humidity\" id=\".SH8)6p8w7!0Cz]+2a(D\"><field name=\"VARNAME\">env3_0</field></block></value><next><block type=\"create_map_key\" id=\"wc@fH4c^ilts!K96:o84\"><value name=\"key\"><block type=\"text\" id=\"DKy+}`:M6zzBE^#YU*hT\"><field name=\"TEXT\">temp</field></block></value><value name=\"value\"><block type=\"dht12_get_temperature\" id=\"_PXPY,BeZ~OO(c=qGE#!\"><field name=\"VARNAME\">env3_0</field></block></value><next><block type=\"create_map_key\" id=\"]$%BLaDeRc.LVpZ:c=dg\"><value name=\"key\"><block type=\"text\" id=\":UCKL.v+Z|!;hfA#zV4u\"><field name=\"TEXT\">moist</field></block></value><value name=\"value\"><block type=\"earth_a_read\" id=\"T~dyo$qLc4clg5v?x],v\"><field name=\"VARNAME\">earth_0</field></block></value><next><block type=\"create_map_key\" id=\"en8+Gq|pkQR)$3(/;p70\"><value name=\"key\"><block type=\"text\" id=\"?0F*v%Q=vY42j_mt92nL\"><field name=\"TEXT\">total time</field></block></value><value name=\"value\"><block type=\"variables_get\" id=\"r8sm/x/q6o5I/v*pF,Z_\"><field name=\"VAR\" id=\"pbu4qg~+P9p5IVc;#qQo\">total_days</field></block></value></block></next></block></next></block></next></block></next></block></statement></block></value><next><block type=\"espnow_send\" id=\":nsJH;wqNW6V+daf6P!G\"><field name=\"ID\">1</field><value name=\"DATA\"><shadow type=\"text\" id=\")!_X%S3T@0B[aYSXi-~l\"><field name=\"TEXT\"></field></shadow><block type=\"variables_get\" id=\"=duh)!@p~rM?6R*[Z-QN\"><field name=\"VAR\" id=\"BOCQUORM$f]`@xh|)lmd\">Data_send</field></block></value><next><block type=\"label_set_text\" id=\"=[3TwR`Id}tuVi]hKYpE\"><field name=\"COMPONENT\">label4</field><value name=\"TEXT\"><shadow type=\"text\" id=\"AG@b@5ZANLXY=6NHtk:D\"><field name=\"TEXT\">Hello M5</field></shadow><block type=\"variables_get\" id=\"34-{ZI|lUo#:I+ErSW9-\"><field name=\"VAR\" id=\"BOCQUORM$f]`@xh|)lmd\">Data_send</field></block></value></block></next></block></next></block></next></block></next></block></statement></block></next></block></next></block></next></block></next></block></next></block></statement></block>","Blockly.Remotes":[],"Blockly.RemotePlus":[{"id":"__title","blockId":"","createTime":1675945186480,"name":"M5RemoteTitle","dragAndDrop":false,"resizable":false,"options":{"minWidth":1,"minHeight":1,"maxWidth":6,"maxHeight":10,"defaultWidth":2,"defaultHeight":1},"w":2,"h":1,"bgColor":"#0080FF","color":"#fff","fontsize":"M","label":"M5Remote","interval":3000,"code":"","event":"","dataSource":"none","ezdataToken":"","topic":"","needShadow":false,"type":"title","x":0,"y":0}],"modules":[],"cbIdList_":[],"eventCBIdList_":[]}

The article was first published in hackster, February 9,  2023

cr: https://www.hackster.io/jadon-lim/smart-sourdough-starter-e6ceb2

author: Jadon Lim

License
All Rights
Reserved
licensBg
0