Добрый день! Хочу сделать оповещение на свою почту, когда открывается входная дверь(приходит сообщение). Есть 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); }
А кстати, зачем именно PHP вам? Вы для начала хоть на HTML начните работать. Когда допетрите, пишите, что нашли, а если не терпится, то Вам сюда: http://forum.amperka.ru/forums/Закажу-проект.22/
что значит для начала начните работать в html ?? Если вы имеете ввиду сделать разметку странички на html то азы я знаю(не веб дизайнер но код разобрать смогу или маламальскую страницу нарисую). Если вы мне подскажите как html обработать get или post запрос то я не против. Или подскажите другой способ реализации моего проекта. А заказывать проект мне не надо я его делаю в свое удовольствие, для получение новых знаний и чтобы тупо перед телеком не сидеть по вечерам.
Хочу raspberry сделать управляющим сервером и с него управлять несколькими arduino А так в принципе не нужно, оно отдельно у меня шлет оповещения на почту. Есть просто в наличии RPI и пару ардуин и чего нибудь нового узнать хочу, вообщем полезное с приятным
Помогите найти ошибку в коде. Почему то работает какое то время а потом зависает. Может проработать минуту, может пару секунд, а может и пол часа(в конечном итоге все равно зависнет) Может 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); } }
Помогите объединить два кода Через 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); }
По поводу герконов... Как вы отличаете обрыв линии от открытия двери ??))))) На сигнализациях, в конце линии ( у герконов или в нем ставится резистор, изменилось сопротивление- открыто. Исчезло - обрыв.
Обрыв линии для сигнализации тоже является сигналом о том что система безопасности нарушена и на неё надо реагировать , в моем случае приходит смс. А резистор стоит, не помню конечно на сколько.
Db4 можно , скинь почтовый ящик отправлю мануал настройки сервера, сам web сервер(точнее php файлы) и скетч ардуины. Там единственно сразу еще кое какие функции реализованы(если не нужны, то сам код отредактируешь). Температура , влажность, барометр на сайт выдает. Пинг камеры, которая тоже включается по нажатию кнопки на сайта, которая включает реле на ардуине к которой подключена камера. Отправка почтового сообщения и смс на телефон через интернет.(если у сотового оператора услуга есть и учетку на gmail.com заводить надо) . Сигнализация вкл.выкл через беспроводной модуль дистанц управления http://ru.aliexpress.com/item/Highe...ys-Wireless-Remote-Controler/32303499552.html Включение света по датчику движения.