Пользует ли кто WiFi-модули ESP8266 ? Поделитесь впечатлениями.

Axeront
Offline
Зарегистрирован: 03.02.2015

O как!

Ничего я из платы ардуино не выдираю, и так все шьется! 

Связываюсь с esp8266 по одноу порту , терминалю по-другому.

Нету у меня конвертора :(

art100
Offline
Зарегистрирован: 09.03.2014

ingener.solovyev пишет:

У меня подключено так:

https://cloud.mail.ru/public/45180a4b237e/IMG_20150129_163337.jpg

я тоже не буду читать - это авторство  onliner.by

а еще я тоже не буду смотреть - это уже мое авторство

 

Logik
Offline
Зарегистрирован: 05.08.2014

И мне такая цяцька приехала. Сегодня подключал к конвертору USB/UART. Завелась на 9600. АТ команды работаю к роутеру коннектица без замечаний. О здоровом питании модуля -  для USB/UART обещают выдать до 5мА а надо 200,  я даже пробовать не стал. Тем более что выход прост и известен, питал от +5 через два последовательно включенных диода. Получается 5-2*0,7=3,6В. Как раз то, что надо. Даже конденсаторами на питание не заморачивался, проработало часа 2 без сбоев и нагрева. Пока все гуд. Д

ПС. Будете питать через диоды - убедитесь что они обычные кремниевые, не шотке или ещё какие, а то если чё - я не виноват ;) 

rjlexx
Offline
Зарегистрирован: 28.01.2015

Подскажите плиз, в чем может быть проблема. Wi-Fi модуль ESP8266 подключен к HardwareSerial Arduino Nano на скорости 115200. К Wi-Fi сети подключается. С помощью библиотеки uartWIFI.h поднимаю веб-сервер.

GET запрос доходит до ардуино(включается светодиод), но он виснет. Не возвращается ответ. Вот код, который обрабатывает запрос:

void loop()
{  
  readDataFromTempSensor();
  char buf[500];
  int iLen = wifi.ReceiveMessage(buf);
  if(iLen > 0)
  {
      delay(100);
      
      String cmd;
      cmd = "HTTP/1.1 200 OK\r\n";
      cmd += "Content-Type: text/html\r\n";
      cmd += "Connection: close\r\n";
      cmd += "Refresh: 8\r\n";
      cmd += "\r\n";
      cmd += "<!DOCTYPE HTML>\r\n";
      cmd += "<html><body>\r\n";
      cmd += "Current temperature is ";
      cmd += String(currentTemp);
      cmd += "</body></html>\r\n";

      digitalWrite(ledPin, HIGH);
      wifi.Send(chlID,cmd);
      delay(300);
      wifi.closeMux(chlID);
      delay(1000);
  }
}

 

MaksMS
Offline
Зарегистрирован: 11.03.2013

Я уже писал про это, что есп8266+ардуина(328 чип) - не получить веб сервер. Надо много ОЗУ и по этому будет работать только на ардуино мега и выше.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

По поводу нехватки  ОЗУ - есть ещё флэш память куда обычно закидывают неизменяемые строки типа "HTTP/1.1 200 OK\r\n"

А так конечно не хватит если всё хранить в оперативке...

Я уже давно привык сериалпринт только с макросом "Ф" использовать. Даже если это всего-лишь "Привет Мир!"   ;)

MaksMS
Offline
Зарегистрирован: 11.03.2013

Проблема в том что надо формировать страничку в памяти чтобы знать её размер, чтобы генерировать правельно код страницы.  Чтобы передавать Content-Length...

rjlexx
Offline
Зарегистрирован: 28.01.2015

trembo пишет:

По поводу нехватки  ОЗУ - есть ещё флэш память куда обычно закидывают неизменяемые строки типа "HTTP/1.1 200 OK\r\n"


А вы могли бы примерчиком поделиться? Надо неизменяемые строки в константах хранить?

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011
rjlexx
Offline
Зарегистрирован: 28.01.2015

Спасибо! Очень полезные статьи! Я обернул все строки в макрос F(), перенес часть переменных из глобальных в локальные и вынес всю логику из loop в отдельные функции. Высвобожденной памяти хватило чтобы web server нормально обрабатывал get запросы. Наверное попробую еще библиотеку Flash для работы с PROGMEM

NEGr
Offline
Зарегистрирован: 12.05.2014

Всем доброго времени суток.
Возможно вопрос конечно не совсем по теме.
Продолжаю переводить все свои устройства с Nrf24 на wifi. При переводе устройства протечек воды выскочила проблема.

Вот сам скетч:
 

//блок с библиотеками
//блок с определениями
#define SSID "SmartHome"      //имя сети
#define PASS "12345678"       //пароль
#define DST_IP "192.168.0.10" //ip web сервера
#define MIN_LIGHT 0
#define MAX_LIGHT 255
#define START_CHAR '!'        //начальный символ принимаемого сообщения
#define END_CHAR '$'          //конечный символ принимаесого сообщения
#define sensor_pin A1         //пин датчика протечки
#define power_pin 3           //управляющий пин мосфета
#define hardReset 6           //пин arduino, на котором весит ch_pd
//блок с константами
const String id="wat01";       //id устройства
//блок с переменными
String WiFiMessage="";        //принимаемое сообщение
unsigned int readChar;        //переменная для посимвольного чтения сообщения
boolean readingWiFi;          //флаг чтения сообщения
String ip = "";               //переменна€ для хранения ip устройства
char character;
boolean connected=false;      //флаг соединения WiFi
int i=1;
static unsigned long time_fade;
/*возможные начения для флага:
  а: автоматический режим
  о: открыть кран
  с: закрыть кран
*/
String flag_radio = "a";      //флаг режима

