Изучаю работу EthernetUDP на ардуино: проблема с принятием сообщений. Помогите
- Войдите на сайт для отправки комментариев
Вс, 06/01/2019 - 17:13
Привет, нужна помощь: я работаю с Ethernet Shield и с NodeMcu V1.0 (ESP8266) и пытаюсь связать их через интернет, протокол UDP при приёме данных на NodeMcu выдаёт белиберду :
⸮XcD⸮a⸮⸮t⸮⸮D⸮j⸮⸮⸮⸮⸮⸮b<5⸮!⸮1
GCe\⸮
.K⸮V⸮= @
⸮M⸮⸮⸮⸮{g⸮⸮q⸮+⸮⸮⸮&V⸮⸮⸮'⸮⸮j-⸮"lw⸮⸮⸮⸮⸮⸮@p|⸮n⸮= @
`⸮*.⸮⸮@⸮F⸮2⸮⸮⸮d⸮⸮⸮⸮8⸮⸮⸮dA⸮<g⸮⸮⸮/@⸮⸮⸮^⸮⸮⸮{,+⸮= @
⸮ԙ8⸮a⸮@
Почему же сразу белиберду... на мой взгляд - красивая клинопись.
Почему же сразу белиберду... на мой взгляд - красивая клинопись.
Согласен, но к сожалению мне древний китайский не нужен :-)
блинб почему не всё отправилось я там ещё кучу текста писал :(
вобщем принимая udp с телефона всё работает стабильно и без ошибок
вот код с NodeMcu
#include <SPI.h> #include <Ethernet.h> #include <EthernetUdp.h> int potz = A0; byte ip[] = { 192,168,15,100 }; ///////////////////////////////////////////////////////////////////////////////////////////////////// byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; unsigned int localPort = 8888; // local port to listen for UDP packets const int NTP_PACKET_SIZE = 48; // NTP time stamp is in the first 48 bytes of the message byte packetBuffer[ NTP_PACKET_SIZE]; //buffer to hold incoming and outgoing packets EthernetUDP Udp; ///////////////////////////////////////////////////////////////////////////////////////////////////// void setup() { ///////////////////////////////////////////////////////////////////////////////////////////////////// Serial.begin(9600); if (Ethernet.begin(mac) == 0) {Serial.println("Failed to configure Ethernet using DHCP");} Udp.begin(localPort); ///////////////////////////////////////////////////////////////////////////////////////////////////// Udp.beginPacket(ip,8888); delay(1000); } void loop() { int res_potz = analogRead(potz); Serial.println(res_potz); Udp.write(res_potz); /*if(res_potz >= 500){ Udp.write("On"); }else{ Udp.write("Off"); } */ Udp.endPacket(); delay(1000); }вот с Ethernet Shield
#include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #include <WiFiUdp.h> #define STASSID "mihail" #define STAPSK "12345678" WiFiUDP udp; const char* ssid = STASSID; const char* password = STAPSK; unsigned int localPort = 8888; const int NTP_PACKET_SIZE = 48; // Размер буфера для принимаемого пакетов char packetBuffer[ NTP_PACKET_SIZE]; //Буфер хранения пакетов int LED = 5; void setup() { Serial.begin(115200); Serial.println(); Serial.println(); Serial.print("Configuring access point..."); Serial.println(ssid); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } IPAddress myIP = WiFi.softAPIP(); Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); udp.begin(localPort); // инициализируем UDP Serial.print("Local port: "); Serial.println(udp.localPort()); pinMode(LED,OUTPUT); } void loop() { int cb = udp.parsePacket(); if (!cb) {} else { udp.read(packetBuffer, NTP_PACKET_SIZE); Serial.println(packetBuffer); String req=(packetBuffer); if (req.indexOf("On") != -1){digitalWrite(LED,1);} if (req.indexOf("Off") != -1){digitalWrite(LED,0);} memset(packetBuffer, 0, NTP_PACKET_SIZE); //очищаем буфер для приема следующей команды } }Начнем с https://www.arduino.cc/en/Reference/EthernetUDPBeginPacket - сравните со своим лупом. Метод write() сует в пакет только один байт, а из analogRead их вылезает два.
Далее... Я не сильный специалист в ESP, но синтаксис WiFiUDP схож с EthernetUDP. Посему возьмем https://www.arduino.cc/en/Reference/EthernetUDPRead и обратим внимание на то, как вычисляется и применяется packetSize. Как мне кажется - это более разумный способ , нежели чтение 48 байт при двух отосланных с другого конца.
Начнем с https://www.arduino.cc/en/Reference/EthernetUDPBeginPacket - сравните со своим лупом. Метод write() сует в пакет только один байт, а из analogRead их вылезает два.
Далее... Я не сильный специалист в ESP, но синтаксис WiFiUDP схож с EthernetUDP. Посему возьмем https://www.arduino.cc/en/Reference/EthernetUDPRead и обратим внимание на то, как вычисляется и применяется packetSize. Как мне кажется - это более разумный способ , нежели чтение 48 байт при двух отосланных с другого конца.
извиняюсь я не могу зайти на сайт arduino.cc из за провайдера, можете скинуть содержимое сайтов
С мобильного устройства это затруднительно. Вставьте ссылки в гуглотранслятор - это помогает обойти тупые запреты.
я решил проблему с заходом на сайт при помощи 3 минут унижений провайдера по телефону, но дело не в том что я не могу принять данные я не могу их отправить, если глянуть 1 ссылку то можно заметить что в коде (моём ) есть такая же сторка но проблем от неё столькоже как и от работающей, ну а с чтением всего буфера спасибо но это лишь тестовая модель, и в будующем я не знаю кол-во байтов которое я буду отправлять/принимать.
Строка есть, да не там, где надо - в setup() вместо loop()
извеняюсь вы про какой скеч, можете показать какая строчка
сори я не понял сразу г
чел спасибо огромное выручил очень сильно
не подскажешь как можно отправлять данные больше байта?