Прошу вашего совета. Имеется ардуино уно и интернетный шилд w5100 с али экспресса.
Залил на него скетч управления реле через интернет используя Openhab и MQTT
но столкнулся с проблеммой что не всегда ардуино подключается к модему. бывает с первого раза все ок, стоит переподключить питание и уже не подключается. Заметил странную особенность что в момент подключения в модему на шилде горит желтый светодиод возле 13 ноги, когда подключения нет к модему он не горит. (если я правильно понимаю то этот светодиод и подключен к 13 ноге, но тогда не понимаю почему он загорается ведь в коде такой команды нет) Наткнулся на статью про резисторы у меня так же стоят резисторы 511 а не 510. Но не понимаю почему нет какой то стабильности или работаю или нет.
Подскажите в чем может быть проблемма…
и Arduino Ethernet W5100 – как устранить брак конструкции – reedpaper.com
#include <PubSubClient.h>
#include <SPI.h>
#include <Ethernet.h>
// -------------------------------------- BEGIN - Пины Arduino ----------------------------------------------
#define LED_pin 5 //Пин 5 для светодиодов
#define Relay1_pin 6 //Пин 6 для реле 1
#define Relay2_pin 7 //Пин 7 для реле 2
// -------------------------------------- END - Пины Arduino ------------------------------------------------
// -------------------------------------- BEGIN - Глобальные переменные -------------------------------------
int Led = 0; //Переменная для хранения состояния светодиода
boolean Relay1 = HIGH; //Переменная для хранения состояния Реле 1
boolean Relay2 = HIGH; //Переменная для хранения состояния Реле 2
// -------------------------------------- END - Глобальные переменные ---------------------------------------
// -------------------------------------- BEGIN - Установка параметров сети ---------------------------------
void callback(char* topic, byte* payload, unsigned int length);
// Установить MAC адресс для этой Arduino (должен быть уникальным в вашей сети)
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// Утановить IP адресс для этой Arduino (должен быть уникальным в вашей сети)
IPAddress ip(192, 168, 0, 118);
// Уставновить IP адресс MQTT брокера
byte server[] = { 192, 168, 0, 112 };
// Уставновить Логин и Пароль для подключения к MQTT брокеру
const char* mqtt_username = "openhabian";
const char* mqtt_password = "openhabian";
EthernetClient ethClient;
PubSubClient client(server, 1883, callback, ethClient);
// --------------------------------------- END - Установка параметров сети ----------------------------------
// --------------------------------------- BEGIN - Подключение и подписка на MQTT broker ----------------------------------
boolean reconnect() {
//Serial.println("reconnect...");
if (client.connect("Arduino_test", mqtt_username, mqtt_password)) {
client.subscribe("/room31/led"); Serial.println("Connected to: /room31/led");
client.subscribe("/room31/relay1"); Serial.println("Connected to: /room31/relay1");
client.subscribe("/room31/relay2"); Serial.println("Connected to: /room31/relay2");
//Serial.println("MQTT connected");
}
return client.connected();
}
// --------------------------------------- END - Подключение и подписка на MQTT broker ----------------------------------
// --------------------------------------- BEGIN - void setup() -------------------------------------------
void setup()
{
digitalWrite(Relay1_pin, HIGH); // Решение проблемы с LOW статусом пинов при загрузке ардуино
digitalWrite(Relay2_pin, HIGH); // Решение проблемы с LOW статусом пинов при загрузке ардуино
pinMode(LED_pin, OUTPUT);
pinMode(Relay1_pin, OUTPUT);
pinMode(Relay2_pin, OUTPUT);
// Serial.begin(9600); // Open serial communications
// Start with a hard-coded address:
Ethernet.begin(mac, ip);
// Serial.print("My ip address: ");
// Serial.println(Ethernet.localIP());
reconnect(); // Подключение к брокеру, подписка на прописанные выше темы
}
// --------------------------------------- END - void setup() ---------------------------------------------
// --------------------------------------- BEGIN - void loop() --------------------------------------------
void loop() {
client.loop();
}
// --------------------------------------- END - void loop() ----------------------------------------------
// --------------------------------------- BEGIN - void callback ------------------------------------------
// Чтение данных из MQTT брокера
void callback(char* topic, byte* payload, unsigned int length) {
// проверка новых сообщений в подписках у брокера
payload[length] = '\0';
// Serial.print("Topic: ");
// Serial.print(String(topic));
// Serial.println(" - ");
if (String(topic) == "/room31/led") {
String value = String((char*)payload);
Led = value.substring(0, value.indexOf(';')).toInt();
Led = map(Led, 0, 100, 0, 255);
analogWrite(LED_pin, Led);
// Serial.print("Znachenie prisvoenoe peremennoy Led: ");
// Serial.println(Led);
}
if (String(topic) == "/room31/relay1") {
String value = String((char*)payload);
Relay1 = value.substring(0, value.indexOf(';')).toInt();
// Serial.print("Znachenie prisvoenoe peremennoy Relay1: ");
// Serial.println(Relay1);
digitalWrite(Relay1_pin, Relay1);
}
if (String(topic) == "/room31/relay2") {
String value = String((char*)payload);
Relay2 = value.substring(0, value.indexOf(';')).toInt();
// Serial.print("Znachenie prisvoenoe peremennoy Relay2: ");
// Serial.println(Relay2);
digitalWrite(Relay2_pin, Relay2);
}
}
// ---------------------------------------- END - void callback -------------------------------------------