void setup()
{
  pinMode(hardReset, OUTPUT);
  pinMode(power_pin, OUTPUT);  
  Serial.begin(9600);
  Serial.setTimeout(5000);
  Serial1.begin(9600);
  Serial1.setTimeout(5000);
  digitalWrite(hardReset, LOW);
  delay(100);
  digitalWrite(hardReset, HIGH);
  digitalWrite(power_pin, HIGH);///открываем кран
  delay(5000);
  for(int i=0;i<5;i++)
  {
    if(connectWiFi())
    {
      connected = true;
      break;
    }
  }
  if (!connected){while(1); }
  delay(2000);
}

void loop()
{
    if (Serial1.available() > 0 && !readingWiFi)
    {
        if (Serial1.read() == START_CHAR)
        {
            WiFiReadData();
        }
    }  
    if(flag_radio=="a")
    {
        digitalWrite(power_pin, HIGH);///открываем кран   
        if(millis()>time_fade)
    {             
        if(analogRead(sensor_pin)>=900)
        {
        sendMSG(id,"leak",false);                    
        flag_radio="c";
        }
        else
        {
        flag_radio=="a";
        }
        time_fade=millis()+30;
        }  
    }  
    else
    {
        if(flag_radio=="o")
        {
            digitalWrite(power_pin, HIGH);///открываем кран   
        }  
        else
        {
            digitalWrite(power_pin, LOW);///закрываем кран   
        }  
    }
}
//функция чтения данных, пришедших от web-сервера
void WiFiReadData()
{
    WiFiMessage = "";
    readingWiFi = true;
    iniReading:
    if (Serial1.available() > 0)
    {
        readChar = Serial1.read();
        if (readChar == END_CHAR)
        {
            goto endReading;
        }
        else
        {
            WiFiMessage+=char(readChar);
            goto iniReading;
        }
    }
    goto iniReading;
    endReading:
    readingWiFi = false;
    //Serial.println(WiFiMessage);
    ///здесь парсинг сообщения и последующие действия
    int pos_=WiFiMessage.indexOf('_');
    String command_t=WiFiMessage.substring(0, pos_);
    String command_v=WiFiMessage.substring(pos_+1);
   
    if(command_t=="water")
    {
        flag_radio=command_v;
    }        
}
/*функция отправки сообщения web-серверу*/
boolean sendMSG(String modul_id,String value,boolean startMSG)
{   
    String cmd = "AT+CIPSTART=1,\"TCP\",\"";
    cmd += DST_IP;
    cmd += "\",80";
    //Serial.println("Connecting to WebServer");
    Serial1.println(cmd);
    Serial1.flush();
    delay(1000);   
    /*if(Serial1.find("OK"))        
    {
         Serial.print("OK, Connected to WebServer ");
         Serial.println(DST_IP);
    }
    else
    {
        Serial.print("Can not connect to WebServer ");
        Serial.println(DST_IP);            
    }*/  
    String msg= "GET /ajax/arduino_read.php?act=";
    if(startMSG)
    {  
        msg+="new_w&id=";
    }
    else
    {
        msg+="s_s&id=";      
    }
    msg+= modul_id;
    msg+= "&val=";
    msg+= value;
    msg+= " HTTP/1.1\r\nHost: ";
    msg+= DST_IP;
    msg+=  ":80\r\n\r\n";
    Serial1.print("AT+CIPSEND=1,");
    Serial1.println(msg.length());
    //Serial.println("Senting MSG");
    if (Serial1.find(">"))
    {
        //Serial.print("MSG text: ");
        //Serial.println(msg);
        Serial1.print(msg);
        Serial1.flush();
    }
    if(Serial1.find("SEND OK"))
    {
        return true;
    }
    else
    {
        return false;
    }
}

/*функция конекта к wifi сети*/
boolean connectWiFi()
{
    ip="";
    Serial1.println("AT+CWMODE=1");
    String cmd="AT+CWJAP=\"";
    cmd+=SSID;
    cmd+="\",\"";
    cmd+=PASS;
    cmd+="\"";
    Serial.print("Connecting to ");
    Serial.println(SSID);
    Serial1.println(cmd);
    delay(1000);
    if(Serial1.find("OK"))
    {
        Serial.println("OK, Connected to WiFi.");
        Serial1.println("AT+CIFSR");
        Serial1.flush();
        delay(1000);
        while(Serial1.available())
        {
            character=Serial1.read();
            ip.concat(character);
        }  
        int pos_=ip.substring(13).indexOf(char(13));
        String tostr=ip.substring(13, 13+pos_);
        ip="";
        for(int i=0;i<tostr.length();i++)
        {
            if(tostr.charAt(i)=='.' || tostr.charAt(i)>='0' && tostr.charAt(i)<='9')
                 ip.concat(tostr.charAt(i));
        }  
        if(ip != "")
        {
            Serial.print("IP Address: ");
            Serial.println(ip);
        }
        ///включаем режим приема/передачи
        Serial1.println("AT+CIPMODE=0");
        Serial1.println("AT+CIPMUX=1");
        Serial1.flush();
        delay(1000);        
        Serial.println("Starting TCP Server");
        Serial1.println("AT+CIPSERVER=1,80");
        Serial1.flush();
        delay(1000);
        if (Serial1.find("OK")){Serial.println("OK, Strart TCP Server");}else{Serial.println("Can not start TCP Server");}       
        Serial1.println("AT+CIPSTO=120");  
        Serial1.flush();
        delay(1000);  
        //отправляем информацию об устройстве при его старте
        Serial.println("Senting Startup info");
        String msg=  "water_";
        msg+=  ip;        
        if(sendMSG(id,msg,true))
        {
            Serial.println("Startup info was send");
            return true;
        }
        else
        {
            Serial.println("Startup info was not send");
            return false;   
        }
    }
    else
    {
        Serial.println("Can not connect to the WiFi.");
        return false;
    }
}

