Espressif ESPRESSIF SYSTEMS (SHANGHAI) CO., LTD. ESP8266, ESP32, Etc. ESP32 Development environment ESP8266 ESP-01 module
ESP32 Development environment ESP-IDF(IoT Development Framework) Ref: https://github.com/espressif/esp-idf https://docs.espressif.com/projects/esp-idf Installation sudo apt-get install -y git wget libncurses-dev flex bison gperf python \ python-setuptools python-serial python-click python-cryptography \ python-pip python-future python- pyparsing python-pyelftools cmake ninja-build ccache mkdir ~/esp &&\ cd ~/esp &&\ git clone --recursive https://github.com/espressif/esp-idf.git cd ~/esp/esp-idf &&\./install.sh echo "export IDF_PATH=$HOME/esp/esp-idf. \$IDF_PATH/export.sh" sudo tee /etc/profile.d/espidf_set.sh > /dev/null
. /etc/profile.d/esp-idf_set.sh Examples ~/esp/esp-idf/examples 디렉토리에 있는 예제 중에 원하는 예제를 원하는 위치에 복사합니다. cd ~/esp &&\ cp -r $IDF_PATH/examples/get-started/hello_world. cd ~/esp/hello_world &&\ idf.py menuconfig #include <stdio.h> #include "freertos/freertos.h" #include "freertos/task.h" #include "esp_system.h" #include "esp_spi_flash.h" void app_main(void) { printf("hello world!\n"); /* Print chip information */ esp_chip_info_t chip_info; esp_chip_info(&chip_info); printf("this is ESP32 chip with %d CPU cores, WiFi%s%s, ", chip_info.cores, (chip_info.features & CHIP_FEATURE_BT)? "/BT" : "", (chip_info.features & CHIP_FEATURE_BLE)? "/BLE" : ""); printf("silicon revision %d, ", chip_info.revision); printf("%dmb %s flash\n", spi_flash_get_chip_size() / (1024 * 1024), (chip_info.features & CHIP_FEATURE_EMB_FLASH)? "embedded" : "external"); for (int i = 10; i >= 0; i--) { printf("restarting in %d seconds...\n", i); porttick_period_ms); } printf("restarting now.\n"); fflush(stdout); esp_restart(); vtaskdelay(1000 /
} idf.py build idf.py -p <PORT> flash idf.py -p <PORT> monitor ctrl + ] 단축키로 모니터를 종료할 수 있습니다. Arduino Ref: https://github.com/espressif/arduino-esp32/ #include "freertos/freertos.h" #include "freertos/task.h" #include "esp_task_wdt.h" #include "Arduino.h" TaskHandle_t looptaskhandle = NULL; #if CONFIG_AUTOSTART_ARDUINO bool looptaskwdtenabled; void looptask(void *pvparameters) { setup(); for(;;) { if(looptaskwdtenabled){ esp_task_wdt_reset(); } loop(); } } extern "C" void app_main() { looptaskwdtenabled = false; initarduino(); xtaskcreateuniversal(looptask, "looptask", 8192, NULL, 1, &looptaskhandle, CONFIG_ARDUINO_RUNNING_CORE);
} #endif
ESP8266 ESP-01 module Pin-out Pin 3.3 V VCC ALL (3.0 V VDDx ~ 3.6 V) GNDGround Ground U0TXD UTXDGPIO1 TX SPI_CS1 U0RXD URXD - RX GPIO3 파워 다운, CH_PD CHIP_PU ActiveLOW
Pin 리셋, RST EXT_RSTB ActiveLOW GPIO0 GPIO0 - 부트 옵션 설정 SPI_CS2 GPIO2 GPIO2 - 부트 옵션 설정 I2C_SDA Boot options GPIO0 GPIO2 MODE L H UART H H SPI Flash flash AT AT format 타입 명령어 형식 설정 명령어의 AT+ 명령어 설명 변수, 설정 =? 범위 등 확인 설정 확인 설정 AT+? 현재 설정된 값 확인 AT+ =<...>
타입 실행 명령어 형식 AT+ 설정 변수가 없는 명령 실행 모든 명령어가 위 4 가지 형식을 모두 지원하는 것은 아닙니다. 문자열 ""변수의 큰따옴표를 경우 사용해야 합니다. 명령어는CR(\r) 대문자로 구성되어 LF(\n)을 있으며, 마지막에 붙여야 합니다. _CUR 명령어는 설정이 Flash에 저장되지 않고, _DEF 명령어는 설정이 Flash에 저장됩니다. AT basic commands AT @brief 테스트 명령어 AT+RST @brief 재시작 AT+GMR @brief 버전 확인 ATE<on/off> @brief 입력된 명령어 출력 @param <on/off> 0 이면 명령어 실행 결과만 출력, 1 이면 입력한 명령어와 실행 결과 출력 AT+RESTORE @brief 설정 초기화 AT+UART_CUR=<baudrate>,<databits>,<stopbits>,<parity>,<flow control> AT+UART_DEF=<baudrate>,<databits>,<stopbits>,<parity>,<flow control>
@brief 현재 UART 통신 설정 @param <baudrate> 기본 115200 @param <databits> 5 ~ 8, 기본 8 @param <stopbits> 1: 1-bit stop bit 2: 1.5-bit stop bit 3: 2-bit stop bit, 기본 1 @param <parity> 0: None 1: Odd 2: Even, 기본 0 @param <flow control> 0: not enabled 1: enable RTS 2: enable CTS 3: enable both RTS and CTS, 기본 0 Wi-Fi AT 명령어 AT+CWMODE_CUR=<mode> AT+CWMODE_DEF=<mode> @brief 와이파이 모드 설정 @param <mode> 1: Station mode 2: SoftAP mode 3: SoftAP+Station mode AT+CWJAP_CUR=<ssid>,<pwd>[,<bssid>][,<pci_en>] AT+CWJAP_DEF=<ssid>,<pwd>[,<bssid>][,<pci_en>] @brief AP(Wireless Access Point)에 연결 @param <ssid> 무선 네트워크 명, 문자열 @param <pwd> 암호, 문자열 @param <bssid> 옵션 변수, AP의 MAC 주소, 문자열 @param <pci_en> 옵션 변수, WEP 또는 OPEN AP 연결을 허용하지 않고, PCI 인증을 위해 사용 가능 @warning, " \ 등의 특수문자는 \ 를, 붙여 ->사용해야함. \,, ex) " -> \", \ -> \\ AT+CWLAP @brief 연결 가능한 AP 검색 @return +CWLAP:<ecn>,<ssid>,<rssi>,<mac>,<channel>,<freq offset>, <freq cali>,<pairwise_cipher AT+CWQAP @brief AP 연결 종료
AT+CWAUTOCONN=<enable> @brief 켜졌을 때, 자동 AP 연결 설정 @param <enable> 0: does NOT auto-connect 1: connects to AP automatically AT+CIPSTA_CUR=<ip>[,<gateway>,<netmask>]AT+CIPSTA_DEF=<ip>[,<gateway>,<netmask>] AT+CIPAP_CUR=<ip>[,<gateway>,<netmask>] AT+CIPAP_DEF=<ip>[,<gateway>,<netmask>] @brief 고정 IP 설정(Station 모드, SoftAP 모드) @param <ip> 할당받고 싶은 IP, 문자열 @param <gateway> AP gateway, 문자열 @param <netmask> AP netmask, 문자열 TCP/IP AT 명령어 AT+CIPSTATUS @brief 연결 상태 확인 AT+CIPSTART=[<link ID>,] "TCP",<remote IP>,<remoteport>[,<TCP keep alive>]at+cipstart=[<link ID>,] "UDP",<remote IP>,<remoteport>[,(<UDP local port>),(<udp mode>)] @brief TCP, UDP 연결 설정 @param <link ID> 옴션 변수, 다중 연결(AT+CIPMUX=1) 시 사용, 0 ~ 4 @param <remote IP> 접속할 IP 또는 도메인, 문자열 @param <remote port> 접속할 포트 @param <TCP keep alive> 옵션 변수, 0: disable 1 ~ 7200: detection time interval; unit: second (s). @return 정보가 오면 +IPD,[길이]:[내용] 형식으로 반환 AT+CIPSEND @brief 단일 연결(AT+CIPMUX=0) transparent transmission mode(at+cipmode=1) 에서 데이터를 연속으로 송신 패킷은 최대 2048 bytes, 20 ms 간격으로 송신
+++만 포함한 패킷을 송신하면 명령 모드로 복귀, 적어도 1초 후 AT 명령어를 사용해야함 +++CRLF로 보내면 안됩니다. AT+CIPSEND=[<link ID>,]<length>[,<remote IP>,<remote port>] @brief >를 반환 받고, length 만큼 문자열을 입력하면 입력한 문자열 데이터 전송 @param <link ID> 옴션 변수, 다중 연결(AT+CIPMUX=1) 시 사용, 0 ~ 4 @param <length> 입력할 문자열 bytes, 최대 2048 @param <remote IP> 옴션 변수, 접속할 IP 또는 도메인, 문자열, UDP 전송 시에만 사용 가능 @param <remote port> 옵션 변수, 접속할 포트, UDP 전송 시에만 사용 가능 AT+CIPSENDEX=[<link ID>,]<length>[,<remote IP>,<remote port>] @brief >를 반환 받고, length 만큼 문자열을 입력하거나 \0 문자열이 나타나면 입력한 문자열 데이터 전송 @param <link ID> 옴션 변수, 다중 연결(AT+CIPMUX=1) 시 사용, 0 ~ 4 @param <length> 입력할 문자열 bytes, 최대 2048 @param <remote IP> 옵션 변수, 접속할 IP 또는 도메인, 문자열, UDP 전송 시에만 사용 가능 @param <remote port> 옵션 변수, 접속할 포트, UDP 전송 시에만 사용 가능 AT+CIPCLOSE[=<link ID>] @brief 연결 해제, TCP의 경우 자동 연결 해제 전에 명령어를 통해 연결 해제 가능, UDP는 명령어 이후 연결 해제 @param <link ID> 옵션 변수, 다중 연결(AT+CIPMUX=1) 시 사용, 0 ~ 4, 5 를 입력하면 모든 접속 종료 AT+CIFSR @brief ESP8266의 IP, MAC 주소 확인 AT+CIPMUX=<mode> @brief 다중 접속 설정, 모든 연결이 끊겨있을 때 설정 가능 @param <mode> 0: single connection 1: multiple connections AT+CIPSERVER=<mode>[,<port>] @brief TCP 서버 설정, 다중 연결(AT+CIPMUX=1) 시 사용 가능
@param <mode> 0: deletes server 1: creates server @param <port> 기본 333 AT+CIPMODE=<mode> @brief 송신 모드 설정 @param <mode> 0: normal transmission mode 1: transparent transmission mode AT+CIPSTO=<time> @brief 서버 타임 아웃 설정 @param <time> 0~7200 초 설정 가능, 0으로 설정하면 타임 아웃 안됨 AT+PING=<remote IP> @brief PING 패킷 전송 @param <remote IP> 접속할 IP 또는 도메인, 문자열 AT+CIPDINFO=<mode> @brief 접속한 IP,port 정보 반환 설정 @param <mode> 0: does not show the remote IP and port with +IPD. 1: shows the remote IP and port with +IPD. +IPD[,<link ID>],<len>[,<remote IP>,<remote port>]:<data> @brief 수신된 네트워크 데이터 @param <link ID> 다중 연결(AT+CIPMUX=1) 시 반환, 0 ~ 4 @param <len> 수신된 데이터 bytes 수 @param <remote IP> 접속한 IP 반환, 접속 정보 반환 설정(AT+CIPDINFO=1) 시 반환 @param <remote port> 접속한 포트 반환, 접속 정보 반환 설정(AT+CIPDINFO=1) 시 반환 @param <data> 수신된 데이터 HTTP GET
AT+CWMODE_DEF=1\r\n AT+CWJAP_DEF=<ssid>,<pwd>\r\n AT+CIPMUX=0\r\n AT+CIPMODE=1\r\n AT+CIPSTART="TCP",<remote IP>,<remoteport>\r\n AT+CIPSEND\r\n > GET /xxx/xxx?key1=value1&key2=value2 HTTP/1.1\r\n HOST: xxx.xxx\r\n \r\n\r\n HTTP POST AT+CWMODE_DEF=1\r\n AT+CWJAP_DEF=<ssid>,<pwd>\r\n AT+CIPMUX=0\r\n AT+CIPMODE=1\r\n AT+CIPSTART="TCP",<remote IP>,<remoteport>\r\n AT+CIPSEND\r\n > POST /xxx HTTP/1.1\r\n HOST: xxx.xxx\r\n Content-Type: application/json;charset=utf-8\r\n Content-Length: 내용 길이\r\n \r\n 내용