аааа... "Короткое замыкание" - один из немногих американских фильмов, которые я готов пересматривать на любом языке
Вот что здесь не так? Датчик показывает теперь стабильно -0.06 Спойлер: Код /*ReadDS18B20 ver: 6 Jly 2010 THIS IS A FIRST DRAFT.... WORKS, but scheduled for overhaul. Simple, simple test of reading DS18B20 connected to nuelectronics.com datalogging shield. See... http://sheepdogguides.com/arduino/ar3ne1tt.htm ... for explanation of this code. Code lightly adapted from code from nuelectronics.com*/ #define TEMP_PIN 14 //See Note 1, sheepdogguides..ar3ne1tt.htm void OneWireReset(int Pin);//See Note 2 void OneWireOutByte(int Pin, byte d); byte OneWireInByte(int Pin); void setup() { digitalWrite(TEMP_PIN, LOW); pinMode(TEMP_PIN, INPUT); // sets the digital pin as input (logic 1) Serial.begin(9600); //9600 to match the data rate being used by the //serial monitor on my system, which is set to //the Arduino default. (Sample code published //by nuelectronics used a faster baud rate.) delay(100); Serial.print("temperature measurement:\n"); } void loop(){ int HighByte, LowByte, TReading, SignBit, Tc_100, Whole, Fract; OneWireReset(TEMP_PIN); OneWireOutByte(TEMP_PIN, 0xcc); OneWireOutByte(TEMP_PIN, 0x44); // perform temperature conversion, strong pullup for one sec OneWireReset(TEMP_PIN); OneWireOutByte(TEMP_PIN, 0xcc); OneWireOutByte(TEMP_PIN, 0xbe); LowByte = OneWireInByte(TEMP_PIN); HighByte = OneWireInByte(TEMP_PIN); TReading = (HighByte << 8) + LowByte; SignBit = TReading & 0x8000; // test most sig bit if (SignBit) // negative { TReading = (TReading ^ 0xffff) + 1; // 2's comp } Tc_100 = (6 * TReading) + TReading / 4; // multiply by (100 * 0.0625) or 6.25 Whole = Tc_100 / 100; // separate off the whole and fractional portions Fract = Tc_100 % 100; if (SignBit) // If its negative { Serial.print("-"); } Serial.print(Whole); Serial.print("."); if (Fract < 10) { Serial.print("0"); } Serial.print(Fract); Serial.print("\n"); delay(5000); // 5 second delay. Adjust as necessary } void OneWireReset(int Pin) // reset. Should improve to act as a presence pulse { digitalWrite(Pin, LOW); pinMode(Pin, OUTPUT); // bring low for 500 us delayMicroseconds(500); pinMode(Pin, INPUT); delayMicroseconds(500); } void OneWireOutByte(int Pin, byte d) // output byte d (least sig bit first). { byte n; for(n=8; n!=0; n--) { if ((d & 0x01) == 1) // test least sig bit { digitalWrite(Pin, LOW); pinMode(Pin, OUTPUT); delayMicroseconds(5); pinMode(Pin, INPUT); delayMicroseconds(60); } else { digitalWrite(Pin, LOW); pinMode(Pin, OUTPUT); delayMicroseconds(60); pinMode(Pin, INPUT); } d=d>>1; // now the next bit is in the least sig bit position. } } byte OneWireInByte(int Pin) // read byte, least sig byte first { byte d, n, b; for (n=0; n<8; n++) { digitalWrite(Pin, LOW); pinMode(Pin, OUTPUT); delayMicroseconds(5); pinMode(Pin, INPUT); delayMicroseconds(5); b = digitalRead(Pin); delayMicroseconds(50); d = (d >> 1) | (b<<7); // shift d to right and insert b in most sig bit position } return(d); }
У вас установлена библиотека OneWire без поддержки ESP. Попробуйте эту https://github.com/PaulStoffregen/OneWire
Если вы о примере с https://www.hacktronics.com/Tutorials/arduino-1-wire-tutorial.html, то измените коды датчиков на свои Код (C++): DeviceAddress insideThermometer = { 0x28, 0x94, 0xE2, 0xDF, 0x02, 0x00, 0x00, 0xFE }; DeviceAddress outsideThermometer = { 0x28, 0x6B, 0xDF, 0xDF, 0x02, 0x00, 0x00, 0xC0 }; DeviceAddress dogHouseThermometer = { 0x28, 0x59, 0xBE, 0xDF, 0x02, 0x00, 0x00, 0x9F }; А проще соберите пример DS18x20_Temperature из поставки библиотеки
Я в этих делах совсем нуб. Не затруднит Вас всё разжевать и в рот сложить? Мне нужен просто работающий датчик. Никаких других примочек мне не надо. Заранее спасибо за помощь.
Попробуйте собрать пример из поставки библиотеки https://github.com/PaulStoffregen/O...s/DS18x20_Temperature/DS18x20_Temperature.pde В строке Код (C++): OneWire ds(10); // on pin 10 (a 4.7K resistor is necessary) укажите номер пина к которому подключен датчик, вроде и все.
Для вашей NodeMCU, наверное удобнее писать D1-D10 (определения пинов https://github.com/esp8266/Arduino/...e2bd9a8e66bb8/variants/nodemcu/pins_arduino.h)
Теперь вообще ничего не понятно. С Вами как-то можно связаться вне форума? Не хочется устраивать здесь бесполезный чат.
Подключите датчик к пину GPIO5 (он же D1 на вашей плате https://arduining.files.wordpress.com/2015/08/nodemcudevkit_v1-0_io.jpg ) Код (C++): OneWire ds(D1); // on pin GPIO5 (a 4.7K resistor is necessary) Кроме почты никак , но форум удобнее.
Я хочу получить ответ от датчика. Хочу в открытом СОМ-порте видеть текущую температуру. Тем самым я пойму, что всё настроено правильно и всё работает. Далее хочу вывести температуру в Интернет.
В Интернет - в каком образе? Можно точнее? Видите ли, это не праздное любопытство. Если это все что Вам нужно и "насовсем" - лучше найти подходящее руководство сделать и забыть. Если Вы хотите чему-то научиться, надо бы начинать с понимания как работает датчик и как он взаимодействует с МК. И ESP8266 для этого не совсем подходящее устройство.
В Интернет на простой сайт. Как сделано здесь: thermo.karelia.ru Да, мне нужно только это. Больше мне не нужно ничего. А использую я именно ESP8266 только потому, что мне нужно передавать данные по Wi-Fi. В планах есть создать некую сеть термометров по городу и вывести данные на сайт. Датчики будут размещаться в квартирах моих знакомых. Я уже устал искать эти подходящие руководства. НЕ получается ничего. То кракозябры выходят, то -127, то No more addresses
Спасибо. Это не моя тема. Но, полагаю, Ваш ответ будет важен тем кто будет отвечать. Я делал здесь две темы по отправке температуры на сайт. Одна - на народный мониторинг, другая - графики на интернет страничке. Обе на ESP. Можете поискать.
А может быть Вы можете помочь разобраться с проблемой? Почему СОМ всё время что-то выдаёт, но только не температуру? Я уже месяц борюсь с этим!