проблема при коннекте PubSubClient

dumahism
Offline
Зарегистрирован: 01.08.2017

Если плата ардуино соединена по usb с компьютером, все работает, как нужно. А если отсоединить usb, то при соединении mqtt(25 строка), ардуино виснет и срабатывает ватчдог. Как буд-то не срабатывает таймаут подключения. в PubSubClient.h изменен таймаут на 3с.

Arduino mega2560

загружен такой скетч:

#include <PubSubClient.h>
#include <Ethernet.h>
#include <avr/wdt.h>

#define mqtt_server "m21.cloudmqtt.com"
#define mqtt_port 17541

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEE };
byte ip[] = { 192, 168, 1, 36 };

bool cpLoop = false;
unsigned long clientpub_connected = 0;
EthernetClient client;
PubSubClient clientpub((mqtt_server, mqtt_port, client));

void setup() {
	wdt_enable(WDTO_8S);
	Ethernet.begin(mac, ip);
}

void loop() {
	cpLoop = clientpub.loop();
	if ((millis() - clientpub_connected) > 10000 && !cpLoop)
	{
		clientpub.connect("home");
		clientpub_connected = millis();
	}
	wdt_reset();
}

 

b707
Offline
Зарегистрирован: 26.05.2017

По этому коду ничего не сказать -  слишком мало информации.

В порядке бреда - может дело вовсе не в коде, а питании? От USB питания хватает, а при переходе на автономку - Эзернет виснет.

dumahism
Offline
Зарегистрирован: 01.08.2017

и если перезагрузить плату с кнопки reset, то опять все нормально. Также если сетевой провод бп передернуть, не работает. Если штекер, который идет с бп в ардуино, то работает.

dumahism
Offline
Зарегистрирован: 01.08.2017

b707 пишет:

По этому коду ничего не сказать -  слишком мало информации.

В порядке бреда - может дело вовсе не в коде, а питании? От USB питания хватает, а при переходе на автономку - Эзернет виснет.

питается всегда от бп

b707
Offline
Зарегистрирован: 26.05.2017

dumahism пишет:

питается всегда от бп

Какое напряжение БП и как соединены ардуина и Эзернет-модуль?

dumahism
Offline
Зарегистрирован: 01.08.2017

b707 пишет:

dumahism пишет:

питается всегда от бп

Какое напряжение БП и как соединены ардуина и Эзернет-модуль?

12в. шилд W5100, в ардуину вставлен

так же пробовал питать с бп 5в, через usb, таже проблема

b707
Offline
Зарегистрирован: 26.05.2017

dumahism пишет:

12в. шилд W5100, в ардуину вставлен

Уже теплее - в этом случае шилд питается через встроеный стабилизатор питания ардуины, и мощности стаба скорее всего не хватает. - Зачем вам вообще 12в? Это обусловлено какой-то необходимостью? Если нет - лучше возьмите БП 5в, чтобы питать ардуину и шилд непосредственно, а не через стабилизатор.

dumahism пишет:
так же пробовал питать с бп 5в, через usb, таже проблема

вы только что писали, что при питании через USB все нормально?

dumahism
Offline
Зарегистрирован: 01.08.2017

b707 пишет:

dumahism пишет:

12в. шилд W5100, в ардуину вставлен

Уже теплее - в этом случае шилд питается через встроеный стабилизатор питания ардуины, и мощности стаба скорее всего не хватает. - Зачем вам вообще 12в? Это обусловлено какой-то необходимостью? Если нет - лучше возьмите БП 5в, чтобы питать ардуину и шилд непосредственно, а не через стабилизатор.

dumahism пишет:
так же пробовал питать с бп 5в, через usb, таже проблема

вы только что писали, что при питании через USB все нормально?

Нормально, если плата через usb подключена к пк.

Хотя если питать 12В, то так:

dumahism пишет:

и если перезагрузить плату с кнопки reset, то опять все нормально. Также если сетевой провод бп передернуть, не работает. Если штекер, который идет с бп в ардуино, то работает.

в usb проводе перерезан +

sadman41
Offline
Зарегистрирован: 19.10.2016

С любым примером для Ethernet.h тоже виснет?

dumahism
Offline
Зарегистрирован: 01.08.2017

sadman41 пишет:

С любым примером для Ethernet.h тоже виснет?

да

#include <Ethernet.h>
#include <avr/wdt.h>
#include <SPI.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEE };
byte ip[] = { 192, 168, 1, 36 };
byte server[] = { 64, 233, 187, 99 };

EthernetClient client;

void setup() {
	wdt_enable(WDTO_8S);
	Ethernet.begin(mac, ip);
}

void loop() {
	delay(5000);
	client.connect(server, 80);
	wdt_reset();
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

И вот это в setup() показывает всё корректно: Serial.println(Ethernet.localIP()); ?

Иными словами - точно ли шилд инициализируется и виснет только при обращении к нему или же он не инициализируется и тупо висит в лупе где-то в потрохах Ethernet.h ?

dumahism
Offline
Зарегистрирован: 01.08.2017

sadman41 пишет:

И вот это в setup() показывает всё корректно: Serial.println(Ethernet.localIP()); ?

Иными словами - точно ли шилд инициализируется и виснет только при обращении к нему или же он не инициализируется и тупо висит в лупе где-то в потрохах Ethernet.h ?

виснет именно на попытке подключения к серверу.

Шилд накрылся. нашел такой же шилд, с ним все нормально.

Всем спасибо.