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

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

trembo пишет:

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

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

По теме безпроводностей. Их есть у меня. Шлейфы двухрядные куча от старых COM портов с материнок. Я их все выкидываю выкидавю, а они все не кончаются.

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

sav13 пишет:

Завелась так

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

GPIO15 на землю пробовал, а вот CH_PD через резистор (10К?) нет, спасибо за подсказку, попробую...

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

Попробовал подключить ESP модуль к доп питанию и все-равно после отправки ответа на первый запрос модуль зависал. Изначально работал с модулем через библиотеку WiFi. Потом решил загрузить скетч, который делает прямые перенаправления между серийными портами и попробовать пописать ответы на запросы в ручную. Выяснил, что при отправке команды AT+CIPCLOSE модуль возвращает кракозябры и после этого виснет.

В итоге, я вообще написал свои методы для инициализации WiFi и обработки запросов без отправки команды AT+CIPCLOSE. Соединение и так закрывается автоматом, т.к. отправляю в заголовке Connection: close. Модуль теперь работает почти без зависаний. Только, если одновременно два запроса приходит, то может подвиснуть. Но я его периодически пингую командой AT, и, если он не отвечает, то перезазгружаю модуль и заново запускаю веб-сервер.

Модуль сейчас работает на питании от arduino nano.

e3p7j
Offline
Зарегистрирован: 09.01.2015

Добрый день.

Ситуация такая:

Используется китайская Arduino UNO. Esp8266 питается от отдельного Uarta.
1)При использовании SoftwareSerial на пинах 2, 3 не отправляются и не приходят данные с esp8266.
ТОчнее, что то приходит - но явно мусор. При этом esp8266 никак не реагирует на команды - синий индикатор не загорается.
2)При использовании SoftwareSerial/HardwareSerial на пинах 0, 1 (Rx, Tx) данные отправляются и приходят. При этом питание arduino идет через USB кабель. При использовании внешнего питания (Usb разъем не задействован) на esp8266 постоянно горит синий индикатор, на команды не реагирует.
 
ПОясните мне, бесстолковому что не так я делаю? 
Неужели нельзя задействовать пины 0, 1 при использовании SoftwareSerial/HardwareSerial при питании от внешнего источника?
 
Araris
Offline
Зарегистрирован: 09.11.2012

e3p7j пишет:

Используется китайская Arduino UNO. Esp8266 питается от отдельного Uarta.

1)При использовании SoftwareSerial на пинах 2, 3 не отправляются и не приходят данные с esp8266.
ТОчнее, что то приходит - но явно мусор. При этом esp8266 никак не реагирует на команды - синий индикатор не загорается.
2)При использовании SoftwareSerial/HardwareSerial на пинах 0, 1 (Rx, Tx) данные отправляются и приходят. При этом питание arduino идет через USB кабель. При использовании внешнего питания (Usb разъем не задействован) на esp8266 постоянно горит синий индикатор, на команды не реагирует.
 
 
На какой скорости Esp8266 обменивается данными с Arduino ?
e3p7j
Offline
Зарегистрирован: 09.01.2015

Скорость 9600

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

e3p7j пишет:

Скорость 9600

Тогда все непонятно...

А если SoftwareSerial перевесить на другие пины (8,9 например) ?

И залить что-то вроде

void loop()
{
while ( Serial.available() ) { ESPSerial.write(Serial.read()); }
while ( ESPSerial.available() ) { Serial.write(ESPSerial.read()); }
}

и посмотреть из монитора порта ?

И вот еще из свежего полезного : http://esp8266.ru/esp8266-podkluchenie-obnovlenie-proshivki/

e3p7j
Offline
Зарегистрирован: 09.01.2015

Спасибо, почитаю.

Ну можно поэксперементировать с номерами пинов.

Вроде подключал еще к каким-то двум пинам - результат тот-же был.

e3p7j
Offline
Зарегистрирован: 09.01.2015

Почитал статью.

Вообще не понимаю как люди используют esp без внешнего питания.

Я когда подключил esp к Uart на 3.3v - у меня Uart после подключения к компьютеру работал пару секунд и отвалиывался (исчезал ком порт). После добавление конденсатора на 1000мкФ постабильней стало- но программы наподобие Termiteпозволяли работать с esp пару минут, как правило, но не всегда, после попытки отправить данные или при запросе найденных AP esp переставал отвечать на команды.

Проблема решалась переоткрытием порта. Подумал, что виною всему кривые руки программистов программ наподобие Termite. Однако ж нет. Например я несколько дней искал у себя в коде ошибки, приводящие к перезапуску Arduino, причем перезапуск мог произойти в любой момент, но чаще всего при отправке данных (esp как Server), пока случайно не забыл подключить esp к rx, tx Arduino  и не увидел, что перезапуски все равно происходят (питание Arduino и esp по соседним usb портам). Нормального питания под рукой не было и я в порыве отчаяния подключил к esp еще один конденсатор на 1000мкФ  ))

 Если предположить, что для esp куплю нормальное отдельно питание - вопрос остается открытым с SoftwareSerial/HardwareSerial

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

Мне на 2-3 пинах тоже не удавалось поднять Software Serial. А вот на 8-9 работает нормально. К нему подключаю терминал для отладки. А к Hardware Serial подключаю ардуино. Оба порта запускаю на скорости 9600.

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

Пытаюсь освоить "лунное" програмирование. Модуль ESP-01, шит NodeMCU 0.9.5 build 20150213  powered by Lua 5.1.4. В общем пытается работать, светодиодом моргает,  HTTP-сервер в режиме AP подымается, Hello шлет всем кто конектится, даже стабильно все. Но есть два вопроса:

1. имя сети с помощю wifi.ap.config не могу задать. Выполняется без ошибок команда

cfg={}
     cfg.ssid='myssid'
     cfg.pwd='mypwd'
     wifi.ap.config(cfg)

а сеть  остается ESP_xxxxxx. Кто осилил это?

2. Светодиод через 750Ом подключен к GPIO2 и +3,3. Работает, моргает, ОК. То же самое но подключенно к GPIO2 и общему - при включении все время светит синий, плюет в порт какуюту хрень. Эта как жеж так? Кто знает. Питание на модуле 3,7В тока до 500мА.
 

e3p7j
Offline
Зарегистрирован: 09.01.2015

Спасибо, попробую.

Пины 0, 1 работают нормально без подключения usb кабеля - то есть при питании от внешнего источника, не пробовали?

RomAndry
RomAndry аватар
Offline
Зарегистрирован: 20.02.2014

