Arduino Uno подключение DS18B20 к web server на W5100
- Войдите на сайт для отправки комментариев
Вс, 10/05/2015 - 12:31
помогите, мучаюсь, не могу решить. хочу подключить несколько датчиков температуры и вывести их на страницу. Вот подключил обычно, делаю сервер никак. как вывести на сервер??? вот код обычного вывода
#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");
}
}
Вот чуть переделал проект, теперь в сериале почему-то по -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"); } }В чем причина? укажите ошибку
Сам разобрался. Как это не печально, но надо было, всего лишь, подключить датчик к пину до 10. подключил ко 2 и все заработало....
Вы не упоминули про подтяжку датчиков - тока с пина ардуины обычно хватает для нормальной работы только одного датчика, поэтому надо сопротивление 3...5 кОм на +5В подключать обычно.