Не могу понять в чем дело, получает сообщения нормально, но не отправляет. Делаю так: Код (C++): if (millis() > timer) { timer = millis() + 5000; ether.sendUdp(textToSend, sizeof(textToSend), dstPort, ether.hisip, srcPort); Serial.println("send"); ether.printIp("SRV: ", ether.hisip); } Адреса и порты правильные, из другого аппаратного клиента уходят. Что не так? Железка: ENC28J60
Исходный порт с портом назначения в вызове sendUdp не перепутаны? Код (C++): void EtherCard::sendUdp ( const char * data, //Pointer to data uint8_t len, //Size of payload (maximum 220 octets / bytes) uint16_t sport, //Source port const uint8_t * dip, //Pointer to 4 byte destination IP address uint16_t dport //Destination port )
Кто-нибудь пользовался библиотекой EtherCard-master? Уже все перепробовал, или глаз замылился. Не уходит сообщение, хоть тресни. Что я делаю не так?
Не уходят или не доходят? На мастере не пробовал, стараюсь по возможности избегать коммиты без тегов, а на 1.1.0 пробовал использовать статические адреса и без шлюза. Просто подключена ардуина через ENC28 к ПК, шлюзов и dhcp просто нет. Настроил статику, задав только ip. Отправляю udp и вижу (на ПК) что в кадре мак адрес получателя заполнен нулями. А где же arp запрос для разрешения мак-а? При настройке статики добавил ещё адрес шлюза и маску подсети. Установил в ether.hisip адрес сервера. После этого и arp вижу, и в кадре при отправке udp мак получателя заполнен.
Нашел другую библиотеку (UIPEthernet), вникать и править имеющуюся вообще некогда. Новая (для меня) работает иначе, но гораздо понятнее и без ошибок. Кроме того, прикрутил общение по UDP и через вайфай, на случай, если потребуются беспроводные устройства. По физиологии, особенно в беспроводном виде, контроллер работает только как клиент, сам пинает ПК, когда ему нужно что-то сообщить или что-то узнать. Теперь вот единственное, что беспокоит, успеет ли ПК обработать несколько сообщений, если они придут одновременно от разных устройств? Сеть в таком случае как отработает?