Помогите разобраться
ESP01
питание 3.3 (1117) брал +5в как от Arduino так и от ATX (5A)
Взял пример из этого топика:
 

#include <SoftwareSerial.h>
#define ESP8266_RX          7
#define ESP8266_TX          8
#define SSID  "TP-LINK_5671E2"
#define PASS  "1234567890"
#define DST_IP "192.168.1.106"
int hardReset = 6;
boolean connected=false;
static unsigned long time_fade;
SoftwareSerial ESPSerial(ESP8266_RX,ESP8266_TX);

void setup() {
  pinMode(hardReset, OUTPUT);
  Serial.begin(9600);
  Serial.setTimeout(5000);
  ESPSerial.begin(9600);
  ESPSerial.setTimeout(5000);
  digitalWrite(hardReset, LOW);
  delay(100);
  digitalWrite(hardReset, HIGH);
  delay(5000);
  for(int i=0;i<5;i++) {
    if(connectWiFi()) {
      connected = true;
      break;
    }
  }
  if(!connected){while(1);}
  delay(2000);
}

void loop() {
 if(millis()>time_fade) {
   if(sendMSG()) {
     Serial.println("SEND: YES");
   }else {
     Serial.println("SEND: NO");
   } 
   time_fade=millis()+10000;
 } 
}

boolean sendMSG() {
    String cmd = "AT+CIPSTART=1,\"TCP\",\"";cmd+= DST_IP;cmd+= "\",80";
    ESPSerial.println(cmd);
    ESPSerial.flush();
    delay(1000);

    String msg= "GET /wifi/index.php";msg+= " HTTP/1.1\r\nHost: ";msg+= DST_IP;msg+= ":80\r\n\r\n";
    ESPSerial.print("AT+CIPSEND=1,");
    ESPSerial.println(msg.length());

    Serial.println("Sending MSG");
    if (ESPSerial.find(">")) {
        Serial.print("MSG text: ");Serial.print(msg);
        Serial.print(" length= ");Serial.println(msg.length());
        ESPSerial.println(msg);
        ESPSerial.flush();
    }else {
        ESPSerial.println("AT+CIPCLOSE");
        ESPSerial.flush();
        Serial.println("connection timeout");
        return false;
    }
    if(ESPSerial.find("SEND OK")) {
        return true;
    }else {
        return false;
    }
}

boolean connectWiFi(){
    Serial.print("Connecting to ");Serial.println(SSID);
    ESPSerial.println("AT+CWMODE=1");
    String cmd="AT+CWJAP=\"";cmd+=SSID;cmd+="\",\"";cmd+=PASS;cmd+="\"";
    ESPSerial.println(cmd);
    delay(1000);
    if(ESPSerial.find("OK")){
        Serial.println("OK, Connected to WiFi.");
        ESPSerial.println("AT+CIFSR");
        ESPSerial.flush();
        delay(1000);

        ESPSerial.println("AT+CIPMODE=0");
        ESPSerial.println("AT+CIPMUX=1");
        ESPSerial.flush();
        delay(1000);

        ESPSerial.println("AT+CIPSERVER=1,80");
        ESPSerial.flush();
        delay(1000);

        if(ESPSerial.find("OK")){
          Serial.println("OK, Start TCP Server");
        }else {
          Serial.println("Can not start TCP Server");
        }       
        ESPSerial.println("AT+CIPSTO=120");
        ESPSerial.flush();
    }else {
        Serial.println("Can not connect to WiFi");
        return false;
    }
}

При запуске конектится к WiFi, но затем пишет  "Can not start TCP Server" (строка 095)
Далее отправляет успешно 1-2 сообщения (строка 035 SEND: YES) и все,после этого сообщения не проходят

connection timeout (строка 061)
SEND: NO (строка 037)

т.е. не срабатывает if(ESPSerial.find(">")) (строка 054)
подскажите, что это может быть?
И почему не срабатывает if(ESPSerial.find("OK")) (строка 092)
Спасибо.
Кстати, есть разница между

ESPSerial.println(msg);
и

ESPSerial.print(msg);
в строке 056 ?
RomAndry
RomAndry аватар
Offline
Зарегистрирован: 20.02.2014

пока писал пост, на мониторе постоянно проскакивали сообщение об не успешной отправке... и тут внезапно 2 сообщения, что прошло успешно.
Получается не стабильность или с delay надо баловаться?

Версия прошивки: 0.9.2.4

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

1. Зачем столько ESPSerial.flush(), оно и без них прекрасно отправляет.

2. AT+CIPCLOSE без номера соединения смысла не имеет. (AT+CIPCLOSE=id - close TCP or UDP connection. For multiply connection mode)

3. Зачем там AT+CIPMODE=0 ? Пишут даже, что "if you are in transparent data mode (AT+CIPMODE=0) and you try to use the variant of AT+CIPSEND which uses a length value, it won’t just fail or ignore it, it will actually reboot the module."

Вот здесь пишут: http://robinsonia.com/wp/?p=360 , кстати, много полезного пишут.

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

RomAndry пишет:

Далее отправляет успешно 1-2 сообщения (строка 035 SEND: YES) и все,после этого сообщения не проходят
connection timeout (строка 061)
SEND: NO (строка 037)

Попробуйте сделать по аналогии с тем, что я описывал в этом посте.

Вот мой скетч, в котором по GET запросу http://[ESP_IP]/?get=temp возвращается температура:

#include "OneWire.h"

#define WIFI_BAUD 115200
#define SSID       F("WIFI-SSID")
#define PASSWORD   F("password")
#define RCNL       F("\r\n")
#define NL         '\n'
#define WIFI_CHECK_PERIOD 10000
#define WIFI_PIN 4
#define TEMP_PIN 2

#define DEBUG
#ifdef DEBUG
#define DEBUG_BAUD        9600
#define DEBUG_RX          8
#define DEBUG_TX          9
#include "SoftwareSerial.h"
#endif
SoftwareSerial debugSerial (DEBUG_RX, DEBUG_TX); // RX, TX

OneWire tempSensor(TEMP_PIN);
long timeLastCheck;
bool checkEnabled = false;
float currentTemp = 0;

void setup()
{
  pinMode(WIFI_PIN, OUTPUT);
  digitalWrite(WIFI_PIN, HIGH);
  Serial.begin(WIFI_BAUD);
  Serial.setTimeout(2000);
#ifdef DEBUG
  debugSerial.begin(DEBUG_BAUD);
#endif
  debugPrintln(F("ESP8266 Monitor"));
  initWiFi();
  timeLastCheck = millis();
}

