Вопрос Передача данных с помощью ESP-12E между датчиком и модулем управления
Имеется модуль управления (ДЭЛ-140) и датчик нагрузки (ДН130). Они связаны проводом — интерфейс связи RS485, а протокол передачи информации ModBus. Также имеются 2 модуля ESP-12E (ESP8266 Nodemcu) и 2 трансивера MAX485. Можно ли связать модуль управления и датчик по Wi-Fi с помощью еспшек? Если возможно, есть ли похожие примеры?
pvvx
Активный участник сообщества
Если возможно, есть ли похожие примеры?
Karsh
New member
К несчастью, в моём случае используется Modbus ASCII. Можно ли переделать ваш проект под ASCII или прошивку надо будет писать с нуля?
pvvx
Активный участник сообщества
К несчастью, в моём случае используется Modbus ASCII. Можно ли переделать ваш проект под ASCII или прошивку надо будет писать с нуля?
Для Modbus ASCII моя прошивка ModbusTCP не годится. Может возможно приспособить прошивку TCP2UART (попробовать), но желательно взять что-то проще и написать самому. Тут всё зависит хотите ли вы поддерживать стандарты или достаточно поддержки только каких-то частей для стыковки с уже имеющимся внешним ПО.
Karsh
New member
Для Modbus ASCII моя прошивка ModbusTCP не годится. Может возможно приспособить прошивку TCP2UART (попробовать), но желательно взять что-то проще и написать самому. Тут всё зависит хотите ли вы поддерживать стандарты или достаточно поддержки только каких-то частей для стыковки с уже имеющимся внешним ПО.
Поскольку я новичок в этом деле, можете посоветовать с чего начать изучение/написание прошивки? Или может на ардуино будет проще написать,например, на базе такой прошивки?
Arduino.ru
Пользует ли кто WiFi-модули ESP8266 ? Поделитесь впечатлениями.
- Войдите на сайт для отправки комментариев
1227 ответов [Последнее сообщение]
Вс, 15/02/2015 — 20:13
Зарегистрирован: 09.03.2014
trembo пишет:
А мне понравились гребёнки напаянные на StepDown. Класс! И прямо проводки от бредборда втыкать! Сам не догадался, всегда что-то припаивал.
Их же можно ещё и параллелить .
По теме безпроводностей. Их есть у меня. Шлейфы двухрядные куча от старых COM портов с материнок. Я их все выкидываю выкидавю, а они все не кончаются.

