Ethernet сигнализация(на почту) Помогите написать код

Тема в разделе "Arduino & Shields", создана пользователем atlo, 27 ноя 2015.

  1. atlo

    atlo Нерд

    Добрый день!
    Хочу сделать оповещение на свою почту, когда открывается входная дверь(приходит сообщение). Есть arduino uno с ethernet shieldом w5100 и raspberry pi b. На RPI поднят web сайт куда уже с другой ардуины в mysql кидается данные с температурного датчика dth и выводятся на сайт. Так же на RPI настроена отправка почты через gmail.com (можно через скрипт, либо из командной строки) Хочу сделать что бы срабатывание датчика(геркон или движения) arduino отправляла post или get запрос на RPI и там в текстовый файл записывался 1 или 0 . Дальше по cron задание проверяла этот файл в случае 1 выполняла скрипт на отправку почты. Написал небольшой скрипт для arduino, но не хватает знаний и не могу понять как проверить отправляет данные arduino на RPI и не пойму как на php написать код который будет принимать данные на web сервере.


    #include <Ethernet.h>
    #include <SPI.h>
    //mac address для получения сети
    byte mac[] = { 0xee, 0x2b, 0xab, 0xa4, 0xd4, 0x9d }; // RESERVED MAC ADDRESS
    EthernetClient client;
    int t = 1; // vkl VAR передача данных на сервер
    int h = 0; // vikl VAR
    /////////////////////датчики//////////////////
    int button = 3; // объявляем геркон на вход дверь
    i

    void setup()
    {
    // объявляем что слушают датчики
    pinMode(button, INPUT); //геркон слушает вход
    Serial.begin(9600);
    if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    }
    Serial.print("IP = ");
    Serial.println(Ethernet.localIP()); // вывожу получеyный ip
    }

    void loop()
    {
    Gerk();

    }

    void Gerk(){
    if (digitalRead(button) == LOW) {
    if (client.connect("192.168.1.40",80)) {
    client.println("POST /add.php HTTP/1.1");
    client.println("Host: 192.168.1.40");
    client.println("Content-Type: application/x-www-form-urlencoded");
    client.print("Content-Length: ");
    // client.println(t.length());
    client.println();
    client.print(t);
    }
    if (client.connected()) {
    client.stop();
    }
    delay(10000);
    }
    else if (digitalRead(button) == HIGH) {
    if (client.connect("192.168.1.40",80)) {
    //client.connect("192.168.1.40",80)) {
    client.println("POST /add.php HTTP/1.1");
    client.println("Host: 192.168.1.40");
    client.println("Content-Type: application/x-www-form-urlencoded");
    client.print("Content-Length: ");
    // client.println(h.length());
    client.println();
    client.print(h);
    }
    if (client.connected()) {
    client.stop();
    }
    delay(10000);
    }
     
  2. Mestniy

    Mestniy Гуру

    А кстати, зачем именно PHP вам? Вы для начала хоть на HTML начните работать. Когда допетрите, пишите, что нашли, а если не терпится, то Вам сюда: http://forum.amperka.ru/forums/Закажу-проект.22/
     
  3. atlo

    atlo Нерд

    что значит для начала начните работать в html ?? Если вы имеете ввиду сделать разметку странички на html то азы я знаю(не веб дизайнер но код разобрать смогу или маламальскую страницу нарисую). Если вы мне подскажите как html обработать get или post запрос то я не против. Или подскажите другой способ реализации моего проекта. А заказывать проект мне не надо я его делаю в свое удовольствие, для получение новых знаний и чтобы тупо перед телеком не сидеть по вечерам.
     
  4. atlo

    atlo Нерд

    вопрос снят, сам разобрался
     
  5. Tomasina

    Tomasina Сушитель лампочек Модератор

    а зачем в этой цепочке Arduino? Raspberry в состоянии самостоятельно обработать событие по геркону.
     
  6. atlo

    atlo Нерд

    Хочу raspberry сделать управляющим сервером и с него управлять несколькими arduino
    А так в принципе не нужно, оно отдельно у меня шлет оповещения на почту.
    Есть просто в наличии RPI и пару ардуин и чего нибудь нового узнать хочу, вообщем полезное с приятным
     
  7. atlo

    atlo Нерд

    Помогите найти ошибку в коде. Почему то работает какое то время а потом зависает. Может проработать минуту, может пару секунд, а может и пол часа(в конечном итоге все равно зависнет)
    Может Ethernet связь теряет как вариант, не пойму(если да то как проверить)
    Может код не правильно написан.

    #include <DHT.h>
    #include <Ethernet.h>
    #include <SPI.h>
    //mac address для получения сети
    byte mac[] = { 0xee, 0x2b, 0xab, 0xa4, 0xd4, 0x9d }; // RESERVED MAC ADDRESS
    EthernetClient client;
    #define DHTPIN 2 // SENSOR PIN
    #define DHTTYPE DHT11 // SENSOR TYPE - THE ADAFRUIT LIBRARY OFFERS SUPPORT FOR MORE MODELS
    DHT dht(DHTPIN, DHTTYPE);
    int t = 0; // TEMPERATURE VAR
    int h = 0; // HUMIDITY VAR
    String data;// переменная передача данных температуры на сервер

    //////////////////////датчики//////////////////
    int button = 3; // объявляем геркон на вход дверь
    int led = 9; //объявляем светодиод для визулизации сработки датчика

    /////////для timeout////////
    //unsigned long Event = 0;//Счетчик количества событий
    unsigned long Event;
    int TimeOut = 1000;//Таймаут повторения события

    void setup()
    {
    // объявляем что слушают датчики
    pinMode(led, OUTPUT); // светодиод слушает выход
    pinMode(button, INPUT); //геркон слушает вход
    //pinMode( button_dvigen, INPUT);//датчик движения слушает вход
    //pinMode( button_dvigen2, INPUT);//датчик движения слушает вход
    digitalWrite(led, LOW); // выключаем светодиод на пине 9
    Serial.begin(9600);
    if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    }
    Serial.print("IP = ");
    Serial.println(Ethernet.localIP());
    }

    void loop()
    {
    //Serial.println(data);
    //timeaut();
    DHT_11();
    Serial.println("DHT");//для отладки кода
    Serial.println(Event); // показывает счетчик
    for(Event = 0; Event<=60; Event++){ // ставим число циклов
    delay(100);
    // код датчиков движения
    Gerkon();
    Serial.println("Gerkon"); //для отладки кода
    Serial.println(Event); // показывает счетчик
    }
    }

    void DHT_11(){
    dht.begin();
    h = (int) dht.readHumidity();
    t = (int) dht.readTemperature();
    data = "";
    h = (int) dht.readHumidity();
    t = (int) dht.readTemperature();
    data = "temp1=" + String(t) + "&hum1=" + String(h);
    //отправляем данные температун датчика на сервер
    if (client.connect("192.168.1.40",80)) {
    client.println("POST /add.php HTTP/1.1");
    client.println("Host: 192.168.1.40");
    client.println("Content-Type: application/x-www-form-urlencoded");
    client.print("Content-Length: ");
    client.println(data.length());
    client.println();
    client.print(data);
    Serial.println(data);
    }
    if (client.connected()) {
    client.stop(); // DISCONNECT FROM THE SERVER
    }
    }

    void Gerkon()
    {
    if (digitalRead(button) == LOW) { // проверка входа геркона
    digitalWrite(led, HIGH); // включаем светодиод на пине 9
    Serial.println("connecting to server...");
    if (client.connect("192.168.1.40",80)) {
    Serial.println("making HTTP request...");
    // Создаем GET HTTP-запрос:
    client.println("GET /add_data.php?gerk=1 HTTP/1.1");//отправляю переменную gerk со значением 1
    client.println("HOST: 192.168.1.40");
    client.println();
    }
    if (client.connected()) {
    client.stop();
    }
    delay(1000);
    }

    else if (digitalRead(button) == HIGH) { // проверка входа кнопки
    digitalWrite(led, LOW); // выключаем светодиод на пине 9
    Serial.println("connecting to server...");
    if (client.connect("192.168.1.40",80)) {
    Serial.println("making HTTP request...");
    // Создаем GET HTTP-запрос:
    client.println("GET /add_data.php?gerk=0 HTTP/1.1");//отправляю переменную gerk со значением 0
    client.println("HOST: 192.168.1.40");
    client.println();
    }
    if (client.connected()) {
    client.stop();
    }
    delay(1000);
    }
    }
     
  8. atlo

    atlo Нерд

    вопрос снят, разобрался
     
  9. atlo

    atlo Нерд

    Помогите объединить два кода
    Через ethernet, (с arduino uno с шилдом ethernet) при срабатывании датчика двери отправляется на raspberry get запрос, где он обрабатывается скриптом, который отправляет на мою почту и смс на телефон оповещение, что дверь была открыта(для нужды можно прикрутить еще пару датчиков). Так же с этого же устройства через ethernet post запросом отправляются данные с dht11 на raspberry в mysql базу, где потом выводятся на поднятый сайт. ЭТА ЧАСТЬ КОДА РАБОТАЕТ.
    Мне надо прикрутить возможность отключения / включения сигнализации по нажатию кнопки через радио- брелок . Данные на сайт по отправке температурного датчика должны работать.


    Первый скрипт работы arduino UNO с шилдом
    /* Установлен таймер и показания отправляются на сайт
    в for надо добавить данные по датчикам и объявить
    переменные для них
    dht11 ------------датчик температуры и влажности pin 2
    gerkon------------ датчик двери pin 8
    led ----------------- светодиод на pin 9
    p--------------------пьезоэлемент(пищалка) pin 5
    */
    #include <DHT.h>
    #include <Ethernet.h>
    #include <SPI.h>
    //mac address для получения сети
    byte mac[] = { 0xee, 0x2b, 0xab, 0xa4, 0xd4, 0x9d }; // RESERVED MAC ADDRESS
    EthernetClient client;
    #define DHTPIN 2 // pin DHT11
    #define DHTTYPE DHT11
    DHT dht(DHTPIN, DHTTYPE);
    int t = 0; // TEMPERATURE VAR
    int h = 0; // HUMIDITY VAR
    String data;// переменная передача данных температуры на сервер

    //////////////////////датчики//////////////////
    int button = 8; // объявляем геркон на вход дверь
    int led = 9; //объявляем светодиод для визулизации сработки датчика
    int p = 5; //объявляем пин куда подключили пьезоэлемент для звукового оповещения
    /////////для timeout////////
    //unsigned long Event = 0;//Счетчик количества событий
    unsigned long Event;
    int TimeOut = 1000;//Таймаут повторения события

    void setup()
    {
    // объявляем что слушают датчики
    pinMode(p, OUTPUT); //объявляем пин как выход
    pinMode(led, OUTPUT); // светодиод слушает выход
    pinMode(button, INPUT); //геркон слушает вход
    //pinMode( button_dvigen, INPUT);//датчик движения слушает вход
    //pinMode( button_dvigen2, INPUT);//датчик движения слушает вход
    digitalWrite(led, LOW); // выключаем светодиод на пине 9
    Serial.begin(9600);
    if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    }
    Serial.print("IP = ");
    Serial.println(Ethernet.localIP());
    Blimk(); //визуализация подключения ip адреса светодиод моргает 3 раза
    }

    void loop()
    {
    //Serial.println(data);
    //timeaut();
    DHT_11();
    Serial.println("DHT");//для отладки кода
    Serial.println(Event); // показывает счетчик
    for(Event = 0; Event<=600; Event++){ //ждем полчаса для отправки данных температуры
    delay(100);
    // код датчиков движения
    Gerkon();
    Serial.println("Gerkon"); //для отладки кода
    Serial.println(Event); // показывает счетчик
    }
    }

    void DHT_11(){
    dht.begin();
    delay(1000);
    h = (int) dht.readHumidity();
    t = (int) dht.readTemperature();
    data = "";
    h = (int) dht.readHumidity();
    t = (int) dht.readTemperature();
    data = "temp1=" + String(t) + "&hum1=" + String(h);
    //отправляем данные температун датчика на сервер
    if (client.connect("192.168.1.40",80)) {
    delay(100);
    client.println("POST /add.php HTTP/1.1");
    client.println("Host: 192.168.1.40");
    client.println("Content-Type: application/x-www-form-urlencoded");
    client.print("Content-Length: ");
    client.println(data.length());
    client.println();
    client.print(data);
    Serial.println(data);
    }
    if (client.connected()) {
    client.stop(); // DISCONNECT FROM THE SERVER
    }
    }

    void Gerkon()
    {
    if (digitalRead(button) == LOW) { // LOW проверка входа геркона
    digitalWrite(led, HIGH); // включаем светодиод на пине 9 при открытие двери
    Serial.println("connecting to server...");
    if (client.connect("192.168.1.40",80)) {
    Serial.println("making HTTP request...");
    delay(100);
    // Создаем GET HTTP-запрос:
    client.println("GET /add_data.php?gerk=1 HTTP/1.1");//отправляю переменную gerk со значением 1
    client.println("HOST: 192.168.1.40");
    client.println();
    delay(100);
    }
    if (client.connected()) {
    client.stop();
    delay(3000);
    pezo() ;
    }
    }

    else if (digitalRead(button) == HIGH) { // HIGH проверка входа кнопки
    digitalWrite(led, LOW); // выключаем светодиод на пине 9 при закрытие двери
    Serial.println("connecting to server...");
    if (client.connect("192.168.1.40",80)) {
    Serial.println("making HTTP request...");
    delay(100);
    // Создаем GET HTTP-запрос:
    client.println("GET /add_data.php?gerk=0 HTTP/1.1");//отправляю переменную gerk со значением 0
    client.println("HOST: 192.168.1.40");
    client.println();
    delay(100);

    }
    if (client.connected()) {
    client.stop();
    delay(3000);
    }
    }
    }
    //////////моргаем светодиодом для понимания получил адрес или нет
    void Blimk() {
    digitalWrite(9, HIGH); // включаем светодиод
    delay(1000); // секунда
    digitalWrite(9, LOW); / выключаем светодиод
    delay(1000); // секунда
    digitalWrite(9, HIGH); // включаем светодиод
    delay(1000); // секунда
    digitalWrite(9, LOW); // выключаем светодиод
    delay(1000);
    digitalWrite(9, HIGH); // включаем светодиод
    delay(1000); // секунда
    digitalWrite(9, LOW); // выключаем светодиод
    delay(1000);
    }

    ////пьезо динамик
    void pezo()
    {
    tone (p, 500); //включаем на 500 Гц
    delay(500); //ждем 100 Мс
    tone(p, 1000); //включаем на 1000 Гц
    delay(500); //ждем 100 Мс
    noTone(p);
    }

    Второй код подключен беспроводной пульт http://ru.aliexpress.com/item/Highe...Controler/32303499552.html?detailNewVersion=4
    Подключен по pin 6 и pin 7
    /*
    Включаем и выключаем светодиод двумя кнопками, при нажатии кнопки 6 светодиод включается,
    при нажатии 7 выключается . leds меняет свой флаг при включ 1 при выключении 0
    */
    int ledPin = 9;
    int buttonApin = 6;
    int buttonBpin = 7;
    byte leds;

    void setup()
    {
    Serial.begin(9600);
    pinMode(ledPin, OUTPUT);
    pinMode(buttonApin, INPUT_PULLUP);
    pinMode(buttonBpin, INPUT_PULLUP);
    }

    void loop()
    {
    if (digitalRead(buttonApin) == HIGH)
    {
    digitalWrite(ledPin, HIGH);
    leds = 1;

    }
    if (digitalRead(buttonBpin) == HIGH)
    {
    digitalWrite(ledPin, LOW);
    leds =0;
    }
    Serial.println(leds);
    }
     
  10. db4

    db4 Нуб

    привет, можно ссылку на работающий пример?
    спасибо
     
  11. Securbond

    Securbond Гуру

    По поводу герконов... Как вы отличаете обрыв линии от открытия двери ??)))))
    На сигнализациях, в конце линии ( у герконов или в нем ставится резистор, изменилось сопротивление- открыто. Исчезло - обрыв.
     
  12. atlo

    atlo Нерд

    Обрыв линии для сигнализации тоже является сигналом о том что система безопасности нарушена и на неё надо реагировать , в моем случае приходит смс. А резистор стоит, не помню конечно на сколько.
     
    Последнее редактирование: 24 мар 2016
  13. atlo

    atlo Нерд

    Db4 можно , скинь почтовый ящик отправлю мануал настройки сервера, сам web сервер(точнее php файлы) и скетч ардуины. Там единственно сразу еще кое какие функции реализованы(если не нужны, то сам код отредактируешь). Температура , влажность, барометр на сайт выдает. Пинг камеры, которая тоже включается по нажатию кнопки на сайта, которая включает реле на ардуине к которой подключена камера. Отправка почтового сообщения и смс на телефон через интернет.(если у сотового оператора услуга есть и учетку на gmail.com заводить надо) . Сигнализация вкл.выкл через беспроводной модуль дистанц управления http://ru.aliexpress.com/item/Highe...ys-Wireless-Remote-Controler/32303499552.html Включение света по датчику движения.
     
    Последнее редактирование: 24 мар 2016
  14. ГенаМ

    ГенаМ Нуб

    А мне можно ссылку на работающий пример? :)
    спасибо