오픈 하드웨어/NodeMCU

NodeMCU와 MQTT 통신

hujoo 2023. 6. 27. 10:18

NodeMCU에 MQTT Pub/SubClient 라이브러리 설치

아두이노 프로그램에서 스케치->라이브러리 포함하기->라이브러리 관리

PubSubClient라고 검색하여 MQTT관련 라이브러리 설치

 

아두이노 파일->예제->PubSubClient->mqtt_esp8266 예제 실행하고 수정하여 사용

 

#include <ESP8266WiFi.h>
#include <PubSubClient.h>

const char* ssid     = "wifi 이름";
const char* password = "wifi 비밀번호";
const char* mqtt_server="test.mosquitto.org";

 

WiFiClient espclient;

void callback(char* topic,byte* payload,unsigned int length1){    
  Serial.print("message arrived[");
  Serial.print(topic);
  Serial.println("]");
  
  String data = "";
  for(int i=0;i<length1;i++)
    data = data + payload[i];     
  Serial.println(data);
  Serial.println(payload[0]);

  if(payload[0] == 48)      // if(data == "48")
  {
    digitalWrite(D4, LOW);  //ASCII VALUE OF '0' IS 48
    Serial.println("off");
  }
  else if(payload[0] == 49) // else if(data == "49")
  {
    digitalWrite(D4, HIGH);   //ASCII VALUE OF '1' IS 49
    Serial.println("on");
  }
}

PubSubClient client(mqtt_server,1883,callback,espclient);

void setup() {
  pinMode(D2,OUTPUT);
  digitalWrite(D2, HIGH);
  pinMode(D4,OUTPUT);  
  Serial.begin(115200);
  Serial.print("connecting");
  WiFi.begin(ssid,password);         //SSID,PASSWORD 
  while(WiFi.status()!=WL_CONNECTED){
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  digitalWrite(LED_BUILTIN, HIGH); 
  
  reconnect();
}

void reconnect(){
  while(WiFi.status()!=WL_CONNECTED){
    delay(500);
    Serial.print(".");
  }
  while(!client.connected()){
    if(client.connect("ESP8266Client123456789")){
      Serial.println("connected");
      client.subscribe("ledcontrol");
    }
    else{
      Serial.print("failed,rc=");
      Serial.println(client.state());
      delay(500);
    }
  } 
}

int now = 0;
int lastMeasure = 0;

void loop() {
  if(!client.connected()){
    reconnect();
  }
  
  client.loop();

  // Timer variable with current time
  now = millis();
  if (now - lastMeasure > 3000) {
    lastMeasure = now;
    int value = analogRead(A0);
    String data = String(value);
    client.publish("sensor/light", data.c_str());  
  }
}

 

 

Node-RED 디자인

 

PC cmd창에서 node-red 입력하여 Node-RED 실행

인터넷 주소창에 http://localhost:1880 입력하면 Node-RED 창이 열림

 

 

인터넷 주소창에 http://localhost:1880/ui 입력하여 Node-RED Dashboard 연결

 

nodemcu가 서버에 접속하면 D2 연결 led가 켜진다.

on 버튼으로 D4 연결 led를 켠다

off 버튼으로 D4 연결 led를 켠다

가변저항의 값을 서버에 전송하여 gauge에 표현한다