웹사이트 검색

Linux에서 Mongoose를 사용하여 ESP8266용 네트워크 애플리케이션 개발


이 페이지에서

  1. 누구인가
    1. ESP8266
    2. 몽구스
    3. 리눅스

    1. NodeMCU
    2. 외부 UART-USB 변환기와 연결\n

    1. 연결 확인 중\n
    2. \액세스 거부 오류 수정

    Linux에서 Mongoose Embedded Web Server를 사용하여 ESP8266 칩용 네트워크 애플리케이션 개발을 시작하는 방법에 대해 논의해 보겠습니다. 나는 우분투를 사용할 것이지만 모든 것이 모든 리눅스 배포판에 쉽게 적용될 수 있습니다.

    누가 누구입니까

    이 기사를 읽기 시작했기 때문에 Linux, ESP8266 및 Mongoose에 대해 알고 있다고 가정합니다. 그래서 짧은 소개만 하겠습니다.

    ESP8266

    Expressif에서 개발한 WiFi 통합 저가형 칩. 더 자세한 내용을 알고 싶다면 공식 사이트를 확인하세요.

    몽구스

    Mongoose는 Cesanta에서 개발한 코어가 40kB 미만인 완전한 다중 프로토콜 라이브러리입니다. Cesanta 사이트에서 이에 대한 모드 정보를 찾으십시오.

    리눅스

    진짜? :-)

    ESP8266을 컴퓨터에 연결하기

    자, 먼저 ESP8266 칩을 컴퓨터에 연결해야 합니다. 여러 가지 방법으로 할 수 있습니다.

    노드MCU

    온보드 UART-to-USB 변환기가 있는 NodeMCU 모듈이 있는 경우 USB를 통해 모듈을 컴퓨터에 연결하기만 하면 됩니다. 키스!

    외부 UART-USB 변환기와 연결

    ESP 모듈에 내부 UART-USB 변환기가 없으면 외부 변환기가 필요합니다. 그것들의 톤이 있습니다-구글 만하세요.

    Linux(기본적으로 대부분)에서 작동하고 3.3V 핀이 있는 것을 선택하고 기억하십시오. 대부분의 UART-USB 변환기에는 3.3V 및 5V 모두에 대한 핀이 있지만 ESP를 5V 핀에 연결해서는 안 됩니다. 이 장치는 전압에 내성이 없으며 모듈을 태울 수 있습니다.

    이제 연결(ESP -> 변환기):

    VCC -> 3.3V

    접지 -> 접지

    RX0 -> TX (RX 아님)

    TX0 -> 수신

    CH_PD -> 3.3V

    아두이노와 연결

    UART-USB 변환기가 없지만 3.3V 핀이 있는 Arduino가 있는 경우 ESP를 연결하는 데 쉽게 사용할 수 있습니다.

    1. USB를 통해 Arduino를 컴퓨터에 연결\n
    2. Arduino의 RESET을 GND에 연결: UART-USB 모듈만 필요하므로 호스트 프로세서를 비활성화해야 합니다.\n
    3. ESP 연결(ESP -> 아두이노)
      1. VCC -> 3.3V
      2. GND -> GND
      3. RX0 -> RX0 (TX 아님)
      4. TX0 -> TX
      5. CH_PD -> 3.3V

      연결 확인 중

      연결이 정상이면 ESP가 새 tty 장치로 나타나야 합니다. 일반적으로 UART-USB 변환기를 통해 연결된 NodeMCU와 ESP는 /dev/ttyUSBx(x = 0, 1, 2 등)로 표시되고 Arduino의 버전은 /dev/ttyACMx(x = 0, 1, 2 등)로 표시됩니다.

      dmesg | 명령을 사용할 수 있습니다. grep usb 를 사용하여 장치를 찾으십시오.

      예를 들어 NodeMCU를 연결하면 다음과 같은 내용이 표시됩니다.

      [  1496.765417] usb 2-3.3: new full-speed USB device number 15 using xhci_hcd
      [ 1496.867729] usb 2-3.3: New USB device found, idVendor=10c4, idProduct=ea60
      [ 1496.867736] usb 2-3.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
      [ 1496.867740] usb 2-3.3: Product: CP2102 USB to UART Bridge Controller
      [ 1496.867743] usb 2-3.3: Manufacturer: Silicon Labs
      [ 1496.867745] usb 2-3.3: SerialNumber: 4202
      [ 1497.900384] usbcore: registered new interface driver usbserial
      [ 1497.900423] usbcore: registered new interface driver usbserial_generic
      [ 1497.900457] usbserial: USB Serial support registered for generic
      [ 1497.903897] usbcore: registered new interface driver cp210x
      [ 1497.903989] usbserial: USB Serial support registered for cp210x
      [ 1497.904382] usb 2-3.3: cp210x converter now attached to ttyUSB0

      보다시피 NodeMCU는 이제 /dev/ttyUSB0로 사용할 수 있습니다.

      최종 확인으로 아무 터미널이나 사용하여 새 기기에 연결합니다. 피코콤을 이용하겠습니다. 이것은 경량 터미널입니다. 우분투에서는 다음과 같이 설치할 수 있습니다.

      sudo apt install picocom

      견딜 수 없는:

      picocom /dev/ttyUSB0 -b 115200

      모든 것이 정상이면 picocom 출력에 "Terminal ready”가 표시되어야 합니다.

      액세스 거부 오류 수정

      picocom이 "액세스 거부\라고 표시되면 일반적으로 현재 사용자가 dialout 그룹의 구성원이 아님을 의미합니다. Linux에서 직렬 포트에 액세스하려면 사용자가 이 그룹의 구성원이어야 합니다.

      달리다:

      sudo usermod -aG docker $USER

      명령, 로그아웃, 다시 로그인하고 ESP 연결을 다시 시도하십시오. \액세스 거부됨이 사라집니다.

      몽구스 만들기

      여기에서 최신 몽구스 릴리스를 다운로드하십시오.

      몽구스는 ESP8266 및 RTOS SDK용 예제와 함께 제공됩니다. Turorial 및 샘플 코드는 여기에 있습니다.

      참고: ESP8266에는 두 가지 버전의 SDK가 있습니다. 첫 번째는 비 OS이고 두 번째는 RTOS 기반입니다. 이 글에서는 후자를 사용하겠습니다. 차이점을 찾으려면 Google에서 검색하거나 공식 포럼에서 이 답변을 읽어보세요.

      예제를 빌드하려면 두 가지 옵션이 있습니다.

      1. 도커 및 바로 사용할 수 있는 도커 이미지 사용\n
      2. 컴퓨터에 SDK 및 도구 체인 설치\n

      도커 사용

      이것은 더 간단하고 더 나은 방법이라고 생각합니다. Cesanta의 도커 이미지에는 ESP용 Mongoose를 빌드하는 데 필요한 모든 것이 포함되어 있습니다(Mongoose뿐만 아니라 모든 ESP 애플리케이션). 따라서 로컬에 설치할 필요가 없으며 친구 및 동료와 코드를 쉽게 공유하여 펌웨어를 빌드하고 정확히 동일한 결과를 얻을 수 있습니다.

      도커 설치 가이드는 여기에서 확인할 수 있습니다. 정말 간단합니다. 도커 저장소를 Linux에 추가하고 apt를 사용하여 일반적인 프로그램으로 설치하기만 하면 됩니다.

      도커가 설치되면 mongoose/examples/ESP8266_RTOS 폴더로 이동하여 build.sh를 실행합니다.

      첫 번째 빌드에서 도커는 필요한 이미지를 다운로드합니다. 인터넷 채널에 따라 다소 시간이 걸릴 수 있습니다. 하지만 ./bin 폴더에 build.sh가 완료되면 두 개의 .bin 파일을 찾을 수 있습니다.

      그것이 바로 펌웨어입니다. 당신은 이것을했다!

      로컬 SDK 사용

      Docker가 너무 단순하거나 어떤 이유로든 로컬에 설치된 도구를 사용하려는 경우 그렇게 할 수도 있습니다.

      조금 더 어렵고 지루하지만 너무 복잡하지는 않습니다. 특히 Cesanta가 귀하를 위해 몇 가지 도구를 구축했으며 귀하가 소스에서 이러한 도구를 구축할 필요가 없다는 점을 감안할 때.

      작동 방식은 다음과 같습니다.

      1. 이 저장소에서 ESP RTOS SDK를 복제합니다. 예제 makefile은 /opt/ESP8266_RTOS_SDK 폴더에서 이를 찾습니다. 따라서 복제된 리포지토리를 이 폴더에 넣거나 예제를 빌드하기 전에 경로를 수정할 수 있습니다(아래 참조).\n
      2. 이 공용 폴더에서 xtensa-lx106-elf.tar.bz2를 다운로드합니다.\n
      3. xtensa-lx106-elf.tar.bz2 파일의 압축을 풉니다. 예: /opt 폴더:

        sudo tar -xvf xtensa-lx106-elf.tar.bz2 -C /opt

      4. PATH 변수를 수정합니다. 예를 들어 툴체인을 /opt 폴더에 압축 해제한 경우 다음 명령을 사용합니다.

        export PATH=/opt/xtensa-lx106- 엘프/빈:PATH\n

      (또한 시스템 재부팅 후에도 변경 사항을 유지하려면 이 명령을 .bashrc 또는 .profile 폴더에 추가하는 것이 좋습니다.)

      이제 다음을 실행하십시오.

      $ export SDK_PATH=/opt/ESP8266_RTOS_SDK  # Put your path to SDK here
      $ export BIN_PATH=./bin; mkdir ./bin
      $ make clean; make BOOT=none APP=0 SPI_SPEED=40 SPI_MODE=dio SPI_SIZE_MAP=0

      이제 모든 것이 올바르게 설치되었으면 ./bin 폴더에 펌웨어가 있을 것입니다.

      또 해냈어!

      점멸 ESP

      ESP8266을 플래시하는 데 사용할 수 있는 많은 도구가 있습니다. 우리는 esptool을 사용할 것입니다. 이를 사용하려면 이 리포지토리를 복제하고 PATH 변수에 esptool.py 경로를 추가합니다(선택 사항이며 편리함).

      이제 picocom이 아직 연결되어 있으면 연결을 끊고(힌트: 종료하려면 Ctrl+A, Ctrl+D를 누름) 다음을 실행합니다.

      esptool.py --port /dev/ttyUSB0 --baud 230400 \
         write_flash --flash_mode=dio --flash_size=4m \
         0x00000 ${BIN_PATH}/eagle.flash.bin \
         0x20000 ${BIN_PATH}/eagle.irom0text.bin \
         0x7e000 ${SDK_PATH}/bin/esp_init_data_default.bin

      중요 참고 사항: 모듈이 NodeMCU가 아닌 경우 플래싱하기 전에 GPIO0을 접지해야 합니다(접지 GPIO0은 모듈을 플래싱 모드로 전환함). 깜박임 후 접지에서 GPIO0을 분리하고 ESP를 다시 시작하십시오.

      오류가 발생하지 않으면 다음과 같은 출력이 표시됩니다.

      Connecting...

      Erasing flash...

      Took 0.58s to erase flash block

      Wrote 35840 bytes at 0x00000000 in 1.8 seconds (157.5 kbit/s)...

      Erasing flash...

      Took 2.02s to erase flash block

      Wrote 301056 bytes at 0x00020000 in 15.4 seconds (156.7 kbit/s)...

      Erasing flash...

      Took 0.11s to erase flash block

      Wrote 1024 bytes at 0x0007e000 in 0.1 seconds (163.5 kbit/s)...

      Leaving…

      준비가 된! 이제 장치가 펌웨어로 플래시됩니다.

      첫 번째 결과

      이제 "Mongoose\ WiFi 네트워크가 표시되어야 합니다. 예제는 AP를 설정합니다. 암호 "Mongoose\를 사용하여 연결한 다음 http://192.168.4.1/로 이동하면 "Hello, 세계' 인사말 페이지입니다.

      축하합니다! ESP8266에서 웹 서버를 실행하기만 하면 됩니다!

      다음 단계

      다음 단계는 귀하에게 달려 있습니다. 설명된 예를 시작점으로 사용할 수 있습니다.

      user_main.c 파일을 살펴보십시오. WiFi 액세스 포인트를 설정하고 웹 서버를 시작합니다. AP 모드를 스테이션 모드로 쉽게 변경(및 WiFi 네트워크에 연결)하고 Mongoose API를 사용하여 원하는 것을 구현할 수 있습니다. 이것은 Mongoose를 사용하는 일반적인 방법이므로 다른 Mongoose 예제를 사용하여 프로그램을 빌드하고 ESP 장치에서 http, tcp, udp, mqtt 및 더 많은 기능을 사용할 수 있습니다.

      Espressif 문서(예: Mongoose 기능을 발견하기 위한 문서)를 사용합니다.

      펑크 죽은!