ESP8266

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

MaksMS82
Сообщения: 422
Зарегистрирован: Ср сен 05, 2012 7:30 am
Откуда: Киров
Благодарил (а): 0
Поблагодарили: 70 раз
Контактная информация:

Re: ESP8266

Сообщение MaksMS82 » Чт апр 02, 2015 11:05 am

Да, интересно конечно, это намного лучше чем ЛУА, хоть ресурсов не так жрет и можно больше функционала запихать в модуль, но все равно не дотягивает до чистого Си по оптимизации кода, т.к. там все равно есть обертка Ардуины.. Но все равно это прогресс.

Проект еще сырой, но думаю быстро это исправится. Вот только кривой SDK тормозит этот процесс...

Не смотря, что это Ардуино ИДЕ, но там много отличий в написании прошивки, например нельзя бездумно тыкать везде delay_ms.
ignat99
Сообщения: 206
Зарегистрирован: Сб дек 21, 2013 9:21 pm
Откуда: Spain
Благодарил (а): 1 раз
Поблагодарили: 22 раза

Re: ESP8266

Сообщение ignat99 » Чт апр 02, 2015 11:11 am

https://github.com/pfalcon/esp-open-sdk

А вот этот SDK то же кривой?
MaksMS82
Сообщения: 422
Зарегистрирован: Ср сен 05, 2012 7:30 am
Откуда: Киров
Благодарил (а): 0
Поблагодарили: 70 раз
Контактная информация:

Re: ESP8266

Сообщение MaksMS82 » Чт апр 02, 2015 11:18 am

ignat99 писал(а):https://github.com/pfalcon/esp-open-sdk

А вот этот SDK то же кривой?
Это не SDK , а компилятор..
ignat99
Сообщения: 206
Зарегистрирован: Сб дек 21, 2013 9:21 pm
Откуда: Spain
Благодарил (а): 1 раз
Поблагодарили: 22 раза

Re: ESP8266

Сообщение ignat99 » Чт апр 02, 2015 11:24 am

http://www.esp8266.com/viewtopic.php?p= ... a33#p11989

Посмотрел, кастрированный olimex сервер esphttpd не потдерживает подключение к роутеру.
А исходный проект сервера из Голландии не собирается стандартным SDK (тот который кривой?).
Выше по ссылке кажется решение, как собрать веб-сервер, но при этом слетают пароли.

Оба не имеют различных библиотек для сенсоров.

Как я написал тут:
http://forum.katera.ru/index.php?/topic ... v-i-iakht/

cуществует 4 варианта решения (один от Адафрут на С++). Если кто то знает готовое решение для сенсоров приведитье тут.

Если Ардвино IDE для ESP будет поддерживать в будущем большинство сенсоров, да ещё UEXT шину, то это очень хорошо.
ignat99
Сообщения: 206
Зарегистрирован: Сб дек 21, 2013 9:21 pm
Откуда: Spain
Благодарил (а): 1 раз
Поблагодарили: 22 раза

Re: ESP8266

Сообщение ignat99 » Чт апр 02, 2015 11:26 am

MaksMS82 писал(а): Это не SDK , а компилятор..
Я так и подумал. :-)
/home/vagrant/tmp/esp-open-sdk/crosstool-NG
То есть вот этот субмодуль SDK кривой?


Мне то же надо экономить время-деньги и нужно всё сразу и чтоб памяти 50% оставалось :-) для шифрования и хранения ключей :-)

https://github.com/esp8266/esp8266-wiki/wiki/Memory-Map

00000h 4k boot.bin Bootloader
01000h 64k app.v6.flash1.bin User application, slot 1
11000h 180k app.v6.irom0text1.bin SDK libraries, slot 1
3E000h 8k master_device_key.bin OTA device key
40000h 4k Unused
41000h 64k app.v6.flash1.bin User application, slot 2
51000h 180k app.v6.irom0text1.bin SDK libraries, slot 2
7E000h 8k blank.bin Filled with FFh. May be WiFi configuration.
Jon2015
Сообщения: 28
Зарегистрирован: Чт фев 05, 2015 8:07 pm
Благодарил (а): 9 раз
Поблагодарили: 5 раз

