рекомендую почитать это:
Без проводов (2.4 ггц)
Без проводов (2.4 ггц)
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
unsigned int localPort = 50000; // local port to listen for UDP packets
const int UDP_PACKET_SIZE = 512; // UDP time stamp is in the first 48 bytes of the message
char packetBuffer[UDP_PACKET_SIZE] = {0}; //buffer to hold incoming and outgoing packets
// A UDP instance to let us send and receive packets over UDP
WiFiUDP udp;
void loop(){
....
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
//Serial.printf("Heap: %u\n", ESP.getFreeHeap());
Serial.println("Starting UDP");
udp.begin(localPort);
Serial.print("Local port: ");
Serial.println(udp.localPort());
....
// Get UDP JSON string for change mode
int cb = udp.parsePacket();
if (cb) {
Serial.print("======================= ");Serial.print(test_count++);Serial.println(" =======================");
Serial.print("=================== Heap likes ");Serial.print(heap_start-ESP.getFreeHeap());Serial.println(" ===================");
Serial.print("packet received, length=");
Serial.println(cb);
// We've received a packet, read the data from it
udp.read(packetBuffer, UDP_PACKET_SIZE); // read the packet into the buffer
packetBuffer[cb]=0;
Serial.print("Received " );
Serial.println(packetBuffer);
.....
}
И ведь блин, пакеты теряются не из-за плохой связи, а из-за того что esp чем то занимается во время их отправки.C UDP на WiFi беда - много потерянных пакетов.
Может быть как то можно Вас урвать за рамками форума?А т.к. слишком много если, то ответить на ваш запрос в раках форума невозможно.
Давно это было, более года назад. На форуме где-то есть мои сообщения.Спасибо, парень толковый. Посмотрел уже 70% лекций по работе модели OSI. Многое прояснилось.
Какой скорости можно ожидать от ESP при обмене данными по TCP ( если уж про UDP даже pvvx плохо отзывается ) ?
Спасибо за совет, только программы там кот наплакал, стандартная библиотека от arduino. я ее уже крутил вертел наверное вечера 3-4 по пару часов. ничего нету кроме инкрементируемой переменной, которая отправляется по UDP и вывода в серийник принятой с другой стороны этой переменной..... Минимальное время опроса датчиков было 0.1 сек. Ограничивалось скоростью работы DS. и делал это все на LUA.
Поэтому ищите ошибки в программе.
Тут сложно уточнить - вариантов много. Если у вас один WiFi AP в округе...И ведь блин, пакеты теряются не из-за плохой связи, а из-за того что esp чем то занимается во время их отправки.
На передачу, упаковку пакета, переливание его в буфера передатчика, ожидания "окна передачи" уходит достаточное время. Выходит, что на передачу 1 байта или 1024 в пакете, уходит примерно одинаковое время. ESP успевает обработать сотню таких транзакций в секунду. 100*1024 = передать минимум 100 килобайт. В реальности, при 166 MHz передача на TCP у ESP более 1.2 Мегабайта при пакете в 1500 байт. Т.е. более 800 переданных (по 1500 байт) и 400 принятых (ACK пакетов, в десяток байт, подтверждений приема предыдущих двух пакетов) TCP пакетов в секунду.Если шлю 10 пакетов в секунду, в среднем один проходит 2 теряется. раз в 3-5 секунд теряется пакетов 20-50 , ну это ожидаемо, если предположить, что там esp занимается поддержанием wifi связи))
А форум на что?Может быть как то можно Вас урвать за рамками форума?
может быть попробуете оценить. не замечаю каких либо аномалий.Что-то не то у вас с кодом...
/* Create a WiFi access point and provide a web server on it. */
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiClient.h>
#include <WiFiUdp.h>
int num=0;
int recievedNum=0;
/*
const int LDR = A0;
const int BUTTON = 4;
const int green = 12;
const int blue = 13;
/* Set these to your desired credentials. */
// имя создаваемой точки доступа
const char *ssid = "ESP_node_server";
const char *password = "thereisnoanyspoon";
unsigned int localPort = 8888; // local port to listen on with UDP
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet,
char ReplyBuffer[] = "recieved"; // a string to send back
WiFiUDP Udp; // создаем обект udp класса wifiudp
void setup() {
delay(300);
Serial.begin(115200);
Serial.println();
Serial.println("Configuring access point...");
/* You can remove the password parameter if you want the AP to be open. */
delay(100);
WiFi.softAP(ssid, password);
IPAddress myIP = WiFi.softAPIP();
Serial.print("AP IP address: ");
Serial.println(myIP);
delay(300);
Udp.begin(localPort); // стартуем UDP сервер по идее
Serial.println("udp reciever ready");
}
void loop() {
int packetSize = Udp.parsePacket();
if (packetSize){
IPAddress remote = Udp.remoteIP(); // Откуда получили запрос
Udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE);
// Шлём ответ для подтверждения
//Udp.beginPacket(remote, 8889);
//Udp.write(ReplyBuffer);
//Udp.endPacket();
recievedNum=packetBuffer[0]; // запоминаем значение пришедшее по UDP
Serial.print("udp rec-ed: ");
Serial.println(int(packetBuffer[0]));
Serial.print(" lost packets:");
Serial.println(recievedNum-num-1);
num=recievedNum;
}//if incoming UDP packet is
}//loop
Что-то отсылки UDP пакетов там не видно...может быть попробуете оценить. не замечаю каких либо аномалий.
Речь зашла о том, что пакеты вроде как теряются при получении, а не при отправке. Выше скетч приемника, он не отвечает подтверждениями, только слушает. Передатчик только отправляет через тупой delay. Пробовал без делаев тайминги отправки формировать, поведение на приеме никак не изменилось. Uart на какой скорости предпочтительней юзать? )Что-то отсылки UDP пакетов там не видно...
Какой-то прием, не по событиям приема, вывод в UART тормозящий до 115200/10/40 циклов опроса в сек...
Да знаю я, знаю ваше отношение к дурине)) Хочу писать норм код, сложно мне пока осилить udk или на чем там Вы кодите эту конфетку?) Это ж скока потрахов надо выучить. инфы толком нет систематизированной, все по крупицам собирать, правильно? в итоге что лучше, потратить еще месяц на изучение и попытки писать на низком уровне, набить огромный шишак на лбу, и в итоге не реализовать вообще ничего из задуманного, потому что тупо не хватает времени нырнуть в этот омут. На столько глубоким он выглядит на мой взгляд...PS: ... писанина на Arduino не сокращает времени набивки приложений, а увеличивает на время изучения и исправления чужого кода входящих в него библиотек...
Ну 'кекс' или как-там - скеч, кривой. Он и пропускает.Речь зашла о том, что пакеты вроде как теряются при получении, а не при отправке. Выше скетч приемника, он не отвечает подтверждениями, только слушает.