Go Down

Topic: Bot Telegram con Arduino e Raspberry (Read 156 times) previous topic - next topic

Frank98

Ciao, sto cercando di creare un sistema di controllo dell'umidità del terreno di alcune piante. Non avendo un convertitore analogico->digitale per Raspberry, leggo il valore del sensore analogico con Arduino, lo stampo a video e per via seriale arriva a Raspberry che poi avvia il bot di Telegram, legge il seriale e tramite un comando dal telefono(su Telegram) mi spara fuori il testo seriale che arriva da arduino. I problemi sono due:

1) Raspberry non aggiorna la lettura:
cioè (mi sembra di aver capito così) che legge il seriale una volta, lo mette nella variabile e mi stampa sempre quella stringa, anche se Arduino cambia stringa. Come potete vedere sotto, sto provando ad usare un 'while True', ma non va.
2) La stringa che Raspberry manda al Bot di Instagram salta qualche lettera, magari "ciao" lo scrive "cao". E' un normale problema per via della comunicazione seriale con arduino?

Ovviamente per Arduino programmo con il suo IDE, mentre Raspberry la programmo con Python.

Vi allego i codici:

Raspberry

Code: [Select]
import serial
import sys
import os
import telepot
import datetime
import time

ser = serial.Serial('/dev/ttyACM0',9600)

while True:

        val = ser.readline()

        """
        Ctrl-C per uscire.
        """

        id_a = [**id-utente**]

        def handle(msg):
            chat_id = msg['chat']['id']
            command = msg['text']
            sender = msg['from']['id']

            print 'Got command: %s' % command

            if 'Piante' in command:
               bot.sendMessage(chat_id,val)

        bot = telepot.Bot('**Token**')
        bot.message_loop(handle)
        print 'I am listening ...'
        while 1:
             time.sleep(10)


Arduino

Code: [Select]
int sensore = A0;
int hum;

void setup() {

Serial.begin(9600);

}

void loop() {
        hum = analogRead(sensore);
     if(hum <= 280)
      {
        Serial.print("La pianta ha bisogno d'acqua");
        Serial.print("\n");
      }
     if(hum >= 310 && hum<900)
      {
        Serial.print("La pianta sta bene");
        Serial.print("\n");
      }
     if(hum>=900)
      {
        Serial.print("La pianta ha troppa acqua");
        Serial.print("\n");
      }
        delay(5000);
}

gpb01

Buonasera,
essendo il tuo primo post nella sezione Italiana del forum, nel rispetto del regolamento di detta sezione (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo
Search is Your friend ... or I am Your enemy !

Frank98

Ho subito provveduto a creare il post di presentazione, scusatemi.

fcavazza

Non ho mai usato telepot, ma direi:
1 - finisci il codice con un while(1), quindi il while principale viene eseguito una sola volta
2 - message_loop mi sembra di capire che lanci dei thread, quindi i valori delle variabili che hai nel while principale non le vedresti comunque aggiornate automaticamente nei thread figli che gestiscono le connessioni telegram (le chiamate a handle)

... ma tutto questo è python non arduino, forse non è il forum corretto...

testato

infatti concordo, prova a togliere quel  while1 alla fine del python

se vuoi slegarti dalla seriale puoi anche usare un trucchetto per usare un segnale analogico su un pin digitale in modo da usare solo la RPI
poi magari in secondo momento passi ad un adc i2c

https://www.pololu.com/product/959

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Go Up