ESP8266

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

Модератор: immortal

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

Re: ESP8266

Сообщение MaksMS82 » Пт июл 10, 2015 1:28 pm

Гляньте логи веб сервера - есть ли там сообщения от модуля. если есть, то тут уже нужно ковырять саму настройку можордомо.
За это сообщение автора MaksMS82 поблагодарил:
Pacific (Сб июл 11, 2015 9:37 am)
Рейтинг: 1.16%
Pacific
Сообщения: 116
Зарегистрирован: Чт май 28, 2015 9:40 pm
Откуда: Вёска пад Мiнскам
Благодарил (а): 60 раз
Поблагодарили: 7 раз

Re: ESP8266

Сообщение Pacific » Сб июл 11, 2015 3:27 pm

MaksMS82 писал(а):Гляньте логи веб сервера
Спасибо! Я, правда, не силен в просмотре логов, но Яндекс мне в помощь.
россыпь датчиков и серв <-> 20+ ESP8266(WiFi-IoT) <-> Malinka Pi3 :)
oleglapo
Сообщения: 26
Зарегистрирован: Чт янв 08, 2015 10:05 am
Благодарил (а): 5 раз
Поблагодарили: 10 раз

Re: ESP8266

Сообщение oleglapo » Пн авг 03, 2015 5:15 pm

День добрый форумчане! Может кто подскажет как в Majordomo настроить регулировку ШИМ (pwm) для ESP8266, извините если уже не раз описывалось, или дайте ссылку.
SergeyM
Сообщения: 100
Зарегистрирован: Вт ноя 11, 2014 5:16 pm
Откуда: Шатура
Благодарил (а): 4 раза
Поблагодарили: 8 раз

Re: ESP8266

Сообщение SergeyM » Пн авг 17, 2015 10:41 am

polunds писал(а):внесу свои 5 копеек в тему... надеюсь будет полезно сообществу.
скетч продвинутого выключателя, работает с МДМ, управляется по HTTP
у выключателя две функции:
1.короткое нажатие - обычное включение выключение света с отправкой запроса на изменение статуса в МДМ для отображения на сцене
2.длинное нажатие - просто отправка запроса в МДМ на выполнение скрипта, скрипт можно написать любой, соответственно и выполнить любое действие
у меня например один выключатель коротким нажатием управляет светом в своей комнате, а длинным - светом в прихожей, т.к. до выключателя в прихожей нужно идти к входной двери. (аналог проходного)

скетч для ардуино IDE....
осторожно, код не идеален, сам я не программист, собирал по кусочкам, оптимизировал под себя.
сейчас дома работает уже 4 шт, нареканий не заметил.
скриншот сцены:
http://prntscr.com/7o98hp

Зеленые индикаторы под лампочкой - статус доступности хоста (пингуется - зеленый, не пингуется - красный) для отслеживания доступности ESP8266
СпойлерПоказать

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


#include <ESP8266WiFi.h>

const int buttonPin = 14;   // really - 14
const int ledPin = 4;       // actually - 5

bool ledState = LOW;         // the current state of the output pin
bool led2State = LOW;
bool buttonState;             // the current reading from the input pin
bool lastButtonState = HIGH;
bool countStart = 0;
bool ignoreUp = 0;

#define holdTime 1000
long btnDnTime; // time the button was pressed down

long lastDebounceTime = 0;  // the last time the output pin was toggled
long debounceDelay = 50; 

String sensor_id = "kitchen-light-switch"; 

const char* ssid     = "net1";
const char* password = "passpass";

const char* host = "192.168.10.200"; 

WiFiServer server(80);

void setup() {
    WiFi.mode(WIFI_STA);

  // initialize digital pin 13 as an output.
  pinMode(ledPin, OUTPUT);
  Serial.begin(57600); 
  
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  
  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  
  server.begin();
  Serial.println("Server started");
  
  digitalWrite(ledPin, 1);
  
  
}

// the loop function runs over and over again forever

