Olá gente, é meu primeiro post aqui... Tudo certo?

Estou com um projeto de automação e e queria colocar um sensor de temperatura ds18b20 meu uno+ethernet shield para ler a temperatura e passar pro html

Já tenho a pagina web via micro sd ligando alguns reles e leds... Como poderia incrementar a leitura do sensor de temperatura no html da pagina? Obrigado

Exibições: 676

Responder esta

Respostas a este tópico

estou com a mesma dúvida amigo ,se conseguiu solucionar, poste aqui a solução por gentileza

Olá bem vindo,

Aqui neste link tem um projeto completo, adapte ao seu.

http://www.instructables.com/id/Measure-temperature-on-the-web-with... 

Meu canal AQUI

Abs.

CK

Não consigo imprimir o valor do sensor de temperatura na pagina html de nenhuma forma e é justamente a parte do projeto que está faltando.Em um outro código consigo acionar e desligar relés,enviar valores pwm,assim como ler um sensor ultrassônico porém quando coloco para imprimir o valor vindo do ds18b20 dentro da pagina html o valor vindo do sensor a página para de responder.

testei o código que vc me enviou e vou colar aqui oque fiz somente para o sensor de temperatura que é  o problema :

ps.: está imprimindo normalmente na porta serial assim como um outro código que testei anteriormente

Linha 133 onde imprime ( a página deveria estar imprimindo somente o valor );

  1. #include <OneWire.h>
  2. #include <SPI.h>
  3. #include <Ethernet.h>
  4. byte mac[] = { 0xA4, 0x28, 0x72, 0xCA, 0x55, 0x2F };
  5. byte ip[] = { 192, 168, 0, 177};
  6. char servidor[40] = "renancasa.hopto.org";
  7. byte gateway[] = { 192, 168, 0, 1 };
  8. byte subnet[] = { 255, 255, 255, 0 };
  9. // (port 80 is default for HTTP):
  10. EthernetServer server(80);
  11. String readString;
  12. OneWire ds(10); // on pin 10 (a 4.7K resistor is necessary)
  13. void setup(void) {
  14. // Open serial communications and wait for port to open:
  15. Serial.begin(9600);
  16. Ethernet.begin(mac, ip);
  17. server.begin();
  18. Serial.print("server is at ");
  19. Serial.println(Ethernet.localIP());
  20. }
  21. void loop(void) {
  22. byte i;
  23. byte present = 0;
  24. byte type_s;
  25. byte data[12];
  26. byte addr[8];
  27. float celsius, fahrenheit;
  28. if ( !ds.search(addr)) {
  29. Serial.println("No more addresses.");
  30. Serial.println();
  31. ds.reset_search();
  32. delay(250);
  33. return;
  34. }
  35. Serial.print("ROM =");
  36. for( i = 0; i < 8; i++) {
  37. Serial.write(' ');
  38. Serial.print(addr[i], HEX);
  39. }
  40. if (OneWire::crc8(addr, 7) != addr[7]) {
  41. Serial.println("CRC is not valid!");
  42. return;
  43. }
  44. Serial.println();
  45. // the first ROM byte indicates which chip
  46. switch (addr[0]) {
  47. case 0x10:
  48. Serial.println(" Chip = DS18S20"); // or old DS1820
  49. type_s = 1;
  50. break;
  51. case 0x28:
  52. Serial.println(" Chip = DS18B20");
  53. type_s = 0;
  54. break;
  55. case 0x22:
  56. Serial.println(" Chip = DS1822");
  57. type_s = 0;
  58. break;
  59. default:
  60. Serial.println("Device is not a DS18x20 family device.");
  61. return;
  62. }
  63. ds.reset();
  64. ds.select(addr);
  65. ds.write(0x44); // start conversion, use ds.write(0x44,1) with parasite power on at the end
  66. delay(1000); // maybe 750ms is enough, maybe not
  67. // we might do a ds.depower() here, but the reset will take care of it.
  68. present = ds.reset();
  69. ds.select(addr); 
  70. ds.write(0xBE); // Read Scratchpad
  71. Serial.print(" Data = ");
  72. Serial.print(present, HEX);
  73. Serial.print(" ");
  74. for ( i = 0; i < 9; i++) { // we need 9 bytes
  75. data[i] = ds.read();
  76. Serial.print(data[i], HEX);
  77. Serial.print(" ");
  78. }
  79. Serial.print(" CRC=");
  80. Serial.print(OneWire::crc8(data, 8), HEX);
  81. Serial.println();
  82. // Convert the data to actual temperature
  83. // because the result is a 16 bit signed integer, it should
  84. // be stored to an "int16_t" type, which is always 16 bits
  85. // even when compiled on a 32 bit processor.
  86. int16_t raw = (data[1] 8) | data[0];
  87. if (type_s) {
  88. raw = raw 3; // 9 bit resolution default
  89. if (data[7] == 0x10) {
  90. // "count remain" gives full 12 bit resolution
  91. raw = (raw & 0xFFF0) + 12 - data[6];
  92. }
  93. } else {
  94. byte cfg = (data[4] & 0x60);
  95. // at lower res, the low bits are undefined, so let's zero them
  96. if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms
  97. else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
  98. else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
  99. //// default is 12 bit resolution, 750 ms conversion time
  100. }
  101. celsius = (float)raw / 16.0;
  102. fahrenheit = celsius * 1.8 + 32.0;
  103. Serial.print(" Temperature = ");
  104. Serial.print(celsius);
  105. Serial.print(" Celsius, ");
  106. Serial.print(fahrenheit);
  107. Serial.println(" Fahrenheit");
  108. // listen for incoming clients
  109. EthernetClient cliente = server.available();
  110. if (cliente) {
  111. while (cliente.connected()) {
  112. if (cliente.available()) {
  113. char c = cliente.read();
  114. if (readString.length() < 100) {
  115. readString += c;
  116. }
  117. if (c == '\n') {
  118. ////////////////////////////////////////CRIAÇÃO DE PAGINA WEB//////////////////////////////////////////////////
  119. cliente.println("HTTP/1.1 200 OK");
  120. cliente.println("Content-Type: text/html");
  121. cliente.println();
  122. cliente.println("<HTML>");
  123. cliente.println("<BODY>");
  124. cliente.println("<head><meta http-equiv=""refresh"" content=""5""></head>");
  125. cliente.println("<H1>temperatura</H1>");
  126. cliente.println("<hr />");
  127. cliente.println("<br />");
  128. cliente.println(celsius);
  129. cliente.println("</BODY>");
  130. cliente.println("</HTML>");
  131. delay(1);
  132. cliente.stop();
  133. }
  134. }
  135. }
  136. }
  137. }

