• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Вопрос Реализация UDP между Ардуино и Компьютером.

Anton.M

New member
Всем Привет!
Собираю систему, которая будет регистрировать время события и передавать его в компьютер. Сейчас уперся уже в передачу данных, хочу реализовать это через UDP. Отправку данных с ардуино через esp8266 наладил, данные отображаются в программе на компьютере (через AT+CIPSEND), а вот устроить прием Ардуинкой команд и данных через +IPD у меня не получилось. Управление осуществляю через AT-команды.

Может кто-либо подсобить примером работы? Заранее спасибо!
 

Artur1985

New member
Сам занимаюсь аналогичным, но я только в начале пути, изучаю модуль ESP.

Если это одиночное подключение и IP и порты известны, то все просто. Пример - http://esp8266.ru/forum/threads/prozrachnyj-most-wifi-uart-na-esp2866.323/page-4, в примере ESP Wi-Fi клиент, при старте модуля подключается и создает соединение.

Еще, просто отправлял через сериал монитор, без автоматического подключения и создания соединения, но всегда знал IP и порт.
Создания соединение.
AT+CIPSTART="UDP","192.168.1.100",8888,8888,0

4-тый параметр это локальный порт UDP, IP для ESP устанавливал вручную
AT+CIPSTA_DEF="192.168.1.108","192.168.1.1","255.255.255.0"
Указываете в программе, которая шлет данные IP и этот порт и Ардуина получит данные.

И сама отправка, в 2 варианта, в основном сквозной и обычный, но через команду AT+CIPSEND, с +IPD не пользовался.
 

Anton.M

New member
Чтоб темы не плодить, продолжу тут
Не могу я так данные получить, что-то мешает... Причём и подключится адекватно не могу.
Имеются: Arduino Uno R3, ESP-201 и LCD KeyPad Shield.
Вот мой код:
Код:
#include <ESP8266wifi.h>
#include <SoftwareSerial.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
SoftwareSerial dbgSerial(3, 2); /* RX:D3, TX:D2 */

int dataip;


void setup() {
{
  lcd.begin(16, 2);              // старт библиотеки дисплея
  Serial.begin(115200);
  Serial.setTimeout(5000);
  Serial.println("AT+RST"); // сброс и проверка, если модуль готов
  delay(1000);
  if(Serial.find("ready")) {
    lcd.print("WiFi is ready");
  }else{
    lcd.print("Module dosn't respond.");
    while(1);
  }
  delay(1000);
  Serial.println("AT+CIPMUX=0"); // установка в режим одиночного соединения
  delay(3000);
  Serial.println("AT+CWJAP=\"testWIFI\",\"pass123\""); // подключение к сети
  delay(5000);
  if(Serial.find("OK")) {
    lcd.print("                  ");
    lcd.setCursor(0,0);
    lcd.print("WiFi connected");
  }else{
    lcd.print("                  ");
    lcd.setCursor(0,0);
    lcd.print("Network dosn't connected.");
    while(1);
  }
  delay(5000);
  Serial.println("AT+CIPSTA=?"); // отобразить полученный от станции адрес
 
  char inChar[30] = "                              ";
  byte z = 0;
  while (Serial.available()) {
  inChar[z] = Serial.read();
  z++;
}
 
  lcd.print("            ");
  lcd.setCursor(0,0);
  lcd.print(z,DEC); //вывод ответа на дисплей
  lcd.setCursor(0,1);
  lcd.print(inChar);
}
}



void loop() {
  // put your main code here, to run repeatedly:

}
В итоге, у меня приходят лишь последние строки (AT+CIPSTA=?) и ответа так и не следует. UDP естественно тоже никак... Подскажите, спецы, что я не так делаю.......
 

Anton.M

New member
Подход у вас неперспективный: на AT прошивке и [inline]delay[/inline] стабильной работы очень трудно добиться
В каком векторе мне тогда двигаться? На Ардуине у меня стоит система высокоточного отсчета, и по идее, по событию, у меня время события должно уходить по UDP в компьютер. Через Serial, естественно, всё работало. Сейчас надо заменить провода на беспроводную связь....
 

Victor

Administrator
Команда форума
В каком векторе мне тогда двигаться?
Если совсем не хотите отказываться от Arduino UNO как устройства, то разработать собственный протокол обмена данными между Arduino UNO и ESP8266, в ESP8266 скетч будет из двух логических частей: прием от Arduino и отправка данных по WiFi куда вам нужно.
Более логичный вариант: использовать ESP8266 и как контроллер и как WiFi без Arduino UNO, тогда протокол обмена уже не нужен: берем данные и отправляем.

Но сначала вам нужно еще почитать и понять как все работает. Вы скетч свой заливали в Arduino UNO, а библиотеку [inline]ESP8266wifi.h[/inline] для ESP8266 использовали. Смысл этой библиотеки в том, что с помощью Arduino IDE и ESP8266 Community edition скетч заливается прямо в esp8266 и заменяет существующую в ней прошивку на свою, состоящую из вашего скетча и SDK. А Arduino, как устройство не используется вообще.
http://esp8266.ru/arduino-ide-esp8266/
 

Anton.M

New member
Ну, тут то все просто..
Надо вместо AT+CIPSTA=? писать AT+CIPSTA?
Не в этом дело было, ну да ладно.

Задача посложнее теперь. UDP поднялся, и сейчас проблема такова. Есть в параметрах такая штука как AT+CIPMODE, и у нее есть 2 режима - установить обычный режим, и установить сквозной (так называемый unvarnished transmission mode).

Включаю первый (обычный) режим - посылаю строчку в виде:
Код:
AT+CIPMODE=0
AT+CIPSEND=10
Module OK.
Все доходит до компьютера. С компьютера посылаю строчку "md1.start", в Ардуино приходит "+IPD,9:md1.start". Не тот формат что нужно....
9_qkB3dTRLQ[1].jpg


Включаю второй (сквозной режим). Отличается он тем, что указывать длину посылки не нужно, и оканчивается передача набором "+++".
Код:
AT+CIPMODE=1
AT+CIPSEND
Module OK.
И нифига не приходит. При этом, если пытаешься тоже самое проделать через монитор, он просто не вводит значения. Не появляется после ">" ничего....
Снимок.JPG

Но, если через UDP посылаешь строку на Ардуино, она отлично отображается без всякого лишнего мусора.
EGdeKTI1I5U[1].jpg

Вопрос - куда копать? Почему не уходят посылки в AT+CIPMODE=1?
Заранее спасибо за ответы....
 

fandy

Member
Так эха же нет, ничего в мониторе и не увидите.
Вопрос почему удаленный комп данные не получает..

Я использую TCP в прозрачном режиме. Там единственная проблема, ограничение TCP буфера 200 байт.
А так, пашет.
 
Сверху Снизу