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

DVE

New member
Всем привет.
Получил недавно почтой 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-адаптера)
- залит стандартный скрипт из примеров к прошивке:
Код:
t = require("ds18b20")

-- ESP-01 GPIO Mapping
gpio0 = 3
t.setup(gpio0)
addrs = t.addrs()
if (addrs ~= nil) then
  print("Total DS18B20 sensors: "..table.getn(addrs))
end
print("Temperature: "..t.read().."'C")
t = nil
ds18b20 = nil
package.loaded["ds18b20"]=nil
Результат: сообщение "Total DS18B20 sensors: 0"

- стал разбираться как работает код с 1Wire, загружаю следующий скрипт:
Код:
pin = 3
local ow = require("ow")
-- get list of relevant devices
local d = { }
ow.setup(pin)
ow.reset_search(pin)
while true do
  tmr.wdclr()
  local a = ow.search(pin)
  print('a:', a)
  if not a then break end

  print('*')
end
Результат вывода очевиден:
a: nil

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

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

Tnx
 

anakod

Moderator
Команда форума
Можно попробовать поэксперементировать с резисторами подтяжки, поменьше поставить (тут 3.3V а не 5).
 

DVE

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

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

Tomahawk

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

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 можно выкинуть треть лишнего кода(хотя он и работает).
 

VelAndr

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

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

VelAndr

New member
стоит 5.1К. Проблема-то в том, что ардуиновский скетч отлично видит и один, и два датчика А вот nodemcu артачится :)
 

Tomahawk

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

VelAndr

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

Finaef

New member
Всем привет! Помогите разобраться с датчиков 1820. У меня плата 12-F бутероблема бутерброд. Проблема заключается в том что если подключен датчик 1820 и подать питание то плата работает с постоянными перезагрузками, постоянные дисконнекты в blynk, но если сначало подключить питание а потом датчик к esp то все работает идеально. В чем может быть проблема? Прошивка NodeMCU последняя, скетч
Код:
#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <TimeLib.h>
#include <SimpleTimer.h>
#define ONE_WIRE_BUS 0

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

char auth[] = "мой токен";

SimpleTimer timer;

void setup()
{
  Serial.begin(9600);
  Blynk.begin(auth, "сеть", "пароль");

  sensors.begin();

  timer.setInterval(1000L, sendTemps); // Temperature sensor polling interval (5000L = 5 seconds)
}

void sendTemps()
{
  sensors.requestTemperatures(); // Polls the sensors

  float tempBabyRoom = sensors.getTempCByIndex(0); // Gets first probe on wire in lieu of by address

  Blynk.virtualWrite(4, tempBabyRoom);
}

void loop()
{
  Blynk.run();
  timer.run();
}

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

planar74

New member
@Finaef
Код:
 sensors.begin();
delay(3000);
  timer.setInterval(1000L, sendTemps); // Temperature sensor polling interval (5000L = 5 seconds)
Датчику надо время на инициализацию.
 

Finaef

New member
@Finaef
Код:
 sensors.begin();
delay(3000);
  timer.setInterval(1000L, sendTemps); // Temperature sensor polling interval (5000L = 5 seconds)
Датчику надо время на инициализацию.
@Finaef
Код:
 sensors.begin();
delay(3000);
  timer.setInterval(1000L, sendTemps); // Temperature sensor polling interval (5000L = 5 seconds)
Датчику надо время на инициализацию.
Так он включается и показывает в blynk температуру но через сек около 30 начинает перезагружаться сам модуль!
 

Finaef

New member
@Finaef
Wathdog срабатывает. Дай три секунды на инициализацию и результат скажи.
все так же
включаешь с подключенным постоянно дисконнект а если включить а потом в макетку с давтчиком воткнуть все ок! датчики разные 3 штуки опробовал
Заметил особенность если управлять rgb светодиодом через blynk то сразу дисконнект!
 

planar74

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

Finaef

New member
@Finaef
По ходу, модуль пыток не выдержал. Никогда с подобным не сталкивался, извиняюсь, помочь не смогу.
З. Ы. А в консоль модуль что говорит перед перезагрузкой? Или вообще молчит?
В консоле пишет конект с моей сетью! дословно connect to "моя сеть" ....
может в железе подтяжку по gpio поменять? есть подозрение что сопротивления малы! так как с rgb используется шим может что то по каналам летит! бывает если руками трогаешь каналы то синий светодиод загораеться слегка!
 

Юрий Ботов

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

Finaef

New member
Извини. Немного не понял... Что за последняя прошивка NodeMcu если код на Arduinoвском C++ ? Ну это так... от лукавого. Если по делу: сильно похоже на проблемы с питанием. Возможно замена USB кабеля на короткий и толстый все проблемы решит, а если что, придется питаться от другого устройства...
Я достал из шкафа такой-же бутерброд и залил на него свой код (который ИМХО потребляет поболее) - работает как часы. Кстати... при прошивке из Arduino какой из вариантов выбирыраете? Я D1.
NodeMCU прошивка самого модуля. скечь лью выбрав именно этот модуль NodeMCU 1.0 (esp-12 e module)
 
Сверху Снизу