Ethernet shield + температурный 18В20

skifer
Offline
Зарегистрирован: 05.09.2013

Ethernet shield + температурный датчик DALLAS 18В20.

Через сериал порт температуру гонит нормально. Отдельно сервер тоже показывает какую-нить "ПРИВЕТ!", а вот вместе никак. Браузер крутится, крутится и всё - ноль.

Может опрашиваю как-то неправильно?

Простейший код, но не могу найти. Может быть конфликт пинов? Может не на 10 нужно повесить датчик? Хотя какая разница.

#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// Введите MAC-адрес и IP-адрес вашего контроллера
// IP-адрес должен соответствовать вашей локальной сети
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 };
IPAddress ip(192,168,0,222); //<<< IP-АДРЕС ВВОДИТЬ СЮДА!!!
// Инициализация библиотеки Ethernet server
// с тем IP-адресом и портом который мы хотим использовать
// (порт 80 по умолчанию используется для HTTP):
EthernetServer server(80);
// Data-нога датчика (или датчиков) к 10 пину ардуины
#define ONE_WIRE_BUS 10
// настройка oneWire для работы с любыми другими OneWire девайсами (не только Maxim/Dallas датчиками температуры)
OneWire oneWire(ONE_WIRE_BUS);
// подключаем Dallas Temperature.
DallasTemperature sensors(&oneWire);
void setup()
{
// запускаем Ethernet соединение и сервер:
Ethernet.begin(mac, ip);
server.begin();
sensors.begin();
}
void loop()
{
// ожидание подключения клиентов
EthernetClient client = server.available();
if (client) {
// HTTP запрос заканчивается пустой строкой
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
// если вы дошли до конца строки (был получен символ конца строки)
// и следующая строка пустая, значит http запрос закончился,
// можно отправлять ответ
if (c == '\n' && currentLineIsBlank) {
// отправляем стандартный HTTP-заголовок "Успешный запрос"
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
//sensors.begin();
sensors.requestTemperatures(); // запрос показаний температуры
client.println(sensors.getTempCByIndex(0));
//client.println(oneWire.read());
break;
}
if (c == '\n') {
// начало новой строки
currentLineIsBlank = true;
}
else if (c != '\r') {
// получили символ в текущей строке
currentLineIsBlank = false;
}
}
}
// Небольшая задержка, чтобы дать время
// браузеру для получения данных
delay(1);
// закрываем соединение
client.stop();
}
}

 

skifer
Offline
Зарегистрирован: 05.09.2013

И что ещё странно. Вот такой скетч - просто проброс температуры в сериал порт - без включения ETHERNET работает ТОЛЬКО на 10 пине. 11, 12, 13 выдают на сериал порт либо "0" либо "-127". Вот скетч:

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

// Data-нога датчика (или датчиков) к 10 пину ардуины
#define ONE_WIRE_BUS 10
// настройка oneWire для работы с любыми другими OneWire девайсами (не только Maxim/Dallas датчиками температуры)
OneWire oneWire(ONE_WIRE_BUS);
// подключаем Dallas Temperature.
DallasTemperature sensors(&oneWire);

int incomingByte = 0;   // for incoming serial data

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,0, 222);
EthernetServer server(80);
int Relay = 4;


void setup(void)
{
  // start serial port
  Serial.begin(9600);
  // Start up the library
  sensors.begin();
  
//  pinMode(Relay, OUTPUT);
//  Ethernet.begin(mac, ip);
  //server.begin();  
  
}

void loop(void)
{
  // вызов sensors.requestTemperatures() для сбора показаний 
  // со всех датчиков на шине
  sensors.requestTemperatures(); // запрос показаний температуры  
  Serial.print(sensors.getTempCByIndex(0)); // первый датчик
  Serial.print("\n");
  
  if (Serial.available() > 0)
  {
    incomingByte = Serial.read();
    // say what you got:
    Serial.print("I received: ");
    Serial.println(incomingByte);
    //Serial.println(incomingByte, DEC);
    
  }
  
  if (incomingByte == 49)
   {
     digitalWrite(Relay, LOW);     
   }
  if (incomingByte == 50)
   {
     digitalWrite(Relay, HIGH);
   }
//   if (incomingByte == 51)
//   {
//     sensors.requestTemperatures(); // запрос показаний температуры  
//     Serial.print(sensors.getTempCByIndex(0)); // первый датчик
//     Serial.print("\n");
//   }
  
  
  //////////////////////////////////////////
//  EthernetClient client = server.available();
//  if (client) {
//    // an http request ends with a blank line
//    boolean currentLineIsBlank = true;
//    while (client.connected()) {
//      if (client.available()) {
//        char c = client.read();
//        // 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();
//
//          // output the value of each analog input pin
//          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
//            client.print("analog input ");
//            client.print(analogChannel);
//            client.print(" is ");
//            client.print(analogRead(analogChannel));
//            client.println("<br />");
//          }
//          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();
//  }
///////////////////////////////////////////////////////////////    
  
}

 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

skifer пишет:

И что ещё странно. Вот такой скетч - просто проброс температуры в сериал порт - без включения ETHERNET работает ТОЛЬКО на 10 пине. 11, 12, 13 выдают на сериал порт либо "0" либо "-127".

Может не на 10 нужно повесить датчик? Хотя какая разница.

Даааааааа.........

 Ну если 10 пин всего лишь SS output для  SPI, то отальные (11, 12, 13)....

Как-бы сказать поточнее.... ими как раз вот эти библиотеки управляют....

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

И тут совсем непонятно кто кого победит: Даллас  или Езернет.....

Попробуйте их отключить, должно работать.

 
skifer
Offline
Зарегистрирован: 05.09.2013

Повесил на 2-й пин - заменил библиотеки - нашёл решение в инете, когда ругалось на отсутствие "WConstants.h" (заменил на "Arduino.h" в тексте библиотеки) - и ЗАРАБОТАЛО!

Но...Где нормальные, рабочие библиотеки скачать?

Спасибо.