W5100 + php сервер.

avgaz
Offline
Зарегистрирован: 23.09.2014

Добрый день, пришли мне шилды 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";

может кто в курсе как реальзовать подобное?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

серьезно? тоесть прошлая дискусия ничему не научила? поиск на форуме так и не освоили?

avgaz
Offline
Зарегистрирован: 23.09.2014

Вы про что? поиском искал, увы не чего подобного нет.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

avgaz пишет:

Вы про что? поиском искал, увы не чего подобного нет.

а если найду?

avgaz
Offline
Зарегистрирован: 23.09.2014

плюсик вам тогда ))

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

avgaz пишет:

плюсик вам тогда ))

Найдено результатов: примерно 163 (за 0,26 сек.)

avgaz
Offline
Зарегистрирован: 23.09.2014

и что толку покажите хоть одну тему с таким заданием?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

avgaz пишет:

и что толку покажите хоть одну тему с таким заданием?

Да они все с таким заданием...  про GET и POST...

avgaz
Offline
Зарегистрирован: 23.09.2014

Но это не UDP а через web какой смысл использовать webserver на шилде если мне не нужно отображение данных с шилда.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

avgaz пишет:

Но это не UDP а через web какой смысл использовать webserver на шилде если мне не нужно отображение данных с шилда.

какой веб сервер на шильде? я вообще уже тихо косею... в библиотеке в примерах есть пример клиента!

он прекрасно работает с чем угодно хоть с базой данных напрямую...

avgaz
Offline
Зарегистрирован: 23.09.2014

клиента чего?

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

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

avgaz пишет:

клиента чего?

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

серьезно?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

уже даже искать не умеют... большой белый полярный лис...

http://arduino.ru/forum/programmirovanie/udalennoe-upravlenie-arduinkoi-...

avgaz
Offline
Зарегистрирован: 23.09.2014

И что там? там одна теория, в принципе такая же как я изложил в первом сообщение.

Мне то нужна практика

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

avgaz пишет:

И что там? там одна теория, в принципе такая же как я изложил в первом сообщение.

Мне то нужна практика


Мда... может задать в поиске UDP?

avgaz
Offline
Зарегистрирован: 23.09.2014

Ну я же писал, что искал

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

avgaz пишет:

Ну я же писал, что искал


И у всех работает, а у вас нет? Действительно странно.

avgaz
Offline
Зарегистрирован: 23.09.2014

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

 

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

avgaz пишет:

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

 

 


Странно что вы хотите от меня готовое решение, а я принципиально не раздаю готовые решения. Ибо дибо человек начнет думать, либо впадет в истерику и на этой ноте мв растанемся.
я вам уже написал выше, большинство пользуется методами get и post.
А какие пакеты вы птхаете в бедную ардуино то вообще тайна. У ней может тупо памяти не хватает.

avgaz
Offline
Зарегистрирован: 23.09.2014

А зачем вы в обще начали, если изначально у вас намеренье не помогать, а "постебатся"

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

avgaz пишет:

А зачем вы в обще начали, если изначально у вас намеренье не помогать, а "постебатся"


Начал что? Где именно вы увидели стеб? Вам может действительно к доктору? Таблетки успокоительные попить ?
Вам предложил несколько вариантов. Но если вам нужно готовое решение, может вам в ищю исполнителя?

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

Кто доктора звал? Тут я.

Диагноз:

Знание пхп -0

знание протоколов - 0

Рекомендуемое лечение: Курить мануалы.

Подпись: неразборчива.

zhenious
Offline
Зарегистрирован: 03.07.2014

avgaz пишет:

клиента чего?

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

А что мешает вместо странички с кнопочками управления выдавать данные с показаниями датчиков ?

Например, сериализованный по правилам PHP массив с показаниями датчиков.

И в PHP скрипте, с помощью метода unserialize() получаете готовый массив с данными.

P.S. Кстати, пример странички с кнопками - очень информативный пример:

1. он учит получать данные

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

avgaz
Offline
Зарегистрирован: 23.09.2014

zhenious пишет:

А что мешает вместо странички с кнопочками управления выдавать данные с показаниями датчиков ?

Например, сериализованный по правилам PHP массив с показаниями датчиков.

И в PHP скрипте, с помощью метода unserialize() получаете готовый массив с данными.

Мне и нужно выдавать данные с датчиков, вернее я не могу понять как мне с помощью php сервера по LAN их получить и так же с помощью php отправить на ардуину.

А уже полученные данные на сервер, страничку то сделаю, вернее она уже есть но данные берет с usb вот нужно переделать через шилд

Да же так уже как бы сделал через пример скетча вебсервера получаю данные с ардуина помощью

$html = file_get_contents('http://192.168.0.7');

но вот как отправить на ардуину данные понять не могу

avgaz
Offline
Зарегистрирован: 23.09.2014

Возник такой вотпрос как ардуиной обработать 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");
  }
}

 

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

разбейте "с" как Вам надо и все.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

JollyBiber пишет:

Кто доктора звал? Тут я.

Диагноз:

Знание пхп -0

знание протоколов - 0

Рекомендуемое лечение: Курить мануалы.

Подпись: неразборчива.


Во блин, и даже не напишешь готовый скеч?
Да ты доктор-троль. :)

avgaz
Offline
Зарегистрирован: 23.09.2014

JollyBiber пишет:

разбейте "с" как Вам надо и все.

Можно плиз пример как это сделать?

Oleg_I
Offline
Зарегистрирован: 04.04.2016

Приветсвую всех . 

Прошу помочь разобраться где косяк, при компиляции кода ошибок нет 

Решил повторить опыт описанный на хабре по этой ссылке 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>";
}

?>