Исходные данные:
Arduino : pro micro.
Wifi: ESP 07.
Краны:  электромагнитные 12В.
Включение/выключение кранов происходит через мосфет.
Питание кранов и платы: источник 12В, 1.5А подается на raw(arduino).

Управление кранов : 5В.

Питание wifi: преобразователь с 5 до 3.3 В.

Проблема в следующем: при подключении внешнего источника питания плата начинает перезагружаться. С NRF24 проблем нет.
При чем если закоментировать часть кода с wifi, то все нормально работает.
Если оставлять только код с wifi, то плата перезагружается. При этом чип на arduino сильно нагревается(видимо из-за это и происходит перезагрузка).

Как здесь может влиять на все это esp модуль?  
 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

.....Во первых прочтите предыдущий пост.... http://arduino.ru/forum/apparatnye-voprosy/polzuet-li-kto-wifi-moduli-es...

NEGr
Offline
Зарегистрирован: 12.05.2014

trembo пишет:

.....Во первых прочтите предыдущий пост.... http://arduino.ru/forum/apparatnye-voprosy/polzuet-li-kto-wifi-moduli-es...

извените. а какой номер сообщения?

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

410 Про букву "Ф" читайте, может быть у вас памяти не хватает....

NEGr
Offline
Зарегистрирован: 12.05.2014

Спасибо. но дело не в памяти- точно.

Загружаю следующий скетч:

#define SSID "SmartHome"            //им€ сети
#define PASS "12345678" //пароль
#define DST_IP "192.168.0.10" //ip web сервера
char character;
int hardReset = 6;            //пин arduino, на котором весит ch_pd
unsigned int readChar;        //переменная для посимвольного чтения сообщения
String WiFiMessage="";        //принимаемое сообщение
void setup()
{
  pinMode(hardReset, OUTPUT);
  Serial.begin(9600);
  Serial.setTimeout(5000);
  Serial1.begin(9600);
  Serial1.setTimeout(5000);
  digitalWrite(hardReset, LOW);
  delay(100);
  digitalWrite(hardReset, HIGH);
  delay(5000);
}
void loop()
{
  
  Serial.println("Send AT+CWMODE=1");
  Serial1.println("AT+CWMODE=1");
  Serial1.flush();
  delay(1000); 
  if (Serial1.find("OK")){Serial.println("answer OK");}else{Serial.println("answer no found OK");}
  Serial.println("send AT+CWJAP");  
  String cmd="AT+CWJAP=\"";
  cmd+=SSID;
  cmd+="\",\"";
  cmd+=PASS;
  cmd+="\"";  
  Serial1.println(cmd);
  Serial1.flush();
  delay(1000); 
  if (Serial1.find("OK")){Serial.println("answer OK");}else{Serial.println("answer no found OK");}
  Serial.println("send AT+CIPMODE=0");
  Serial1.println("AT+CIPMODE=0");
  Serial1.flush();
  delay(1000);
  if (Serial1.find("OK")){Serial.println("answer OK");}else{Serial.println("answer no found OK");}
  Serial.println("send AT+CIPMUX=1");
  Serial1.println("AT+CIPMUX=1");
  Serial1.flush();
  delay(1000);
  if (Serial1.find("OK")){Serial.println("answer OK");}else{Serial.println("answer no found OK");}
  Serial.println("Send AT+CIPSERVER=1,80");  
  Serial1.println("AT+CIPSERVER=1,80");  
  Serial1.flush();
  delay(1000);
  if (Serial1.find("OK")){Serial.println("answer OK");}else{Serial.println("answer no found OK");}
  Serial.println("Send AT+CIPSTO=120");    
  Serial1.println("AT+CIPSTO=120");  
  Serial1.flush();
  delay(1000);  
  if (Serial1.find("OK")){Serial.println("answer OK");}else{Serial.println("answer no found OK");}
  cmd = "AT+CIPSTART=1,\"TCP\",\"";
  cmd += DST_IP;
  cmd += "\",80";
  Serial1.println(cmd);
  Serial1.flush();

delay(1000000);
  
}

в котором просто прогоняю последовательно все AT команды.

Так вот при питании от USB все хорошо.

При включении внешнего источника на 12В - плата перезагружается.

И вот что еще  интересного выяснилось- при использовании источника питания на 9В- все тоже хорошо.

 

rjlexx
Offline
Зарегистрирован: 28.01.2015

NEGr пишет:

При включении внешнего источника на 12В - плата перезагружается.

И вот что еще  интересного выяснилось- при использовании источника питания на 9В- все тоже хорошо.

Так может источник питания 12В просто разряжен? У меня, когда питания не хватало, arduino с esp тоже начинала глючить.

NEGr
Offline
Зарегистрирован: 12.05.2014

Источник питания сетевой. Измерения мультиметром- показывают 12В

Araris
Offline
Зарегистрирован: 09.11.2012

