Arduino Uno подключение DS18B20 к web server на W5100

Alex-human
Offline
Зарегистрирован: 03.11.2014

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

#include <OneWire.h>
#include <DallasTemperature.h>
 
#define ONE_WIRE_BUS 10
 
OneWire oneWire(ONE_WIRE_BUS);
 
DallasTemperature sensors(&oneWire);
 
DeviceAddress Thermometer1 = { 
  0x28, 0xDC, 0xF2, 0x61, 0x05, 0x00, 0x00, 0xA8 };  // адрес датчика DS18B20 280054B604000092
DeviceAddress Thermometer2 = { 
  0x28, 0xF3, 0xAF, 0x61, 0x05, 0x00, 0x00, 0x43 }; 
 
void setup() {
 
  sensors.begin();
  sensors.setResolution(Thermometer1, 10);
  sensors.setResolution(Thermometer2, 10);
 
  Serial.begin(9600);
}
 
void printTemperature(DeviceAddress deviceAddress) {
  float tempC = sensors.getTempC(deviceAddress);
  Serial.println(tempC);
  
}
void loop() {
 
  sensors.requestTemperatures();
  Serial.print("Sensor1  ");
  printTemperature(Thermometer1);
 
  Serial.print("Sensor2  ");
  printTemperature(Thermometer2);
  Serial.print("\n");
  delay(10000);
}

Вот код для сервера...не получается вывод и все...как сделать???

#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>
 
#define ONE_WIRE_BUS 10
 
OneWire oneWire(ONE_WIRE_BUS);
 
DallasTemperature sensors(&oneWire);
 
DeviceAddress Thermometer1 = { 
  0x28, 0xDC, 0xF2, 0x61, 0x05, 0x00, 0x00, 0xA8 };  // адрес датчика DS18B20 280054B604000092
DeviceAddress Thermometer2 = { 
  0x28, 0xF3, 0xAF, 0x61, 0x05, 0x00, 0x00, 0x43 }; 
 
 
 byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // MAC address Ethernet шилда
IPAddress ip(x, x, x, x); // IP address Ethernet шилда
byte gateway[] = { 192, x, x, x }; // Адрес основного шлюза (роутера локальной сети) Смотреть в настройках роутера.
byte subnet[] = { 255, 255, 255, 0 }; // Маска подсети. В локальной сети можно на любом компе зайти в центр упр. сет. -> параметры адаптера.
EthernetServer server(80);  // create a server at port 80
 
void setup() {
   while (!Serial) {
    ; 
  }

  Ethernet.begin(mac, ip);
  server.begin();
  Serial.println(Ethernet.localIP());
  sensors.begin();
  sensors.setResolution(Thermometer1, 10);
  sensors.setResolution(Thermometer2, 10);
 
  Serial.begin(9600);
}
 
void printTemperature(DeviceAddress deviceAddress) {
  float tempC = sensors.getTempC(deviceAddress);
  Serial.println(tempC);
  
}
void loop() {
 EthernetClient client = server.available();
  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.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.println("<meta http-equiv=\"refresh\" content=\"5\">");
  
  //ВОТ ЧТО ТУТ НАПИСАТЬ? ПРОБОВАЛ ВОТ ТАК, ОШИБКА, ПЕРЕМЕННОЙ ПРИСВОИТЬ НЕ ЗНАЮ КАК
          sensors.requestTemperatures();
         // Serial.print("Sensor1  ");
          printTemperature(Thermometer2);
 
          //Serial.print("Sensor2  ");
          printTemperature(Thermometer1);
          //Serial.print("\n");
          delay(10000);
          client.println("</br>");
          client.println("</html>");
          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;
        }
      }
    }
    delay(1);
    client.stop();
    Serial.println("client disonnected");
  }

}

 

Alex-human
Offline
Зарегистрирован: 03.11.2014

Вот чуть переделал проект, теперь в сериале почему-то по -127.00 на обоих. и на страницу ничего не выводит

#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>
 
OneWire oneWire(10); // вход датчиков 18b20
DallasTemperature ds(&oneWire);

DeviceAddress sensor1 = {0x28, 0xDC, 0xF2, 0x61, 0x05, 0x00, 0x00, 0xA8};
DeviceAddress sensor2 = {0x28, 0xF3, 0xAF, 0x61, 0x05, 0x00, 0x00, 0x43};


byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // MAC address Ethernet шилда
IPAddress ip(192, 168, 0, 22); // IP address Ethernet шилда
byte gateway[] = { 192, 168, 0, 1 }; // Адрес основного шлюза (роутера локальной сети) Смотреть в настройках роутера.
byte subnet[] = { 255, 255, 255, 0 }; // Маска подсети. В локальной сети можно на любом компе зайти в центр упр. сет. -> параметры адаптера.
EthernetServer server(80);  // create a server at port 80

void setup() {
   Serial.begin(9600);
  
   while (!Serial) {
    ; 
  }

  Ethernet.begin(mac, ip);
  server.begin();
  Serial.println(Ethernet.localIP());
  ds.begin();
 
}

void loop() {
  ds.requestTemperatures(); // считываем температуру с датчиков
     float t1=ds.getTempC(sensor1);
     float t2=ds.getTempC(sensor2);
   // Serial.print("Sensor 1: ");
  //  Serial.print(ds.getTempC(sensor1)); // отправляем температуру
  //  Serial.println("C");
  //  Serial.print("Sensor 2: ");
  //  Serial.print(ds.getTempC(sensor2));
  //  Serial.println("C");
  //  Serial.println();
    
    Serial.print(t1);
    Serial.print(t2);
    delay(1000);
    EthernetClient client = server.available();
  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.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.println("<meta http-equiv=\"refresh\" content=\"15\">");
          client.println(t1);
          client.println("</br>");
          client.println(t2);
          client.println("</br>");
          client.println("</html>");
          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;
        }
      }
    }
    delay(1);
    client.stop();
    Serial.println("client disonnected");
  }
}

В чем причина? укажите ошибку

 

Alex-human
Offline
Зарегистрирован: 03.11.2014

Сам разобрался. Как это не печально, но надо было, всего лишь, подключить датчик к пину до 10. подключил ко 2 и все заработало....

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Вы не упоминули про подтяжку датчиков - тока с пина ардуины обычно хватает для нормальной работы только одного датчика, поэтому надо сопротивление 3...5 кОм на +5В подключать обычно.