레이블이 MCU-ESP8266인 게시물을 표시합니다. 모든 게시물 표시
레이블이 MCU-ESP8266인 게시물을 표시합니다. 모든 게시물 표시

3/07/2021

ESP32 관련구성 및 VSCode

1. ESP32 EVM 구성 및 개발환경구성

  • ESP32 개발환경구조 

ESP-IDF라는 개발환경을 제공하고 있으며, ToolChain 과 기본API 제공해주고 있다. 
더불어 이런 API들을 Component 형식으로 묶을 수 있도록 기능을 제공 

현재 ESP-IDF 의 Stable Version: 4.2.1

  • ESP32 HW 전체구조(Block Diagram)
ESP32의 HW 전체 구조로 Core를 보면 Dual-Core 혹은 Single Core로 설정에 따라 동작가능하며, SRAM을 보면, 두가지로 나뉘어진다.
  1. Core-SRAM
  2. RTC-Memory(Recovery)
상위구조는 분리되어있는 것은 Power Management의 Deep Sleep 기능인 ULP/RTC로 전환될 경우 Core는 Off되므로 이를 저장할 공간이 필요해서이다.


Xtensa LX6 Core가 두개 각각 존재하지만 별도의 ULP(Ultra-low-Power) 즉 Co-processor가 존재하는데, DeepSleep으로 될 경우 사용되어지는데,
동작방식이 ARM과는 다르게 동작이 되어진다. 

ULP는 Core와 다르게 별도의 Co-Processor로 Core와 호환이 되지 않는다. 그리고 더불어 Power Management의 종류에 따라 
실행되는 단계가 나뉘어져 있어 관련부분은 Datasheet를 참조하다. 
세부내용 DeepSleep

  • ESP32 Core 종류
ESP32-xx Famliy로 분류가 되지만, 각 Core가 다르므로 주의하며, 현재 Dual Core로 구성되어있지만, Single Core으로만도 동작가능하다.
  1. ESP32: Tensilica 의 Xtensa LX6 
  2. ESP32-S2/S3: Tensilica 의 Xtensa LX7
  3. ESP32-C3/C6: RISC-V

세부설명 및 그림출처

ESP32 IC 정보와 ESP32 Module 정보

1.1 ESP32 EVM 및 HW 정보 



ESP32 Board Block Diagram 과 Pin Description  



1.2 ESP32/ESP8266 개발환경구성 

개발에서 사용되어지는 IDE로는 Ecplise 와 VSCode를 이용하면 될 것 이며, Window/Linux/MacOS를 전부 지원한다. 
세부설치 방법은 아래 링크 참조 

ESP32 Get Started Manual 

ESP8266 Get Started Manual 
이전과 구조가다르며, 이부분 추후에 다시 보도록하자 

ESP-IDF Source Download 


1.3  VS Code 설치 후 ESP-IDF 설치 

Window/Linux에서 둘다 진행가능하며, VS Code 의 Extension 에서 쉽게 개발환경을 찾아  구축가능하다. 

현재 CMake 와 Python 관련부분은 필요하다고 해서 별도로 설치 

  • 설치후 확인 사항 
F1 Key를 눌러 ESP-IDF를 선택하면 제공해주는 기능들이 나오며, 이 기능을 이용하여 쉽게 사용가능하다. 

ESP-IDF: Show Examples Project:  ESP32에서 제공해주는 Example들을 테스트 가능 
ESP-IDF: Build, Flash and start a monitor on your device :  Project를 Build Flash 후 확인

  • 설치 후 확인기능 
좌측 eFUSE Explorer :  ESP32의 Firmware 관련정보 MAC 정보 및 Firmware 정보 
ESP-IDF Examples: 상위에서  Show Examples를 이용하여 각 Example를 생성 


주의사항 
ESP-IDF Monitor (Serial) 가 동작되면, 상위 eFUSE는 사용하지 못함
eFUSE를 사용하고자 하면, ESP-IDF Monitor를 Kill로 죽이고 사용해야함 