Re: ESP8266

Сообщение Jon2015 » Чт апр 02, 2015 11:43 am

Я уже писал:http://smartliving.ru/forum/viewtopic.p ... 361#p20361
этот SDK шикарно работает с WiFi. Доработанные библиотеки связанные с низкоуровневым программированием (OneWire, DHT) скачивать там же.
Обычные библиотеки работают нормально (то что я успел проверить).
Goerg
Сообщения: 10
Зарегистрирован: Пн мар 10, 2014 10:05 am
Благодарил (а): 2 раза
Поблагодарили: 0

Re: ESP8266

Сообщение Goerg » Пн апр 06, 2015 8:23 am

Подскажите пожалуйста, какой код нужно дописать в espdata, чтобы записывать полность весь полученный GET запрос в TXT файл. Необходимо для отладки т.к. время от времени просто не обрабатывает одну переменную и в базу ничего не записывает, хотя в GET запросе она присутствует.
Amarok писал(а):

Код: Выделить всё

if ($params['idesp']=="") { return; } //Если ID устройства отсутствует, то перестаем отрабатывать сценарий
addClass('ESP8266'); //Создаем класс ESP8266
addClassObject('ESP8266',$params['idesp']); //Создаем в классе ESP8266 объект где в качестве имени 
addClassProperty('ESP8266', 'vdd', 90); //Создаёт свойство класса и указывает, что необходимо хранить историю значений 90 дней
addClassProperty
........
//Распихиваем всё по свойствам. Если полученное значение пустое, то свойство не записываем
if ($params['bmpp']!="") { sg(($params['idesp'].".bmpp"),$params['bmpp']); } //Данные с датчика BMP (давление)
........
sg(($params['idesp'].".idesp"),$params['idesp']);  //    
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: ESP8266

Сообщение sergejey » Пн апр 06, 2015 5:22 pm

Goerg писал(а):Подскажите пожалуйста, какой код нужно дописать в espdata, чтобы записывать полность весь полученный GET запрос в TXT файл. Необходимо для отладки т.к. время от времени просто не обрабатывает одну переменную и в базу ничего не записывает, хотя в GET запросе она присутствует.
DebMes("espdata request: ".$_SERVER['REQUEST_URI']);

После этого в XRay во вкладке debug можно смотреть результат.
За это сообщение автора sergejey поблагодарил:
Goerg (Вт апр 07, 2015 8:19 am)
Рейтинг: 1.16%

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Controer
Сообщения: 44
Зарегистрирован: Чт апр 09, 2015 8:09 am
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: ESP8266

Сообщение Controer » Пт апр 10, 2015 4:38 pm

[quote="Amarok"]Что то этот код не работает:

Код: Выделить всё

addClass('ESP8266'); 
$idesp=$params['idesp'];
if (!$idesp) return;
$esp=getObjectsByClass("ESP8266");
foreach($esp as $obj) 
{
    if (gg($obj['TITLE'].".idesp") ==$idesp)
    {
        if (is_array($params)) {
           foreach($params as $k=>$v) {    
            if ($k!="script") {
            sg($obj['TITLE'].".".$k,$v);
               }
           }
         }
    }
}
А этот (моё творение) работает:

Код: Выделить всё

