• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar
  • Skip to footer

IoTmaker

사물인터넷에 대한 모든 것 여기서 해결하셔요!

  • 홈
  • 책:마이크로파이썬을 활용한 사물인터넷
  • 책:따라 하면서 배우는 사물인터넷
  • 온라인 교육 코스
  • 새로운 소식
  • 의견보내기
  • 내 수강정보
  • 로그인
  • 회원가입

ESP32

윈도우즈에 설치한 Mosquitto에 원격 접속허용하기

2021-08-23 작성자 IoTmaker 댓글 달기

책에서 사용하는 부품 구입하기

 1  Mosquitto는 초기설정으로는 동일 기기내에서만 접속이 됩니다.

윈도우즈에 Mosquitto를 설치하면 기본적으로 동일 기기(로컬 머신)에서만 접속이 허용됩니다.

외부 기기에서 원격 접속이 가능하도록 하기 위해서는 Mosquitto 설치 디렉토리에 있는 mosquitto.conf 파일의 내용을 다음과 같이 수정하여야 합니다.

mosquitto.conf 파일은 디렉토리 c:\Program Files\Mosquitto 또는 c:\Program Files (x86)\Mosquitto 안에 있습니다. 다만 이 파일은 일반 사용자 자격으로는 수정이 되지 않으므로 이 글 뒷부분의 mosquitto.conf 파일 수정하는 방법을 확인하시기 바랍니다.

해당 파일의 내용이 많으므로 두 군데만 표시합니다.

listner 1883을 지정합니다.
# On systems that support Unix Domain Sockets, it is also possible
# to create a # Unix socket rather than opening a TCP socket. In
# this case, the port number should be set to 0 and a unix socket
# path must be provided, e.g.
# listener 0 /tmp/mosquitto.sock
#
# listener port-number [ip address/host name/unix socket path]
listener 1883

# By default, a listener will attempt to listen on all supported IP protocol
# versions. If you do not have an IPv4 or IPv6 interface you may wish to
# disable support for either of those protocol versions. In particular, note
# that due to the limitations of the websockets library, it will only ever
# attempt to open IPv6 sockets if IPv6 support is compiled in, and so will fail
# if IPv6 is not available.
모든 사용자에게 접속을 허용할 때는 allow_anonymous true를 지정합니다.
# Defaults to false, unless there are no listeners defined in the configuration
# file, in which case it is set to true, but connections are only allowed from
# the local machine.
allow_anonymous true

# -----------------------------------------------------------------
# Default authentication and topic access control
# -----------------------------------------------------------------

# Control access to the broker using a password file. This file can be
# generated using the mosquitto_passwd utility. If TLS support is not compiled
# into mosquitto (it is recommended that TLS support should be included) then
# plain text passwords are used, in which case the file should be a text file
mosquitto.conf을 수정하여 저장한 후 다음과 같은 명령어로 mosquitto를 다시 실행합니다. mosquitto가 이미 실행중일 때는 그 터미널 화면을 종료하면 됩니다.

윈도우즈 키 + R을 누르면 팝업 화면이 나옵니다. cmd를 입력하면 윈도우즈 터미널 환경이 됩니다. 다음 명령어로 mosquitto를 실행합니다.

설치된 Mosquitto가 64비트 윈도우즈 버전일 때
cd c:\Program Files\Mosquitto
mosquitto -c mosquitto.conf -v
설치된 Mosquitto가 32비트 윈도우즈 버전일 때
cd c:\Program Files (x86)\Mosquitto
mosquitto -c mosquitto.conf -v

 2  mosquitto.conf 파일 수정하는 방법

mosquitto.conf 파일은 시스템 파일이므로 일반적인 사용자 자격으로는 수정이 수정이 불가능합니다. 다음의 링크에 그 파일을 수정할 수 있는 방법이 안내되어 있습니다.

mosquitto.conf 파일 수정이 거부되었을 때 해결 방법