1.4 OpenOCD 기능지원

기본동작방식 Serial로 연결되어있으며, 이 Serial은 OpenOCD를 이용하여 JTAG으로 이용가능하다. 
그래서 Serial 로 사용할지 JTAG으로 사용할지는 각 설정에 판단에서 사용해야한다. 


2. ESP-IDF API 관련정보 




2.1 ESP32 의 각 기능링크 

  • ESP32 Partition 
ESP32에서는 기본적으로 Partition Table이 존재하며, OTA를 진행한다면, 본인이 별도로 변경해서 설정하며, 관련예제도 존재

  • ESP32에 Flash를 할 경우 반드시 Bootloader 필수
build 내부에 flash_args 참조하면 전체구조를 파악가능하며, bootloader 이외 partition table 정보와 OTA관련된 정보가 필요함
세부적으로 분석하고자 하면 flash_args 파일분석 


  • ESP32 의 Error관련사항 정리
ARM이 아니므로, 관련 Exception 부터 관련 내용들을 자세히 보도록하자.

Guru Meditation Errors
CPU의 Exception을 말하며, Guru Meditation Errors와 함께 발생

Other Fatal Errors
Battery 문제라든지, Heap 문제라든지 상위 문제말고 다른 에러들 



  • ESP32 DeepSleep
Power Mode는 아래와 같이 구성이되어지는데, DeepSleep들어가면, ULP 사용 or ULP 미사용형식으로 동작한다.
세부적으로 RTC Timer + RTC Memory로만으로도 동작가능

ESP32 DeepSleep Manual 과 관련소스

https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf


  • ESP32 SRAM의 구조 

SRAM영역이 두개로 나누어져 있으며, 이는 Deep Sleep때문에 분할했으며, ARM으로 치면, TCM과 비슷할 것 같다.




  • RTC SRAM 의 Linker Script 와 Attribute 예제
  1. RTC_RODATA_ATTR
  2. RTC_DATA_ATTR
  3. RTC_FAST_ATTR 
  4. RTC_NOINIT_ATTR
  5. RTC_SLOW_ATTR

  • ESP32 의 Linker Script 
MCU에서 Linker Script는 중요하며, 사용법은 GCC와 거의 동일하므로, 아래 링크 참조

  • ESP32 개발환경 기반으로 Component 추가 개발 

ESP32 Build 방법 Manual

ESP32 Component 사용방법

ESP32 Component 추가 방법

ESP32 Component 추가 및 그외부분 결합예제

  • Bluetooth Provisioning

  • Bluetooth Client Server

  • Bluetooth Basic Article 

  • ESP32 12bit ADC 지원 (SAR ADC로 지원)
SAR ADC 동작원리


SAR 12bit ADC Noise 문제비교 
  1. No Capacitor:  가장 많은 Noise를 보이며, Sample 수가 200 즈음 왔을 때 안정적
  2. With Capacitor (0.1uF): 산발적인 Noise는 없으나 오차가 심함
  3. With Capacitor (0.1uF) and MulitiSampling:  Sample수가 60이상일 경우기준으로 보면 안정적 


ADC Calibration API를 제공 (각 Chip마다 각 ADC마다 차이)
  1. Y: 12bit 이므로 4096 값
  2. X: mV 값 
각 ADC Vref가 비교해보면, 아래와 같이 차이가 조금씩 발생하는데,이값을 eFUSE 에서 제공되는 값기반으로 API를 이용하여 보정가능 (default 1100mv)
아래의 그림을 보면, 각 Chip or 각 ADC 사이의 두개의 ADC Vref 가 차이가 생기는 곳이 1000mv~1200mv이며, 아래의 값처럼 다르며, 
그래서 기본값은 1100mV로 되어있는 것으로 보인다.
 
ADC의 Range는 attenuation 의 값에 조절되며, Range가 넓어질 수록 정확도는 떨어진다. 




