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

Решено Передача данных на компьютер по UDP

Abel

New member
Доброго времени суток! Есть скетч(1) Esp8266 который принимает данные от ардуино и передает их в браузер. Требуется передать это значение val в серийный порт по wi-fi. Я так понял, что с esp на пк значения будут передаваться по udp, а уже потом в серийный порт, но когда я пытаюсь использовать класс WiFiUDP компилятор выдает ошибку для платы Esp8266
(1)
Код:
#include <SoftwareSerial.h>
SoftwareSerial programSerial(10, 11);
int incomingByte = 0, incomingByte1 = 0;
char str[10];
char instr[10];

void setup() 
{
  programSerial.begin(57600);
  Serial.begin(57600);
}

void loop() 
{    
  int i = 0;
  incomingByte = analogRead(0);
  itoa(incomingByte, str, 10);//преобразуем incomingByte в символьный массив для передачи
  programSerial.write(str, sizeof str);
  while(programSerial.available()==0)
  {delay(1);}
  if(programSerial.available()>0)
  {
    while(programSerial.available()>0 && i<10)
    {
      delay(1);
      incomingByte1=programSerial.read();
      instr[i]=incomingByte1;
      i++;
    }
  }
  if(i!=0)
  {
    int val=atoi(instr);//преобразуем полученный из порта массив в число
    Serial.println(val);
  }
}

(2)
Код:
#include <SPI.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <WiFiServer.h>
#include <WiFiUdp.h>
#include <string.h>
int incomingByte = 0;
char str[10]; 
char outstr[10];  
const char* ssid = "ithome-nn.ru";
const char* password = "9519178980";

WiFiServer server(80);
WiFiUdp Udp;
void setup() 
{
  Serial.begin(57600);
  delay(10);  
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) 
  {delay(500);}
  server.begin();
  Udp.begin(5555);
}

void loop() 
{ 
  WiFiClient client = server.available();
  int i=0;
  while(Serial.available()==0)//ждем данных из порта
  {delay(1);}
  if(Serial.available()>0)
  {
    delay(1);
    while(Serial.available()>0 && i<10)
    {
      delay(1);
      incomingByte=Serial.read();
      str[i]=incomingByte;
      i++;
    }
  }
  if(i!=0)
  {
    int val=atoi(str);//преобразуем символьный массив str в число val 
    itoa(val, outstr, 10);//преобразуем число val в символьный массив для отправки
    Serial.write(outstr, sizeof outstr);
    String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n<head>\r\n<meta http-equiv='Refresh' content='0.01' />\r\n";
    s += val;
    s += "</html>\n";
    Upd.beginPacket(Udp.remoteIP(), Udp.remotePort());
    Udp.write(outstr, sizeof outstr);
    Udp.endPacket();
    client.print(s);
    delay(1);
  }
}
Собственно вопрос: как организовать передачу значения val по wi-fi?
 

Maxim Zhuravlev

New member
У меня такой кусок кода отлично работает

Код:
unsigned long time_out;
memset(net_buffer, 0, 128);
net_buffer[0] = 0;
net_buffer[1] = 0;
net_buffer[2] = 0;
net_buffer[3] = mac[WL_MAC_ADDR_LENGTH - 6];
net_buffer[4] = mac[WL_MAC_ADDR_LENGTH - 5];
net_buffer[5] = mac[WL_MAC_ADDR_LENGTH - 4];
net_buffer[6] = mac[WL_MAC_ADDR_LENGTH - 3];
net_buffer[7] = mac[WL_MAC_ADDR_LENGTH - 2];
net_buffer[8] = mac[WL_MAC_ADDR_LENGTH - 1];
if (DEFAULT_DEBUG) {
Serial.print(" : ");
for (int i=0; i<9; i++) {
Serial.print(net_buffer[i], HEX);
Serial.print(":");
}
}
net_tube.beginPacket("192.......", localPort);
net_tube.write(net_buffer, 128);
net_tube.endPacket();
memset(net_buffer, 0, 128);
if (DEFAULT_DEBUG) {
Serial.println(" Sended ... ");
}
time_out = millis();
do {
  packetSize = net_tube.parsePacket();
   }
while ((packetSize != 128) or ((millis()-time_out) < 5000));

if (packetSize == 128) {
int len = net_tube.read(net_buffer, 128);
if (DEFAULT_DEBUG) {
Serial.print("...  : ");
for (int i=0; i<4; i++) {
Serial.print(net_buffer[i], HEX);
Serial.print(":");
}
}
if ((net_buffer[0] == 255) && (net_buffer[1] == 0) && (net_buffer[8] == (net_buffer[9] + net_buffer[10]))) {
scena = net_buffer[11];
}
else {
  scena=0;
}
}
else {
if (DEFAULT_DEBUG) {
Serial.print("Time Out ...  : ");
}
 
}

if (DEFAULT_DEBUG) {
Serial.print("  scena : ");
Serial.println(scena);
}
 
Сверху Снизу