Техника

Python и ардуино. Проблема с передачей уведомления на почту

Всем привет. Проблема такая: есть Arduino uno и датчик движения Pir. Я их соединил, залил скетч в ардуино и запрограммировал в Python прогу. Цель - при движении датчик должен среагировать, передать данные на ардуино, а ардуинно через пк интернет должно отправить уведомление мне на gmail почту, что якобы датчик среагировал. Только вот 2 нюанса - во первых чтобы мне глянуть монитор порта в ардуино, мне нужно закрыть cmd, а во вторых вот на скрине, при отправке команды начиная c python С: / ...мне показывают мой адрес и приходит уведомление что датчик сработал, хотя мимо него движения не было. И отправляет данные один раз, а когда проходишь мимо датчика больше вообще ничего не отправляет. Подскажите в чем проблема в проге записанной в Python или в скетче ардуино, по просьбе скетч и прогу могу предоставить. Выручайте плиз
Когда в зоне чувствительности датчика появится объект, Arduino передаст сигнал с помощью серийного протокола связи через USB порт. При этом возникает небольшая проблема. Если делать все "в лоб", Arduino будет генерировать кучу email'ов. В программе эта проблема решена следующим образом: если промежуток времени между сигналами слишком короткий, микроконтроллер генерирует другое сообщение и письмо не будет отправляться.

int pirPin = 7;

int minSecsBetweenEmails = 60; // 1 минута

long lastSend = -minSecsBetweenEmails * 1000l;

void setup()

{

pinMode(pirPin, INPUT);

Serial.begin(9600);

}

void loop()

{

long now = millis();

if (digitalRead(pirPin) == HIGH)

{

if (now > (lastSend + minSecsBetweenEmails * 1000l))

{

Serial.println("MOVEMENT");

lastSend = now;

}

else

{

Serial.println("Too soon");

}

}

delay(500);

}

Переменную “minSecsBetweenEmails” вы можете смело менять в соответствии с вашими потребностями. Тут она выставлена на 60 секунд, то есть email 'ы будут отправляться не чаще чем раз в 60 секунд.

Для отслеживания времени, когда был отправлен предыдущий email, используется переменная “lastSend”. Она инициализируется как отрицательное число, равное количеству миллисекунд, указанных в переменной “minSecsBetweenEmails” со знаком минус. Благодаря этому ПИР датчик движения может отрабатывать сразу после запуска скетча, без задержки в 1 минуту.

Внутри цикла используется функция “millis()”. Благодаря ее использованию мы получаем значение времени, которое прошло с момента запуска Arduino. Полученное значение сравнивается со временем с момента последней передачи сигнала. Если это значение больше установленных нами 60 секунд, отсылается сообщение “MOVEMENT”. В любом другом случае, даже при наличии движения, будет отправляться сообщение “Too soon”.

Перед тем как приступить к программированию на Python, можете провести проверку вашей системы. Для этого подключите Arduino и загрузите серийный монитор.
Татьяна Хомутинина(Гаранина)
Татьяна Хомутинина(Гаранина)
85 333
Лучший ответ
Алексей Чуйков Разобрался, суть вообще была в том что в скетче питона подпрограммы не были отступлены, следовательно отправка уведомления была произведена лишь раз!