void loop()
{
  readDataFromTempSensor();
  while ( Serial.available() )    {
    String str = Serial.readStringUntil(NL);
    if (str.indexOf(F("+IPD")) >= 0) {
      checkEnabled = false;
      String chId = str.substring(5, 6);
      String response = "";
      if (str.indexOf(F("/?get=temp")) >= 0) {
        response = F("temp=");
        response += String(currentTemp);
        response += F("\r\n");
      }
      sendResponse(chId, response);
      checkEnabled = true;
    }
    debugPrint(str + F("\n"));
  }
#ifdef DEBUG
  while ( debugSerial.available() ) {
    Serial.print(debugSerial.readStringUntil(NL) + NL);
  }
#endif
  checkAvailability();
}

void sendResponse(String chId, String response) {
  String header = F("HTTP/1.1 200 OK\r\n");
  header += F("Content-Type: text/plain\r\n");
  header += F("Content-Length: ");
  header += String(response.length());
  header += RCNL;
  header += F("Connection: close\r\n\r\n");
  sendWiFi(chId, header + response);
  //Serial.println("AT+CIPCLOSE=" + chId);
}

void initWiFi() {
  Serial.println("AT+RST");
  if (waitUntil(F("ready"), 3000)) {
#ifdef DEBUG
    debugPrintln(F("Reboot succeed"));
#endif
    Serial.println("AT+CWMODE=1");
    if (waitUntil(F("OK"), 1000)) {
      debugPrintln(F("Mode changed"));
      Serial.println("AT+CIPMUX=1");
      if (waitUntil(F("OK"), 1000)) {
        debugPrintln(F("Multiple connection set"));
        String cwjap = F("AT+CWJAP=\"");
        cwjap += SSID;
        cwjap += F("\",\"");
        cwjap += PASSWORD;
        cwjap += F("\"");
        Serial.println(cwjap);
        if (waitUntil(F("OK"), 10000)) {
          debugPrintln(F("WiFi connected"));
          Serial.println(F("AT+CIPSERVER=1,80"));
          if (waitUntil(F("OK"), 1000)) {
            debugPrintln(F("Web server launched"));
          }
          else
            debugPrintln(F("Web server not launched"));
        }
        else
          debugPrintln(F("WiFi not connected"));
      }
      else
        debugPrintln(F("Multiple connection not set"));
    }
    else
      debugPrintln(F("Mode not changed"));
  }
  else
    debugPrintln(F("Reboot not succeed"));
}

void checkAvailability() {
  long timeCurrent = millis();
  if (checkEnabled && !Serial.available() && timeCurrent - timeLastCheck > WIFI_CHECK_PERIOD) {
    Serial.println(F("AT"));
    if (!waitUntil(F("OK"), 1000) && checkEnabled)
      initWiFi();
    timeLastCheck = timeCurrent;
  }
}

boolean waitUntil(String waitString, int waitTimeMls) {
  long timeStart = millis();
  while (1)
  {
    long timeCurrent = millis();
    if (waitString.length() > 0 && Serial.available()) {
      String str = Serial.readStringUntil(NL);
      if (str.length() > 0) {
        debugPrint(F("String: "));
        debugPrintln(str);
        if (str.indexOf(waitString) >= 0) {
          debugPrintln(String(timeCurrent - timeStart));
          return true;
        }
      }
    }
    if (timeCurrent - timeStart > waitTimeMls)
    {
      break;
    }
  }
  return false;
}

void sendWiFi(String chId, String str) {
  String cipsend = F("AT+CIPSEND=");
  cipsend += chId;
  cipsend += F(",");
  cipsend += String(str.length());
  Serial.println(cipsend);
  if (waitUntil(F(">"), 1000)) {
    Serial.print(str);
  }
  waitUntil(F("SEND OK"), 2000);
}

void readDataFromTempSensor() {
  byte addr[8];
  byte present = 0;
  byte type_s;
  byte data[12];
  if (tempSensor.search(addr) && OneWire::crc8(addr, 7) == addr[7]) {
    switch (addr[0]) {
      case 0x10:
        //Serial.println("  Chip = DS18S20");
        type_s = 1;
        break;
      case 0x28:
        //Serial.println("  Chip = DS18B20");
        type_s = 0;
        break;
      case 0x22:
        //Serial.println("  Chip = DS1822");
        type_s = 0;
        break;
      default:
        //Serial.println("Device not detected");
        break;
    }

    tempSensor.reset();
    tempSensor.select(addr);
    tempSensor.write(0x44, 1);
    delay(1000);
    present = tempSensor.reset();
    tempSensor.select(addr);
    tempSensor.write(0xBE);

    for (int i = 0; i < 9; i++) {
      data[i] = tempSensor.read();
    }

    int16_t raw = (data[1] << 8) | data[0];
    if (type_s) {
      raw = raw << 3;
      if (data[7] == 0x10) {
        raw = (raw & 0xFFF0) + 12 - data[6];
      }
    }
    else {
      byte cfg = (data[4] & 0x60);
      if (cfg == 0x00) raw = raw & ~7;
      else if (cfg == 0x20) raw = raw & ~3;
      else if (cfg == 0x40) raw = raw & ~1;

    }
    currentTemp = (float)raw / 16.0;
  }
}


void debugPrint(String str) {
#ifdef DEBUG
  debugSerial.print(str);
#endif
}

void debugPrintln(String str) {
#ifdef DEBUG
  debugSerial.println(str);
#endif;
}

 

e3p7j
Offline
Зарегистрирован: 09.01.2015

>>>т.е. не срабатывает if(ESPSerial.find(">")) (строка 054)

подскажите, что это может быть?
И почему не срабатывает if(ESPSerial.find("OK")) (строка 092)

Возможно, к тому поменту, когда программа ищет ожидаемые данные в порту, их еще нет.

И, кстати, если я правильно понимаю функцию find - после ее выполнения данные очищаются в порту, то есть, для одного байта с таймаутом на чтение прокатит - то при ожидании строки может не прокатить - например, "O" будет в буффере при первом обращении к 

find, а "K" во втором.

RomAndry
RomAndry аватар
Offline
Зарегистрирован: 20.02.2014

Спасибо, разобрался
В таком варианте работает постабильнее
1. ESPSerial.flush(); оставил только в sendMSG()
2. Убрал лишние АТ команды из connectWiFi()
3. в 1117 стояли электролиты на входе и выходе, добавил еще по 0.1 мкф шунтирующие.
3.1. зашунтировал по питанию 0.1 мкф на самом модуле, но потом убрал ибо не стабильно