void loop() {
  // read the state of the switch into a local variable:
  int reading = digitalRead(buttonPin);

  if (reading != lastButtonState) {
    // reset the debouncing timer
    lastDebounceTime = millis();
  } 
  
  if ((millis() - lastDebounceTime) > debounceDelay) {

    if (reading == LOW && countStart && (millis() - btnDnTime) > long(holdTime))
        {
        Serial.println("tringger down");  
        led2State = !led2State;
        String url = String("/objects/?script=holdbutton&name=")+sensor_id+"&type=remoteswitch&action="+led2State; //запрос на долгое нажатие
        send_switch(url);
        btnDnTime = millis();
        ignoreUp = 1;
        }
        
        
    if (reading != buttonState) {
      buttonState = reading;
      if (buttonState == LOW){
        countStart = 1;     
        btnDnTime = millis();   
      }
      

      // only toggle the LED if the new button state is HIGH
      if (buttonState == HIGH) {
       countStart = 0; 

       if (!ignoreUp){
//         if (led2State){
//             led2State = !led2State;
//             String url = String("/objects/?script=holdbutton&name=")+sensor_id+"&type=remoteswitch&action="+led2State;
//             send_switch(url);
//         }
//         else{
           digitalWrite(ledPin, ledState);
           ledState = !ledState;
           String url = String("/objects/?object=")+sensor_id+"&op=set&p=status&v="+!ledState;
           send_switch(url);
//         }
         
       }
       ignoreUp = 0;
      }
    }
  }
  lastButtonState = reading;
  
  ///#######################################
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  
  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
  
  // Read the first line of the request
  String req = client.readStringUntil('\r');
  Serial.println(req);
  client.flush();
  
  // Match the request
  int val;
  if (req.indexOf("/?pin=off") != -1){
    val = 0;
    lastButtonState = 0;
    ledState = 0;
    digitalWrite(ledPin, val);
//    String url = String("/objects/?object=")+sensor_id+"&op=set&p=status&v="+ledState;
//    send_switch(url);
  }
  else if (req.indexOf("/?pin=on") != -1){
    val = 1;
    lastButtonState = 1;
    ledState = 1;
    digitalWrite(ledPin, val);
//    String url = String("/objects/?object=")+sensor_id+"&op=set&p=status&v="+ledState;
//    send_switch(url);
  }
    else if (req.indexOf("/?status") != -1){
    //fg
  }
  else {
    //Serial.println("invalid request");
    client.stop();
    return;
  }

  // Set GPIO2 according to the request
//  digitalWrite(ledPin, val);
  
  client.flush();

  // Prepare the response
  String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n";
  s += ledState;
  s += "</html>\n";

  // Send the response to the client
  client.print(s);
  delay(1);
  Serial.println("Client disonnected");
  
  //#########################
  
  
}


void send_switch(String turl){

  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }
  
  //String url = String("/objects/?script=tempsensor&name=")+sensor_id+"&temp="+t+"&hum="+h+"&freemem="+freemem+"&moving="+moving_detected;
  String url = turl;
  Serial.print("Requesting URL: ");
  Serial.println(url);
  
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" + 
               "Connection: close\r\n\r\n");
  delay(50);
  
  while(client.available()){
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }
  
  Serial.println();
  Serial.println("closing connection");
  client.stop();

}
а какие настройки на стороне МЖД?
За это сообщение автора SergeyM поблагодарил:
mirsum (Пн авг 17, 2015 12:16 pm)
Рейтинг: 1.16%
Windows, Debian 8, 1-Wire
Connect
sregeipt
Сообщения: 117
Зарегистрирован: Сб апр 26, 2014 5:06 pm
Откуда: Новосибирск
Благодарил (а): 21 раз
Поблагодарили: 11 раз

Re: ESP8266

Сообщение sregeipt » Пн авг 17, 2015 3:28 pm

Друзья вот наконец то добрался до есп 4 датчика работают на ура вся информация скидывается нормально влажность давление температура. время работы около 4 месяцев. задался целью подключить датчик открытия двери сухой контакт. купил ключик подключил но тут не получается как теперь сделать чтоб алиса оповешала say("Дверь открыта ",2); и say("Дверь закрыта",2); на ардуино все работало теперь отказываюсь от проводов . помогите пожалуйста что то уж совсем запутался)) спасибо всем откликнувшимся
  • Ubuntu Server .Esp8266)
devoff
Сообщения: 181
Зарегистрирован: Пт апр 04, 2014 10:17 pm
Благодарил (а): 37 раз
Поблагодарили: 54 раза

Re: ESP8266

Сообщение devoff » Вт авг 18, 2015 8:02 pm

Подскажите пжл, собрал из соседней темы POWER MONITOR, все работает, но хотел бы передавать полученные данные с него в МЖД через esp8266, что то ковыряю библиотеки, но никак не пойму какую лучше всего использовать.

Есть ли уже у кого то решения ? Отправка любых данных в МЖД, а дальше я уже подставлю все.
dJabber
Сообщения: 1
Зарегистрирован: Вт авг 11, 2015 9:23 pm
Благодарил (а): 0
Поблагодарили: 0

Re: ESP8266

Сообщение dJabber » Пт авг 21, 2015 10:49 pm

добрый день.

подскажите по прошивке homes-smart - как организовать обновление параметров ESP в МДМ, если МДМ расположено не в корне /var/www а в папке /var/www/majordomo?
polunds
Сообщения: 21
Зарегистрирован: Пт июл 03, 2015 10:27 am
Благодарил (а): 4 раза
Поблагодарили: 7 раз

