Capacitive soil moisture sensor wemos lipo shield telegram bot

Il Capacitive soil moisture sensor wemos lipo shield telegram bot unisce alcuni degli articoli che hai letto negli ultimi mesi.

capacitive soil moisture sensor wemos lipo shield telegram bot

Il progetto che sto preparando e di cui leggerai nei prossimi giorni necessita di questa parte di conoscenze ossia la lettura dei dati di un sensore direttamente via Telegram Bot.

Nei molti esempi di sketch che ho trovato on-line avrai letto di come inviare dei comandi via Telegram alla tua ESP8266, l’ho fatto anche io in questo articolo.

Il motivo è che quando testi per la prima volta un progetto con WeMos D1 e Telegram, o Arduino e Telegram, l’esempio classico ti invita a provare la semplice accensione del led “on-board” della scheda.

Un progetto che usi Telegram per la comunicazione spesso necessita sia della parte di controllo del dispositivo sia di quella di check e raccolta informazioni da parte del progetto.

L’articolo che ti mostro oggi parla propio di questo aspetto: leggere una informazione da un sensore capacitivo e trasferire questa informazione al nostro TelegramBot.

La domanda che potresti porti è “ogni quanto tempo riceverò questa informazione?”

Faremo in modo che l’informazione sia resa disponibile su richiesta.

Sarai tu a chiedere al capacitive soil moisture sensor wemos lipo shield telegram bot quale sia il valore di umidità del terreno. Ricevendone risposta immediata.

Cosa ti serve per il progetto

Per la realizzazione del progetto hai bisogno di:

Ti mostro una foto dei componenti pre-assemblati:

capacitive soil moisture sensor wemos lipo shield

Per il progetto finale dovremo aggiungere anche altri componenti che ti indico per completezza qualora volessi acquistarli tutti insieme:

Gli ultimi dei componenti li potrai stampare in 3D e sono studiati con Fusion 360 per questo progetto.

Sketch capacitive soil moisture sensor wemos lipo shield telegram bot

Lo sketch del progetto capacitive soil moisture sensor wemos lipo shield telegram bot parte dallo sketch che hai già letto nell’articolo Telegram Bot ESP8266 a cui aggiungeremo le parti necessarie al controllo del sensore:

/*******************************************************************
    A telegram bot for your ESP8266 that controls the 
    capacitive soil moisture sensor and a pump.

    Parts:
    D1 Mini ESP8266 (or any ESP8266 board)
    Capacitive soil moisture sensor

      = Affilate
    Capacitive soil moisture sensor ( https://amzn.to/3h8I5po )

    
    Written by Mauro Alfieri
    YouTube: https://www.youtube.com/c/MauroAlfieri77
    Instagram: @mauroalfieri
 *******************************************************************/

#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>

// Wifi network station credentials
#define WIFI_SSID "[your WiFi SSID]"
#define WIFI_PASSWORD "[your WiFi SSID password]"
// Telegram BOT Token (Get from Botfather)
#define BOT_TOKEN "[your Telegram Bot Tocken]"

const unsigned long BOT_MTBS = 1000; // mean time between scan messages

X509List cert(TELEGRAM_CERTIFICATE_ROOT);
WiFiClientSecure secured_client;
UniversalTelegramBot bot(BOT_TOKEN, secured_client);
unsigned long bot_lasttime; // last time messages' scan has been done

const int ledPin = LED_BUILTIN;
const int  soilMoistureSensor = A0;

int ledStatus = 0;
int soilMisure = 0;

char buffer[200] ="";

void handleNewMessages(int numNewMessages)
{
  Serial.print("handleNewMessages ");
  Serial.println(numNewMessages);

  for (int i = 0; i < numNewMessages; i++) {
    String chat_id = bot.messages[i].chat_id;
    String text = bot.messages[i].text;

    String from_name = bot.messages[i].from_name;
    if (from_name == "")
      from_name = "Guest";

    if (text == "/ledon")       { digitalWrite(ledPin, LOW); ledStatus = 1; bot.sendMessage(chat_id, "Led is ON", ""); }
    if (text == "/ledoff")      { ledStatus = 0; digitalWrite(ledPin, HIGH); bot.sendMessage(chat_id, "Led is OFF", ""); }
    if (text == "/status")      { if (ledStatus) { bot.sendMessage(chat_id, "Led is ON", ""); } else { bot.sendMessage(chat_id, "Led is OFF", ""); } }

    if (text == "/soilUmidity") { sprintf(buffer, "Soil Moisture: %d\n", soilMisure); bot.sendMessage(chat_id, buffer, ""); }

    if (text == "/start") {
      String welcome = "Welcome to Universal Arduino Telegram Bot library, " + from_name + ".\n";
      welcome += "This is Flash Led Bot example.\n\n";
      welcome += "/ledon : to switch the Led ON\n";
      welcome += "/ledoff : to switch the Led OFF\n";
      welcome += "/status : Returns current status of LED\n";

      welcome += "/soilUmidity : Returns current status of Soil\n";
      bot.sendMessage(chat_id, welcome, "Markdown");
    }
  }
}