скетч:
 

boolean sendMSG() {
    String cmd = "AT+CIPSTART=1,\"TCP\",\"";cmd+= DST_IP;cmd+= "\",80";
    ESPSerial.println(cmd);
    ESPSerial.flush();
    delay(1000);

    String msg= "GET /wifi/index.php";msg+= " HTTP/1.1\r\nHost: ";msg+= DST_IP;msg+= ":80\r\n\r\n";
    ESPSerial.print("AT+CIPSEND=1,");
    ESPSerial.println(msg.length());
    delay(1000);

    Serial.println("Sending MSG");
    if (ESPSerial.find(">")) {
        Serial.print("MSG text: ");Serial.print(msg);
        Serial.print(" length= ");Serial.println(msg.length());
        ESPSerial.println(msg);
        ESPSerial.flush();
    }else {
        //ESPSerial.println("AT+CIPCLOSE");
       // ESPSerial.flush();
        Serial.println("connection timeout");
        return false;
    }
    if(ESPSerial.find("SEND OK")) {
        return true;
    }else {
        return false;
    }
}

boolean connectWiFi(){
    Serial.print("Connecting to ");Serial.println(SSID);
    ESPSerial.println("AT+CWMODE=1");
    String cmd="AT+CWJAP=\"";cmd+=SSID;cmd+="\",\"";cmd+=PASS;cmd+="\"";
    ESPSerial.println(cmd);
    delay(1000);
    if(ESPSerial.find("OK")){
        Serial.println("OK, Connected to WiFi");
        ESPSerial.println("AT+CIPMUX=1");
    }else {
        Serial.println("Can not connect to WiFi");
        return false;
    }
}

 

e3p7j
Offline
Зарегистрирован: 09.01.2015

>>>Спасибо, разобрался

>>>В таком варианте работает постабильнее

 

А Вы не пробовали отправлять в цикле сообщения, например по 10 байт и например раз 100?

У меня после отправки суммарно (по разному) от 30 до 600 байт отваливался esp, но видимо из-зи проблем с питанием

RomAndry
RomAndry аватар
Offline
Зарегистрирован: 20.02.2014

Да, питание требует стабильности

winoveritas
Offline
Зарегистрирован: 15.12.2014

Стабильно работает esp-01 от внешнего питания 5V 1A, уровни согласованы через китайский Logic Level Converter. Но засада в том, что надо подавать питание сначала на esp, а потом на ардуино иначе виснет esp'эха. Думаю диод надо поставить на питание, что бы 5V от ардуино не попадало на модуль, видать не хватает тока esp'эшке и виснет...


#define LED_PIN 13

#define mySSID "mySSID" // введите ваш SSID
#define myPASS "myPass" // введите ваш пароль

unsigned long tmr;

String transmit;

void setup() {
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW);
  
  Serial.begin(9600);
  Serial.setTimeout(500);
  
  Serial1.begin(9600);
  Serial.setTimeout(500);

  // Модуль WiFi =========================================
  Serial1.println("AT+RST"); // сброс и проверка, если модуль готов
  
  tmr = millis();
  while (tmr + 1000 > millis()) {
    ;
  }
  
  if(Serial1.find("ready")) { // 1. Модуль готов
    
    Serial.println("WiFi - Module is ready");
    
    tmr = millis();
    while (tmr + 5000 > millis()) {
      ;
    }
    
    Serial1.println("AT+CWJAP?");  // Проверка подключения к сети WiFi
    
    tmr = millis();
    while (tmr + 1000 > millis()) {
      ;
    }
        
    if (Serial1.find("ERROR")) { // 1.1 Не подключен к WiFi
    
      Serial.println("Not connected to WiFi");
      
      // Подключаемся к WiFi
      boolean conn = false;
      for (int i = 0; i < 5; i++) {
        if (connectWiFi()) {
          conn = true;
          Serial.print("Connected to: ");
          Serial.println(mySSID);
          break;
        }
      }
      
      if (!conn){
        Serial.print("Coudn't connect to: ");
        Serial.println(mySSID);
      } else {
        tmr = millis();
        while (tmr + 5000 > millis()) {
          ;
        }
        
        Serial1.println("AT+CIPMUX?");
        
        tmr = millis();
        while (tmr + 1000 > millis()) {
          ;
        }
        
        if (Serial1.find("+CIPMUX:0")) {
          Serial.print("Multiple connection disabled");
        } else {
          Serial.print("Multiple connection was enabled. Disable it...");
          Serial1.println("AT+CIPMUX=0");
          Serial.print("Multiple connection disabled");
        }

      }
  
    } else { // 1.2 Подключен к сети
      Serial.print("Already connected to: ");
      Serial.println(mySSID);
    }
    
  } else { // 2. Модуль не готов
    Serial.println("Module dosn't respond. Please reset.");
  }
 
}

void loop() {
  if (Serial.available()) {
    while (Serial.available()) {
      char ch = Serial.read();
      transmit += ch;
    }
    sendData(transmit, 2000, true);
    transmit = "";
  }
}

String sendData(String command, const int timeout, boolean debug) {
  String response = "";
  Serial1.print(command);
  long int time = millis();
  while( (time+timeout) > millis()) {
    while(Serial1.available()) {
      char c = Serial1.read();
      response += c;
    }
  }
  if(debug) {
    Serial.print(response);
  }
  return response;
}

boolean connectWiFi()
{
  Serial.println("Try connecting to WiFi");
  String cmd = "AT+CWJAP=\"";
  cmd += mySSID;
  cmd += "\",\"";
  cmd += myPASS;
  cmd += "\"";
  Serial1.println(cmd);
  
  tmr = millis();
  while (tmr + 2000 > millis()) {
    ;
  }
  
  if(Serial1.find("OK")) {
    Serial.println("OK, Connected to WiFi.");
    return true;
  } else {
    Serial.println("Can not connect to the WiFi.");
    return false;
  }
}

 

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

Простите, а чем конструкция

tmr = millis();
while (tmr + 2000 > millis()) { ; }

лучше delay(2000); ?

[ Я тоже не люблю delay(), но не до такой степени )) ]

winoveritas
Offline
Зарегистрирован: 15.12.2014

delay(2000); остановит проц впустую, а в вышеприведенную конструкцию можно вставить выполнение какого-то другого кода или процедуры, так планирую сделать поэтому сразу вставил.

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

winoveritas пишет:

в вышеприведенную конструкцию можно вставить выполнение какого-то другого кода

