met MQTT strings naar nodemcu sturen
2 berichten
• Pagina 1 van 1
met MQTT strings naar nodemcu sturen
Onderstaande code heb ik gevonden om met MQTT te communiceren met de nodemcu
Ik krijg het echter niet voor elkaar om de tekst die ik via MQTT verstuur omgezet te krijgen naar een string.
In onderstaand voorbeeldje staan de regels waar het om gaat uit het grote voorbeeld:
Maar hier wordt de tekst naar Seriële monitor gestuurd met een soort pointer of char, geen idee wat het is en hoe je dat in een string krijgt.
Ik krijg het echter niet voor elkaar om de tekst die ik via MQTT verstuur omgezet te krijgen naar een string.
In onderstaand voorbeeldje staan de regels waar het om gaat uit het grote voorbeeld:
- Code: Alles selecteren
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Maar hier wordt de tekst naar Seriële monitor gestuurd met een soort pointer of char, geen idee wat het is en hoe je dat in een string krijgt.
- Code: Alles selecteren
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
// Update these with values suitable for your network.
const char* ssid = "........";
const char* password = "........";
const char* mqtt_server = "broker.mqtt-dashboard.com";
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;
void setup_wifi() {
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
randomSeed(micros());
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
// Switch on the LED if an 1 was received as first character
if ((char)payload[0] == '1') {
digitalWrite(BUILTIN_LED, LOW); // Turn the LED on (Note that LOW is the voltage level
// but actually the LED is on; this is because
// it is acive low on the ESP-01)
} else {
digitalWrite(BUILTIN_LED, HIGH); // Turn the LED off by making the voltage HIGH
}
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Create a random client ID
String clientId = "ESP8266Client-";
clientId += String(random(0xffff), HEX);
// Attempt to connect
if (client.connect(clientId.c_str())) {
Serial.println("connected");
// Once connected, publish an announcement...
client.publish("outTopic", "hello world");
// ... and resubscribe
client.subscribe("inTopic");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
void setup() {
pinMode(BUILTIN_LED, OUTPUT); // Initialize the BUILTIN_LED pin as an output
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
long now = millis();
if (now - lastMsg > 2000) {
lastMsg = now;
++value;
snprintf (msg, 75, "hello world #%ld", value);
Serial.print("Publish message: ");
Serial.println(msg);
client.publish("outTopic", msg);
}
}
Advertisement
Re: met MQTT strings naar nodemcu sturen
Ik denk dat ik het al gevonden heb.
Dit lijkt te werken
- Code: Alles selecteren
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
ss = ss + String((char)payload[i]);
}
Serial.println(ss);
Dit lijkt te werken
2 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 22 gasten