Go Down

Topic: Informações Ethernet (Read 4634 times) previous topic - next topic

lmeireles43

Bom dia a todos,

Estou com um arduino + ethernet shield + sensor + RTC, com isto jogo informações para a LAN e acesso via navegador com o ip local. Por enquanto apenas me aparecem o valor do relógio, do sensor e algumas variáveis, tudo funcionando corretamente.
Estou querendo controlar a saída PWM, escolhendo valores entre 0 e 255 enviando a informação do navegador para o arduino, procurei exemplos, achei algumas coisas parecidas como ligar e desligar um led, mas com problemas no script não consegui rodar.
É possível? se não for possível e fácil, poderia ser com valores fixos como 3 opções para o pwm tipo 10% 50% e 100%, ai vc clica em 10% e o led fica 10% em intensidade, clica em 100% e então ele fica em total intensidade.
Próximo passo é tentar colocar todo isto na rede externa.

Mortis

Imeireles43,

O que procurar é parecido com o discutido neste outro tópico?

http://arduino.cc/forum/index.php/topic,155376.0.html

bubulindo


Imeireles43,

O que procurar é parecido com o discutido neste outro tópico?

http://arduino.cc/forum/index.php/topic,155376.0.html

Acho que é bastante diferente...

Para isso tens de colocar o Arduino como servidor (creio que já está...), servir uma página com uma form onde colocas o valor de PWM que queres e um botão. Quando clicares nesse botão, o teu browser vai enviar um pedido ao Arduino onde vai aparecer o valor da caixinha de texto e o Arduino pode usar isso para fazer o que pretendes.

Que sabes de HTTP?
This... is a hobby.

lmeireles43

#3
Mar 21, 2013, 04:25 pm Last Edit: Mar 21, 2013, 04:50 pm by lmeireles43 Reason: 1
Morits, ja havia lido este tópico para ver se pescava algo, mas não é isto não... é exatamente o que o bubulindo relatou.
Bubulindo, sim ja esta rodando e servindo uma página, os valores ja me aparecem lá.... pode ser assim como você falou aparecendo uma caixa de texto e digitando o novo valor
mas pode ser tambem com botões com valores ja definidos, tipo variável teste
se clicar no botão 1 a variavel teste é igual a 10, se clicar no botão dois teste = 20 e por ai vai...
não sei nada de HTTP, mas a muito tempo atras utilizava editores do pacote office por exemplo e ficava editando os códigos com o que eu ia vendo
não vou conseguir fazer então?


estou fuçando o pachube paralelamente a isto também.

bubulindo

Dá para fazer... escrever HTML no Office e meter isso no microcontrolador é pedir sarilhos. :P

Não faço ideia de como está feita a tua página e é-me mais simples meter o exemplo da caixa de texto que dos radio buttons, por isso vamos por aí primeiro.

O código HTML dum formulário é algo assim:

Code: [Select]

<form name="input" action="PWM.ino" method="get">
Valor: <input type="text" name="pwm">
<input type="submit" value="Submit">
</form>

Obviamente que criares um javascript para limitar os caracteres para apenas dentro de 255 é preciso. Talvez seja possível fazer isso directamente no objecto.

Depois, ao clicares no botão de submit, o browser vai contactar o Arduino e vai pedir pelo ficheiro PWM.ino. A extensão não importa minimamente, daí ter escolhido esta. :)

O teu programa no Arduino tem então de, ao receber este pedido, fazer parsing do pedido para ver qual o valor atribuído à variável pwm.

Sinceramente, não consigo imaginar qual seja o pedido do browser de cabeça, logo o ideal é adicionares no teu programa uma parte que deite para a porta série o que o browser pede para podermos ver e escrever uma função que pesque o valor do pwm.

Se meteres aqui o teu código actual, creio que podemos ajudar um pouco mais.

Eu tenho o meu shield ethernet empatado com uma aplicação para ver a hora a que passa o próximo autocarro. :$ LOL
This... is a hobby.

Mortis

Totalmente diferente! rs

O que ocorre é que já tens o site a coletar informações do arduino e desejam o inverso, mandar do site para o arduino.

Tenho este tutorial nos favoritos http://www.instructables.com/id/Arduino-Ethernet-Shield-Tutorial/?ALLSTEPS, mas creio que o bubulindo é muito mais apto a te responder ;)

bubulindo

Este tem botões para ligar/desligar o led...

http://tutorial.cytron.com.my/2011/07/27/an-arduino-room-monitoring-web-server/

Tens aqui outro exemplo que é similar ao que pretendes.

http://stackoverflow.com/questions/14478011/how-can-i-read-a-string-from-a-url-to-arduino-webserver-simply-instead-of-just

This... is a hobby.

Mortis

já me deu vontade de comprar um ethernet para os meus arduinos rs

lmeireles43

no inicio está assim:
IPAddress ip(192,168,0,43);
EthernetServer server(80);
não fiz nenhuma página em html, apenas o host no arduino
no caso o que eu quero mudar é a variavel que esta como pbranco e pazul no final
logo eu abro o browse (IE) e digito 192.168.0.43 e me aparece as informações como abaixo:
Code: [Select]