Спасибо, я так и думал.

ysach
Offline
Зарегистрирован: 23.02.2015

А обновить модуль, подключенный к ардуине, не меняя схему, как понимаю, нельзя? 

dremdem
Offline
Зарегистрирован: 02.03.2015

Всем добрый день !

Прикупил на али ESP-05 ( Почему - не спрашивайте, так получилось ))

Модуль завелся, правда пришлось делать питание через регулятор, просто через выход ардуины 3.3 вольта очень уж грелся.

Вопрос в следующем:

Как можно реализовать работу через SoftwareSerial с NTP ( серверами точного времени ) ?

Я с UDP да и по большому счету чайник, поэтому не знаю с какой стороны подступиться.

Есть примеры работы с NTP в ардуине через стандартные библиотеки ВайФай и Эзернет шилды, но как это реализовать в нашем случае через SowtwareSerial я не представляю.

UPD соединение с NTP-серваком я открываю, запрос ему посылаю, а вот как обратно UDP-пакет получить и его распарсить пока непонятно.

 

 

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

В свежей АТ-прошивке появилась команда 

AT+CIPNTP=<offset from GMT> , to initialize the ntp, and start syncing the time - for example: AT+CIPNTP=2 to intialize it with GMT+2 offset.
AT+CIPNTP? - to get the current time.

, правда перепрошить ESP-05 Вам будет сложнее, чем другие исполнения.

 

Vладимир
Offline
Зарегистрирован: 27.01.2015

 

передача (сырых) данных между двумя модулями ESP8266 возможноли это ?
интересует возможен ли режим работы у данных модулей как у модуля NRF24
передающий модуль должен ПОСТОЯННО передавать в эфир данные без всяких приемных устройств,
тобиш тупая передача без всяких клиентов и серверов
может есть прошивки которые позволяют это реализоать?
режим точки доступа с вещанием ssid не предлагать

-----------------------

требуется для работы в режиме генератора вч на 2.4ггц для настройки фидерной системы

сначала думал использовать NRF24 но у них оказалась слишком малая выходная мощьность (возможно только у маих экземпляров ) примерно 20мвт а мне надо не менее 80

dremdem
Offline
Зарегистрирован: 02.03.2015

Araris пишет:

В свежей АТ-прошивке появилась команда 

AT+CIPNTP=<offset from GMT> , to initialize the ntp, and start syncing the time - for example: AT+CIPNTP=2 to intialize it with GMT+2 offset.
AT+CIPNTP? - to get the current time.

, правда перепрошить ESP-05 Вам будет сложнее, чем другие исполнения.

 

А ESP-05 вообще шьются ?

Хотя у меня там есть RST, но не знаю насколько это поможет.

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

Можно написать простейшую отсылалку пакетов UDP в эфир и возможно будет что-то передавать, но есть сомнения....Т.к. wi-fi все же не будет запущен и TCP тут вроде как не работает..

А NRF24 существуют кстати варианты с усилителем.

 

Прошить модули без выведеного GPIO0 нельзя, но можно попробовать подпаятся к нему..

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

Vладимир пишет:

передающий модуль должен ПОСТОЯННО передавать в эфир данные без всяких приемных устройств,
тобиш тупая передача без всяких клиентов и серверов
может есть прошивки которые позволяют это реализоать?
режим точки доступа с вещанием ssid не предлагать

требуется для работы в режиме генератора вч на 2.4ггц для настройки фидерной системы

"без всяких клиентов и серверов" не бывает...

В качестве непроверенной мысли: 1. Поднять точку доступа; 2. Поднять UDP-клиент на 192.168.4.255; 3. Бродкастить с него UDP-пакеты.

В зависимости от левела это можно попробовать и на АТ-командах с Ардуино, и на NodeMCU+Lua, и прочими разными способами.

UPD: Упс, MaksMS опередил.. )) 

Vладимир
Offline
Зарегистрирован: 27.01.2015

так у меня nrf24L+ 

с внешними антеннами а поверметр выдает на них всего 18-22мвт

тоже мерило но на esp8266 показывает порядка 100мвт 

dremdem
Offline
Зарегистрирован: 02.03.2015

Araris пишет:

, правда перепрошить ESP-05 Вам будет сложнее, чем другие исполнения.

 

 

Вот здесь http://www.esp8266.com/viewtopic.php?f=8&t=637&p=4774&hilit=UDP#p4774

дядька в предпоследнем посте сделал код такой же как я и )) С тем же результатом.

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

Не только должна быть внешняя антенна, но и усилитель - на плате видно еще одну микросхему дополнительную..

dremdem
Offline
Зарегистрирован: 02.03.2015

MaksMS пишет:

Можно написать простейшую отсылалку пакетов UDP в эфир и возможно будет что-то передавать, но есть сомнения....Т.к. wi-fi все же не будет запущен и TCP тут вроде как не работает..

А NRF24 существуют кстати варианты с усилителем.

 

Прошить модули без выведеного GPIO0 нельзя, но можно попробовать подпаятся к нему..

 

Ой не, это не про меня. Я и в стандартные дырки с трудом гребенку впаял, а в ту мелкотню которая SMD это для меня как параллельные миры ))

Vладимир
Offline
Зарегистрирован: 27.01.2015

MaksMS пишет:

Не только должна быть внешняя антенна, но и усилитель - на плате видно еще одну микросхему дополнительную..

приду домой сфоткаю , выложу сюда 

Vладимир
Offline
Зарегистрирован: 27.01.2015

чтото не хочет меня на сайт пускать с домашнего компа ((.

----------------------

посмотрел ,на плате NRF24 два чипа , один из которых усилок.

народ а здесь на сайте нет одельной темы по NRF24 ??  чтото я не нашёл . 

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

Всем добрый день.

Возникла неожиданная проблема( или когда речь идет о ESP8266, вернее говорить очередная).

И так. Вводные данные:

Модуль esp8266 07

Arduino pro micro

Питание для модуля отдельное( хотя пробывал питать и от arduino)

прошивка 0018000902

Проблемма с отправкой данных от модуля к серверу.

Пример скетча:

#define SSID "SmartHome"      //имя сети
#define PASS "12345678"       //пароль
#define DST_IP "192.168.0.10" //ip web сервера
#define START_CHAR '!'        //начальный символ принимаемого сообщения
#define END_CHAR '$'          //конечный символ принимаесого сообщения
#define hardReset 6           //пин arduino, на котором весит ch_pd
//блок с константами
const String id="xx01";        //id устройства
//блок с переменными
String WiFiMessage="";        //принимаемое сообщение
unsigned int readChar;        //переменная для посимвольного чтения сообщения
boolean readingWiFi;          //флаг чтения сообщения
String ip = "";               //переменная для хранения ip устройства
char character;
boolean connected=false;      //флаг соединения WiFi 
static unsigned long time_fade;
int i=0;

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);
  for(int i=0;i<10;i++)
  {
    if(connectWiFi())
    {
      connected = true;
      break;
    }
  }
  if (!connected){while(1); }
  delay(2000);
}

