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 на обоих. и на страницу ничего не выводит
В чем причина? укажите ошибку
Сам разобрался. Как это не печально, но надо было, всего лишь, подключить датчик к пину до 10. подключил ко 2 и все заработало....
Вы не упоминули про подтяжку датчиков - тока с пина ардуины обычно хватает для нормальной работы только одного датчика, поэтому надо сопротивление 3...5 кОм на +5В подключать обычно.