Arduino+Ethernet Shield+PHP server
- Войдите на сайт для отправки комментариев
О великие программисты данного ресурса!!! Мне нужен ваш совет в данную, трудную для меня минуту.
У меня стоит задача ввода и вывода дискретных и аналоговых выходов черех PHP server.
Пример:. Я нажал на кнопку на сайте, ардуино включил светодиод, а мне обратно на сервер пришла инфа, что да на этот пин подано питание. И тоже самое с аналоговыми входами и выходами. Чтобы можно было задать значение с сайта и оно установилось на выходе у ардуино, и чтобы можно было увидеть на сайт значения этих аналоговых входов/выходов.
Всем, кто откликнется на мольбы, большое человеческое СПАСИБО! ;)
пока что получилось только отправить на ардуино команду, а как заставить ардуино слать на сервер я не понимаю(
КОД для Ардуино
#include <SPI.h> #include <EthernetClient.h> #include <Ethernet.h> #include <EthernetServer.h> #include <Udp.h> byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address byte ip[] = { 192, 168, 0, 25 }; // ip in lan byte gateway[] = { 192, 168, 0, 1 }; // internet access via router byte subnet[] = { 255, 255, 255, 0 }; //subnet mask EthernetServer server(80); //server port byte sampledata=50; //некоторые образцы данных - выходы 2 (ascii = 50 DEC) int ledPinR = 4; // LED pin int ledPinG = 7; int ledPinB = 8; String readString = String(30); // строка для выборки данных из адресной void setup(){ //start Ethernet Ethernet.begin(mac, ip, gateway, subnet); //Set pin 4 to output pinMode(ledPinR, OUTPUT); pinMode(ledPinG, OUTPUT); pinMode(ledPinB, OUTPUT); Serial.begin(9600); } void loop(){ // Create a client connection EthernetClient client = server.available(); if (client) { while (client.connected()) { if (client.available()) { char c = client.read(); //читаем символы из запроса HTTP if (readString.length() < 100) { //Сохраняем символы в строку readString += c; //заменяем readString.append(c); } //output chars to serial port Serial.print(c); //если HTTP запрос закончился if (c == '\n') { //грязные пропуск "GET / favicon.ico HTTP/1.1" if (readString.indexOf("?") <0) { //skip everything } else //lets check if LED should be lighted //-----------Red------------------ if(readString.indexOf("Red=1") >0)//replaces if(readString.contains("L=1")) { digitalWrite(ledPinR, HIGH); // set the LED on } if(readString.indexOf("Red=0") >0) { digitalWrite(ledPinR, LOW); // set the LED OFF } //-----------Green----------------- if(readString.indexOf("Gr=1") >0)//replaces if(readString.contains("L=1")) { digitalWrite(ledPinG, HIGH); // set the LED on } if(readString.indexOf("Gr=0") >0) { digitalWrite(ledPinG, LOW); // set the LED OFF } //-----------Blue----------------- if(readString.indexOf("Blue=1") >0)//replaces if(readString.contains("L=1")) { digitalWrite(ledPinB, HIGH); // set the LED on } if(readString.indexOf("Blue=0") >0) { digitalWrite(ledPinB, LOW); // set the LED OFF } // now output HTML data starting with standart header client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(); readString=""; //stopping client client.stop(); } } } } }
меня то же все это заинтересовало!!!!!!!
Что есть php сервер ?
Скорее вэб сервер , такой маленький и тупенький на строне арды , способный только отдавать по запросу массив csv . И СКРИПТИЩЩЕ на PHP со стороны СЭРВЕРА , который принимает ОНОЭ, парсит, и складывает ... Например в скьюэль базульку, из которой потом можно ЧТОУГОДНОДЕЛАТЬ;)
то есть идеология обратная : сервер - арда, тупо по запросу отдающая массив, а СЕРВЕР , на нем в кроне живет пхп скрипт, который запрвшивает, забирает и складыаает, для дальнейшего использования ...
пока что получилось только отправить на ардуино команду, а как заставить ардуино слать на сервер я не понимаю(
А как же пример из IDE Ethernet->WebClient?
Мне кажется что ардуина должна быть ведомой, а пхп скрипт должен сам ее тыкать палкой как ему нужно, хотя если нужно моментальное обновление то на арудуине должен быть и клиент который сообщит серверу об изменении состояния.
в идеале вижу следующий алгоритм (у каждого свой).
Допустим к ардуине прилеплен датчик температуры.
Ардуина выполняет всего две вещи: 1 отсылает данные о температуре на сервер (отображение температуры на домашней страничке)
2 мониторит какую либу переменную (хоть у себя на SD карте хоть на PHP сервере)
Соответственно при изменение переменной включает (предположим) пропелер.
Пропелер крутиться до понижение температуры (уже реалезовано в самой ардуине)
ИТД ИТП
С рализацией на serial port примеров много. Но если честно то очень хочеться увидить это полностью на PHP - полнстью весь код и скетч.
Тут пошагово расписано создание сервера вместе c AJAX, HTML, CSS, и данные тоже можно получить обратно
http://startingelectronics.com/tutorials/arduino/ethernet-shield-web-ser...