Re: ESP8266

Сообщение polunds » Пн авг 24, 2015 2:37 pm

SergeyM писал(а):
polunds писал(а):внесу свои 5 копеек в тему... надеюсь будет полезно сообществу.
скетч продвинутого выключателя, работает с МДМ, управляется по HTTP
у выключателя две функции:
1.короткое нажатие - обычное включение выключение света с отправкой запроса на изменение статуса в МДМ для отображения на сцене
2.длинное нажатие - просто отправка запроса в МДМ на выполнение скрипта, скрипт можно написать любой, соответственно и выполнить любое действие
у меня например один выключатель коротким нажатием управляет светом в своей комнате, а длинным - светом в прихожей, т.к. до выключателя в прихожей нужно идти к входной двери. (аналог проходного)

скетч для ардуино IDE....
осторожно, код не идеален, сам я не программист, собирал по кусочкам, оптимизировал под себя.
сейчас дома работает уже 4 шт, нареканий не заметил.
скриншот сцены:
http://prntscr.com/7o98hp

Зеленые индикаторы под лампочкой - статус доступности хоста (пингуется - зеленый, не пингуется - красный) для отслеживания доступности ESP8266
СпойлерПоказать

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


#include <ESP8266WiFi.h>

const int buttonPin = 14;   // really - 14
const int ledPin = 4;       // actually - 5

bool ledState = LOW;         // the current state of the output pin
bool led2State = LOW;
bool buttonState;             // the current reading from the input pin
bool lastButtonState = HIGH;
bool countStart = 0;
bool ignoreUp = 0;

#define holdTime 1000
long btnDnTime; // time the button was pressed down

long lastDebounceTime = 0;  // the last time the output pin was toggled
long debounceDelay = 50; 

String sensor_id = "kitchen-light-switch"; 

const char* ssid     = "net1";
const char* password = "passpass";

const char* host = "192.168.10.200"; 

WiFiServer server(80);

void setup() {
    WiFi.mode(WIFI_STA);

  // initialize digital pin 13 as an output.
  pinMode(ledPin, OUTPUT);
  Serial.begin(57600); 
  
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  
  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  
  server.begin();
  Serial.println("Server started");
  
  digitalWrite(ledPin, 1);
  
  
}

// the loop function runs over and over again forever

void loop() {
  // read the state of the switch into a local variable:
  int reading = digitalRead(buttonPin);

  if (reading != lastButtonState) {
    // reset the debouncing timer
    lastDebounceTime = millis();
  } 
  
  if ((millis() - lastDebounceTime) > debounceDelay) {

    if (reading == LOW && countStart && (millis() - btnDnTime) > long(holdTime))
        {
        Serial.println("tringger down");  
        led2State = !led2State;
        String url = String("/objects/?script=holdbutton&name=")+sensor_id+"&type=remoteswitch&action="+led2State; //запрос на долгое нажатие
        send_switch(url);
        btnDnTime = millis();
        ignoreUp = 1;
        }
        
        
    if (reading != buttonState) {
      buttonState = reading;
      if (buttonState == LOW){
        countStart = 1;     
        btnDnTime = millis();   
      }
      

      // only toggle the LED if the new button state is HIGH
      if (buttonState == HIGH) {
       countStart = 0; 

       if (!ignoreUp){
//         if (led2State){
//             led2State = !led2State;
//             String url = String("/objects/?script=holdbutton&name=")+sensor_id+"&type=remoteswitch&action="+led2State;
//             send_switch(url);
//         }
//         else{
           digitalWrite(ledPin, ledState);
           ledState = !ledState;
           String url = String("/objects/?object=")+sensor_id+"&op=set&p=status&v="+!ledState;
           send_switch(url);
//         }
         
       }
       ignoreUp = 0;
      }
    }
  }
  lastButtonState = reading;
  
  ///#######################################
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  
  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
  
  // Read the first line of the request
  String req = client.readStringUntil('\r');
  Serial.println(req);
  client.flush();
  
  // Match the request
  int val;
  if (req.indexOf("/?pin=off") != -1){
    val = 0;
    lastButtonState = 0;
    ledState = 0;
    digitalWrite(ledPin, val);
//    String url = String("/objects/?object=")+sensor_id+"&op=set&p=status&v="+ledState;
//    send_switch(url);
  }
  else if (req.indexOf("/?pin=on") != -1){
    val = 1;
    lastButtonState = 1;
    ledState = 1;
    digitalWrite(ledPin, val);
//    String url = String("/objects/?object=")+sensor_id+"&op=set&p=status&v="+ledState;
//    send_switch(url);
  }
    else if (req.indexOf("/?status") != -1){
    //fg
  }
  else {
    //Serial.println("invalid request");
    client.stop();
    return;
  }

  // Set GPIO2 according to the request
//  digitalWrite(ledPin, val);
  
  client.flush();

  // Prepare the response
  String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n";
  s += ledState;
  s += "</html>\n";

  // Send the response to the client
  client.print(s);
  delay(1);
  Serial.println("Client disonnected");
  
  //#########################
  
  
}


