ARDUINO 장치 연결하기 (MQTT Ethernet 활용)

Protocol

ARDUINO 장치 연결하기 (MQTT Ethernet 활용)

Arduino 장치를 연결하는 다양한 방식 중 MQTT 통신을 활용한 네트워크(Network) 방식으로 통신하는 샘플을 소개합니다.






1. 아두이노 코딩하기

1) 아두이노 IDE를 활용하여 코딩한다. 

b0baeee4a4f3fa3422c3dacbe763ca0b_1683098605_8353.png 

#include <ESP8266WiFi.h>

#include <PubSubClient.h>


WiFiClient espClient;

PubSubClient client(espClient);


// Wi-fi 설정

const char* ssid = "AAAA";

const char* password =  "14571769";


// MQTT 설정

const char* mqttServer = "192.168.43.228";    //Enter Your mqttServer address

const int mqttPort = 1883;       //Port number


unsigned long previous_time = 0;

#define interval 1000


int FAN = D7;

int SENSOR = D1;   


char state = 0;

int fanState = 0;

int sensorState = 0;


char MQTT_data_send[30] = "";


void setup() {

  delay(1000);

  

  Serial.begin(115200);

  

  pinMode(FAN, OUTPUT);

  pinMode(SENSOR, INPUT);


  WiFi.begin(ssid, password);

  

  // Wi-fi와 연결을 시도한다.

  // 연결이 되지 않았을 경우 재시도한다.

  while (WiFi.status() != WL_CONNECTED) {

    delay(500);

    Serial.println("Connecting to WiFi..");

  }

  

  Serial.print("Connected to WiFi :");

  Serial.println(WiFi.SSID());

  

  client.setServer(mqttServer, mqttPort);

  client.setCallback(MQTTcallback);

  

  // MQTT 서버와 연결을 시도한다.

  // 연결이 되지 않았을 경우 재시도한다.

  while (!client.connected()) {

    Serial.println("Connecting to MQTT...");


    if (client.connect("ESP8266")) {

      Serial.println("connected");

    } else {

      Serial.print("failed with state ");

      Serial.println(client.state());  //If you get state 5: mismatch in configuration

      delay(2000);

    }

  }

  //해당 Topic을 구독한다.

  client.subscribe("xisom/fan");

}

// 구독한 Topic에 메세지가 올 경우

void MQTTcallback(char* topic, byte* payload, unsigned int length) {

  

  String message;

  for (int i = 0; i < length; i++) {

    message = message + (char)payload[i];  //Conver *byte to String

  }

  

  //받은 메세지에 따라 팬 상태를 변경한다.

  if(message == "0") {

    if(fanState == 0) return;

    fanState = 0;

    digitalWrite(FAN,fanState);

  }

  else if(message == "1") {

    if(fanState == 1) return;

    fanState = 1;

    digitalWrite(FAN,fanState);

  }

}


void loop() {

  client.loop();

    if (millis() - previous_time >= interval)

  {

    // 근접센서 상태를 읽는다.

    sensorState = digitalRead(SENSOR);

    if(sensorState == 0) sprintf(MQTT_data_send, "%d", 1);

    else if (sensorState == 1) sprintf(MQTT_data_send, "%d", 0);

    // 해당 Topic에 메세지를 보낸다.

    client.publish("xisom/proximity", MQTT_data_send);

    

    // 팬 상태를 읽는다.

    fanState = digitalRead(FAN);

    sprintf (MQTT_data_send, "%d", fanState);

    // 해당 Topic에 메세지를 보낸다.

    client.publish("xisom/fan", MQTT_data_send);

    

    state = ~state;

    previous_time = millis();

  }

}




2. X-SCADA 화면 구성하기

1) 다양한 이미지(Images)와 텍스트(Text), 레이블(Label) 등을 이용하여 화면을 구성한다.

b0baeee4a4f3fa3422c3dacbe763ca0b_1683098703_3006.png
 



3. X-SCADA 장치 및 태그 설정하기

1) 장치 탐색기(Device Explorer)에서 마우스 오른쪽 클릭 후 장치 추가(New Device)를 클릭한다.

b0baeee4a4f3fa3422c3dacbe763ca0b_1683098713_2902.png
 


2) 생성된 장치의 속성(Properties)에서 이름(Name)을 설정한 뒤 마우스 오른쪽 클릭 후 네트워크 연결 추가(New Network)를 클릭한다.

b0baeee4a4f3fa3422c3dacbe763ca0b_1683098731_3321.png
 


3) 속성(Preperties) > 일반(General) > 프로토콜(Protocol)에서 “MQTT Subscriber”를 선택한다.

b0baeee4a4f3fa3422c3dacbe763ca0b_1683098753_1714.png
 


4) 아두이노 장치의 설정에 맞게 MQTT, 원격지주소(RemoteAddress) 등을 설정한다.

b0baeee4a4f3fa3422c3dacbe763ca0b_1683098765_6123.png
 


5) 태그 탐색기(Tag Explorer)에서 디지털 태그(Digital Tag)를 2개 생성한 뒤 아래와 같이 설정한다.

- Fan (Digital Tag) : 장치(Device) = Arduino_MQTT , 장치내 주소(DeviceAddress) = xisom/fan

- Proximity (Digital Tag) : 장치(Device) = Arduino_MQTT , 장치내 주소(DeviceAddress) = xisom/proximity

- 연결한 장치와 장치내 주소는 아두이노 설정에 따라 달라질 수 있음

b0baeee4a4f3fa3422c3dacbe763ca0b_1683098776_8713.png
 



4. X-SCADA 동작 및 효과 설정하기

1) Proximity Sensor의 램프 이미지 더블클릭 후 점멸 효과(Blink)를 추가한 뒤 아래와 같이 설정한다.

b0baeee4a4f3fa3422c3dacbe763ca0b_1683098791_7604.png
 


2) Fan 이미지에는 애니메이션(Animation) > 회전 효과(Rotation)를 아래와 같이 설정한다.

b0baeee4a4f3fa3422c3dacbe763ca0b_1683098841_0638.png
 


3) Proximity Sensor의 레이블(Label) 선택 후 속성(Properties)에서 바인딩 태그(Binding Tag)를 설정한다.

b0baeee4a4f3fa3422c3dacbe763ca0b_1683098851_7517.png
 


4) Fan의 레이블(Label) 선택 후 속성(Properties)에서 바인딩 태그(Binding Tag)를 설정한 뒤, 더블클릭 후 아래와 같이 클릭 – 태그값 설정(Click – Tag Value)을 설정한다.

b0baeee4a4f3fa3422c3dacbe763ca0b_1683098864_8405.png
 



5. 프로젝트 실행하기

1) 프로젝트 저장 후 X-SCADA Viewer로 실행한다.

b0baeee4a4f3fa3422c3dacbe763ca0b_1683098873_4899.png
 


2) 아두이노 실습 키트의 예시 (와이파이(Wi-Fi)를 통한 MQTT 통신 모습)

b0baeee4a4f3fa3422c3dacbe763ca0b_1683098881_2116.jpg
 


0 답글
제목