Вы питаете ESP8266 от 3,3В Ардуино ?

NEGr
Offline
Зарегистрирован: 12.05.2014

я питаю от arduino, но через преобразователь 5в на 3,3в. Pro micro не имеет питания на 3.3В только на 5В.

Araris
Offline
Зарегистрирован: 09.11.2012

Попробуйте запитать от внешнего источника.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Пожалуйста, прошу вас, не называйте преобразователями линейные стабилизаторы вроде 1117 .....

Преобразователь- это несколько другое....  вроде этих http://www.ebay.com/sch/i.html?_from=R40&_trksid=p2050601.m570.l1313.TR0...

С входным напряжением 25.... 30...40... Вольт и выходным от 1 Вольта до почти питания, с КПД 80% и выше и токи в единицах Ампера...

Araris
Offline
Зарегистрирован: 09.11.2012

*Хозяйке на заметку (Если будет кто иметь дело с исполнением ESP-201) :

esp8266 ESP-201 (беленький такой, с кучей пинов)

- для запуска CHIP_EN -> 3V3, IO15 -> Ground

- для перепрошивки IO0 -> Ground

Еще полезности по нему - здесь: http://smarpl.com/content/esp8266-esp-201-module-antenna-troubleshooting

 

NEGr
Offline
Зарегистрирован: 12.05.2014

Araris пишет:

Попробуйте запитать от внешнего источника.

Так я от такого и питаю- пост выше

NEGr
Offline
Зарегистрирован: 12.05.2014

trembo пишет:

Пожалуйста, прошу вас, не называйте преобразователями линейные стабилизаторы вроде 1117 .....

Преобразователь- это несколько другое....  вроде этих http://www.ebay.com/sch/i.html?_from=R40&_trksid=p2050601.m570.l1313.TR0.TRC0.H0.Xlm2596&_nkw=lm2596&_sacat=0

С входным напряжением 25.... 30...40... Вольт и выходным от 1 Вольта до почти питания, с КПД 80% и выше и токи в единицах Ампера...

Хорошо учту- буду назвать их линейными стабилизаторами. Что касаемо в электронике я не спец, я только учусь))

Araris
Offline
Зарегистрирован: 09.11.2012

NEGr пишет:

Araris пишет:

Попробуйте запитать от внешнего источника.

Так я от такого и питаю- пост выше

Тот, где написано "я питаю от arduino" ?

NEGr
Offline
Зарегистрирован: 12.05.2014

Araris пишет:

NEGr пишет:

Araris пишет:

Попробуйте запитать от внешнего источника.

Так я от такого и питаю- пост выше

Тот, где написано "я питаю от arduino" ?

неа . пост 417.

Araris
Offline
Зарегистрирован: 09.11.2012

Если берете 5В с Ардуино - плохо. Если 12В с внешнего источника - хорошо.

Jon2013
Offline
Зарегистрирован: 18.12.2013
Есть замечательная обертка для ESP8266 под Ардуину: http://esp8266.ru/forum/threads/arduino-biblioteki-esp8266.1
Мое устройство на основе этой обертки передает показания на "Народ", без сбоев, уже пару недель:
/* обертка от автора  https://github.com/anakod/ESP8266pro .
Прошивка ESP АТ20 http://esp8266.ru/esp8266-atv20-sdk094/
скеч выводит на Народный монитор влажность и температуру с комнатного и уличного DHT,
температуру с наружного термодатчика DS,
показания барометра.
На дисплей выводит температуру комнатную с внутреннего DHT и температуру наружную. 
*/

#include <ESP8266pro.h>
#include <ESP8266proClient.h>
#include <LiquidCrystal_I2C.h>

#include <OneWire.h>
#include <Wire.h>
#include <BMP085.h>
#include <DHT.h>
//*******************************************************************
#define DHTPINS 7                // пин подключения датчика влажности DHT уличный
#define DHTPIN 6                // пин подключения датчика влажности DHT на плате
#define DHTTYPES DHT11           // тип датчика влажности DHT22/DHT11 (уличный)
#define DHTTYPE DHT11           // тип датчика влажности DHT22/DHT11  (комнатный)
//#define DHTTYPE DHT22           // тип датчика влажности DHT22/DHT11
#define DS18B20_PIN 3           // пин подключения термодатчика DS18B20, если датчиков несколько, все цепляем на один пин.

#define postingInterval 600000  // интервал между отправками данных в миллисекундах (5 минут=300000,10 минут=600000)

const int LED =  13;      // на плате (зеленый - процесс идет)

LiquidCrystal_I2C lcd(0x27,16,2); 
OneWire ds(DS18B20_PIN);
int CountSensors;                               // количество найденных датчиков температуры

BMP085 dps = BMP085();
DHT dht(DHTPIN, DHTTYPE);
DHT dhts(DHTPINS, DHTTYPES);