void setup() {
  Serial.begin(115200);
  Serial.println();

  pinMode(soilMoistureSensor, INPUT);
  pinMode(ledPin, OUTPUT);
  delay(10);
  digitalWrite(ledPin, HIGH);

  // attempt to connect to Wifi network:
  configTime(0, 0, "pool.ntp.org");      // get UTC time via NTP
  secured_client.setTrustAnchors(&cert); // Add root certificate for api.telegram.org
  Serial.print("Connecting to Wifi SSID ");
  Serial.print(WIFI_SSID);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(500); }
  Serial.print("\nWiFi connected. IP address: ");
  Serial.println(WiFi.localIP());

  // Check NTP/Time, usually it is instantaneous and you can delete the code below.
  Serial.print("Retrieving time: ");
  time_t now = time(nullptr);
  while (now < 24 * 3600) {
    Serial.print(".");
    delay(100);
    now = time(nullptr);
  }
  Serial.println(now);
}

void loop() {
  if (millis() - bot_lasttime > BOT_MTBS) {
    int numNewMessages = bot.getUpdates(bot.last_message_received + 1);

    while (numNewMessages) {
      Serial.println("got response");
      handleNewMessages(numNewMessages);
      numNewMessages = bot.getUpdates(bot.last_message_received + 1);
    }

    bot_lasttime = millis();

    soilMisure = analogRead(soilMoistureSensor);
    Serial.println(soilMisure);
  }
}

in particolare la linea 037: definisci una costante a cui assegni il valore A0, ossia il pin a cui il sensore è connesso;

linea 040: definisci la variabile di tipo integer in cui memorizzeremo il valore di umidità letto dal sensore;

linea 061: costruiamo una nuova consizione in grado di riconoscere la stringa “/soilUmidity” e di restituire la frase “Soil Moisture: %d” in cui:

%d sarà sostituito dal comando sprintf() con il valore della variabile soilMisure creata alla linea 040;

e l’intera frase, così composta, sarà inviata al Telegram Bot con il comando bot.sendMessage(chat_id, buffer, ""); come già visto nel precedente articolo per l’invio del valore di stato del led;

nelle linee 063-072: inseriremo una nuova linea, la 070, che riporta le istruzioni inviate in fase di “/start” al bot e che l’utente potrà seguire per interagirvi.

Ecco come si presenta il bot in funzione in questa fase:

capacitive soil moisture sensor wemos telegram bot start

Come vedi il bot ti mostra, come ultima linea delle istruzioni, quella appena aggiunta.

Le ultime linee da modificare riguardano la setup() e la loop(), in particolare:

setup()

l’unica linea aggiunta è la 081 che serve a impostare la modalità “INPUT” per il pin A0;

loop()

anche in questo caso c’è un unica linea da aggiungere, rispetto allo sketch che già conosci ed è la 119 in cui assegni alla variabile soilMisure il valore analogico letto sul pin A0 ( qui riportato come variabile soilMoistureSensor;

Tale valore sarà quello inviato al bot alla richiesta specifica “/soilUmidity”.

Funzionamento del bot

Come tutti i bot Telegram, a cui probabilmente sei abituato, anche questo funziona inviando comandi preceduti dal carattere “/”, il primo che puoi eseguire è “/start”:

capacitive soil moisture sensor wemos telegram bot start

che restituisce l’elenco dei comandi accettati dal bot stesso, potrai ri-eseguire questo comando tutte le volte che ti serviranno queste informazioni.

Prova adesso a inviare il comando “/soilUmidity”  ed osserva la risposta che la WeMos D1 invia al bot:

capacitive soil moisture sensor wemos telegram bot data

Il valore restituito, non volutamente, ti indica certamente che il sensore è immerso in un terreno davvero arido.

Dopo aver aggiunto acqua nel terreno prova a chiedere nuovamente il valore del capacitive soil moisture sensor wemos lipo shield telegram bot:

capacitive soil moisture sensor wemos telegram bot data

Adesso è decisamente meglio, per la pianta intendo.

Nei prossimi articoli dedicati al capacitive soil moisture sensor wemos lipo shield telegram bot analizzeremo:

  • la parte relativa al case in 3D 
  • i collegamenti del driver motore
  • lo sketch per controllare la pompa di irrigazione
  • l’assemblaggio
  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

Permalink link a questo articolo: https://www.mauroalfieri.it/elettronica/capacitive-soil-moisture-sensor-wemos-lipo-shield-telegram-bot.html

2 commenti

    • Massimo il 24 Febbraio 2023 alle 13:56
    • Rispondi

    Buongiorno Mauro, ottime guide, grazie! E per essere avvisati dal bot (senza che sia io ad entrare in Telegram intendo) , se ad esempio l’umidità scende oltre un certo valore, come è fattibile? In caso puoi anche dare un link alla guida più “per principianti”.. Grazie!

    1. Ciao Massimo,
      certo si può, dovrai implementare un controllo periodico nello sketch e farti inviare la notifica a Telegram con il comando:
      bot.sendMessage( … … ..)

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.