W5100 + php сервер.
- Войдите на сайт для отправки комментариев
Вс, 14/06/2015 - 17:18
Добрый день, пришли мне шилды W5100, но вот что то не как понять не могу как с ними работать нормально
Необходимо следущее, что бы ардуина в сеть посылала данные с датчиков, так же могла принять данные из сети для включения реле.
В сети находится сервер php который читает данные и их кторого отправляются данные.
И так пытаюсь сделать на примере UDPSendReceiveString в результате ардуина принимает данные по краине мере в мониторе пишет это, но сервер не может ответ прочитать
ардуина
#include <SPI.h> // needed for Arduino versions later than 0018 #include <Ethernet.h> #include <EthernetUdp.h> // UDP library from: bjoern@cs.stanford.edu 12/30/2008 // Enter a MAC address and IP address for your controller below. // The IP address will be dependent on your local network: byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192, 168, 0, 7); unsigned int localPort = 8888; // local port to listen on // buffers for receiving and sending data char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet, char ReplyBuffer[] = "acknowledged"; // a string to send back // An EthernetUDP instance to let us send and receive packets over UDP EthernetUDP Udp; void setup() { // start the Ethernet and UDP: Ethernet.begin(mac, ip); Udp.begin(localPort); Serial.begin(9600); } void loop() { // if there's data available, read a packet int packetSize = Udp.parsePacket(); if (packetSize) { Serial.print("Received packet of size "); Serial.println(packetSize); Serial.print("From "); IPAddress remote = Udp.remoteIP(); for (int i = 0; i < 4; i++) { Serial.print(remote[i], DEC); if (i < 3) { Serial.print("."); } } Serial.print(", port "); Serial.println(Udp.remotePort()); // read the packet into packetBufffer Udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE); Serial.println("Contents:"); Serial.println(packetBuffer); // send a reply, to the IP address and port that sent us the packet we received Udp.beginPacket(Udp.remoteIP(), Udp.remotePort()); Udp.write(ReplyBuffer); Udp.endPacket(); } delay(10); }
php сервер
<?php
if($fp = fsockopen("udp://192.168.0.7", 8888, $errno, $errstr, 1))
{
fwrite($fp, '3');
$bufft = fgets($fp);
fclose($fp);
}
echo "$bufft";
может кто в курсе как реальзовать подобное?
серьезно? тоесть прошлая дискусия ничему не научила? поиск на форуме так и не освоили?
Вы про что? поиском искал, увы не чего подобного нет.
Вы про что? поиском искал, увы не чего подобного нет.
а если найду?
плюсик вам тогда ))
плюсик вам тогда ))
Найдено результатов: примерно 163 (за 0,26 сек.)
и что толку покажите хоть одну тему с таким заданием?
и что толку покажите хоть одну тему с таким заданием?
Да они все с таким заданием... про GET и POST...
Но это не UDP а через web какой смысл использовать webserver на шилде если мне не нужно отображение данных с шилда.
Но это не UDP а через web какой смысл использовать webserver на шилде если мне не нужно отображение данных с шилда.
какой веб сервер на шильде? я вообще уже тихо косею... в библиотеке в примерах есть пример клиента!
он прекрасно работает с чем угодно хоть с базой данных напрямую...
клиента чего?
вебсервер на шилде так же есть в примерах, и практически все в поиске именно про этот вебсервер, то есть в браузере отображается страничка с шилда там же и кнопочки управления. Мне же нужно что бы на отдельном сервер на php мог получать данные с шилда и отправлять их туда.
клиента чего?
вебсервер на шилде так же есть в примерах, и практически все в поиске именно про этот вебсервер, то есть в браузере отображается страничка с шилда там же и кнопочки управления. Мне же нужно что бы на отдельном сервер на php мог получать данные с шилда и отправлять их туда.
серьезно?
уже даже искать не умеют... большой белый полярный лис...
http://arduino.ru/forum/programmirovanie/udalennoe-upravlenie-arduinkoi-...
И что там? там одна теория, в принципе такая же как я изложил в первом сообщение.
Мне то нужна практика
И что там? там одна теория, в принципе такая же как я изложил в первом сообщение.
Мне то нужна практика
Мда... может задать в поиске UDP?
Ну я же писал, что искал
Ну я же писал, что искал
И у всех работает, а у вас нет? Действительно странно.
Странно, что вы заявляете что у всех работает, но в то же время кроме теории показать конкретные примеры не можете.
Странно, что вы заявляете что у всех работает, но в то же время кроме теории показать конкретные примеры не можете.
Странно что вы хотите от меня готовое решение, а я принципиально не раздаю готовые решения. Ибо дибо человек начнет думать, либо впадет в истерику и на этой ноте мв растанемся.
я вам уже написал выше, большинство пользуется методами get и post.
А какие пакеты вы птхаете в бедную ардуино то вообще тайна. У ней может тупо памяти не хватает.
А зачем вы в обще начали, если изначально у вас намеренье не помогать, а "постебатся"
А зачем вы в обще начали, если изначально у вас намеренье не помогать, а "постебатся"
Начал что? Где именно вы увидели стеб? Вам может действительно к доктору? Таблетки успокоительные попить ?
Вам предложил несколько вариантов. Но если вам нужно готовое решение, может вам в ищю исполнителя?
Кто доктора звал? Тут я.
Диагноз:
Знание пхп -0
знание протоколов - 0
Рекомендуемое лечение: Курить мануалы.
Подпись: неразборчива.
клиента чего?
вебсервер на шилде так же есть в примерах, и практически все в поиске именно про этот вебсервер, то есть в браузере отображается страничка с шилда там же и кнопочки управления. Мне же нужно что бы на отдельном сервер на php мог получать данные с шилда и отправлять их туда.
А что мешает вместо странички с кнопочками управления выдавать данные с показаниями датчиков ?
Например, сериализованный по правилам PHP массив с показаниями датчиков.
И в PHP скрипте, с помощью метода unserialize() получаете готовый массив с данными.
P.S. Кстати, пример странички с кнопками - очень информативный пример:
1. он учит получать данные
2. раз есть кнопки, значит есть и данные отправляемые, т.е. учит и принимать данные
А что мешает вместо странички с кнопочками управления выдавать данные с показаниями датчиков ?
Например, сериализованный по правилам PHP массив с показаниями датчиков.
И в PHP скрипте, с помощью метода unserialize() получаете готовый массив с данными.
Мне и нужно выдавать данные с датчиков, вернее я не могу понять как мне с помощью php сервера по LAN их получить и так же с помощью php отправить на ардуину.
А уже полученные данные на сервер, страничку то сделаю, вернее она уже есть но данные берет с usb вот нужно переделать через шилд
Да же так уже как бы сделал через пример скетча вебсервера получаю данные с ардуина помощью
$html = file_get_contents('http://192.168.0.7');
но вот как отправить на ардуину данные понять не могу
Возник такой вотпрос как ардуиной обработать GET запрос?
ну вот к примеру http://192.168.0.7/d=11
дает
server is at 192.168.0.7
new client
GET /d=11 HTTP/1.1
Host: 192.168.0.7
Но вот как его обработь то есть что бы понять что приходит
/* Web Server A simple web server that shows the value of the analog input pins. using an Arduino Wiznet Ethernet shield. Circuit: * Ethernet shield attached to pins 10, 11, 12, 13 * Analog inputs attached to pins A0 through A5 (optional) created 18 Dec 2009 by David A. Mellis modified 9 Apr 2012 by Tom Igoe */ #include <SPI.h> #include <Ethernet.h> // Enter a MAC address and IP address for your controller below. // The IP address will be dependent on your local network: byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192, 168, 0, 7); // Initialize the Ethernet server library // with the IP address and port you want to use // (port 80 is default for HTTP): EthernetServer server(80); void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only } // start the Ethernet connection and the server: Ethernet.begin(mac, ip); server.begin(); Serial.print("server is at "); Serial.println(Ethernet.localIP()); } void loop() { // listen for incoming clients EthernetClient client = server.available(); if (client) { Serial.println("new client"); // an http request ends with a blank line boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); // if you've gotten to the end of the line (received a newline // character) and the line is blank, the http request has ended, // so you can send a reply if (c == '\n' && currentLineIsBlank) { // send a standard http response header client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); if (c == 'd=') { client.println("11"); } client.println("00.55,555,444,444,44,55"); break; } if (c == '\n') { // you're starting a new line currentLineIsBlank = true; } else if (c != '\r') { // you've gotten a character on the current line currentLineIsBlank = false; } } } // give the web browser time to receive the data delay(1); // close the connection: client.stop(); Serial.println("client disconnected"); } }разбейте "с" как Вам надо и все.
Кто доктора звал? Тут я.
Диагноз:
Знание пхп -0
знание протоколов - 0
Рекомендуемое лечение: Курить мануалы.
Подпись: неразборчива.
Во блин, и даже не напишешь готовый скеч?
Да ты доктор-троль. :)
разбейте "с" как Вам надо и все.
Можно плиз пример как это сделать?
Приветсвую всех .
Прошу помочь разобраться где косяк, при компиляции кода ошибок нет
Решил повторить опыт описанный на хабре по этой ссылке https://m.geektimes.com/post/255546/
Все заработало за исключением кнопки включения светодиода через отправку запроса.
Насколько я понимаю не работате обработка запроса на стороне ардуино или он не приходит от php сервера
При изменнии положения включателя на сайте логирование в файлах отрабатывает корректно
Уже несколько дней борюсь но никак не могу сообразить в чем причина
Скетч для ардуино вот такой
#include <SPI.h> #include <Ethernet.h> #include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 2 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); byte mac[] = { мой мак }; EthernetClient client; char server[] = "мой сервер"; // имя вашего сервера www.arduino.ru ; // имя вашего сервера www.arduino.ru int buff=0; const int led=5; void setup() { Ethernet.begin(mac); sensors.begin(); pinMode( led, OUTPUT); digitalWrite(led, LOW); } void loop() { sensors.requestTemperatures(); if (client.connect(server, 80)) { client.print( "GET /add_data.php?"); client.print("temperature="); client.print( sensors.getTempCByIndex(0) ); client.print("&"); client.print("&"); client.print("temperature1="); client.print( sensors.getTempCByIndex(1) ); client.println( " HTTP/1.1"); client.print( "Host: " ); client.println(server); client.println( "Connection: close" ); client.println(); client.println(); delay(200); while (client.available()) { char c = client.read(); if ( c=='1') { buff=1; } if ( c=='0') { buff=0; } } client.stop(); client.flush(); delay(100); } else { client.stop(); delay(1000); client.connect(server, 80); } if ( buff==1) { digitalWrite (led, HIGH); } else { digitalWrite(led, LOW); } delay(500); }\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Index php <html> <head> <title>HOME</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <script src="//code.jquery.com/jquery-1.11.0.min.js"></script> <link rel="stylesheet" type="text/css" href="style.css"> <script> function show() { $.ajax({ url: "transfer/temp-1.php", cache: false, success: function(html){ $("#content").html(html); } }); $.ajax({ url: "transfer/temp-2.php", cache: false, success: function(html){ $("#content-1").html(html); } }); $.ajax({ url: "transfer/ledstate.php", cache: false, success: function(html){ $("#content-3").html(html); } }); } $(document).ready(function(){ show(); setInterval('show()',500); }); function AjaxFormRequest(result_id,led,url) { jQuery.ajax({ url: url, type: "POST", dataType: "html", data: jQuery("#"+led).serialize(), }); } </script> </head> <body> <div class="r"> <p class="r1">Температура дома</p> <div class="r2" style="display:inline-block;"> <div class="r3" id="content"></div> <div class="r3"> C<sup>o</sup></div> </div> </div> <div class="r"> <p class="r1">Температура W5100</p> <div class="r2" > <div class="r3" id="content-1"></div> <div class="r3"> C<sup>o</sup></div> </div> </div> <div class="r"> <div class="rl"> <p class="r1">Выключатель</p> <div class="r2" style="font-size:35px" > <form id="led" action="" method="post" > <label><input type="radio" name="status" value="1"> ON </label> <label><input type="radio" name="status" value="0"> OFF </label> <br> <input class="submitButton" type="submit" value="Отправить" onclick="AjaxFormRequest('messegeResult', 'led', 'transfer/led.php')" > </form> </div> </div> <div class="rr"> <p class="r1">Состояние</p> <div class="r2"style="font-size:35px" > <div class="r3" id="content-3"></div> </div> </div> </div> </body> </html> ///////////////////////////////////////////////////////////////////// add_data.php <?php $S1 = $_GET['temperature']; $myFile1 = "txt/in-1.txt"; $fh1 = fopen($myFile1, 'w') or die("can't open file"); fwrite($fh1, $S1); fclose($fh1); $S3 = $_GET['temperature1']; $myFile3 = "txt/in-2.txt"; $fh3 = fopen($myFile3, 'w') or die("can't open file"); fwrite($fh3, $S3); fclose($fh3); $myFile = "txt/out-1.txt"; $fh = fopen($myFile, 'r'); $theData = fread($fh, filesize($myFile)); fclose($fh); echo $theData; ?> /////////////////////////////// ledstate.php <?php $myFile = "../txt/out-1.txt"; $fh = fopen($myFile, 'r'); $theData = fread($fh, filesize($myFile)); fclose($fh); if ( $theData == 1) { echo " <p class='on'>ON</p>"; } if ( $theData == 0) { echo "<p class='off'>OFF</p>"; } ?>