void loop()
{
    if(millis()>time_fade)
    {
        i=i+1;
        String val="test "+String(i); 
        sendMSG(id,val,false);
        time_fade=millis()+5000; 
    }
}

/*функция отправки сообщения web-серверу*/
boolean sendMSG(String modul_id,String value,boolean startMSG)
{   
    String cmd = "AT+CIPSTART=1,\"TCP\",\"";
    cmd += DST_IP;
    cmd += "\",80";
    Serial1.println(cmd);
    Serial1.flush();  
    delay(100); 
    if(Serial1.find("OK"))        
    {
          String msg= "GET /ajax/arduino_read.php?act=";
          if(startMSG){msg+="new_w&id=";}else{msg+="s_t_h&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()); 
          if (Serial1.find(">"))
          {
              Serial1.print(msg);
              Serial1.flush(); 
              if(Serial1.find("SEND OK"))
              {
                  Serial.println("Send MSG: OK");
                  return true;
              }
              else
              {
                  Serial.println("Send MSG: ERROR >");    
                  return false;
              }
          }
          else
          {
                  Serial.println("Send MSG: ERROR AT+CIPSEND");    
                  return false;        
          } 
    }
    else
    {
        Serial.println("Send MSG: ERROR AT+CIPSTART"); 
        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=  "test_";
        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:

03.03.2015 15:54:34: Connecting to SmartHome
03.03.2015 15:54:42: Can not connect to the WiFi.
03.03.2015 15:54:42: Connecting to SmartHome
03.03.2015 15:54:45: OK, Connected to WiFi.
03.03.2015 15:54:46: IP Address: 192.168.0.3
03.03.2015 15:54:47: Starting TCP Server
03.03.2015 15:54:48: OK, Strart TCP Server
03.03.2015 15:54:49: Senting Startup info
03.03.2015 15:54:49: Send MSG: OK
03.03.2015 15:54:49: Startup info was send
03.03.2015 15:54:51: Send MSG: OK
03.03.2015 15:54:57: Send MSG: OK
03.03.2015 15:55:02: Send MSG: OK
03.03.2015 15:55:07: Send MSG: OK
03.03.2015 15:55:12: Send MSG: OK
03.03.2015 15:55:23: Send MSG: ERROR AT+CIPSEND
03.03.2015 15:55:28: Send MSG: OK
03.03.2015 15:55:33: Send MSG: OK
03.03.2015 15:55:38: Send MSG: OK
03.03.2015 15:55:44: Send MSG: OK
03.03.2015 15:55:49: Send MSG: OK
03.03.2015 15:55:54: Send MSG: OK
03.03.2015 15:56:00: Send MSG: OK
03.03.2015 15:56:05: Send MSG: OK
03.03.2015 15:56:10: Send MSG: OK
03.03.2015 15:56:17: Send MSG: OK
03.03.2015 15:56:22: Send MSG: OK
03.03.2015 15:56:28: Send MSG: OK
03.03.2015 15:56:33: Send MSG: OK
03.03.2015 15:56:38: Send MSG: OK
03.03.2015 15:56:43: Send MSG: OK
03.03.2015 15:56:49: Send MSG: OK
03.03.2015 15:56:54: Send MSG: OK
03.03.2015 15:56:59: Send MSG: OK
03.03.2015 15:57:09: Send MSG: ERROR AT+CIPSEND
03.03.2015 15:57:15: Send MSG: OK
03.03.2015 15:57:20: Send MSG: OK
03.03.2015 15:57:25: Send MSG: OK
03.03.2015 15:57:30: Send MSG: OK
03.03.2015 15:57:36: Send MSG: OK
03.03.2015 15:57:41: Send MSG: OK
03.03.2015 15:57:46: Send MSG: OK
03.03.2015 15:57:52: Send MSG: OK
03.03.2015 15:57:57: Send MSG: OK
03.03.2015 15:58:02: Send MSG: OK
03.03.2015 15:58:07: Send MSG: OK
03.03.2015 15:58:13: Send MSG: OK
03.03.2015 15:58:18: Send MSG: OK
03.03.2015 15:58:23: Send MSG: OK
03.03.2015 15:58:29: Send MSG: OK
03.03.2015 15:58:34: Send MSG: OK
03.03.2015 15:58:39: Send MSG: OK
03.03.2015 15:58:44: Send MSG: OK
03.03.2015 15:58:50: Send MSG: OK
03.03.2015 15:58:55: Send MSG: OK
03.03.2015 15:59:00: Send MSG: OK
03.03.2015 15:59:10: Send MSG: ERROR AT+CIPSEND
03.03.2015 15:59:21: Send MSG: OK
03.03.2015 15:59:26: Send MSG: OK
03.03.2015 15:59:33: Send MSG: OK
03.03.2015 15:59:39: Send MSG: OK
03.03.2015 15:59:45: Send MSG: OK
03.03.2015 15:59:55: Send MSG: ERROR AT+CIPSEND
03.03.2015 16:00:03: Send MSG: OK
03.03.2015 16:00:08: Send MSG: OK
03.03.2015 16:00:14: Send MSG: OK
03.03.2015 16:00:19: Send MSG: OK
03.03.2015 16:00:24: Send MSG: OK
03.03.2015 16:00:29: Send MSG: OK
03.03.2015 16:00:35: Send MSG: OK
03.03.2015 16:00:40: Send MSG: OK
03.03.2015 16:00:45: Send MSG: OK
03.03.2015 16:00:51: Send MSG: OK
03.03.2015 16:00:56: Send MSG: OK
03.03.2015 16:01:06: Send MSG: ERROR AT+CIPSEND
03.03.2015 16:01:16: Send MSG: OK
03.03.2015 16:01:21: Send MSG: OK
03.03.2015 16:01:26: Send MSG: OK
03.03.2015 16:01:31: Send MSG: OK
03.03.2015 16:01:37: Send MSG: OK
03.03.2015 16:01:42: Send MSG: OK
03.03.2015 16:01:47: Send MSG: OK
03.03.2015 16:01:53: Send MSG: OK
03.03.2015 16:02:03: Send MSG: ERROR >
03.03.2015 16:02:13: Send MSG: ERROR AT+CIPSTART
03.03.2015 16:02:23: Send MSG: ERROR AT+CIPSTART
03.03.2015 16:02:33: Send MSG: ERROR AT+CIPSTART
03.03.2015 16:02:43: Send MSG: ERROR AT+CIPSTART
03.03.2015 16:02:54: Send MSG: ERROR AT+CIPSTART
03.03.2015 16:03:04: Send MSG: ERROR AT+CIPSTART
03.03.2015 16:03:14: Send MSG: ERROR AT+CIPSTART
03.03.2015 16:03:24: Send MSG: ERROR AT+CIPSTART
03.03.2015 16:03:34: Send MSG: ERROR AT+CIPSTART
03.03.2015 16:03:44: Send MSG: ERROR AT+CIPSTART
03.03.2015 16:03:54: Send MSG: ERROR AT+CIPSTART
03.03.2015 16:04:05: Send MSG: ERROR AT+CIPSTART
03.03.2015 16:04:15: Send MSG: ERROR AT+CIPSTART
03.03.2015 16:04:25: Send MSG: ERROR AT+CIPSTART

Логи с web сервера:

SmartHome: 192.168.0.3 [03/Mar/2015:15:55:47 +0300] "GET /ajax/arduino_read.php?act=new_w&id=xx01&val=test_192.168.0.3 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:55:49 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 1 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:55:55 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 2 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:56:00 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 3 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:56:05 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 4 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:56:10 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 5 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:56:26 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 7 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:56:31 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 8 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:56:36 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 9 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:56:42 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 10 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:56:47 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 11 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:56:52 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 12 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:56:58 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 13 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:57:03 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 14 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:57:08 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 15 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:57:15 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 16 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:57:20 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 17 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:57:26 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 18 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:57:31 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 19 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:57:36 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 20 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:57:41 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 21 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:57:47 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 22 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:57:52 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 23 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:57:57 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 24 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:58:13 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 26 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:58:18 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 27 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:58:23 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 28 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:58:28 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 29 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:58:34 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 30 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:58:39 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 31 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:58:44 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 32 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:58:50 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 33 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:58:55 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 34 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:59:00 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 35 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:59:05 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 36 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:59:11 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 37 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:59:16 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 38 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:59:21 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 39 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:59:27 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 40 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:59:32 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 41 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:59:37 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 42 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:59:42 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 43 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:59:48 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 44 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:59:53 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 45 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:15:59:58 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 46 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:16:00:19 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 48 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:16:00:24 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 49 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:16:00:31 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 50 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:16:00:37 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 51 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:16:00:43 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 52 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:16:01:01 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 54 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:16:01:06 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 55 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:16:01:12 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 56 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:16:01:17 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 57 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:16:01:22 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 58 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:16:01:27 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 59 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:16:01:33 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 60 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:16:01:38 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 61 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:16:01:43 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 62 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:16:01:48 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 63 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:16:01:54 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 64 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:16:02:14 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 66 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:16:02:19 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 67 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:16:02:24 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 68 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:16:02:29 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 69 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:16:02:35 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 70 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:16:02:40 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 71 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:16:02:45 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 72 HTTP/1.1" 200 1 "-" "-"
SmartHome: 192.168.0.3 [03/Mar/2015:16:02:51 +0300] "GET /ajax/arduino_read.php?act=s_t_h&id=xx01&val=test 73 HTTP/1.1" 200 1 "-" "-"

Получается что спустя некоторое время отправки сообщений модуль перестает это делать. Количество удачных посылок каждый раз разное. Время между отправкой менял на 1 минуту, 5 минут - результат один и тотже: перестает отправлять.

При этом сам модуль доступен - он пингуется, telnet ом получается в него войти. Если отправлять команды из сервера, то они отлично принимаются и обрабатываются. Получается стабильный канал связи, но только в одну строну.

Бьюсь уже несколько дней, поэтому и решил написать сюда.

Может у кого есть стабильно рабочий кусок скетча отправки сообщений или какие-нибудь мысли по этому поводу???

dremdem
Offline
Зарегистрирован: 02.03.2015

Не претендую на какую-либо оригинальность, у меня есть франкенштейно-подобный кусок кода, который шлет на thingspeak.com показания от моего температурного датчика. 

Тестил несколько часов, потом ради интереса вместа USB-разьема воткнул крону в качестве питалова, она у меня исправно еще пару часов поработала, но т.к. крона была подубитая она как раз через пару часов и сдохла.

Могу выложить если интересно.

 

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

dremdem пишет:

Не претендую на какую-либо оригинальность, у меня есть франкенштейно-подобный кусок кода, который шлет на thingspeak.com показания от моего температурного датчика. 

Тестил несколько часов, потом ради интереса вместа USB-разьема воткнул крону в качестве питалова, она у меня исправно еще пару часов поработала, но т.к. крона была подубитая она как раз через пару часов и сдохла.

Могу выложить если интересно.

 

Выложи, если не сложно.

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

dremdem пишет:

Могу выложить если интересно.

А какая версия модуля у тебя и какая версия прошивки???

dremdem
Offline
Зарегистрирован: 02.03.2015

Версия ESP-05, прошивку сейчас не могу посмотреть, ночью как буду заниматься гляну. Но мне по большому счет пофик на прошивку у меня модуль не шьется без тонкого паяния (

 

Код:

#include <stdlib.h>
#include <SoftwareSerial.h>
#include <OneWire.h>
//#include <DallasTemperature.h>
//#define ONE_WIRE_BUS 8
//OneWire oneWire(ONE_WIRE_BUS);
//DallasTemperature sensors(&oneWire);
#define SSID "ЗДЕСЬ ИМЯ СЕТИ"
#define PASS "ПАРОЛЬ СЕТИ"
#define IP "184.106.153.149" // thingspeak.com
String GET = "GET /update?key=ЗДЕСЬ КЛЮЧ&field1=";
SoftwareSerial monitor(2, 3); // RX, TX
int tempPin = 3;
float temp;

void setup()
{
  monitor.begin(9600);
  Serial.begin(9600);
//  sensors.begin();
  sendDebug("AT");
  delay(5000);
  if(monitor.find("OK")){
    Serial.println("RECEIVED: OK");
    connectWiFi();
  }
}

void loop(){
 // sensors.requestTemperatures();
  //tempC = DallasTemperature::toFahrenheit(tempC);
  char buffer[10];
  temp = analogRead(tempPin);
  temp = temp * 0.48828125;
  String tempF = dtostrf(temp, 4, 1, buffer);
  updateTemp(tempF);
  delay(60000);
}

void updateTemp(String tenmpF){
  String cmd = "AT+CIPSTART=\"TCP\",\"";
  cmd += IP;
  cmd += "\",80";
  sendDebug(cmd);
  delay(2000);
  if(monitor.find("Error")){
    Serial.print("RECEIVED: Error");
    return;
  }
  cmd = GET;
  cmd += tenmpF;
  cmd += "\r\n";
  monitor.print("AT+CIPSEND=");
  monitor.println(cmd.length());
  Serial.print("SEND AT+CIPSEND=");
  Serial.println(cmd.length());
  delay(1000);
  if(monitor.find(">")){
    Serial.print(">");
    Serial.print(cmd);
    monitor.print(cmd);
  }else{
    sendDebug("AT+CIPCLOSE");
  }
  if(monitor.find("OK")){
    Serial.println("RECEIVED: OK");
  }else{
    Serial.println("RECEIVED: Error");
  }
}
void sendDebug(String cmd){
  Serial.print("SEND: ");
  Serial.println(cmd);
  monitor.println(cmd);
} 
 
boolean connectWiFi(){
//  monitor.println("AT+CWMODE=1");
//  delay(2000);
  String cmd="AT+CWJAP=\"";
  cmd+=SSID;
  cmd+="\",\"";
  cmd+=PASS;
  cmd+="\"";
  sendDebug(cmd);
  delay(10000);
  if(monitor.find("OK")){
    Serial.println("RECEIVED: OK");
    return true;
  }else{
    Serial.println("RECEIVED: Error");
    return false;
  }
}

 

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

Сдался вам этот сериал порт. Он жрет не померно рессурсов. Пока я у себя его не вырубил, были те же грабли. Без него уже месяц стабильно передает показания на "Народ". И скорость нужна 115200.

dremdem
Offline
Зарегистрирован: 02.03.2015

Jon2013 пишет:

Сдался вам этот сериал порт. Он жрет не померно рессурсов. Пока я у себя его не вырубил, были те же грабли. Без него уже месяц стабильно передает показания на "Народ". И скорость нужна 115200.

Сударь имеет ввиду, что послать саму ардуину и заливать программу в сам модуль ?

 

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

dremdem пишет:

Сударь имеет ввиду, что послать саму ардуину и заливать программу в сам модуль ?

Нет, я имею ввиду, что в приведенном скетче можно обойтись без монитора.

Данные отправлять по назначению через аппаратный порт и этого достаточно.

Зачем нужен монитор да еще и на аппаратном порту Ардуино? Только для того чтобы прочитать на экране "ОК" или"Error"?

Так подключи светодиод и пусть моргает, а всю эту красоту с надписами - в помойку.

dremdem
Offline
Зарегистрирован: 02.03.2015

Цитата:

Данные отправлять по назначению через аппаратный порт и этого достаточно.

Таки мои мозги чайника опять не догоняют.

Имеется ввиду воткнуть TX из ESP в Arduino RX а RX из ESP в Arduino TX, так ?

 

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

dremdem пишет:

Цитата:

Данные отправлять по назначению через аппаратный порт и этого достаточно.

Таки мои мозги чайника опять не догоняют.

Имеется ввиду воткнуть TX из ESP в Arduino RX а RX из ESP в Arduino TX, так ?

Да именно так. Только надо учесть что вначале по этим ТХ, RX в Ардуину заливается скетч, а модуль ESP подключаем после заливки. Ну и в самом скетче все команды отправляемые на модуль  переписать на Serial. 

А SoftSerial закоментировать.  А там где печаталось "ОК" - зажечь внутренний светодиод Ардуины (pin13). 

P.S. под рукой сейчас нет компилятора, чтобы набросать скетч.

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

dremdem пишет:

Версия ESP-05, прошивку сейчас не могу посмотреть, ночью как буду заниматься гляну. Но мне по большому счет пофик на прошивку у меня модуль не шьется без тонкого паяния (

Попробовал передачу через ваш скетч, только в строку запроса включил еще название хоста:
 

	  cmd = GET;
	  cmd += tenmpF;
          cmd+= " HTTP/1.1\r\nHost: ";
          cmd+= IP;
          cmd+=  ":80\r\n\r\n";

Гонял всю ночь- удачная отправка происходит ровно через одну попытку.

с утра убрал указание хоста, на сервере перенаправил запросы без указания хоста на свой  - пока все передается ровно.

Странно чем указание хоста так рушит отправку??!!

 

e3p7j
Offline
Зарегистрирован: 09.01.2015

NEGr пишет:

dremdem пишет:

Версия ESP-05, прошивку сейчас не могу посмотреть, ночью как буду заниматься гляну. Но мне по большому счет пофик на прошивку у меня модуль не шьется без тонкого паяния (

Попробовал передачу через ваш скетч, только в строку запроса включил еще название хоста:
 

	  cmd = GET;
	  cmd += tenmpF;
          cmd+= " HTTP/1.1\r\nHost: ";
          cmd+= IP;
          cmd+=  ":80\r\n\r\n";

Гонял всю ночь- удачная отправка происходит ровно через одну попытку.

с утра убрал указание хоста, на сервере перенаправил запросы без указания хоста на свой  - пока все передается ровно.

Странно чем указание хоста так рушит отправку??!!

 

Тоже проблема с нестабильной отправкой данных. 

Думаю, проблема не в указании хоста в запросе  -  а в длине отправляемых даных.

Попробуйте просто в цикле поэксперементировать с длиной отправляемого пакета.

Например у меня - при цикличной отправке даже одного байта и даже с таймаутом в 300 мс  не получается отправить даже 1кб.

Чем длинее пакет - тем скорее будут проблемы.

http://esp8266.ru/forum/threads/bag-v-proshivke-0-21-0-0.118/

Вот тут похожая проблема, правда на прием данных.

http://esp8266.ru/forum/threads/podderzhka-mqtt-v-nodemcu.72/

Вот тут про кривые библиотеки espconn.

Может быть, при использовании UDP таких проблем не будет, не знаю.

 

 

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

Проблема использования модуля с ардуиной в том, что вы формируете сообщение в ОЗУ, а его в ардуино на базе 328 м/к всего 2 кб, т.е. Вычитаем буфер UART и другие переменные и  получаем очень мало свободного ОЗУ... Небходимо данные читать из флешь, хотя и не всегда это реально..