byte mac[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; //MAC-WiFi модуля

char macbuf[13];
char replyBuffer[160];                          // буфер для отправки
unsigned long lastConnectionTime = 0;           // время последней передачи данных
int HighByte, LowByte, TReading, SignBit, Tc_100, Whole, Fract;
long Pressure = 0;
float Humidity = 0;
float Temperatura = 0;
int val = 0; 
//----------------------------

ESP8266pro wifi(Serial); // ESP, DBG

const char* ssid = "myClient";
const char* password = "myPass";

void setup()
{
lcd.init(); // Инициализируем экран
lcd.backlight(); //включаем подсветку
//Устанавливаем позицию начиная с которой выводится текст. 
lcd.setCursor(0,0); 
//выводим строку 1
lcd.print("Temp str: ");//Температура на улице (9 символов)
lcd.setCursor(0,1); 
//выводим строку 2
lcd.print("Temp room: ");//Температура в комнате (10 символов)

   pinMode(LED, OUTPUT);
   digitalWrite(LED, LOW);//error
    
   Serial.begin(115200);    //аппаратный порт (9-RX, 10-TX)
  
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  // Initialize ESP
   wifi.begin(eODM_None); // Disable all debug messages
 
  // Connect to WiFi network
  // In future ESP should automatically reconnect
  // to this network, if requried
  do
  {
    if (!wifi.stationConnect(ssid, password))
      delay(3000);
  } while (wifi.stationIP() == NULL_IP);
 //---------------------------------------------
 //Узнаём количество термодатчиков
    CountSensors = DsCount();
 //запускаем процессы   
    Wire.begin();
    dps.init();
    dhts.begin();
    dht.begin();
  
  lastConnectionTime = millis()-postingInterval+15000; //первое соединение через 15 секунд после запуска
}

void loop()
{
  //если прошло определённое время, то делаем замер и отправляем данные
  if (millis() - lastConnectionTime > postingInterval) {
    digitalWrite(LED, LOW);//error!
    devices();      //опрос датчиков
    SendNM();     //отправляем показания
    
    lastConnectionTime = millis();
 }
}
//////////////////////////////////////////////////////////////
/////п/программа чтения буфера
void printResponse(ESP8266proConnection* connection,
          char* buffer, int length, boolean completed)
{
    if (completed) digitalWrite(LED, HIGH);//передача OK
    else digitalWrite(LED, LOW);//error!
}
////////////////////////////////////п/программа для отправки данных
void SendNM(){
 // Send request
  ESP8266proClient con(wifi, printResponse);
   con.connectTcp("94.19.113.221", 8283);//norodmon.ru
   con.send(replyBuffer);
   con.waitResponse();
   con.close();
}
//////////////////////////////////п/программа сбора данных
void devices(){
   memset(replyBuffer, 0, sizeof(replyBuffer));
   strcpy(replyBuffer,"#");                         //Передача МАК

    memset(macbuf, 0, sizeof(macbuf));
    //Конвертируем MAC-адрес
    for (int k=0; k<6; k++)
    {
      int b1=mac[k]/16;
      int b2=mac[k]%16;
      char c1[2],c2[2];
 
      if (b1>9) c1[0]=(char)(b1-10)+'A';
      else c1[0] = (char)(b1) + '0';
      if (b2>9) c2[0]=(char)(b2-10)+'A';
      else c2[0] = (char)(b2) + '0';
 
      c1[1]='\0';
      c2[1]='\0';
 
      strcat(macbuf,c1);
      strcat(macbuf,c2);
    }
    strcat(replyBuffer, macbuf);
    strcat(replyBuffer,"\n");
 //-------------------------------------термометры шины W-1
    //Сбрасываем поиск датчиков (кол-во нам уже известно)
    ds.reset_search();
    //Теперь в цикле опрашиваем все датчики сразу
 
    for (int j=0; j<CountSensors; j++)
    {
       byte i;
      byte present = 0;
      byte data[12];
      byte addr[8];
 
      if ( !ds.search(addr)) 
      {
        ds.reset_search();
        return;
      }
      ds.reset();
      ds.select(addr);
      ds.write(0x44,1);
       delay(1000);
 
      present = ds.reset();
      ds.select(addr);    
      ds.write(0xBE);
 
      for ( i = 0; i < 9; i++) // we need 9 bytes
      {
        data[i] = ds.read();
      }
       LowByte = data[0];
      HighByte = data[1];
      TReading = (HighByte << 8) + LowByte;
      SignBit = TReading & 0x8000;  // test most sig bit
      if (SignBit) // negative
      {
        TReading = (TReading ^ 0xffff) + 1; // 2's comp
      }
      Tc_100 = (6 * TReading) + TReading / 4;    // multiply by (100 * 0.0625) or 6.25
 
      Whole = Tc_100 / 100;  // separate off the whole and fractional portions
      Fract = Tc_100 % 100;
      char temp[3];
      itoa(Whole,temp);
      strcat(replyBuffer,"#"); //одинарный символ перед датчиком

      //конвертируем адрес термодатчика
      for (int k=7; k>=0; k--)
      {
        int b1=addr[k]/16;
        int b2=addr[k]%16;
        char c1[2],c2[2];
 
        if (b1>9) c1[0]=(char)(b1-10)+'A';
        else c1[0] = (char)(b1) + '0';
        if (b2>9) c2[0]=(char)(b2-10)+'A';
        else c2[0] = (char)(b2) + '0';
 
        c1[1]='\0';
        c2[1]='\0';
 
        strcat(replyBuffer, c1);
        strcat(replyBuffer, c2);
      }
       strcat(replyBuffer,"#"); //разделительный символ перед показанием
       lcd.setCursor(12, 0);//подготавливаем дисплей

    if (SignBit) //если температура отрицательная, добавляем знак минуса
      {
        strcat(replyBuffer,"-");
        lcd.print("-");
      }
      strcat(replyBuffer,temp);

    lcd.print(temp); //температура на дисплее
    lcd.print((char)223);
    lcd.print("C ");

      strcat(replyBuffer,".");
      if (Fract<10)
      {
        strcat(replyBuffer,"0");
      }
      itoa(Fract,temp);
      strcat(replyBuffer,temp);
      strcat(replyBuffer,"\n"); //конец показания датчика
 }
    char temp[8];
    long p_100, h_100;
 //---------------------------- барометр
    #if BMP085_EXIST == 1
      strcat(replyBuffer,"#"); //одинарный символ перед датчиком
      strcat(replyBuffer, macbuf);
      strcat(replyBuffer, "01");
      strcat(replyBuffer,"#"); //разделительный символ перед показанием
      
     dps.getPressure(&Pressure);
      p_100 = Pressure/1.333;
      Whole = p_100 / 100;
      Fract = p_100 % 100;
      itoa(Whole, temp);
      strcat(replyBuffer, temp);
      strcat(replyBuffer, ".");
      if (Fract<10)
      {
        strcat(replyBuffer,"0");
      }
      itoa(Fract, temp);
      strcat(replyBuffer, temp);
      strcat(replyBuffer,"\n"); //конец показания датчика
    #endif
 //------------------------------- влажность улица 
    #if DHT_EXISTS == 1
   Humidity = dhts.readHumidity();
      strcat(replyBuffer,"#"); //одинарный символ перед датчиком
      strcat(replyBuffer, macbuf);
      strcat(replyBuffer, "02");
      strcat(replyBuffer,"#"); //разделительный символ перед показанием
      h_100 = Humidity*100;
      Whole = h_100 / 100;
      Fract = h_100 % 100;
      itoa(Whole, temp);
      strcat(replyBuffer, temp);
      strcat(replyBuffer, ".");
      if (Fract<10)
      {
        strcat(replyBuffer,"0");
      }
      itoa(Fract, temp);
      strcat(replyBuffer, temp);
      strcat(replyBuffer,"\n"); //конец показания датчика
  #endif
 //------------------------------- температура DHT комната 
    #if DHT_EXIST == 1
    Temperatura= dht.readTemperature();
      strcat(replyBuffer,"#"); //одинарный символ перед датчиком
      strcat(replyBuffer, macbuf);
      strcat(replyBuffer, "03");
      strcat(replyBuffer,"#"); //разделительный символ перед показанием
      h_100 = Temperatura*100;
      Whole = h_100 / 100;
      Fract = h_100 % 100;
      itoa(Whole, temp);
      strcat(replyBuffer, temp);

//аналогично выводим вторую строку
  lcd.setCursor(12, 1);
  lcd.print(temp);
  lcd.print((char)223);
  lcd.print("C ");
  
      strcat(replyBuffer, ".");
      if (Fract<10)
      {
        strcat(replyBuffer,"0");
      }
      itoa(Fract, temp);
      strcat(replyBuffer, temp);
      strcat(replyBuffer,"\n"); //конец показания датчика
    
 //------------------------------- влажность комната
    Humidity = dht.readHumidity();
      strcat(replyBuffer,"#"); //одинарный символ перед датчиком
      strcat(replyBuffer, macbuf);
      strcat(replyBuffer, "04");
      strcat(replyBuffer,"#"); //разделительный символ перед показанием
      h_100 = Humidity*100;
      Whole = h_100 / 100;
      Fract = h_100 % 100;
      itoa(Whole, temp);
      strcat(replyBuffer, temp);
      strcat(replyBuffer, ".");
      if (Fract<10)
      {
        strcat(replyBuffer,"0");
      }
      itoa(Fract, temp);
      strcat(replyBuffer, temp);
      strcat(replyBuffer,"\n"); //конец показания датчика
  #endif
     strcat(replyBuffer,"##"); //конец передачи
     strcat(replyBuffer,'\0');
     }
 /////////////////////////////////// п/программа: Количество термодатчиков на шине
int DsCount()
{
  int count=0;
  bool thatsall = false;
  byte addr[8];
  do
  {
    if ( !ds.search(addr))
    {
      ds.reset_search();
      thatsall = true;
    }
    count++;
  } while(!thatsall);
  return (count-1);
}
 
int len(char *buf)
{
  int i=0; 
  do
  {
    i++;
  } while (buf[i]!='\0');
  return i;
}
/////////////////////////////////// п/программа reverse
void reverse(char s[])
{
  int i, j;
  char c;
 
  for (i = 0, j = strlen(s)-1; i<j; i++, j--) 
  {
    c = s[i];
    s[i] = s[j];
    s[j] = c;
  }
}
//////////////////////////////////////// п/программа itoa
void itoa(int n, char s[])
{
  int i, sign;
 
  if ((sign = n) < 0)       /* записываем знак */
    n = -n;                 /* делаем n положительным числом */
  i = 0;
  do {                      /* генерируем цифры в обратном порядке */
    s[i++] = n % 10 + '0';  /* берем следующую цифру */
  } while ((n /= 10) > 0);  /* удаляем */
  if (sign < 0)
    s[i++] = '-';
  s[i] = '\0';
  reverse(s);
}  
////////////////////////////////////////////////////////////end

оптимальный для этого модуля блок питания на 5В 1А брал тут: http://ru.aliexpress.com/item/Free-Shipping-White-European-USB-AC-Wall-Power-Adapter-EU-Plug-Charger-For-iPhone-5-4/1852857784.html?recommendVersion=2

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Брал десяток таких, в основном как небольшую зарядку для телефона или Ардуину на столе включить, за год пара уже померла, напряжение не очень стабильно 5 Вольт,  ток полампера максимум, разборка трупиков показала что внутри они выглядят совсем не кошерно, хотя и терпимо за такие деньги.

Jon2013
Offline
Зарегистрирован: 18.12.2013

Заменил слово "хороший" на "оптимальный". Думаю так будет точней. Перебрал 5-6 вариантов зарядок остановился именно на этом. И мобилу можно всегда подзарядить и модулю с дисплем  вполне хватает.

Есть подороже, но по моему еще оптимальней: http://ru.aliexpress.com/item/Free-Shipping-New-Home-Wall-Power-Supply-USB-Socket-Switch-With-USB-Port-Interface-White/1006948075.html?isOrigTitle=true

Как приедут перейду на него.

TevatroN
Offline
Зарегистрирован: 17.11.2013

Хочу заменить модуль w5100 на эти ESP, есть модули версии 01 и 12, прочитав ветку понял что еще нету библиотек без гемора заменяющие езернет шилд? Есть кто уже этом занимался? У меня метеостанция на народмон данные шлет, может кто поделится частью кода? Или придется велосипед заново изобретать? Мне просто пока не нужны все эти примочки с GPIO, мне бы просто от платы избавится от w5100. Будьте добры поделитесь или ткните на подходящий пример.

rjlexx
Offline
Зарегистрирован: 28.01.2015

А кто-нибудь сталкивался со странным зависанием модуля? Запрос до него доходит, ардуино его отрабатывает и возвращает ответ, но модуль не передает этот ответ клиенту. В итоге клиент отваливается по таймауту. Причем первые несколько запросов запросов обрабатываются нормально

MaksMS
Offline
Зарегистрирован: 11.03.2013

Питание нормальное дайте модулю...

Araris
Offline
Зарегистрирован: 09.11.2012

 

rjlexx
Offline
Зарегистрирован: 28.01.2015

MaksMS, Araris, попробую. Не посоветуете, как это проще организовать?

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

MaksMS пишет:

Питание нормальное дайте модулю...

Увы, иногда не помогает. Схемотехника - откровенное говно, пока ее вылижут хотя бы до состояния ардуины - пройдет много времени: у меня из трех попыток - ни одного раза схема нормально не запустилась: питание от отдельной батареи и от сдвоенного AMC1117 на радиаторе.

Jon2013
Offline
Зарегистрирован: 18.12.2013

TevatroN пишет:
Хочу заменить модуль w5100 на эти ESP, есть модули версии 01 и 12, прочитав ветку понял что еще нету библиотек без гемора заменяющие езернет шилд? Есть кто уже этом занимался? У меня метеостанция на народмон данные шлет, может кто поделится частью кода? Или придется велосипед заново изобретать? Мне просто пока не нужны все эти примочки с GPIO, мне бы просто от платы избавится от w5100. Будьте добры поделитесь или ткните на подходящий пример.

Все уже изобретено.

Двумя постами выше выкладывал скетч и ссылки на библиотеку без эзернет-шилда.

А если в мдуль загрузить вот эту прошивку: http://homes-smart.ru/index.php/oborudovanie/bez-provodov-wi-fi/62-besprovodnoj-datchik-na-baze-esp8266-dlya-servisa-narodmon-ru,  так и Ардуина совсем не нужна.

rjlexx
Offline
Зарегистрирован: 28.01.2015

Jon2013 пишет:

Двумя постами выше выкладывал скетч и ссылки на библиотеку без эзернет-шилда.

А если в мдуль загрузить вот эту прошивку: http://homes-smart.ru/index.php/oborudovanie/bez-provodov-wi-fi/62-besprovodnoj-datchik-na-baze-esp8266-dlya-servisa-narodmon-ru,  так и Ардуина совсем не нужна.

Пробовал ее, классная библиотека, но было бы еще круче, если у нее был бы удобный интерфес для работы с ардуино. Чтобы максимально извлечь пользу из модуля. Пытался подружить ее с ардуино по протоколу I2C, но что-то не получилось да и не очень удобно отправлять команды в запросах типа /i2cgo?adr=20&set=FF.

MaksMS
Offline
Зарегистрирован: 11.03.2013

Ну дык изложите свою идею реализации ) 