ESP32의 ADC2 Limitation
ADC의 경우 ADC1 과 ADC2로 나뉘어지는 것으로 보이며, ADC2 사용할 경우 아래반드시 참조



  • ESP32 WIFI MESH


  • ESP32 Tools


2.2 IoT 와 각 Cloud 정보 

  • ESP32 와 각 Cloud 정보


AWS는 현재 FreeRTOS기반으로 각 IoT SW를 구축하고 있지만, 아직 안정적인 버전이 아니며, 개발버전으로 버그들이 많이 존재한다. 


6/07/2016

STM32F103x and ESP8266

1. STM32F10x

IOT에 관련된 개인일이 있어 잠시 STM과 ESP8266 조합으로 사용하여 Interface를 UART를 이용하여 IOT Device를 만든적이 있는데,
너무 쉽고 다양한 기능을 제공하여 간단히만 소개한다.
사실 MCU는 본인이 직접 선택하여 다른 것을 사용되며, MCU라서 금방배우고, 익힐 수 있기 때문에 구지 ST사 것을 사용할 필요 없다.
더 싼 Device가 있다면 그것으로 사용하면 그뿐이다.
ESP8266은 WIFI Module(AP/STA/AP+STA) 기능 및 다양한 기능을 제공하고 있어 많은 개발하기 편한 걸로 기억한다.

2. ESP8266

UART(Serial Interface)로 손쉽게 Wifi 기능은 물론 (STA와 AP) 선택도 쉽게 선택가능하며,
다양한 Server들을 자체 제공을 해주고 있어 HTTP,DHCP,FTP Server 같은 것들을 기본으로 제공하고 있어 IOT 개발에 있어서 편하게 사용되었다.
다만, Parser의 크기가 상당히 좀 큰 거 같아, Internet을 검색해보면 다 수정을 해서 사용한 것  같다.

내가 이것을 개발했을 때문만 해도 인터넷에 자료가 많이 없었는데, 최근들어 풍부하게 자료들이 많이 늘어 더욱 쉽게 개발이 가능할 것 같다.
자세히 더 다루고 싶지만, 현재 관련 IOT보드를 지인에게 돌려주었기 때문에 현재 기억나는부분과 관련사이트를 Link만 한다.

  https://en.wikipedia.org/wiki/ESP8266
  http://www.hardcopyworld.com/ngine/aduino/index.php/archives/1257

2.1 ESP8266 AT Commands Parser

  http://esp8266at.com/index.html#sect_requirements

    A. How to upgrade to latest firmware

  http://bbs.espressif.com/viewtopic.php?f=16&t=1613

    B. Flash Download Tool

  http://bbs.espressif.com/viewtopic.php?f=57&t=433

2.2 ESP8266 API Function 

  http://esp8266at.com/group___e_s_p8266___a_p_i.html
  http://esp8266at.com/group___e_s_p8266___functions.html

  http://www.espressif.com/en/support/download/sdks-demos?keys=&field_type_tid%5B%5D=14

5/26/2016

Javascript 과 AJAX 와 차트(Chart) 관련 자료

1. HTTP의 기본개념  

HTTP는 기본적으로 Client가 Methods기반의 TEXT를 Server에게 보내면 Server가 해당하는 일을 처리하고 Server 상태정보와 함께 관련된 값을 전송을 해주는 것이다.

예를들면 Client가 GET or POST로 Server에게 보내면 200 OK 함께 통신의 성공여부와 함께 관련 데이타를 보내주는 것이다.

  https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
  https://ko.wikipedia.org/wiki/HTTP

HTTP Protocol을 이해하면, SIP/RTSP등 IETF에서 만든 Protocol을 기본적으로 쉽게 이해하며, Protocol 구조가 TEXT기반으로 거의 유사하다

1.1 AJAX의 기본개념 

AJAX (Asynchronous JavaScript and XML)의 약어로 Client와  Server 양쪽에서 사용되어지는 Web 기술이다.

