Приходится перезагружать скетч каждый раз, когда я запускаю 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.
@jainam, 👍-1
1 ответ
Пожалуйста, объясните, какие сообщения? Сообщения последовательного порта или сообщения 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 кажется очень хорошей платой. Что угодно, только не Юн.
Мой лучший совет для вас-схватить молоток, уничтожить Юна и забыть об этом. Это сделает вашу жизнь намного проще.
(Я только что заметил, что это очень старый вопрос, извините, но мой ответ все еще действителен).
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Проблема с загрузкой моего скетча на Ардуино
- Проблема с загрузкой скетча
- Невозможно загрузить скетчс помощью Platformio (но Arduino IDE работает)
- Не удается загружать скетчи в Arduino Nano Every
- Отдельный ATmega 2560 - включение одного светодиода - устранение неполадок
- Плата Arduino Due. Ошибка загрузки скетча
- "avrdude: stk500_getsync(): not in sync: resp=0x00", или некто по имени Avr не позволяет мне загрузить мою программу
Сомнительно называть raspberry pi надежными, когда они зависят от хрупкой SD-карты для своей корневой файловой системы. Ожидание полного запуска Linux - системы действительно кажется хорошей идеей, если только часть запуска Linux не командует сбросом ATmega. В конечном счете, чтобы получить надежную связь через мост, скорее всего, потребуется полное рукопожатие между программным обеспечением с обеих сторон. Лучший дизайн системы, вероятно, будет запускать большую часть логики на стороне Linux (как вы заметили, "вы можете запускать скрипты там") и использовать ATmega только в качестве делегата для ввода-вывода или простого секвенирования в реальном времени., @Chris Stratton