Использовать i2c - это самое простое. Да и в любом случае управлять ардуино придется гет запросами...

rjlexx
Offline
Зарегистрирован: 28.01.2015

MaksMS пишет:

Ну дык изложите свою идею реализации ) 

Использовать i2c - это самое простое. Да и в любом случае управлять ардуино придется гет запросами...

Например, сливать все сообщение из GET запроса в RX\TX.

Запрос мог бы выглядить так: /uart?message=light:on

Arduino слушает Serial порт, к которому подключен ESP модуль и обрабатывает подобные сообщения.

Еще можно сделать, чтобы с arduino можно было отправить в serial ссылку. А ESP модуль сам отправил на нее запрос и вернул бы ответ обратно в serial.

TevatroN
Offline
Зарегистрирован: 17.11.2013

Jon2013 пишет:

TevatroN пишет:
Хочу заменить модуль w5100 на эти ESP, есть модули версии 01 и 12, прочитав ветку понял что еще нету библиотек без гемора заменяющие езернет шилд? Есть кто уже этом занимался? У меня метеостанция на народмон данные шлет, может кто поделится частью кода? Или придется велосипед заново изобретать? Мне просто пока не нужны все эти примочки с GPIO, мне бы просто от платы избавится от w5100. Будьте добры поделитесь или ткните на подходящий пример.