기존은 HTTP 1.1 기준으로 Web browser에서 HTTP를 이용하여 Client가 Server에게 Request (Get or Post)보내면 이에 해당하는 응답(200 OK) 함께 해당 HTML 을 제공해주는 방식이었다.
(물론 HTML과 CSS , Javascript 이 전부포함하여 전체 Web Page, 즉 HTML를 제공해준다)

하지만 기존의 HTTP에는 근본적인 문제가 있다. Client가 Server로부터 주기적으로 관련 Data를 받고자 한다면,  Web Server 부하가 심해진다.
왜냐하면, Web의 통신주체는 항상 Client이며, 관련된 Data 및 Web Page의 변경을 원한다면 Client가 요구가 있을 경우 변경되는 것이  HTTP Protocol의 문제이다.

이런 문제를 조금이나마 극복하고자 나온 기술이 AJAX이며 그 기술은 다음과 같다.
전체 Web Page를 Refresh or Update를 하는 것이 아니라 부분적으로 가능한 것이다.
이는 기존의 Web에서 Client가 값을 얻고 저장하는 방식이 GET/POST 방식을 넘어 다른 매개체를 이용하여 Web Server에게 통신을 하는 것이다.

1.2 기존 Web 모델과 AJAX Engine 모델 비교 

아래의 두 개의 Web Server 모델을 간단히 비교 분석을 해보자

좌측은 기존에 사용되었던 Web Server와 Client모델이며, 항상 Client가 요구시에만 Web Page의 반응을 하는 구조를 가지고 있다.

우측은 AJAX Engine지원이되는 모델이며 이는 Browser(Client)와 Web Server가 동시에 지원이 가능해야한다.
우선 기존모델에는 Web Server을 지원을 하며, 이와 더불어 AJAX Engine이라고 하는 것이 별도로 존재한다.
이는 기본의 Client와 Server 통신을 확장되어 Javascript에 의해 JSON, XML, HTML으로 Data를 Server에 전송하고 응답이 가능하다.

아래의 링크에도 자세한 설명이 포함이 되어있다.
https://en.wikipedia.org/wiki/Ajax_(programming)

아래의 그림을 보고 확장된 기능을 정확히 알아보자. Client는 Server의 상태를 매번 정확히 알고 싶을 경우가 있을 것이다.
이때 기존의 경우는 매번 HTTP를 Request를 해서 값을 얻어 전체 Web Page를 매번 가져와야한다.
하지만, AJAX를 이용한다고 하면, Client는 Javascript을 이용하여 주기적으로 해당값들을 Refresh가 가능하다. 이는 시스템의 부하의 영향이 달라진다.

이 과정을 살펴보면, Client는  Web Server로 전송하는 Request Data를  JSON/XML/HTML로 전송하여, 특정 HTML을 Refresh를 해주면 된다.
(Javascript의 value값을 Refresh가 가능하고, HTML의 값이 가능하다는 소리이다.)


http://stackoverflow.com/questions/11028122/how-update-panel-do-partial-postback-and-server-side-function-is-invoked-and-con

  • AJAX 관련 자료 (일반적인 개념 및 관련자료)
  https://developer.mozilla.org/ko/docs/AJAX/Getting_Started
  https://taegon.kim/archives/206


1.2 AJAX 통신 DATA 매개체 

Web Client는 Web Server로 부터 Data를 얻고 설정하기 위해서는 별도의 통신 매개체를 필요하며, 이는 Client와 Server가 서로 호환이 되어야한다.

현재 알고 있는 방식으로는 Web Client는 XML/JSON/HTML 방식으로 DATA를 요구하고 Web Server를 이해 해당하는 함수를 호출하여 Data값을 전송을 한다.

쉽게 예를 들면, Javascript의 특정변수 값을 주기적으로 받고자 하면, XML로 이를 넣어 Server에게 보내며, Server는 이에 관련된 Refresh하는 것이다.
많이 XML을 이용하여 Server의 원하는 Data를 얻겠지만  JSON이라는 것을 이용하여 얻는다고고 한다.

  https://www.w3schools.com/xml/ajax_intro.asp

