Ethernet shield + температурный 18В20
- Войдите на сайт для отправки комментариев
Пт, 06/09/2013 - 09:13
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();
}
}
И что ещё странно. Вот такой скетч - просто проброс температуры в сериал порт - без включения 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(); // } /////////////////////////////////////////////////////////////// }И что ещё странно. Вот такой скетч - просто проброс температуры в сериал порт - без включения ETHERNET работает ТОЛЬКО на 10 пине. 11, 12, 13 выдают на сериал порт либо "0" либо "-127".
Может не на 10 нужно повесить датчик? Хотя какая разница.
Даааааааа.........
Ну если 10 пин всего лишь SS output для SPI, то отальные (11, 12, 13)....
Как-бы сказать поточнее.... ими как раз вот эти библиотеки управляют....
И тут совсем непонятно кто кого победит: Даллас или Езернет.....
Попробуйте их отключить, должно работать.
Повесил на 2-й пин - заменил библиотеки - нашёл решение в инете, когда ругалось на отсутствие "WConstants.h" (заменил на "Arduino.h" в тексте библиотеки) - и ЗАРАБОТАЛО!
Но...Где нормальные, рабочие библиотеки скачать?
Спасибо.