- Войдите на сайт для отправки комментариев
Вс, 15/02/2015 — 22:20
Andrey_Y_Ostanovsky
Зарегистрирован: 03.12.2012
sav13 пишет:
GPIO15 на землю
CH_PD к VCC через резистор
Внешнее питание 3.3В
Скорость 9600
GPIO15 на землю пробовал, а вот CH_PD через резистор (10К?) нет, спасибо за подсказку, попробую.
- Войдите на сайт для отправки комментариев
Втр, 17/02/2015 — 01:07
Зарегистрирован: 28.01.2015
Попробовал подключить ESP модуль к доп питанию и все-равно после отправки ответа на первый запрос модуль зависал. Изначально работал с модулем через библиотеку WiFi. Потом решил загрузить скетч, который делает прямые перенаправления между серийными портами и попробовать пописать ответы на запросы в ручную. Выяснил, что при отправке команды AT+CIPCLOSE модуль возвращает кракозябры и после этого виснет.
В итоге, я вообще написал свои методы для инициализации WiFi и обработки запросов без отправки команды AT+CIPCLOSE. Соединение и так закрывается автоматом, т.к. отправляю в заголовке Connection: close. Модуль теперь работает почти без зависаний. Только, если одновременно два запроса приходит, то может подвиснуть. Но я его периодически пингую командой AT, и, если он не отвечает, то перезазгружаю модуль и заново запускаю веб-сервер.
Модуль сейчас работает на питании от arduino nano.
- Войдите на сайт для отправки комментариев
Ср, 18/02/2015 — 10:45
Зарегистрирован: 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 при питании от внешнего источника?
- Войдите на сайт для отправки комментариев
Ср, 18/02/2015 — 11:29
Зарегистрирован: 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 ?
- Войдите на сайт для отправки комментариев
Ср, 18/02/2015 — 11:31
Зарегистрирован: 09.01.2015
- Войдите на сайт для отправки комментариев
Ср, 18/02/2015 — 12:23
Зарегистрирован: 09.11.2012
e3p7j пишет:
Тогда все непонятно.
А если SoftwareSerial перевесить на другие пины (8,9 например) ?
И залить что-то вроде
и посмотреть из монитора порта ?
- Войдите на сайт для отправки комментариев
Ср, 18/02/2015 — 13:25
Зарегистрирован: 09.01.2015
Ну можно поэксперементировать с номерами пинов.
Вроде подключал еще к каким-то двум пинам — результат тот-же был.
- Войдите на сайт для отправки комментариев
Ср, 18/02/2015 — 14:01
Зарегистрирован: 09.01.2015
Вообще не понимаю как люди используют esp без внешнего питания.
Я когда подключил esp к Uart на 3.3v — у меня Uart после подключения к компьютеру работал пару секунд и отвалиывался (исчезал ком порт). После добавление конденсатора на 1000мкФ постабильней стало- но программы наподобие Termiteпозволяли работать с esp пару минут, как правило, но не всегда, после попытки отправить данные или при запросе найденных AP esp переставал отвечать на команды.
Проблема решалась переоткрытием порта. Подумал, что виною всему кривые руки программистов программ наподобие T ermite . Однако ж нет. Например я несколько дней искал у себя в коде ошибки, приводящие к перезапуску Arduino, причем перезапуск мог произойти в любой момент, но чаще всего при отправке данных (esp как Server), пока случайно не забыл подключить esp к rx, tx Arduino и не увидел, что перезапуски все равно происходят (питание Arduino и esp по соседним usb портам). Нормального питания под рукой не было и я в порыве отчаяния подключил к esp еще один конденсатор на 1000мкФ ))
Если предположить, что для esp куплю нормальное отдельно питание — вопрос остается открытым с Software Serial /HardwareSerial
- Войдите на сайт для отправки комментариев
Ср, 18/02/2015 — 15:49
Зарегистрирован: 28.01.2015
Мне на 2-3 пинах тоже не удавалось поднять Software Serial. А вот на 8-9 работает нормально. К нему подключаю терминал для отладки. А к Hardware Serial подключаю ардуино. Оба порта запускаю на скорости 9600.
- Войдите на сайт для отправки комментариев
Ср, 18/02/2015 — 17:26
Зарегистрирован: 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мА.
- Войдите на сайт для отправки комментариев
Ср, 18/02/2015 — 16:01
Зарегистрирован: 09.01.2015
Пины 0, 1 работают нормально без подключения usb кабеля — то есть при питании от внешнего источника, не пробовали?
- Войдите на сайт для отправки комментариев
Чт, 19/02/2015 — 12:11
Зарегистрирован: 20.02.2014
Помогите разобраться
ESP01
питание 3.3 (1117) брал +5в как от Arduino так и от ATX (5A)
Взял пример из этого топика:
#include #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) 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 ?
- Войдите на сайт для отправки комментариев
Чт, 19/02/2015 — 12:18
Зарегистрирован: 20.02.2014
пока писал пост, на мониторе постоянно проскакивали сообщение об не успешной отправке. и тут внезапно 2 сообщения, что прошло успешно.
Получается не стабильность или с delay надо баловаться?
Версия прошивки: 0.9.2.4
- Войдите на сайт для отправки комментариев
Чт, 19/02/2015 — 12:57
Зарегистрирован: 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 , кстати, много полезного пишут.
- Войдите на сайт для отправки комментариев
Чт, 19/02/2015 — 13:29
Зарегистрирован: 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] > 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)
- Войдите на сайт для отправки комментариев
Чт, 19/02/2015 — 13:24
Зарегистрирован: 09.01.2015
>>> т.е. не срабатывает if(ESPSerial.find(«>»)) (строка 054)
подскажите, что это может быть?
И почему не срабатывает if(ESPSerial.find(«OK»)) (строка 092)
Возможно, к тому поменту, когда программа ищет ожидаемые данные в порту, их еще нет.
И, кстати, если я правильно понимаю функцию find — после ее выполнения данные очищаются в порту, то есть, для одного байта с таймаутом на чтение прокатит — то при ожидании строки может не прокатить — например, «O» будет в буффере при первом обращении к
find, а «K» во втором.
- Войдите на сайт для отправки комментариев
Чт, 19/02/2015 — 13:39
Зарегистрирован: 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; >>
- Войдите на сайт для отправки комментариев
Чт, 19/02/2015 — 13:55
Зарегистрирован: 09.01.2015
>>>В таком варианте работает постабильнее
А Вы не пробовали отправлять в цикле сообщения, например по 10 байт и например раз 100?
У меня после отправки суммарно (по разному) от 30 до 600 байт отваливался esp, но видимо из-зи проблем с питанием
- Войдите на сайт для отправки комментариев
Чт, 19/02/2015 — 13:59
Зарегистрирован: 20.02.2014
Да, питание требует стабильности
- Войдите на сайт для отправки комментариев
Пт, 20/02/2015 — 19:40
winoveritas
Зарегистрирован: 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; >>
- Войдите на сайт для отправки комментариев
Пт, 20/02/2015 — 22:34
Зарегистрирован: 09.11.2012
Простите, а чем конструкция
tmr = millis();
while (tmr + 2000 > millis())
[ Я тоже не люблю delay(), но не до такой степени )) ]
- Войдите на сайт для отправки комментариев
Сб, 21/02/2015 — 15:56
winoveritas
Зарегистрирован: 15.12.2014
delay(2000); остановит проц впустую, а в вышеприведенную конструкцию можно вставить выполнение какого-то другого кода или процедуры, так планирую сделать поэтому сразу вставил.
- Войдите на сайт для отправки комментариев
Сб, 21/02/2015 — 16:40
Зарегистрирован: 09.11.2012
winoveritas пишет:
в вышеприведенную конструкцию можно вставить выполнение какого-то другого кода
Спасибо, я так и думал.
- Войдите на сайт для отправки комментариев
Пнд, 23/02/2015 — 19:14
Зарегистрирован: 23.02.2015
А обновить модуль, подключенный к ардуине, не меняя схему, как понимаю, нельзя?
- Войдите на сайт для отправки комментариев
Пнд, 02/03/2015 — 11:46
Зарегистрирован: 02.03.2015
Всем добрый день !
Прикупил на али ESP-05 ( Почему — не спрашивайте, так получилось ))
Модуль завелся, правда пришлось делать питание через регулятор, просто через выход ардуины 3.3 вольта очень уж грелся.
Вопрос в следующем:
Как можно реализовать работу через SoftwareSerial с NTP ( серверами точного времени ) ?
Я с UDP да и по большому счету чайник, поэтому не знаю с какой стороны подступиться.
Есть примеры работы с NTP в ардуине через стандартные библиотеки ВайФай и Эзернет шилды, но как это реализовать в нашем случае через SowtwareSerial я не представляю.
UPD соединение с NTP-серваком я открываю, запрос ему посылаю, а вот как обратно UDP-пакет получить и его распарсить пока непонятно.
- Войдите на сайт для отправки комментариев
Пнд, 02/03/2015 — 13:01
Зарегистрирован: 09.11.2012
В свежей АТ-прошивке появилась команда
AT+CIPNTP= , 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 Вам будет сложнее, чем другие исполнения.
- Войдите на сайт для отправки комментариев
Пнд, 02/03/2015 — 13:06
Зарегистрирован: 27.01.2015
передача (сырых) данных между двумя модулями ESP8266 возможноли это ?
интересует возможен ли режим работы у данных модулей как у модуля NRF24
передающий модуль должен ПОСТОЯННО передавать в эфир данные без всяких приемных устройств,
тобиш тупая передача без всяких клиентов и серверов
может есть прошивки которые позволяют это реализоать?
режим точки доступа с вещанием ssid не предлагать
требуется для работы в режиме генератора вч на 2.4ггц для настройки фидерной системы
сначала думал использовать NRF24 но у них оказалась слишком малая выходная мощьность (возможно только у маих экземпляров ) примерно 20мвт а мне надо не менее 80
- Войдите на сайт для отправки комментариев
Пнд, 02/03/2015 — 13:17
Зарегистрирован: 02.03.2015
Araris пишет:
В свежей АТ-прошивке появилась команда
AT+CIPNTP= , 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, но не знаю насколько это поможет.
- Войдите на сайт для отправки комментариев
Пнд, 02/03/2015 — 13:21
Зарегистрирован: 11.03.2013
Можно написать простейшую отсылалку пакетов UDP в эфир и возможно будет что-то передавать, но есть сомнения. Т.к. wi-fi все же не будет запущен и TCP тут вроде как не работает..
А NRF24 существуют кстати варианты с усилителем.
Прошить модули без выведеного GPIO0 нельзя, но можно попробовать подпаятся к нему..
- Войдите на сайт для отправки комментариев
Пнд, 02/03/2015 — 13:23
Зарегистрирован: 09.11.2012
Vладимир пишет:
передающий модуль должен ПОСТОЯННО передавать в эфир данные без всяких приемных устройств,
тобиш тупая передача без всяких клиентов и серверов
может есть прошивки которые позволяют это реализоать?
режим точки доступа с вещанием ssid не предлагать
требуется для работы в режиме генератора вч на 2.4ггц для настройки фидерной системы
«без всяких клиентов и серверов» не бывает.
В качестве непроверенной мысли: 1. Поднять точку доступа; 2. Поднять UDP-клиент на 192.168.4.255; 3. Бродкастить с него UDP-пакеты.
В зависимости от левела это можно попробовать и на АТ-командах с Ардуино, и на NodeMCU+Lua, и прочими разными способами.
UPD: Упс, MaksMS опередил.. ))
- Войдите на сайт для отправки комментариев
Пнд, 02/03/2015 — 13:29
Зарегистрирован: 27.01.2015
так у меня nrf24L+
с внешними антеннами а поверметр выдает на них всего 18-22мвт
тоже мерило но на esp8266 показывает порядка 100мвт
- Войдите на сайт для отправки комментариев
Пнд, 02/03/2015 — 13:30
Зарегистрирован: 02.03.2015
Araris пишет:
, правда перепрошить ESP-05 Вам будет сложнее, чем другие исполнения.
дядька в предпоследнем посте сделал код такой же как я и )) С тем же результатом.
- Войдите на сайт для отправки комментариев
Пнд, 02/03/2015 — 13:31
Зарегистрирован: 11.03.2013
Не только должна быть внешняя антенна, но и усилитель — на плате видно еще одну микросхему дополнительную..
- Войдите на сайт для отправки комментариев
Пнд, 02/03/2015 — 13:33
Зарегистрирован: 02.03.2015
MaksMS пишет:
Можно написать простейшую отсылалку пакетов UDP в эфир и возможно будет что-то передавать, но есть сомнения. Т.к. wi-fi все же не будет запущен и TCP тут вроде как не работает..
А NRF24 существуют кстати варианты с усилителем.
Прошить модули без выведеного GPIO0 нельзя, но можно попробовать подпаятся к нему..
Ой не, это не про меня. Я и в стандартные дырки с трудом гребенку впаял, а в ту мелкотню которая SMD это для меня как параллельные миры ))
- Войдите на сайт для отправки комментариев
Пнд, 02/03/2015 — 13:36
Зарегистрирован: 27.01.2015
MaksMS пишет:
Не только должна быть внешняя антенна, но и усилитель — на плате видно еще одну микросхему дополнительную..
приду домой сфоткаю , выложу сюда
- Войдите на сайт для отправки комментариев
Втр, 03/03/2015 — 07:23
Зарегистрирован: 27.01.2015
чтото не хочет меня на сайт пускать с домашнего компа ((.
посмотрел ,на плате NRF24 два чипа , один из которых усилок.
народ а здесь на сайте нет одельной темы по NRF24 ?? чтото я не нашёл .
- Войдите на сайт для отправки комментариев
Втр, 03/03/2015 — 17:02
Зарегистрирован: 12.05.2014
Всем добрый день.
Возникла неожиданная проблема( или когда речь идет о ESP8266, вернее говорить очередная).
И так. Вводные данные:
Модуль esp8266 07
Arduino pro micro
Питание для модуля отдельное( хотя пробывал питать и от arduino)
Проблемма с отправкой данных от модуля к серверу.
#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 устройства //блок с переменными 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) 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)else 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='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"))else 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 ом получается в него войти. Если отправлять команды из сервера, то они отлично принимаются и обрабатываются. Получается стабильный канал связи, но только в одну строну.
Бьюсь уже несколько дней, поэтому и решил написать сюда.
Может у кого есть стабильно рабочий кусок скетча отправки сообщений или какие-нибудь мысли по этому поводу.
Обмен данными между устройствами ESP8266
В прошивке ESP Easy есть возможность передачи данных с одного устройства на другое, не используя MQTT сервер. Можно организовать UDP сеть между ESP модулями и устройствами Sonoff.
Пример 1: Передача данных с датчика температуры, который находиться на улице. Датчик передает данные на второй модуль с дисплеем, который, в свою очередь, находится дома.
Пример 2: Вчера я показал как просто создавать автоматизации в самой ESP Easy. Так вот, мы передаем данные с одного модуля, и строим автоматизации уже на втором.
Примеров может быть огромное количество, описывать их не буду, думаю каждый из Вас сможет найти этому свое применение.
Настройка сети
Как прошивать модули ESP8266 прошивкой ESP_Easy рассказывать я не стану, все это есть в моих предыдущих статьях. Перейдем сразу к настройке сети между модулями.


Перезагружаем все наши ESP8266 устройства. Отрываем вкладку Main и видим перечень устройств, которые объединились в сеть, их ip адреса и Unit.

Передача данных
Прямо из этого списка переходим на устройство, которое будет отправлять данные. Во вкладке «Devices» создаем привычное нам устройство (желательно под позицией 12), в разделе «Data Acquisition», ставим галочку «Send to Controller» напротив нашего контроллера P2P.

Прием данных
После того как мы создали данное устройство, на всех модулях ESP8266 автоматически появится такое же устройство, с тем же именем и тем же порядковым номером. Дополнительно для получения данных ничего настраивать не нужно.
Arduino.ru
Есть два модуля ESP8266. Соеденил их между собой по WI-FI. Но вот не как не разберусь как передать данные с одного модуля на другой. Задача передать данные с датчиков с одногомодуля на другой. Делал при помощи AT команд на прошивках которые идут с модулями все работает. Но в Arduino запутался и уперся в стену.
Нашел что есть такие команды. Посмотрите правильно ли я понял их синтаксис написания.
udp.beginPacketMulticast(addr, port, WiFi.localIP()) эу пишем в передающем модуле
addr — это IP адрес принимающего модуля
port — открытый порт
WiFi.localIP() — IP модуля передающего данные
udp.beginMulticast(WiFi.localIP(), multicast_ip_addr, port) — эту пише в принимающем модуле.
WiFi.localIP() — IP модуля принимающего
multicast_ip_addr — IP адрес откуда принимаем
port — открытый порт
Этими командами мы настравиваем прием и передачу, а вот как передавать , какими командами?
Т.к должно же быть указанно откуда эти данные брать.
Как указывается конец передачи ? Этого я не смог найти. И где можно более подробно прочитать про команды передачи данных иодуля ESP8266 по WI-FI.
- Войдите на сайт для отправки комментариев
Пнд, 14/12/2015 — 00:24
Зарегистрирован: 17.11.2015
Накидал вот такой код в принимающем модуле:
#include #include //********************************Изменить для себя *********** #define AP_SSID "name" // Логин к вашему WiFi(кавычки оставить) #define AP_PASS "password" //Пароль у вашему WiFi #define TIMEZONE 3 // Часовой пояс const char* SSIDDAT = "Datchik"; // имя сети к которой будет подключаться втророй модуль изменить на желаемую const char* PASSSIDDAT = "oPeNseT1"; // пароль сети к которой будет подключаться втророй модуль изменить на желаемый //************************************************************* char packetBuffer[255]; //buffer to hold incoming packet char ReplyBuffer[] = "acknowledged"; // a string to send back char ssid[] = ""; char pass[] = ""; const char* error = "E0_"; unsigned int localPort = 2590; // local port to listen for UDP packets const int byte_am2321 = 10; byte packet_am2321[ byte_am2321]; WiFiUDP Udp; void setup() < Serial.begin(9600); delay(1000); WiFi.mode( WIFI_AP_STA); // режим точки и клиента WiFi.softAP( SSIDDAT,PASSSIDDAT); // Соединение с WiFi if( !ConnectWiFi(AP_SSID,AP_PASS) ) < error = "E1_"; // неудачное подключение WiFi >else error = "E2_"; // удачное подключение WiFi Serial.print('A'); // _ означает начало строки с данными Serial.print(error); // выдача в порт информации об ошибке delay(1000); Udp.begin(localPort); > //########################################### // Основная программа void loop() < int packetSize = Udp.parsePacket(); if (packetSize) < Serial.print("Received packet of size "); Serial.println(packetSize); Serial.print("From "); IPAddress remoteIp = Udp.remoteIP(); Serial.print(remoteIp); Serial.print(", port "); Serial.println(Udp.remotePort()); // чтение пакета int len = Udp.read(packetBuffer, 255); if (len >0) < packetBuffer[len] = 0; >Serial.println("Contents:"); Serial.println(packetBuffer); // отправка принятого пакета Udp.beginPacket(Udp.remoteIP(), Udp.remotePort()); Udp.write(ReplyBuffer); Udp.endPacket(); > > //#################################### /** * Соединение с WiFi */ bool ConnectWiFi(const char *ssid, const char *pass) < // Три попытки соединения по WiFi for( int i=0; idelay(1000); > > return false; >
И такой код для передающего модуля. Этот модуль читает данные с датчика AM2321 и должен отправлять на второй модуль ESP8266
#include #include #include #include #include //********************************Изменить для себя *********** #define AP_SSID "Datchik"//"Datchik" // Логин к вашему WiFi(кавычки оставить) #define AP_PASS "oPeNseT1"//"oPeNseT1" //Пароль у вашему WiFi //********************************************************* unsigned int localPort = 2590; char ssid[] = ""; char pass[] = ""; const char* error = "E0_"; const char* buffer_data =""; const int NTP_PACKET_SIZE = 48; byte packetBuffer[ NTP_PACKET_SIZE]; IPAddress ip_test (192, 168, 4, 1); WiFiUDP Udp; void setup() < Wire.begin(); // подключение к шине i2c Serial.begin(9600); // запуск последовательного порта WiFi.mode( WIFI_AP_STA); // WiFi.mode( WIFI_STA); // режим клиента // WiFi.softAP( SSIDDAT,PASSSIDDAT); // Соединение с WiFi if( !ConnectWiFi(AP_SSID,AP_PASS) ) < error = "E1_"; // неудачное подключение WiFi >else error = "E2_"; // удачное подключение WiFi Serial.print("\r\n A"); // А - начало строки, _ означает конец строки с данными Serial.print(error); // выдача в порт информации об ошибке Udp.begin(localPort); // открываем порт > void loop() < AM2321 th; th.read(); if (Udp.beginPacket(ip_test, localPort)) //устанавливаем соединение с удаленным устройством < Serial.println ("IP OK"); >else Serial.println ("IP Error"); Udp.write(th.temperature); // отправляем температуру Udp.endPacket(); Udp.beginPacket(ip_test, localPort); Udp.write(th.humidity); // отправляем твлажность Udp.endPacket(); Udp.stop(); //Разрывает соединение с сервером, освобождая все ресурсы, используемые во время UDP-сессии. Serial.print("Temp: "); Serial.print(th.temperature/10.0); // температура Serial.print(",Vlaga: " ); Serial.print(th.humidity/10.0); // Влажность Serial.print ("\r\n"); ESP.deepSleep(900*1000000,WAKE_RFCAL); // время сна 30 минут > //###################################### /** * Соединение с WiFi */ bool ConnectWiFi(const char *ssid, const char *pass) < // Три попытки соединения по WiFi for( int i=0; idelay(500); > > return false; >
Проблема в том что в передающем модуле какой бы я не задал IP адрес всегда пишет что «IP OK». При задании правильного адреса данные не приходят на второй модуль. Второй модуль соответственно молчит т.к нет принимаемых данных. Подскажите где я напортачил ?
- Войдите на сайт для отправки комментариев