Все уже изобретено.

Двумя постами выше выкладывал скетч и ссылки на библиотеку без эзернет-шилда.

А если в мдуль загрузить вот эту прошивку: http://homes-smart.ru/index.php/oborudovanie/bez-provodov-wi-fi/62-besprovodnoj-datchik-na-baze-esp8266-dlya-servisa-narodmon-ru,  так и Ардуина совсем не нужна.

Спасибо, не обратил внимания на скетч, как раз на версии от студентпрогер у меня и собрано павда с изменениями, а самого ESP8266 пока не хватает на все мои хотелки сразу, а именно мне нужна связь с удаленным модулем 433 ООК ну еще LCD, но модуль ESP8266 вещица крайне полезная, и буду изучать.

TevatroN
Offline
Зарегистрирован: 17.11.2013

Jon2013 пишет:

TevatroN пишет:
...

Все уже изобретено.

Двумя постами выше выкладывал скетч и ссылки на библиотеку без эзернет-шилда.

А если в мдуль загрузить вот эту прошивку: http://homes-smart.ru/index.php/oborudovanie/bez-provodov-wi-fi/62-besprovodnoj-datchik-na-baze-esp8266-dlya-servisa-narodmon-ru,  так и Ардуина совсем не нужна.

Похоже что я хожу по тем же граблям что и вы тут: http://esp8266.ru/forum/threads/arduino-biblioteki-esp8266.1/page-2#post... по этой ссылке на скорее всего ваш пост, отсылка данных на народмон работает только один раз, использую SS_serial для обмена с ESP8266.

