Arduino+Ethernet Shield+PHP server

Rash923
Offline
Зарегистрирован: 17.12.2011

О великие программисты данного ресурса!!! Мне нужен ваш совет в данную, трудную для меня минуту.

У меня стоит задача ввода и вывода дискретных и аналоговых выходов черех 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(); 
            } 
          } 
        } 
      } 
 }

 

Gagarin74
Offline
Зарегистрирован: 24.08.2013

меня то же все это заинтересовало!!!!!!!

inspiritus
Offline
Зарегистрирован: 17.12.2012

Что есть php сервер ?

Скорее вэб сервер , такой маленький и тупенький на строне арды , способный только отдавать по запросу  массив csv .  И СКРИПТИЩЩЕ на PHP со стороны СЭРВЕРА , который принимает ОНОЭ, парсит, и складывает ... Например в скьюэль базульку, из которой потом можно ЧТОУГОДНОДЕЛАТЬ;) 

то есть идеология обратная : сервер - арда, тупо по запросу  отдающая массив, а СЕРВЕР , на нем в кроне живет пхп скрипт, который запрвшивает, забирает и складыаает, для дальнейшего использования ...

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Rash923 пишет:

пока что получилось только отправить на ардуино команду, а как заставить ардуино слать на сервер я не понимаю(

 

А как же пример из IDE Ethernet->WebClient?

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Мне кажется что ардуина должна быть ведомой, а пхп скрипт должен сам ее тыкать палкой как ему нужно, хотя если нужно моментальное обновление то на арудуине должен быть и клиент который сообщит серверу об изменении состояния.

Gagarin74
Offline
Зарегистрирован: 24.08.2013

в идеале вижу следующий алгоритм (у каждого свой).

Допустим к ардуине прилеплен датчик температуры.

Ардуина выполняет всего две вещи: 1  отсылает данные о температуре на сервер (отображение температуры на домашней страничке)

2 мониторит какую либу переменную (хоть у себя на SD карте хоть на PHP сервере)

 

Соответственно при изменение переменной включает (предположим) пропелер.

Пропелер крутиться до понижение температуры (уже реалезовано в самой ардуине)

ИТД ИТП

С рализацией на serial port примеров много. Но если честно то очень хочеться увидить это полностью на PHP - полнстью весь код и скетч.

vadjan07
Offline
Зарегистрирован: 28.01.2014

Тут пошагово расписано создание сервера вместе c AJAX, HTML, CSS, и данные тоже можно получить обратно

http://startingelectronics.com/tutorials/arduino/ethernet-shield-web-ser...