Bom dia, 

Por acaso estava pesquisando sobre Firmata .  Talvez possa ser útil.

https://www.arduino.cc/en/Reference/Firmata

https://github.com/firmata/protocol

biblioteca Firmata implementa o protocolo Firmata para se comunicar com o software no computador host. Isso permite que você escreva firmware personalizado sem ter que criar seu próprio protocolo e objetos para o ambiente de programação que você está usando.

Andei dando uma olhada , porém como sou novo nessa plataforma não entendi muito bem  ....

tentei então implementar da forma que fiz com os outros sensores ( que funcionam por sinal ) 

Quando utilizo esse sensor o ds18b20  a pagina  com endereço 192.168.0.177  nem carrega .... fiz dessa forma agora utilizando um codigo que possibilita saber qual é  o sensor.( sem usar o shield funciona normalmente imprimindo na porta serial ).

Anexos

Boa tarde, 

Infelizmente não tenho experiência com a placa ethernet.

Procure tutoriais aqui no Lab para o modelo da sua placa.

Faça os testes com a sua placa, seguindo o tutorial.

Depois que ela estiver OK, pesquise o seu problema. 

Olá Filipi!

Primeiramente precisa descobrir se o problema é o sensor ou a conexão ethernet.

Você já fez um teste com a página sem usar o sensor? Exibe corretamente?

Caso positivo, então o problema esta na ligação do sensor.

O DS18B20 usa SPI e o Shield Ethernet também correto? Pode estar havendo um conflito.

Outro ponto: Procure definir sua requisição assim:

client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connnection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");

pois é,creio que possa ser sim , ambos funcionam de foram independente normalmente, seu eu achar alguma solução posto aqui novamente

Olá José Augusto, só uma correção o DS18B20 usa uma comunicação serial chamada 1-wire, logo não teria conflito com W5100. Só teria conflito se usar os mesmos pinos da SPI.

Olá Flávio!

Está descartada então a possibilidade de conflito.

Renan ou Filipi:

No entanto, como os dispositivos estão funcionando corretamente de forma separada, não custa nada tentarmos outras possibilidades, mesmo que remotas.

- Verifiquem se estão usando pino 10. Se não me engano, esse pino normalmente é usado pela w5100 ou outros dispositivos SPI como SS.Tentem usar outro pino.

- Os comandos print podem consumir memória e causar problemas no funcionamento. Usem a macro F quando forem imprimir valores constantes.

Por exemplo:

Em vez de : Serial.print(" Temperature = ");

Use: Serial.print(F(" Temperature = "));

rapaz , justamente , conferi oque você disse e o problema era justamente no pino para leitura , utilizando a pino 10 e Shield Ethernet junto com os Ds18b20 não funcionavam.Muito obrigado!

Olá Renan!

Sim, esse pino é usado na comunicação SPI.

No Arduino Mega é o pino 53.

O pior é que isso não é muito divulgado na documentação, o que pode causar essa confusão...

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço