• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Вывод температуры с DS18B20 на сервер

PavelAndreev

New member
Всем здравствуйте. Уже месяц бьюсь с этой проблемой, а подробного решения найти никак не могу. Везде все уроки для тех, кто уже как-то разбирается в этих вещах. У меня есть NodeMCU, установленные на него скрипты для показания температуры с датчика DS18B20. В ESPlorer-е температура отображается корректно. Но вот основной вопрос - это как вывести данные к себе на сервер? Я не знаю, что и куда прописывать, я в этих вещах ещё новичок. Будьте добры, объясните кто-нибудь нубу, что и как сделать?
 

Shyster

New member
Но вот основной вопрос - это как вывести данные к себе на сервер? Я не знаю, что и куда прописывать, я в этих вещах ещё новичок. Будьте добры, объясните кто-нибудь нубу, что и как сделать?
Вам ни кто не ответит, с таким подходом.
Перечитать свое сообщение и задаться вопросом, что я написал и если бы другой человек такое же написал, что я бы ему ответил.
Вот у меня тоже есть сервер, в облаке, где то в сша, угадайте что это за сервер? что он делает? и как происходит вход-выход информации?
Да и по вашему вопросу - это фактически сделать за вас.
PS: разбейте задачу на подзадачи и решайте их. В гугле есть все ответы, главное понимать что вы хотите, и как оно должно работать.
 

PavelAndreev

New member
Вам ни кто не ответит, с таким подходом.
Перечитать свое сообщение и задаться вопросом, что я написал и если бы другой человек такое же написал, что я бы ему ответил.
Вот у меня тоже есть сервер, в облаке, где то в сша, угадайте что это за сервер? что он делает? и как происходит вход-выход информации?
Да и по вашему вопросу - это фактически сделать за вас.
PS: разбейте задачу на подзадачи и решайте их. В гугле есть все ответы, главное понимать что вы хотите, и как оно должно работать.

А что в моём подходе не так? Что бы я ответил другому человеку? Ответил бы ему на вопрос, который он бы задал, если бы обладал достаточными знаниями. Сервер у меня локальный, работает на Open Server. Я не прошу никого сделать всё за меня, я прошу помощи, чтобы мне кто-нибудь объяснил, что и за чем.
 

Victor

Administrator
Команда форума
это как вывести данные к себе на сервер?
вам нужно отправить HTTP GET или POST запрос на ваш сервер, на сервере скрипт, написанный, например на PHP, должен принять этот запрос и получить из него параметры (показания температуры) и сгенерировать HTML страницу, которую может отобразить обычный браузер и вы сможете увидеть эти показания температуры. Таким образом, вам нужно сначала разобраться как это работает без ESP8266, а затем воплотить в скриптах на Lua (ESP8266) и на PHP (сервер), или поискать готовые примеры. Подробный ответ на ваш вопрос займет несколько страниц и именно поэтому вам и рекомендуют разбить вопрос на более мелкие подзадачи.
 

PavelAndreev

New member
вам нужно отправить HTTP GET или POST запрос на ваш сервер, на сервере скрипт, написанный, например на PHP, должен принять этот запрос и получить из него параметры (показания температуры) и сгенерировать HTML страницу, которую может отобразить обычный браузер и вы сможете увидеть эти показания температуры. Таким образом, вам нужно сначала разобраться как это работает без ESP8266, а затем воплотить в скриптах на Lua (ESP8266) и на PHP (сервер), или поискать готовые примеры. Подробный ответ на ваш вопрос займет несколько страниц и именно поэтому вам и рекомендуют разбить вопрос на более мелкие подзадачи.
Первый адекватный ответ, спасибо, Виктор. Попробую поискать информацию.
 

Victor

Administrator
Команда форума
Первый адекватный ответ, спасибо, Виктор. Попробую поискать информацию.
в будущем все равно попытайтесь формулировать вопросы более узко. Вопрос, который требует ответа на нескольких страницах, как правило, остается без ответа. Не потому, что "все ленивые", а потому что таким вопросом автор заявляет о том, что он и не пытался самостоятельно разобраться с проблемой, не приложил собственных усилий и хочет чтобы ему все разжевали другие.
 

PavelAndreev

New member
в будущем все равно попытайтесь формулировать вопросы более узко. Вопрос, который требует ответа на нескольких страницах, как правило, остается без ответа. Не потому, что "все ленивые", а потому что таким вопросом автор заявляет о том, что он и не пытался самостоятельно разобраться с проблемой, не приложил собственных усилий и хочет чтобы ему все разжевали другие.
Я уже месяц пытаюсь найти решение. Вроде оно банально - вывести данные с датчика на сервер. В ESPlorer-е всё показывается, а в браузер я вывести не могу ввиду того, что я не знаю, какой скрипт нужно залить через ESPlorer и какой код PHP сделать для сервера. Ладно ещё скрипт можно найти, но в PHP я полный ноль.

Вот тут была тема, я связался с автором, он говорит, что у всех всё работает. Я залил скрипты в NodeMCU, сделал всё на сервере, но как вывести данные снова понять не могу. Что-то в коде нужно исправить или нет...
 

NeoroN

Member
Напишите что и куда залили, там есть пример и кода php и кода lua. Причем код lua зависит от адреса сервера с php кодом - его там надо прописать в 2 местах, а еще раз у вас один датчик то и переписать код для одного датчика иначе он просто не будет работать пытаясь обратиться ко второму датчику.(по хорошему написать так чтобы работал с любым числом датчиков)
 

PavelAndreev

New member
Напишите что и куда залили, там есть пример и кода php и кода lua. Причем код lua зависит от адреса сервера с php кодом - его там надо прописать в 2 местах, а еще раз у вас один датчик то и переписать код для одного датчика иначе он просто не будет работать пытаясь обратиться ко второму датчику.(по хорошему написать так чтобы работал с любым числом датчиков)
Залил код, приложенный в теме для двух датчиков, хотя подключен только один. Косяк. Вы не знаете, есть ли мануал по кодам Lua для ds18b20?
 

nikolz

Well-known member
Всем здравствуйте. Уже месяц бьюсь с этой проблемой, а подробного решения найти никак не могу. Везде все уроки для тех, кто уже как-то разбирается в этих вещах. У меня есть NodeMCU, установленные на него скрипты для показания температуры с датчика DS18B20. В ESPlorer-е температура отображается корректно. Но вот основной вопрос - это как вывести данные к себе на сервер? Я не знаю, что и куда прописывать, я в этих вещах ещё новичок. Будьте добры, объясните кто-нибудь нубу, что и как сделать?
Может быть это поможет?
Wi-Fi термометр на ESP8266 + DS18B20 всего за 4$
WIFI датчик температуры на базе WIFI модуля ESP8266 и датчика температуры DS18B20 — Сообщество «Arduino для автомобиля» на DRIVE2
ESP8266: отправка температуры на Народный мониторинг. Бюджетный вариант. | Амперка / Форум
 

NeoroN

Member
Все эти модули расчитанны на людей хоть как то знакомых с парадигмами программирования. Мануала нет вприципе - есть пример использования - посмотрел и сразу все понятно.
nodemcu-firmware/ds18b20-example.lua at master · nodemcu/nodemcu-firmware · GitHub
require("ds18b20") - загрузка модуля(библиотеки) lua.
ds18b20.setup(1) - инициализация на пине GPIO5
addres=ds18b20.addrs() - получение списка адресов ввиде таблицы(массива).
ds18b20.read(addres[1]) - чтение первого сенсора, если он есть.
Вобщем мне было скучно, я переписал на любое число датчиков (в коде до 100)
PHP:
<?php
$t=array();
$params=false;
for ($i = 1; $i <= 100; $i++) {
if(isset($_GET["t".$i])){$t[$i]=floatval($_GET["t".$i]);$params=true;}
}

foreach($t as $key=>$val){
    $image = imageCreateFromPng("termometer.png");
    if(is_resource($image)) {
        $font_file = 'arial.ttf';
        imagefttext($image, 20, 0, 55, 55, $black, $font_file, sprintf("%.2f°C",$val));
        imagefilledrectangle($image, 32, 90, 34, 48-$val, imagecolorallocate($image, 186, 53, 31));
        imagettftext ($image, 10, 0, 63, 103, $white, $font_file, date("H:i d.m"));
        imagepng($image,"thermometer$key.png");
    }
}
if(!$params){
    echo '<html lang="ru-RU">
  <head><meta charset="UTF-8">
    <title>Градусник</title>
</head>
<body>';
    for ($i = 1; $i <= 100; $i++) if(file_exists("thermometer$i.png")){echo"<img src=thermometer$i.png?t=".rand(1,1000).">";}
    echo '</body>
</html>';
}else{
    echo "OK";
}
?>
Код:
require('ds18b20');
ds18b20.setup(1);
addres=ds18b20.addrs();
server="your.domine.ru";
function sendData()
local params = "";
for key,value in pairs(addres) do
    params = params..string.format("t%d=%f&",key,ds18b20.read(value));
end
conn=net.createConnection(net.TCP, 0) 
conn:on("connection", function(sck) sck:send("GET /term/termometer.php?"..params.." HTTP/1.1\r\nHost: "..server.."\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n") end ) 
conn:on("sent",function(conn)conn:close()end)
conn:connect(80,server) 
end
if addres~=nil then
    for key,value in pairs(addres) do print(string.format("t%d=%f",key,ds18b20.read(value)));end;
    sendData();
    tmr.alarm(0, 600000, tmr.ALARM_AUTO, function() sendData() end );
end
 

Вложения

  • 400.3 KB Просмотры: 24
Последнее редактирование:

nikolz

Well-known member
Все эти модули расчитанны на людей хоть как то знакомых с парадигмами программирования. Мануала нет вприципе - есть пример использования - посмотрел и сразу все понятно.
Вобщем мне было скучно, я переписал на любое число датчиков (в коде до 100)
А зачем Вы фиксируете число датчиков?
Веселее сделать действительно на произвольное число.
Сначала надо прочитать все адреса на линии, а потом работать со всеми активными.
 

NeoroN

Member
Там на стороне сервера фиксированное - потому что лень писать искалку файлов. А на стороне LUA ограничено только возможностями 1-wire.
 

nikolz

Well-known member
Там на стороне сервера фиксированное - потому что лень писать искалку файлов. А на стороне LUA ограничено только возможностями 1-wire.
Я про сторону луа и 1-wire говорю.
В общем виде это делается так:
В 1-wire есть алгоритм опроса датчиков на линии.
По этому алгоритму определяем все устройства, который подключены по 1-wire.
При этом могут быть и не только датчики температуры.
В результате получаем таблицы устройств (фильтруем по назначению) т е таблица для датчиков температуры и т д
Потом начинаем обход всех таблиц и по коду типа датчика читаем его данные и отправляем на сервер.
Число датчиков данного типа равно размеру таблицы.
В итоге получаем прогу, которая работает с любым количеством и любыми типами датчиков по 1-wire.
Попробуйте написать , скучно не будет.
 
Сверху Снизу