카테고리:ESP32, IoTbook

ESP32의 아나로그 핀 사용법

2021-02-01 작성자 IoTmaker 댓글 달기

책에서 사용하는 부품 구입하기

 1  아나로그 입력

ESP32를 사용하는 개발 보드에서 아나로그 입력 핀을 사용하는 방법을 설명합니다.

아나로그 입력에 사용할 수 있는 핀

마이크로컨트롤러에는 아나로그 전압을 읽어서 디지털 형식의 숫자로 알려주는 장치가 있는데 이 것을 ADC(Analog to Digital Converter)라고 합니다. ESP32에는 두 개의 ADC장치가 있습니다. ADC장치1에는 8개의 채널이 있는데, 핀(GPIO) 32~39가 연결되어 있습니다. ADC장치2에는 10개의 채널이 있고, 핀(GPIO) 0, 2, 4, 12 ~ 15 ,25 ~ 27이 연결되어 있습니다.

ADC장치2는 WiFi 를 실행할 때 사용되므로 ADC장치2에 연결되어 있는 핀은 아나로그 입력용으로 사용하지 않는 것이 좋습니다. ADC장치1에 연결되어 있는 핀이 8개이긴 해도, 개발보드에 모두 노출되어 있지는 않고, 노출되어 있는 핀도 보드의 사정에 따라 사용이 제한될 수 있습니다. 핀을 제대로 사용하기 위해서는 사전에 개발 보드의 핀 특성을 미리 익혀 두어야 합니다.

[그림1]은 MH-ET LIVE ESP32 Mimikit이라는 ESP32 개발보드의 핀 구성도입니다. 이 보드에는 양쪽에 두줄로 핀이 있는데 안쪽 핀 두줄은 LOLIN(Wemos) D1 mimi의 핀과 호환이 됩니다. 그래서 이 보드에는 LOLIN(Wemos) D1 mini의 실드를 사용할 수 있습니다. (다만 베이스 실드를 사용할 때는 핀 간격 문제로 사용에 제약이 있습니다.)

[그림1] MH-ET LIVE ESP32 minikit 핀 구성도 (출처 www.esp32learning.com)

이 그림에 의하면 GPIO36,39,35,34를 아나로그 입력핀으로 사용하도록 권장하고 있습니다. ADC장치1에 연결되어 있는 나머지 핀(GPIO32,33)을 아나로그 입력핀으로 사용하기 위해서는 상황에 맞는테스트를 한 후, 정상 작동이 되는지 확인하여야 합니다. WiFI를 사용하지 않는 경우에는ADC장치2에 연결되어 있는 핀도 아나로그 입력핀으로 사용할 수 있지만, 다른 기능과 충돌이 되지 않도록 주의하여야 합니다.

ADC의 해상도(resolution)

입력된 아나로그 전압을 디지털 숫자로 표현할 때 그 정밀도를 해상도(또는 분해능)라고 합니다. ESP32의 해상도는 12비트이므로 입력되는 전압을 4096(=212) 단계로 나누어서 표시합니다. 그래서 0V는 0이 되고 최대 측정 전압이면 4095(=212-1)가 됩니다.

3.3V 기준의 개발보드에서 아나로그 핀에 걸리는 전압을 읽으면 0~4095의 값을 얻게 됩니다. 만약 핀에서 읽은 값이 512라면 핀에 걸리는 전압은 0.41(=3.3/4095*512)V입니다.

ESP8266(Wemos D1 mini)의 해상도는 10비트이므로, A0핀에 3.3V가 걸리면 읽을 수 있는 값은 1023(=210-1)입니다. (*실제로 테스트를 하면 1024가 읽힙니다. 1023이 읽히는 것이 바람직합니다.)
회로 구성하기

다음과 같이 Wemos D1 mini 기준 A0핀에 3.3V 핀을 연결한 회로를 만듭니다.

