Informações Ethernet

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.

Imeireles43,

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

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

Mortis:
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?

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.

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

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:

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

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. :blush: LOL

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 :wink:

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

Tens aqui outro exemplo que é similar ao que pretendes.

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

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:

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

           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

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

E ver o que o browser faz quando carregas no botão submit?

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?

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?

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ê? 
        }

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

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

coloquei este código aqui na integra:

#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("
");

//--------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' 
");
           
          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:

 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("
");

ele sai tudo escrito na página

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

Nunca, Nunca, Nunca compre um ethernet sem SDCARD e escolha um com Wiznet W5100

mmoscz:
Nunca, Nunca, Nunca compre um ethernet sem SDCARD e escolha um com Wiznet W5100

Olá, mmoscz! Obrigado pela dica! :wink:

Comprei este com SDcard.....
Esse final de semana montei a pagina em html, porém na hora que coloco no arduino ele da problema com as " ". ainda n sei como tirar esse problema da tabela que inseri, tentei subsituir os " por ' e o sketch trava na hora da verificação....

Queres mostrar o pedaço de código que te estás a referir?

infelizmente fiz algo de errado ao ligar um driver e superaqueceu o arduino e saiu um cheiro, agora não funciona mais o USB apenas a luz de TX e RX ligadas e o led do On vermelho ligado..... mas ligo o USB e nada, morreu?