Ваш же скетч несколькими постами выше где HW serial у меня вовсе не запустился, что там сказано о буфере HW serial? Я менял размер буфера в HardwareSerial.cpp

#if (RAMEND < 1000)
  #define SERIAL_BUFFER_SIZE 256//old 16
#else
  #define SERIAL_BUFFER_SIZE 256//old64
#endif

не помогло, если в SS_serial увеличить тоже не помогает. Или не там менять надо? Arduino IDE 1.0.6

Помогите разобраться.

Jon2013
Offline
Зарегистрирован: 18.12.2013

TevatroN пишет:
Похоже что я хожу по тем же граблям что и вы тут: http://esp8266.ru/forum/threads/arduino-biblioteki-esp8266.1/page-2#post-1264 по этой ссылке на скорее всего ваш пост, отсылка данных на народмон работает только один раз, использую SS_serial для обмена с ESP8266.

Помогите разобраться. 

Да, дествительно - это мои эксперементы. Мы с разработчиком обертки все это попробовали.

Вывод один. Нехватка памяти при работе двух портов (программного и аппаратного)  одновременно. 

На поддержку программного порта похоже уходят все рессурсы.

Скетч, выложенный в этой ветке, написан без использования программного порта, поэтому он работает стабильно в цикле. 

Я задачу разбил на две подзадачи. Вначале отладил с применением монитора формирование пакета данных и отправку на НМ. Затем убрал софтпорт из скетча  и уже в темную запустил модуль через аппаратный порт.

У тех Ардуин которые имеют два аппаратных порта, таких проблем не должно быть. 

sav13
sav13 аватар
Offline
Зарегистрирован: 17.06.2013

Подскажите ESP07 и ESP12 как то по особенному подключаются?

Подключаю к 3.3В VCC и CH_PD и GND соответсвенно. Мигает синий светодиод на ESP12, на ESP07 еще и красный загорается. В эфире ничего не появляется 

Подключаю чере USB-TTL RX и TX на скорости 57400 получаю при рестарте модуля

qG.DZ..Q@@HdIw.LQ;kCP@fo.TWZ55FTG!D.c.m
HW.PW.
q

На других скоростях что то еще более не внятное. AT-команды не проходят

MaksMS
Offline
Зарегистрирован: 11.03.2013

gpio15 на минус еще надо

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

sav13 пишет:

Подключаю чере USB-TTL RX и TX на скорости 57400 получаю при рестарте модуля

qG.DZ..Q@@HdIw.LQ;kCP@fo.TWZ55FTG!D.c.m
HW.PW.
q

На других скоростях что то еще более не внятное. AT-команды не проходят

Во-во-во, у меня примерно такая же фигня с модулями... Не заводятся. :(

art100
Offline
Зарегистрирован: 09.03.2014

rjlexx пишет:

MaksMS, Araris, попробую. Не посоветуете, как это проще организовать?

я тоже не буду читать - копирайт onliner.by

я тоже не буду смотреть - копирайт мой 

art100
Offline
Зарегистрирован: 09.03.2014

Andrey_Y_Ostanovsky пишет:

MaksMS пишет:

Питание нормальное дайте модулю...

Увы, иногда не помогает. Схемотехника - откровенное говно, пока ее вылижут хотя бы до состояния ардуины - пройдет много времени: у меня из трех попыток - ни одного раза схема нормально не запустилась: питание от отдельной батареи и от сдвоенного AMC1117 на радиаторе.

Почему у меня все работает? Что я делаю не так?

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

А мне понравились гребёнки напаянные на StepDown. Класс! И прямо проводки от бредборда втыкать! Сам не догадался, всегда что-то припаивал...

Их же можно ещё и параллелить !!!!!!!!!!!

sav13
sav13 аватар
Offline
Зарегистрирован: 17.06.2013

Andrey_Y_Ostanovsky пишет:

Во-во-во, у меня примерно такая же фигня с модулями... Не заводятся. :(

Завелась так

GPIO15 на землю
CH_PD к VCC через резистор
Внешнее питание 3.3В
Скорость 9600