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...