void send_switch(String turl){

  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }
  
  //String url = String("/objects/?script=tempsensor&name=")+sensor_id+"&temp="+t+"&hum="+h+"&freemem="+freemem+"&moving="+moving_detected;
  String url = turl;
  Serial.print("Requesting URL: ");
  Serial.println(url);
  
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" + 
               "Connection: close\r\n\r\n");
  delay(50);
  
  while(client.available()){
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }
  
  Serial.println();
  Serial.println("closing connection");
  client.stop();

}
а какие настройки на стороне МЖД?
создал объект, в свойстве ipaddress прописал айпишник ESP. Создал метод switch-on:

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

$ipaddress=$this->getProperty("ipaddress");
$url='http://'.$ipaddress.'/?pin=on';
getURL($url,0);
$this->setProperty("status", '1');
аналогичным образом создал метод switch-off
еще есть метод switch-toggle который просто меняет состояние в зависимости от текущего

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

$status1=$this->getProperty("status");

if($status1 == 1)
{ 
$ipaddress=$this->getProperty("ipaddress");
$url='http://'.$ipaddress.'/?pin=on';
getURL($url,0);
$this->setProperty("status", '1');
}
else{
$ipaddress=$this->getProperty("ipaddress");
$url='http://'.$ipaddress.'/?pin=off';
getURL($url,0);
$this->setProperty("status", '0');
}
 
в новой версии добавил еще обращение ESP при загрузке на сервер MD, теперь видно когда модуль перезагружался последний раз
Pacific
Сообщения: 116
Зарегистрирован: Чт май 28, 2015 9:40 pm
Откуда: Вёска пад Мiнскам
Благодарил (а): 60 раз
Поблагодарили: 7 раз

Re: ESP8266

Сообщение Pacific » Пн авг 24, 2015 10:10 pm

MaksMS82 писал(а):Гляньте логи веб сервера - есть ли там сообщения от модуля. если есть, то тут уже нужно ковырять саму настройку можордомо.
Опять перестали приходить сообщения от ESP. Я только разрабатываю систему и комп включен не постоянно. Бывает, включишь комп, запустишь МЖД - и всё прекрасно: приходят сообщения от ESP и в логах соответственно эти сообщения видны. А бывает включишь - циклы прокручиваются, а сообщения не проходят. Хотя ESP функционирует - это видно через веб-морду.
Не могу вычислить закономерность, когда сообщения проходят, а когда нет.

Что подскажете?
Заранее спасибо.
россыпь датчиков и серв <-> 20+ ESP8266(WiFi-IoT) <-> Malinka Pi3 :)
lysyy
Сообщения: 113
Зарегистрирован: Вт июн 09, 2015 9:41 pm
Откуда: Moscow
Благодарил (а): 15 раз
Поблагодарили: 9 раз

Re: ESP8266

Сообщение lysyy » Чт авг 27, 2015 11:45 pm

Pacific писал(а):Перестали приходить сообщения с ESP с прошивкой от homes-smart.ru.
Всё работало отлично. Отложил проект на недельку, вернулся - и не приходят сообщения. В настройках ничего не менял. Веб-морда работает. Порты работают, датчики и i2c работает, а посылки не приходят. Грешу, что в компе что-то с настройками. Подскажите, куда копнуть.
Приход сообщений отлавливаю так:
Изображение

а скрипт espdata запускается??? посмотри в {-ray , фильтр на espdata поставь, возьми пивка и гляди. если нет, проверь сетевые проблемы

мой такой

$idesp=$params['idesp'];

$dhtt1=$params['dhtt1'];

$dhth1=$params['dhth1'];

$bmpt=$params['bmpt'];

$bmpp=$params['bmpp'];

if($params['hostname'] == 'ESPMETEO02') {
sg('esp02.atmpressure',$params['bmpp']);
sg('esp02.t01',$params['dhtt1']);
sg('esp02.dhtt2',$params['dhtt2']);
sg('esp02.hum01',$params['dhth1']);
sg('esp02.dhth2',$params['dhth2']);
}

//say($idesp);

//say($dhtt1);

//say($dhth1);

//say($bmpt);

//say($bmpp);
Ответить