Приходится перезагружать скетч каждый раз, когда я запускаю Yun

Я новичок в Arduino и IoT. Я взял в руки Yun и загрузил простой скетч, чтобы подписаться на тему. Я получаю сообщения (я настроил PHP-скрипт и брокера на сервере, который обрабатывает сообщения) и могу включать и выключать индикатор L13. Но когда я отключаю устройство от своего компьютера и снова подключаю его (для включения питания), оно перестает получать сообщения. Мне нужно снова загрузить скетч, чтобы он заработал. Вот мой код:

#include <spi.h>
#include <pubsubclient.h>
#include <yunclient.h>

byte server[] = { 192, 168, 1, 196 };
int port = 1883;
char* pubTopic = "fromYun";
char* subTopic = "sensor/light";

void callback(char* topic, byte* payload, unsigned int length) {
  //convert byte to char
  payload[length] = '\0';
  String strPayload = String((char*)payload);
  // handle message arrived
  if(strPayload == "ON") {
    digitalWrite(13, HIGH);
  } else if(strPayload == "OFF") {
    digitalWrite(13, LOW);
  }
}

YunClient yun;
PubSubClient mqtt(server, port, callback, yun);

void setup() {
  Serial.begin(9600);
  pinMode(13, OUTPUT);
  digitalWrite(13, LOW);
  Bridge.begin();
  if (mqtt.connect("arduinoClient")) {
    mqtt.publish(pubTopic,"hello world!");
    mqtt.subscribe(subTopic);
  }
}

void loop() {
  mqtt.loop();
}

Я что-то упускаю?

Я ссылался на этот пост и PubSubClient -> mqtt_basic.ino для создания этого кетча.

Я не понимаю, что такое mqtt.connect("arduinoClient"). Я имею в виду, что это за строка "arduinoClient"? В одном скетче на GitHub я увидел его как "юн"...

Любая помощь будет оценена по достоинству. Заранее спасибо!

РЕДАКТИРОВАТЬ: Я использую Mosquitto MQTT.

, 👍-1


1 ответ


0

Пожалуйста, объясните, какие сообщения? Сообщения последовательного порта или сообщения MQTT?

Имя mqtt.connect "arduinoClient" - это имя идентификатора. Это зависит от сервера, какими должны быть параметры. Для некоторых серверов это может быть пустая строка, и вторым параметром должно быть имя учетной записи, а третьим параметром-пароль/ключ.

Когда вы загружаете скетч, часть OpenWRT уже запущена. Возможно, есть проблема с мостом.начните. Попробуйте подождать 90 секунд, прежде чем вызывать мост.начните. Если 90-секундная задержка заставляет его работать, уменьшите ее до 5 секунд и держите на уровне 5 секунд.

Возможно, вы можете использовать (мигает) Светодиоды, указывающие на то, что код завершил мост.begin, или на ошибку.

Когда вы решите эту проблему, возникнут другие проблемы. Вы обновили новейшую прошивку для части OpenWRT? Arduino Yún может работать только с очень простым и небольшим скетчем. Не пытайтесь добавить слишком много вещей, которые используют Мост. Часть OpenWRT/linux надежна, вы можете запускать там скрипты linux. Часть ATmega32U4 похожа на Arduino Leonardo и также надежна. Это сочетание и Мост, который вызывает бесконечную цепочку проблем.

А как насчет малинового Пи? Это надежно. Вы думали о ESP8266 или ESP32 в режиме, совместимом с Arduino? У Adafruit есть сервер MQTT для пользователей, и Wi-Fi Adafruit Feather M0 кажется очень хорошей платой. Что угодно, только не Юн.

Мой лучший совет для вас-схватить молоток, уничтожить Юна и забыть об этом. Это сделает вашу жизнь намного проще.

(Я только что заметил, что это очень старый вопрос, извините, но мой ответ все еще действителен).

,

Сомнительно называть raspberry pi надежными, когда они зависят от хрупкой SD-карты для своей корневой файловой системы. Ожидание полного запуска Linux - системы действительно кажется хорошей идеей, если только часть запуска Linux не командует сбросом ATmega. В конечном счете, чтобы получить надежную связь через мост, скорее всего, потребуется полное рукопожатие между программным обеспечением с обеих сторон. Лучший дизайн системы, вероятно, будет запускать большую часть логики на стороне Linux (как вы заметили, "вы можете запускать скрипты там") и использовать ATmega только в качестве делегата для ввода-вывода или простого секвенирования в реальном времени., @Chris Stratton