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
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
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);
}