A. JSON(JavaScript Object Notation)의 개념 

  http://www.json.org/json-ko.html
  https://ko.wikipedia.org/wiki/JSON

B. AJAX에서 JSON을 이용하여 Data 가져오기 

  http://code.jquery.com/
  http://et-day.tistory.com/entry/Javascript-ajax-%EB%A1%9C-JSON-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0

C. JQUERY-JSON GET, POST

  http://api.jquery.com/jquery.getjson/
  https://api.jquery.com/jquery.post/





1.3 AJAX의 사용법 

이 에 대해 좀 더 자세히 알고 싶다면, XmlHttpRequest 관련하여 검색을 해보거나, AJAX로 검색을 해보면 자세한 설명이 잘 나올 것이다.
많은 사람들이 JQUERY Library를 이용하여 사용하는 것 같으며 이와 관련부분을 알아보자.
상위 사이트에서 알아보자

아래의 그림을 설명과 Client와 Server를 보고 참고만 하자
  https://en.wikipedia.org/wiki/DWR_(Java)


 좌측의 메뉴 AJAX HOME부터 차례대로 예제를 실행 TEST가 가능
  http://www.w3schools.com/ajax/default.asp
  http://www.w3schools.com/ajax/ajax_xmlhttprequest_send.asp


2. AJAX 적용소스 (Chart관련부분)

아래의 Chart 소스는 AJAX를 적용했던 Chart 소스였으며, 이전에 이를 이용하여 Active-X와 연결하여 사용했던 일이 있다.
아래의 소스가 너무 좋은 예제이어서 지금도 기억을 하고 있다.

  http://www.flotcharts.org/
  http://www.flotcharts.org/flot/examples/realtime/index.html

이외에도 구글에서도 다양한 Chart를 제공을 한다.

2.1 기타 Javascript Chart 소스 및 참고 소스 

  • SVG와 VML관련 자료 및 Chart 
  SVG를 이용하여 Chart or 간단한 그림을 만드는 법을 소개하고 있다.
  http://mobicon.tistory.com/311


  • Google AJAX 
  http://www.htmldrive.net/items/show/1291/-CSS3-and-jQuery-Interactive-Graph
  https://developers.google.com/speed/libraries/#jquery


  • Web Design 및 관련 Interface 참고 사이트 
  http://blog.outsider.ne.kr/422
  http://iyfnzgb.com/?pid=9PO1H9V71&dn=webdesigneraid.com



  • Node.js 와 AJAX 차이 

  https://stackoverflow.com/questions/12089982/difference-between-ajax-and-node-js


  • Node.js

  https://www.w3schools.com/nodejs/default.asp


3. ESP8266 AJAX

ESP8266는 WIFI관련 제어모듈이며, (AP/STA 제어가 가능) 이곳에 HTTP Server도 지원이 가능하다 물론 모듈형태로 제공이되어 Firmware Upgrade로 가능하다

아래예제들을 보며 느낀 것이 최근나온 모델은 별도의 많은 연산이 필요 없다면 MCU 조차 필요가 없을 것 같다.

이에 관련응용은 참으로 신기할 뿐이며,  AJAX 및 Web socket이라는 것을 처음알게된 사이트이며, 정말 감사할 뿐이다.

  http://www.hardcopyworld.com/gnuboard5/bbs/board.php?bo_table=lecture_esp&wr_id=39
  http://www.hardcopyworld.com/gnuboard5/bbs/board.php?bo_table=lecture_esp&wr_id=41

  • ESP8266 관련 Firmware Source
 https://github.com/godstale/ESP8266_Sming_Examples/tree/master/Examples/HttpServer_AJAX
 https://github.com/godstale/ESP8266_Sming_Examples/tree/master/Examples/HttpServer_WebSockets