Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Подключение DS1820

Тема в разделе "Железные вопросы по esp8266", создана пользователем DVE, 8 июн 2015.

Метки:
  1. DVE

    DVE Новичок

    Сообщения:
    2
    Симпатии:
    0
    Всем привет.
    Получил недавно почтой ESP-01, пытаюсь разобраться с датчиком температуры.

    Что дано:
    - ESP-01.
    Подключен через TTL-адаптер 3.3V, залита прошивка nodemcu, поставлен ESPlorer (спасибо автору за полезную программу). Скрипты корректно запускаются, таймер, веб-сервер, мигание светодиодом, все ок.
    - DS1820 подключен по 3х-проводной схеме к GPIO0
    http://vaasa.hacklab.fi/wordpress/wp-content/uploads/2015/03/esp_ds_bb.png
    (вместо батарейки питание от TTL-адаптера)
    - залит стандартный скрипт из примеров к прошивке:
    Код (Text):
    1. t = require("ds18b20")
    2.  
    3. -- ESP-01 GPIO Mapping
    4. gpio0 = 3
    5. t.setup(gpio0)
    6. addrs = t.addrs()
    7. if (addrs ~= nil) then
    8.   print("Total DS18B20 sensors: "..table.getn(addrs))
    9. end
    10. print("Temperature: "..t.read().."'C")
    11. t = nil
    12. ds18b20 = nil
    13. package.loaded["ds18b20"]=nil
    14.  
    Результат: сообщение "Total DS18B20 sensors: 0"

    - стал разбираться как работает код с 1Wire, загружаю следующий скрипт:
    Код (Text):
    1. pin = 3
    2. local ow = require("ow")
    3. -- get list of relevant devices
    4. local d = { }
    5. ow.setup(pin)
    6. ow.reset_search(pin)
    7. while true do
    8.   tmr.wdclr()
    9.   local a = ow.search(pin)
    10.   print('a:', a)
    11.   if not a then break end
    12.  
    13.   print('*')
    14. end
    15.  
    Результат вывода очевиден:
    a: nil

    В общем, эта библиотека ow нефига не видит датчик.
    Вопрос: что я делаю не так?

    DS1820 китайский с ебея, возможно неоригинальный, но с Arduino работает нормально, выдает адрес 0x10. Конденсатор на питание вешал, от батарейки запитывал, пробовал GPIO2 вместо GPIO0, результат тот же.
    Может ow как-то отдельно инициализировать надо? Может DS1820 надо 5В? Сталкивался ли кто-нибудь с "левыми" 1820?

    Tnx
     
  2. anakod

    anakod Moderator Команда форума

    Сообщения:
    314
    Симпатии:
    100
    Можно попробовать поэксперементировать с резисторами подтяжки, поменьше поставить (тут 3.3V а не 5).
     
  3. DVE

    DVE Новичок

    Сообщения:
    2
    Симпатии:
    0
    Спасибо. Хз что, но дело не в железе. Перепробовал разные варианты подтяжки, не помогло.
    В итоге скачал Arduino IDE по ссылке http://esp8266.ru/arduino-ide-esp8266/ залил скетч, датчик прекрасно работает.

    Делаю вывод - либо в последней версии nodemcu баг в либе 1Wire, либо я неправильно ее использую (может задержки какие надо добавить, хз).
     
  4. VelAndr

    VelAndr Новичок

    Сообщения:
    25
    Симпатии:
    0
    Подтверждаю. Тоже начал с nodemcu - работает DHT22 и BMP085, а DS18B20 работать отказывается. Проверял на прошивках 0.9.6-dev_20150627 и 0.9.6-dev_20150704. Причем на integer и float.
    А ардуиновские скетчи отлично видят эти же самые датчики. Так что, похоже, драйвер поломался...
     
  5. Tomahawk

    Tomahawk Читатель

    Сообщения:
    84
    Симпатии:
    10
    Да вы и не разбирались, потому что хотите всё готовое. Поиск можно ведь написать и так:

    require('ds18b20')
    ds18b20.setup(3) --gpio0 = 3
    local address = ds18b20.addrs()
    if(address ~= nil) then
    print("Найдено DS18B20 датчиков: "..table.getn(address))
    end
    ds18b20=nil
    package.loaded["ds18b20"]=nil

    P.S.: а из ds18b20.lua можно выкинуть треть лишнего кода(хотя он и работает).
     
  6. VelAndr

    VelAndr Новичок

    Сообщения:
    25
    Симпатии:
    0
    Вот точно так и делал.
    ds18b20.addrs() возвращает пустой массив.
    Модуль 'ds18b20' удачно скомпиленный лежит в файловой системе.
    Вот и правда, интересно стало, у нас двоих только эти датчики в nodemcu не работают?
    Пробовать более старые версии nodemcu нет желания.
    Для справки - у меня ESP-03 c 512кб флеша.
     
  7. Tomahawk

    Tomahawk Читатель

    Сообщения:
    84
    Симпатии:
    10
    VelAndr, а резистор между плюсом и сигнальным проводом у вас какой стоит?
     
  8. VelAndr

    VelAndr Новичок

    Сообщения:
    25
    Симпатии:
    0
    стоит 5.1К. Проблема-то в том, что ардуиновский скетч отлично видит и один, и два датчика А вот nodemcu артачится :)
     
  9. Tomahawk

    Tomahawk Читатель

    Сообщения:
    84
    Симпатии:
    10
    На 3,3К и ESP-01 у меня работало с 4 датчиками на NodeMCU. Покажите тогда код библиотеки, которую используете. Проблема может быть также в прошивке NodeMCU, их целая куча версий, багов в ней немеряно =)
     
  10. VelAndr

    VelAndr Новичок

    Сообщения:
    25
    Симпатии:
    0
    Код библиотеки и пример - стандартные с гитхаба.
    В issue на гитхабе описывается, что разрабы поломали тайминги в драйвере 1-wire из-за перемещения драйвера во flash.
    https://github.com/nodemcu/nodemcu-firmware/issues/533
    Вопрос, на мой взгляд, можно считать закрытым.
    Буду пробовать "нативную" разработку - sming или ардуину.
     
  11. Finaef

    Finaef Новичок

    Сообщения:
    6
    Симпатии:
    0
    Всем привет! Помогите разобраться с датчиков 1820. У меня плата 12-F бутероблема бутерброд. Проблема заключается в том что если подключен датчик 1820 и подать питание то плата работает с постоянными перезагрузками, постоянные дисконнекты в blynk, но если сначало подключить питание а потом датчик к esp то все работает идеально. В чем может быть проблема? Прошивка NodeMCU последняя, скетч
    СКЕТЧ (раскрыть)

    Код (Text):
    1. #define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
    2. #include <ESP8266WiFi.h>
    3. #include <BlynkSimpleEsp8266.h>
    4. #include <OneWire.h>
    5. #include <DallasTemperature.h>
    6. #include <TimeLib.h>
    7. #include <SimpleTimer.h>
    8. #define ONE_WIRE_BUS 0
    9.  
    10. OneWire oneWire(ONE_WIRE_BUS);
    11. DallasTemperature sensors(&oneWire);
    12.  
    13. char auth[] = "мой токен";
    14.  
    15. SimpleTimer timer;
    16.  
    17. void setup()
    18. {
    19.   Serial.begin(9600);
    20.   Blynk.begin(auth, "сеть", "пароль");
    21.  
    22.   sensors.begin();
    23.  
    24.   timer.setInterval(1000L, sendTemps); // Temperature sensor polling interval (5000L = 5 seconds)
    25. }
    26.  
    27. void sendTemps()
    28. {
    29.   sensors.requestTemperatures(); // Polls the sensors
    30.  
    31.   float tempBabyRoom = sensors.getTempCByIndex(0); // Gets first probe on wire in lieu of by address
    32.  
    33.   Blynk.virtualWrite(4, tempBabyRoom);
    34. }
    35.  
    36. void loop()
    37. {
    38.   Blynk.run();
    39.   timer.run();
    40. }


    Помогите разобраться друзья!
     
  12. planar74

    planar74 Читатель

    Сообщения:
    45
    Симпатии:
    9
    @Finaef
    Код (Text):
    1.  sensors.begin();
    2. delay(3000);
    3.   timer.setInterval(1000L, sendTemps); // Temperature sensor polling interval (5000L = 5 seconds)
    4.  
    Датчику надо время на инициализацию.
     
  13. Finaef

    Finaef Новичок

    Сообщения:
    6
    Симпатии:
    0
    Так он включается и показывает в blynk температуру но через сек около 30 начинает перезагружаться сам модуль!
     
  14. planar74

    planar74 Читатель

    Сообщения:
    45
    Симпатии:
    9
    @Finaef
    Wathdog срабатывает. Дай три секунды на инициализацию и результат скажи.
     
  15. Finaef

    Finaef Новичок

    Сообщения:
    6
    Симпатии:
    0
    ок пробую
     
  16. Finaef

    Finaef Новичок

    Сообщения:
    6
    Симпатии:
    0
    все так же
    включаешь с подключенным постоянно дисконнект а если включить а потом в макетку с давтчиком воткнуть все ок! датчики разные 3 штуки опробовал
    Заметил особенность если управлять rgb светодиодом через blynk то сразу дисконнект!
     
  17. planar74

    planar74 Читатель

    Сообщения:
    45
    Симпатии:
    9
    @Finaef
    По ходу, модуль пыток не выдержал. Никогда с подобным не сталкивался, извиняюсь, помочь не смогу.
    З. Ы. А в консоль модуль что говорит перед перезагрузкой? Или вообще молчит?
     
  18. Finaef

    Finaef Новичок

    Сообщения:
    6
    Симпатии:
    0
    В консоле пишет конект с моей сетью! дословно connect to "моя сеть" ....
    может в железе подтяжку по gpio поменять? есть подозрение что сопротивления малы! так как с rgb используется шим может что то по каналам летит! бывает если руками трогаешь каналы то синий светодиод загораеться слегка!
     
  19. Юрий Ботов

    Юрий Ботов Moderator Команда форума

    Сообщения:
    1.053
    Симпатии:
    175
    Извини. Немного не понял... Что за последняя прошивка NodeMcu если код на Arduinoвском C++ ? Ну это так... от лукавого. Если по делу: сильно похоже на проблемы с питанием. Возможно замена USB кабеля на короткий и толстый все проблемы решит, а если что, придется питаться от другого устройства...
    Я достал из шкафа такой-же бутерброд и залил на него свой код (который ИМХО потребляет поболее) - работает как часы. Кстати... при прошивке из Arduino какой из вариантов выбирыраете? Я D1.
     
  20. Finaef

    Finaef Новичок

    Сообщения:
    6
    Симпатии:
    0
    NodeMCU прошивка самого модуля. скечь лью выбрав именно этот модуль NodeMCU 1.0 (esp-12 e module)
     

Поделиться этой страницей