[그림2] 회로도(A0에 3.3V를연결하기)
analogRead()함수를 사용하기
[그림2]와 같은 회로에서 analogRead()함수로 값을 읽는 프로그램입니다.

analogRead_test1
const int A0pin = 36; // A0: Wemos D1 mini
void setup() {
  Serial.begin(115200);
  Serial.println();
  int readVal = analogRead(A0pin);
  Serial.println(readVal);
}

void loop() {
}

출력 결과:
4095

analogReadResolution()함수를 사용하기
analogReadResolution()함수를 사용하여 해상도를 설정할 수 있습니다. 이 때 값은 9~12(비트)사이에서 지정합니다.

analogRead_test2
const int A0pin = 36; // A0: Wemos D1 mini
void setup() {
  Serial.begin(115200);
  Serial.println();
  analogReadResolution(10); // 10bit 해상도로 설정
  int readVal = analogRead(A0pin);
  Serial.println(readVal);
}

void loop() {
}

출력 결과:
1023

 2  아나로그 출력

아두이노 우노나 ESP8266에서는 analogWrite() 함수를 이용하여 PWM 방식으로 아나로그 출력을 합니다. 그러나 ESP32에서는 analogWrite()함수를 기본으로 제공하지 않습니다. 그래서 아두이노 표준이 아닌 별도의 함수를 이용하여 PWM 출력을 하여야 합니다.

PWM을 위한 3개의 ledc함수군

ESP32에는 LED를 정교하게 다루기 위한 PWM 관련 함수가 준비되어 있습니다. 이러한 함수의 이름은 모두 ledc(LED Controller)로 시작합니다.

ESP32에는 PWM 제어를 위한 채널이 16개 있습니다.

 1   먼저 채널을 선택하여 속성을 정의하고, ledcSetup()
 2  이 채널에 한 개 또는 복수 개의 핀을 할당합니다.ledcAttachPin()
 3  마지막으로 채널에 듀티 사이클을 지정하여 PWM을 실행합니다.ledcWrite()

그러면 해당 채널에 딸린 모든 핀에 동시에 PWM이 출력됩니다.

즉, ESP32에서는 PWM을 출력할 때 핀 번호가 아니라 채널 번호 기준으로 실행합니다.

기능 함수 이름 인수
채널 설정ledcSetup채널 번호0~15
주파수(Hz)숫자를 직접 지정
듀티 해상도
(비트)
1~12
8로 지정하면 0~255까지의 듀티 사이클 사용 가능
채널에
핀 할당
ledcAttachPin핀 번호GPIO를 지정
채널 번호 채널 설정에서 지정한 채널번호
여러 개의 핀을 하나의 채널에 지정할 수 있음.
이 경우 채널에 연결되어 있는 모든 핀이 한꺼번에 동작함.
채널의
듀티 변경
ledcWrite채널 번호 채널 설정에서 지정한 채널번호
듀티 사이클예를들면 0~255
채널 설정에서 정한 듀티 해상도 범위의 값을 지정
회로 구성하기

다음과 같이 GPIO16과 17에 LED를 각각 연결한 회로를 만듭니다.

[그림3] 회로도(GPIO14에 LED 연결하기)
ledc함수군을 사용하여 LED의 밝기를 한꺼번에 바꾸기
[그림3]와 같은 회로에서 두 개의 LED의 밝기를 한꺼번에 연속적으로 바꾸는 프로그램입니다.

ledc_test1
const int ledPin1 = 16; // GPIO16 = D4(Wemos D1 mini)
const int ledPin2 = 17; // GPIO17 = D3(Wemos D1 mini)

// PWM 속성 지정
const int freq = 5000;    // 주파수(Hz)
const int ledChannel = 0; // 채널 번호
const int resolution = 8; // 0~255
 
void setup(){
  // 0번 채널을 지정함(5000Hz,8비트 해상도)
  ledcSetup(ledChannel, freq, resolution);
  
  // 0번 채널에 을 GPIO16과 17을 동시에 연결함
  ledcAttachPin(ledPin1, ledChannel);
  ledcAttachPin(ledPin2, ledChannel);
}
 