if (client) {
    Serial.println("new client");
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
       if (c == '\n' && currentLineIsBlank) {
               client.print("Temperatura        ");
               client.println(celsius);

                client.print("Aquecedor          ");
               client.println(estados[statusHeater]);
                client.print("Refrigerador       ");
               client.println(estados[statusFan]);
               client.print("Relogio            ");
               if (agora.hora <10) client.print("0");
                     client.print(agora.hora);
                     client.print(":");
                     if (agora.minuto <10) client.print("0");
                     client.println(agora.minuto);
               client.print("Temperatura Max    ");     
               client.println(tempMax);
               client.print("Temperatura Min    ");
               client.println(tempMin);
               client.print("Potencia Branco    ");
               client.print(pbranco);
               client.println("%");
               client.print("Potencia Azul      ");
               client.print(pazul);
               client.println("%");
               break;
        }


eu utilizo ele aqui
Code: [Select]

           if (agora.hora >= led_A_on && agora.hora < led_A_off)
                     analogWrite(ledazul, Pazul);
                     else {
                     analogWrite(ledazul, 0);
                     } 
                     if (agora.hora >= led_B_on && agora.hora < led_B_off)
                     analogWrite(ledbranco, Pbranco);
                     else {
                     analogWrite(ledbranco, 0);
                     }

ou seja se estiver na hora certa ele liga a luz com a potencia programada que é a Pazul e a Pbranco que estão definidas em
int pbranco = 60;
int pazul = 30;

obs: pbranco e Pbranco são diferentes porque colocando 60 ele transforma em um numero que corresponde a 60% de 0 a 255 para o PWM
no caso eu quero pelo HTTP uma caixa de testo onde eu posso escrever e modificar esse 60 e 30, exemplo quero que o o azul fique em 20 e nao 60, então digito 20 e clico no enviar

bubulindo

Já experimentaste mandar o código HTML que te deixei aqui?

E ver o que o browser faz quando carregas no botão submit?
This... is a hobby.

lmeireles43

Final de semana agora vou testar, porém onde coloco o código? creio que se abrir uma página em HTML e editar colocando o código ficaria lá bonitinho, mas como o arduino manda este código para abrir no browser?

bubulindo


Final de semana agora vou testar, porém onde coloco o código? creio que se abrir uma página em HTML e editar colocando o código ficaria lá bonitinho, mas como o arduino manda este código para abrir no browser?


Code: [Select]

if (client) {
    Serial.println("new client");
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
       if (c == '\n' && currentLineIsBlank) {
               client.print("Temperatura        ");
               client.println(celsius);

                client.print("Aquecedor          ");
               client.println(estados[statusHeater]);
                client.print("Refrigerador       ");
               client.println(estados[statusFan]);
               client.print("Relogio            ");
               if (agora.hora <10) client.print("0");
                     client.print(agora.hora);
                     client.print(":");
                     if (agora.minuto <10) client.print("0");
                     client.println(agora.minuto);
               client.print("Temperatura Max    ");     
               client.println(tempMax);
               client.print("Temperatura Min    ");
               client.println(tempMin);
               client.print("Potencia Branco    ");
               client.print(pbranco);
               client.println("%");
               client.print("Potencia Azul      ");
               client.print(pazul);
               client.println("%");
//COLOCAS O CÓDIGO AQUI!!
               break; // <--------------Isto é para quê?
        }

This... is a hobby.

lmeireles43

Se eu tiver um tempinho testo ainda hoje, este break creio que deixei perdido pelo meio, não serve para nada

lmeireles43

simplesmente colocar o código da este problema:
expected primary-expression before "<" token

lmeireles43

coloquei este código aqui na integra:
Code: [Select]

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
byte ip[] = { 192, 168, 0, 43 };                  // ip in lan
                 //subnet mask
EthernetServer server(80);                                      //server port
byte sampledata=50;            //some sample data - outputs 2 (ascii = 50 DEC)             
int ledPin1 = 2;  // LED pin 1

String readString = String(30); //string for fetching data from address
boolean LEDON1 = false; //LED status flag


void setup(){
//start Ethernet
Ethernet.begin(mac, ip);
//Set pin 4 to output
  pinMode(ledPin1, OUTPUT); 

//enable serial datada print 
  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();
    //read char by char HTTP request
    if (readString.length() < 30)
      {
        //store characters to string
        //-----readString.append(c);
          readString.concat(c);
      } 
        //output chars to serial port
        Serial.print(c);
        //if HTTP request has ended
        if (c == '\n') {
          //lets check if LED should be lighted
//------------LED 1
           if (readString.substring(6,11) == "L1=ON")
           {
             digitalWrite(ledPin1, HIGH);    // set the LED on
             LEDON1 = true;
           }
             else if (readString.substring(6,12) == "L1=OFF")
            {
             digitalWrite(ledPin1, LOW);    // set the LED OFF
             LEDON1 = false;             
            } 

          // now output HTML data starting with standart header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          //set background to yellow
          client.print("<body style=background-color:yellow>");
          client.println("<h1>LED control</h1>");
          client.println("<font color='black'>");
          client.println("<br />");

//--------LED 1 CONTROLL--------
          client.println("<form method=get name=LED><input type=submit name=L1 value=ON>  LED 1<form>");     
          client.println("<form method=get name=  LED><input type=submit name=L1 value=OFF  ><form>");
            if (LEDON1)
            {
             client.print("<font color='green' size='3'> ON");
            }
            else
            {
             client.print("<font color='red' size = '3'> OFF");
            }
            client.println("<font color='black' <br />");
           
          client.println("</body></html>");
          //clearing string for next read
          readString="";
          //stopping client
          client.stop();
            }
          }
        }
      }
    } 



Funcionou perfeitamente, pagina em amarelo com boão liga e desliga.... porém quando eu copio a parte:
Code: [Select]

client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          //set background to yellow
          client.print("<body style=background-color:yellow>");
          client.println("<h1>LED control</h1>");
          client.println("<font color='black'>");
          client.println("<br />");


ele sai tudo escrito na página

Go Up