$bmpp=$params['bmpp'];          //Данные с датчика BMP (давление)
$bmpt=$params['bmpt'];          //Данные с датчика BMP (температура)
$counter=$params['counter'];    //Количество импульсов со счетчика
$dhth1=$params['dhth1'];        //Данные с первого датчика DHT (влажность)
$dhth2=$params['dhth2'];        //Данные со второго датчика DHT (влажность)
$dhtt1=$params['dhtt1'];        //Данные с первого датчика DHT (температура)
$dhtt2=$params['dhtt2'];        //Данные со второго датчика DHT (температура)
$dsw1=$params['dsw1'];          //Данные с датчика DS18B20 №1
$dsw2=$params['dsw2'];          //Данные с датчика DS18B20 №2
$dsw3=$params['dsw3'];          //Данные с датчика DS18B20 №3
$dsw4=$params['dsw4'];          //Данные с датчика DS18B20 №4
$dsw5=$params['dsw5'];          //Данные с датчика DS18B20 №5
$freemem=$params['freemem'];    //Объем свободной памяти модуля
$hostname=$params['$hostname']; //Имя модуля
$idesp=$params['idesp'];        //ID устройства
$light=$params['light'];        //Данные с датчика BH1750
$uptime=$params['uptime'];      //Время непрерывной работы модуля
$vdd=$params['vdd'];            //Напряжение на модуле
$ver=$params['ver'];            //Версия прошивки
if ($idesp=="") { return; }     //Если ID устройства отсутствует, то перестаем отрабатывать сценарий
addClass('ESP8266');            //Создаем класс ESP8266
addClassObject('ESP8266',$idesp);     //Создаёт класс заданного имени дочерним от ParentClass
say("yyyyyyyyyyyyy");
//Распихиваем всё по свойствам. Если полученное значение пустое, то свойство не записываем
if ($bmpp!="")     { sg(($idesp.".bmpp"),$bmpp);         }
if ($bmpt!="")     { sg(($idesp.".bmpt"),$bmpt);         }
if ($counter!="")  { sg(($idesp.".counter"),$counter);   }
if ($dhth1!="")    { sg(($idesp.".dhth1"),$dhth1);       }
if ($dhth2!="")    { sg(($idesp.".dhth2"),$dhth2);       }
if ($dhtt1!="")    { sg(($idesp.".dhtt1"),$dhtt1);       }
if ($dhtt2!="")    { sg(($idesp.".dhtt2"),$dhtt2);       }
if ($dsw1!="")     { sg(($idesp.".dsw1"),$dsw1);         }
if ($dsw2!="")     { sg(($idesp.".dsw2"),$dsw2);         }
if ($dsw3!="")     { sg(($idesp.".dsw3"),$dsw3);         }
if ($dsw4!="")     { sg(($idesp.".dsw4"),$dsw4);         }
if ($dsw5!="")     { sg(($idesp.".dsw5"),$dsw5);         }
if ($freemem!="")  { sg(($idesp.".freemem"),$freemem);   }
if ($hostname!="") { sg(($idesp.".hostname"),$hostname); }
if ($light!="")    { sg(($idesp.".light"),$light);       }
if ($uptime!="")   { sg(($idesp.".uptime"),$uptime);     }
if ($vdd!="")      { sg(($idesp.".vdd"),$vdd);           }
if ($ver!="")      { sg(($idesp.".ver"),$ver);           }
Внимание, вопрос: как завести первый код? Всё таки он изящнее и короче.[/q
а если только 2 датчика температуры, в сценарии надо только 2 датчика оставить?
SergeyF
Сообщения: 9
Зарегистрирован: Чт фев 27, 2014 4:21 pm
Благодарил (а): 0
Поблагодарили: 5 раз

Re: ESP8266

Сообщение SergeyF » Пт апр 10, 2015 10:20 pm

Попробуйте вот такой код:

Код: Выделить всё

//объект ищем по свойству idesp, так как имя объекта будет осмысленным, 
//а если не нашли - то добавляем с именем равным его айди

$idesp=$params['idesp'];

if (!$idesp) return;
//запишем в лог что пришло
DebMes("espdata request: ".$_SERVER['REQUEST_URI']);
 
$esp=getObjectsByClass("ESP8266");
foreach($esp as $obj) 
{
    
    if (gg($obj['TITLE'].".idesp") ==$idesp)
    {
        if (is_array($params)) {
           foreach($params as $k=>$v) {    
            if ($k!="script") {
            sg($obj['TITLE'].".".$k,$v);
            }
           }
         }
     //объект найден, свойства записаны, выходим
     return;
    }
}

//сюда попадет если нет объекта - создадим его, и запишем только одно свойство - его айди
//на следующем запросе мы попадем в первый цикл и все запишется
addClassObject('ESP8266', $idesp);
sg(($idesp.".idesp"),$idesp);
Ответить