void loop(){
  // LED 밝기를 높임
  for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){   
    // 채널0(두 개의 핀)의 밝기를 PWM을 사용해서 바꿈
    ledcWrite(ledChannel, dutyCycle);
    delay(10);
  }

  // LED 밝기를 낯춤
  for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
    // 채널0(두 개의 핀)의 밝기를 PWM을 사용해서 바꿈
    ledcWrite(ledChannel, dutyCycle);   
    delay(10);
  }
}
외부 analogWrite함수를 사용하여 LED의 밝기를 한꺼번에 바꾸기

ESP32에서 공식적으로 제공하지는 않지만, 외부 인사(Abdelouahed ERROUAGUY)가 만든 analogWrite라이브러리를 여기(github)에서 다운로드 받아서 설치합니다.

프로그램 안에서는 #include <analogWrite.h> 지시어를 지정해야 합니다.

다음은 [그림3]와 같은 회로에서 두 개의 LED의 밝기를 한꺼번에 연속적으로 바꾸는 프로그램입니다.

analogWrite_test
#include <analogWrite.h>  // https://github.com/ERROPiX/ESP32_AnalogWrite
const int ledPin1 = 16; // GPIO16 = D4(Wemos D1 mini)
const int ledPin2 = 17; // GPIO17 = D3(Wemos D1 mini)

// PWM 속성 지정
const int freq = 5000;    // 주파수(Hz)
const int resolution = 8; // 0~255

void setup(){
  // 모든 핀의 주파수와 해상도를 지정함
  analogWriteFrequency(freq);   // 생략하면 기본값은 5000
  analogWriteResolution(resolution);   // 생략하면 기본값은 8
}
 
void loop(){
  // LED 밝기를 높임
  for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){   
    // 두 핀의 밝기를 PWM을 사용해서 바꿈
    analogWrite(ledPin1,dutyCycle);
    analogWrite(ledPin2,dutyCycle);
    delay(10);
  }

  // LED 밝기를 낯춤
  for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){
    // 두 핀의 밝기를 PWM을 사용해서 바꿈
    analogWrite(ledPin1,dutyCycle);
    analogWrite(ledPin2,dutyCycle); 
    delay(10);
  }
}

 3  ESP32 호환 보드 납땜 사례

MH-ET LIVE ESP32 minikit를 납땜하여 실드에 적층하여 사용하는 사례입니다. 안쪽에 있는 핀만 아래쪽으로 다리가 노출되어야 합니다.

[그림4] MH-ET LIVE ESP32 minikit 납땜 사례
[그림5] MH-ET LIVE ESP32 minikit를 납땜 후 트리플 베이스 실드에 적층한 사례(1)
[그림6] MH-ET LIVE ESP32 minikit를 납땜 후 트리플 베이스 실드에 적층한 사례(2)

카테고리:ESP32, IoTbook

Primary Sidebar

최신 글

  • 윈도우즈에서 Node-RED에 인증서 등록하고 SSL 적용하기
  • 윈도우즈에 Openssl 설치하고 인증서 만들기
  • 윈도우즈에 Node-RED 설치하고 실행하기
  • 아두이노 2.0 설치하고 ESP8266/ESP32 보드매니저 설정하기
  • 윈도우즈에 설치한 Mosquitto에 원격 접속허용하기

최신 댓글

    보관함

    • 2023년 3월
    • 2023년 2월
    • 2021년 8월
    • 2021년 2월
    • 2020년 10월
    • 2020년 8월
    • 2020년 7월

    카테고리

    • ESP32
    • ESP8266
    • IoT
    • IoTbook
    • Node-RED
    • 분류안됨

    메타

    • 로그인
    • 엔트리 피드
    • 댓글 피드
    • WordPress.org

    Footer

    Copyright © 2025 ·로그인