Ich muss ein Prototyping-Szenario implementieren, die LED im Arduino mit MQTT-Protokoll blinken. Ich habe es bereits mit mehreren MQTT-Bibliotheken versucht, aber keine von ihnen funktioniert nicht perfekt. Verbindung zum MQTT-Broker funktioniert erfolgreich, aber wenn ich die Nachricht mit Thema veröffentlichen, die ich in Arduino festlegen, nicht blinken die LED. Arduno haben eine Nachricht zu veröffentlichen, wenn sie dieses Verlags Teil erfolgreich verbinden, aber auch nicht funktioniertBlinken mit MQTT in arduino
dies mein Code
#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>
// Set the MAC address
byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 100);
IPAddress server(192, 168, 1, 20);
// Set what PINs our Led's are connected to
int redPin = 13;
//int greenPin = 6;
//int bluePin = 7;
// Set a generic code that will trigger our Blue Led
// think of this as a set of codes for automation you might write
byte triggerRed[13] = "12345";
// handles messages that are returned from the broker on our subscribed channel
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("New message from broker on topic:");
Serial.println(topic);
Serial.print("Payload:");
Serial.write(payload, length);
// Check and see if our payload matches our simple trigger test
if ((length == 5) & (memcmp(payload, triggerRed, 5) == 0))
{
//blink(redPin);
}
}
EthernetClient ethClient;
PubSubClient client(ethClient);
// Fire up our PubSub client
//PubSubClient client(server, 1883, callback);
void setup()
{
// Open serial communications
Serial.begin(9600);
client.setServer(server, 1883);
client.setCallback(callback);
// Setup our Leds
pinMode(redPin, OUTPUT);
// pinMode(greenPin, OUTPUT);
// pinMode(bluePin, OUTPUT);
// attempt a DHCP connection
Serial.println("Attempting to get an IP address using DHCP:");
if (!Ethernet.begin(mac))
{
// if DHCP fails, start with a hard-coded address:
Serial.println("failed to get an IP address using DHCP, trying manually");
Ethernet.begin(mac, ip);
}
Serial.print("My address:");
Serial.println(Ethernet.localIP());
// Connect to Broker, give it arduino as the name
if (client.connect("arduino")) {
// Good, we connected turn on the red led
digitalWrite(redPin, HIGH);
// Publish a message to the status topic
client.publish("status","Arduino is now online");
// Listen for messages on the control topic
client.subscribe("ultra");
}
}
void loop()
{
client.loop();
}
// Anything with flashing lights.
void blink(int targetLed)
{
digitalWrite(redPin, HIGH);
}
wie kann ich dieses Problem beheben?
Haben Sie versucht Beispiel Skizze von Arduino MQTT Bibliothek zu laufen? Ich empfehle Ihnen, Client-Verbindungsroutine in eine Schleife zu setzen. Warum versuchen Sie nicht, sich mit einem öffentlichen Server im Internet zu verbinden, zum Beispiel http://test.mosquitto.org/, bevor Sie sich mit einem lokalen verbinden? –
Ich habe bereits mit test.mosquitto.org getestet, aber das hat nicht funktioniert. Was meinst du mit Client-Verbindung in Schleife? LED blinkt, wenn ich eine Nachricht mit korrektem Thema veröffentliche. aber ich brauche es, um es immer auf "ON" zu halten –