간단한 데스크탑 팬을 만드는 방법
3D 프린팅된 부품으로 구성하든 판지로 구성하든 이 저렴한 DIY 데스크탑 팬은 사용자와 장치를 시원하게 유지해 줍니다.
예산이 한정되어 있다고 해서 반드시 고급 DIY 프로젝트를 수행할 수 없다는 의미는 아닙니다. IoT 프로젝트를 확장하기 위해 작고 저렴하며 편리한 WiFi 모듈을 찾고 있다면 ESP-01 모듈이 탁월한 선택입니다. 그러나 이러한 모듈을 MQTT와 같은 경량 프로토콜과 통합하는 것은 특히 IoT 개발이 처음인 경우 까다로울 수 있습니다.
ESP-01 보드 단독 프로그래밍은 ESP8266 시리즈의 다른 모듈에 비해 어려울 수 있습니다. 그러나 간단하고 절차적인 방식으로 MQTT를 설정하는 방법뿐만 아니라 모듈 사용을 시작하는 데 필요한 모든 하드웨어 및 소프트웨어 설정의 기본 사항을 살펴보겠습니다.
이사회 알아보기
ESP8266 ESP-01은 IoT 애플리케이션을 위해 설계된 고집적 SoC인 ESP8266EX 칩과 함께 제공되는 작고 컴팩트한 WiFi 모듈입니다.
이 모듈에는 TCP/IP 프로토콜 스택이 있는 단일 칩 무선 마이크로컨트롤러가 포함되어 있으며 무선 네트워크에 연결하거나 액세스 포인트 역할을 할 수 있습니다. ESP-01 모듈에는 GPIO 핀, 전원 및 접지, UART 인터페이스에 대한 액세스를 제공하는 2x4 핀 헤더도 있습니다.
하드웨어 설정
이 모듈은 전혀 브레드보드 친화적이지 않습니다. 편의를 위해 사전 제작된 확장 보드를 구입하거나 점퍼 와이어와 브레드보드를 사용하는 구식 방식을 사용할 수 있습니다.
프로그래밍 경험을 쉽게 할 수 있는 전용 프로그래머인 ESP8266 직렬 모듈 보드가 있습니다. 이 방법을 선호하는 경우 DIYHOBI 에서 프로그래머(USB to TTL CH340G 변환기 모듈 어댑터 포함)를 사용하여 ESP-01 모듈에 프로그램을 플래시하는 방법에 대한 편리한 자습서를 제공합니다.
그러나 여전히 Arduino 보드를 사용하여 모듈을 프로그래밍할 수 있습니다. 아래 회로도를 참조하십시오.
매력적으로 보일 수 있지만 일반적으로 모듈을 Arduino의 3.3v 핀에 직접 연결하는 것은 핀이 제공하는 것보다 더 많은 전류가 필요하기 때문에 권장하지 않습니다. 대신 Arduino 5V를 LM1117/LD117과 같은 3.3V 전압 조정기에 연결한 다음 조정기에서 WiFi 모듈에 전원을 공급하십시오.
ESP의 VCC 및 CH_PD 핀을 Arduino의 5V 핀에 연결하지 마십시오 . 모듈을 5V 전원에 연결하면 모듈이 손상될 수 있습니다.
모든 커패시터는 10uF 이고 저항은 1K 저항입니다.
소프트웨어 요구 사항
ESP-01 모듈은 일반적으로 Arduino 플랫폼과 함께 사용됩니다. 따라서 소프트웨어 설정은 특히 Arduino C에 익숙한 경우 매우 간단합니다. 그러나 Raspberry에 더 익숙한 경우 시도할 수 있는 Raspberry Pi IoT 프로젝트가 많이 있습니다.
기본 요구 사항은 다음과 같습니다.
자체 MQTT 서버가 로컬에 있으면 프로젝트 내에서 유연성이 제공된다는 점을 기억해야 합니다.
필요한 라이브러리 설치
먼저 컴퓨터에 Arduino IDE를 다운로드하여 설치합니다. 설치가 완료되면 Arduino IDE를 열고 File > Preferences 로 이동합니다 .
추가 보드 관리자 URL 필드 에 다음 URL을 입력합니다.
http://arduino.esp8266.com/stable/package_esp8266com_index.json
확인을 클릭하여 기본 설정 창을 닫습니다.
그런 다음 도구 > 보드 > 보드 관리자 로 이동합니다 .
그런 다음 esp8266을 검색 하고 esp8266 보드 패키지를 설치합니다. 여기에는 ESP-01 모듈에 필요한 모든 라이브러리가 포함되어 있습니다.
PubSubClient 라이브러리를 설치하려면 Sketch > 라이브러리 포함 > 라이브러리 관리 로 이동합니다 .
PubSubClient 를 검색 하고 라이브러리를 클릭하여 설치합니다.
필요한 라이브러리를 모두 설치했으면 ESP-01 모듈 프로그래밍을 시작할 수 있습니다. 한 가지 유의할 점은 라이브러리에 포함된 Wifi.h를 사용하거나 ESPWifi.h 라이브러리를 다운로드하여 스케치에 포함할 수 있다는 것입니다.
ESP-01과 MQTT 브로커 간의 연결 설정
MQTT 브로커는 MQTT 클라이언트 간의 중개자 역할을 하는 서버입니다. 이를 통해 클라이언트는 게시-구독 모델을 통해 서로 메시지를 주고받을 수 있습니다.
ESP-01 모듈을 MQTT 브로커에 연결하려면 코드에 브로커의 IP 주소와 포트 번호를 지정해야 합니다. 또한 브로커에 ESP-01 모듈을 식별하는 고유한 클라이���트 ID를 제공해야 합니다.
먼저 스케치 상단에 필요한 라이브러리를 포함합니다.
#include ESP8266WiFi.h> #include PubSubClient.h>
다음으로 WiFi 및 MQTT 연결 세부 정보를 정의합니다.
const char* ssid = "YOUR_SSID"; const char* password = "YOUR_PASSWORD"; const char* mqtt_server = "YOUR_MQTT_SERVER";
자리 표시자를 자신의 WiFi 및 MQTT 연결 세부 정보로 바꾸는 것을 잊지 마십시오.
그런 다음 WiFi 클라이언트를 만들고 로컬 WiFi 네트워크에 연결합니다.
WiFiClient espClient; void setup_wifi() { delay(10); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); } }
이 함수는 스케치의 setup() 함수 에서 호출해야 합니다 .
다음으로 MQTT 클라이언트를 만들고 MQTT 브로커에 연결해야 합니다.
PubSubClient client(espClient); void reconnect() { while (!client.connected()) { if (client.connect("ESP01", mqtt_user, mqtt_password)) { // Subscribe to a topic client.subscribe("test/topic"); } else { delay(5000); } } }
MQTT 브로커에 연결하면 주제 게시 및 구독을 시작할 수 있습니다.
ESP-01에서 MQTT 브로커로 데이터 게시
이제 ESP01 모듈을 MQTT 브로커에 성공적으로 연결했으므로 ESP-01에서 브로커로 데이터를 게시하는 방법을 살펴보겠습니다.
데이터를 발행하려면 client.publish() 함수를 사용하여 inTopic 주제 에 메시지를 발행하십시오 .
client.publish("inTopic", "Hello from ESP-01");
이렇게 하면 "Hello from ESP-01" 메시지가 inTopic 주제에 게시됩니다.
ESP-01에서 브로커로 센서 데이터를 게시할 수도 있습니다. 예를 들어 ESP-01에 온도 센서가 연결되어 있는 경우 아래와 같이 브로커에 온도 데이터를 게시할 수 있습니다.
float temperature = 25.5; String temperatureString = String(temperature); char temperatureChar[5]; temperatureString.toCharArray(temperatureChar, 5); client.publish("Temp", temperatureChar);
이렇게 하면 Temp 항목 에 온도 데이터가 게시됩니다 .
데이터는 프로젝트 요구 사항에 따라 반복적으로 또는 정기적으로 게시할 수 있습니다. 너무 많은 데이터로 브로커를 넘치게 만들지 않고 적절한 간격으로 게시하고 있는지 확인하십시오.
ESP-01에서 MQTT 주제 구독 및 데이터 수신
주제를 구독하려면 client.subscribe() 함수를 사용하십시오. 아래 사례에서 클라이언트는 outTopic 주제를 구독합니다.
client.subscribe("outTopic");
주제를 구독하면 아래 스케치의 loop () 함수 에서 client.loop() 함수를 사용하여 해당 주제에 게시된 메시지를 수신할 수 있습니다.
void loop() { if (!client.connected()) { reconnect(); } client.loop(); }
이것은 지속적으로 새 메시지를 확인하고 새 메시지가 수신되면 콜백 기능을 실행합니다.
수신된 메시지를 처리하려면 아래와 같은 콜백 함수를 정의하십시오.
void callback(char* topic, byte* payload, unsigned int length) { // Print the received message Serial.print("Message received on topic: "); Serial.print(topic); Serial.print(". Message: "); for (int i=0;i Serial.print((char)payload[i]); } Serial.println(); }
이 함수는 구독한 주제에 대한 새 메시지가 수신될 때 호출됩니다. 수신된 메시지를 직렬 모니터에 인쇄합니다.
QoS(서비스 품질) 수준 및 보안 기능 사용
요청 처리에 사용되는 가장 중요한 기술 중 하나는 MQTT 메시지에 QoS(Quality of Service) 수준을 사용하는 것입니다. QoS 레벨은 브로커와 구독자가 메시지를 처리하는 방법을 정의합니다. QoS에는 0, 1, 2의 세 가지 수준이 있습니다.
QoS 레벨 0은 메시지가 한 번만 전송되고 가입자에게 전달되는 것이 보장되지 않으므로 가장 신뢰도가 낮습니다. QoS 레벨 1은 메시지가 한 번 이상 전송되고 가입자에게 한 번 이상 전달되도록 보장되므로 더 안정적입니다. QoS 레벨 2는 메시지가 정확히 한 번만 전송되고 가입자에게 정확히 한 번만 전달되도록 보장되므로 가장 안정적입니다. 장치가 통신하는 방식은 다른 일반적인 사물 인터넷(IoT) 보안 문제 및 최신 상태를 유지하려는 수정 사항 과 일치합니다 .
QoS 수준을 사용하려면 client.publish() 함수를 사용하여 메시지를 게시할 때 원하는 수준을 지정할 수 있습니다 .
client.publish("topic", "Hello, world!", 1);
그러면 Hello, world! 메시지가 게시됩니다. QoS 레벨 1 의 주제 주제 로 .
또 다른 고급 기술은 LWT(Last Will and Testament) 메시지를 사용하는 것입니다. LWT 메시지는 클라이언트가 예기치 않게 연결이 끊어졌을 때 브로커가 보내는 메시지입니다. 이는 오프라인 장치를 감지하거나 장치 연결이 끊어졌을 때 작업을 트리거하는 데 중요하다고 생각합니다.
LWT 메시지를 사용하려면 client.setWill() 함수 를 사용하여 브로커에 연결할 때 LWT 메시지를 지정할 수 있습니다 .
client.setWill("status", "offline", 1, true);
이렇게 하면 QoS 레벨 1 및 보유 플래그가 true 로 설정된 상태 항목 에서 LWT 메시지가 오프라인 으로 설정됩니다 .
다음 IoT 프로젝트를 위한 준비
ESP-01 모듈은 IoT 프로젝트를 위한 저렴하고 컴팩트한 솔루션이며 MQTT와 함께 사용하면 프로젝트를 한 단계 더 높일 수 있습니다. 초기 설정이 어려울 수 있지만 가벼운 통신 및 높은 확장성과 같은 MQTT의 이점은 투자 가치가 있습니다.