Go Down

Topic: NodeMCU MQTT (Read 1 time) previous topic - next topic

Kimstoroy

Hi

Newbie on Arduino, and don't know where to begin.

Can anyone help me here, I have purchased this NodeMCU:
https://www.kjell.com/no/produkter/elektro-og-verktoy/arduino/utviklingskort/nodemcu-utviklingskort-p87949

I want to program it to run 4 relay(output) and 1 magnet switch (input)

My goal is to control the relays and read the state from MQTT

I used a Arduino plugin for my Homeseer(Home Automation), but that was unstable so I must try the MQTT.

Is there anyone her that could help me with a sketch or help me to find where to begin?

This is for controlling 4 valves for my garden sprinklers, all the automation will be done in HomeSeer

Br
Kim


mikini

Hej Kim.

Som Kjell & Co. også fint skriver, så har du købt dig en ESP8266 chip med lidt interface-elektronik omkring og flashet  med NodeMCU-firmware.

NodeMCU-firmwaren betyder at den er klar til brug som den er, hvis du har nok i den Lua-fortolker og webserver som den tilbyder.

Du kan finde mere om dette på
NodeMCU-hovedside; http://nodemcu.com/index_en.html
NodeMCU-firmware dokumentation; https://nodemcu.readthedocs.io
Kildekode til firmware; https://github.com/nodemcu/nodemcu-firmware
Hardware-dokumentation; https://github.com/nodemcu/nodemcu-devkit-v1.0

Hvis du vil eksperimentere med NodeMCU-delen skal du bruge en seriel<->USB-konverter til at få kontakt med Lua-fortolkeren på systemet gennem serielporten, derfra kan du fortælle den om dit WLAN og du vil så kunne programmere den i Lua gennem en indbygget webserver.

Der er en god Kom-igang-guide fra AdaFruit til dette på;
https://learn.adafruit.com/adafruit-huzzah-esp8266-breakout/using-nodemcu-lua

Den er godt nok skrevet til AdaFruits egen udgave af NodeMCU (HUZZAH ESP8266 breakout), men du vil kunne bruge næsten samme procedure på din NodeMCU.

NodeMCU har som udgangspunkt ikke noget med Arduino at gøre, det er sit helt eget miljø. Arduino er i stedet for Lua baseret på sproget C++ , men med Arduino-frameworket kan du også udvikle, kompilere og uploade (flashe) Arduino-programmer til ESP8266-chippen på NodeMCU-hardwaren som så vil erstatte NodeMCU-firmwaren.

AdaFruit har også en guide til hvordan man får sine Arduino-programmer over på NodeMCU-hardwaren; https://learn.adafruit.com/adafruit-huzzah-esp8266-breakout/using-arduino-ide

På et tidspunkt derefter kommer du så til at skulle forbinde dine relæer og magnetswitch til de korrekte I/O og få læst og skrevet til dem ;).

God fornøjelse,
Mikkel

Kimstoroy

Takk for svar Mikkel


Jeg fant denne koden for MQTT, hvordan kan jeg modifisere denne til å styre 4 rele og 1 input?
Jeg vil styre on/off og lese status på rele, på input vil jeg bare lese status


#include <ESP8266WiFi.h>
#include <PubSubClient.h>
 
const char* ssid = "YourNetworkName";
const char* password =  "YourNetworkPassword";
const char* mqttServer = "m11.cloudmqtt.com";
const int mqttPort = 12948;
const char* mqttUser = "YourMqttUser";
const char* mqttPassword = "YourMqttUserPassword";
 
WiFiClient espClient;
PubSubClient client(espClient);
 
void setup() {
 
  Serial.begin(115200);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("Connecting to WiFi..");
  }
  Serial.println("Connected to the WiFi network");
 
  client.setServer(mqttServer, mqttPort);
  client.setCallback(callback);
 
  while (!client.connected()) {
    Serial.println("Connecting to MQTT...");
 
    if (client.connect("ESP8266Client", mqttUser, mqttPassword )) {
 
      Serial.println("connected"); 
 
    } else {
 
      Serial.print("failed with state ");
      Serial.print(client.state());
      delay(2000);
 
    }
  }
 
  client.publish("esp/test", "Hello from ESP8266");
  client.subscribe("esp/test");
 
}
 
void callback(char* topic, byte* payload, unsigned int length) {
 
  Serial.print("Message arrived in topic: ");
  Serial.println(topic);
 
  Serial.print("Message:");
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload);
  }
 
  Serial.println();
  Serial.println("-----------------------");
 
}
 
void loop() {
  client.loop();
}

Go Up