전체 글 34

[c/c++] PSTR(), F() 플래시 메모리에 값 저장

[c/c++] PSTR(), F() 플래시 메모리에 값 저장 아두이노나 다른 보드에서 메모리를 저장하는 부분은 SRAM과 FLASH로 나뉘어 있다고 보시면 됩니다. FLASH는 동작할 코드들이 저장되며, 컴퓨터에서 디스크(HD, SSD)에 해당됩니다. SRAM은 각종 변수가 저장되며, 컴퓨터의 RAM에 해당됩니다. 따라서 FLASH보다 용량이 적습니다. 아두이노의 공식사이트(https://www.arduino.cc/en/Tutorial/Foundations/Memory)에 따르면 아두이노의 메모리는 아래와 같이 되어 있습니다. 보시다시피 보통 FLASH에 비해 SRAM은 아주 작은 용량임을 알 수 있습니다. 실제로 코딩을 하다가 변수가 많이 사용되거나, 긴 문자열이 사용될 때에는 SRAM이 부족할 경우가..

개발/C와 C++ 2022.10.30

ESP8266(ESP-01, ESP-01S) SSE, 서버에서 클라이언트에게 데이터 전송

ESP8266(ESP-01, ESP-01S) SSE, 서버에서 클라이언트에게 데이터 전송 ESP8266에서 서버에서 데이터를 받고 싶다면, 고려해 볼 수 있는 SSE(Server Sent Events)에 관한 예제를 살펴보겠습니다. 파일 - 예제 - ESP8266WebServer - SeverSentEvents를 열어주시면 됩니다. SSE에 대해서 잠시 설명드리면, 클라이언트와 서버가 소통하는 방법중 하나인데, 기존에 양방향 소통이 가능하던 웹소켓과 달리 서버 → 클라이언트만 가능한 방법입니다. 그렇다면 웹소켓 방식에서 클라이언트 → 서버로 데이터를 주는 것만 사용 안 하면, 되지 않냐 하시겠지만 이는 배터리 소모면에서는 SSE를 선택하는 것이 좋습니다. 기본적으로 ESP 계열은 IOT나 배터리를 사용하..

ESP8266(ESP-01, ESP-01S) 웹서버 만들기, Html 출력하기

ESP8266(ESP-01, ESP-01S) 웹서버 만들기, Html 출력하기 이전 글(ESP 웹 서버에 문자 출력하기)에 이어서 이번에는 html 코드를 출력해보도록 하겠습니다. 마찬가지로 이를 하기 위해 적절한 예시가 있습니다. 예제 - ESP8266WebServer - PostServer를 선택해 줍니다. 이 예제는 ESP의 웹서버에 Post 요청을 하는 내용이 포함되어 있습니다. Post는 서버에 요청하는 방식 중 하나이며, 서버에 있는 어떤 리소스들을 변경, 생성하기 위함입니다. 당장 이해가 안 된다면, 예제를 차근차근 진행해주시기 바랍니다. #include #include #include #include #ifndef STASSID #define STASSID "your-ssid" #defin..

ESP8266(ESP-01, ESP-01S) 웹서버 만들기, 간단한 문자 출력

ESP8266(ESP-01, ESP-01S) 웹서버 만들기, 간단한 문자 출력 ESP01 시리즈로 서버를 만들어 봅니다. 서버는 클라이언트(ex 사용자)에게 정보를 제공해주는 시스템이라고 보시면 됩니다. 따라서 우리가 ESP가 만들어 놓은 서버에 브라우저를 통해서 접속을 할 수 있고, 제공하는 특정 정보를 볼 수 있습니다. 웹서버를 만드는 쉬운 예제가 있습니다. 파일-예제-ESP8266WebServer-HellowServer 입니다. 해당 예제를 선택해주면, 아래와 같은 코드들이 나타납니다. #include #include #include #include #ifndef STASSID #define STASSID "your-ssid" #define STAPSK "your-password" #endif co..

STA, AP와 와이파이 모드(WiFi mode)

STA, AP와 와이파이 모드(WiFi mode) STA는 Station의 약자이고, AP는 Access Point의 약자입니다. 보통 공유기나 wifi 관련 모듈에서 많이 접하셨을 법한 단어입니다. 설명은 AP 먼저 하겠습니다 Access Point는 공유기라고 생각하시면 됩니다. 다른 장치(디바이스, 휴대폰, 태블릿, 노트북 등)가 접속(Access)할 수 있는 곳(Point)이라 생각하시면 됩니다. STA 모드는 쉽게 생각해서 공유기(AP)에 접속할 수 있게, AP에서 뿌리는 데이터 신호들을 받을 수 있는 모드를 뜻합니다. 따라서 STA 모드를 하게 되면 공유기와 같은 역할을 수행하지 못합니다. STA와 AP를 둘 다 사용하고 싶을 때 STA-AP 모드를 사용할 수 있습니다. 이를 지원해 주는 모듈..

개발/통신 2022.10.09

ESP8266(ESP-01, ESP-01S) 와이파이 리스트 검색

ESP8266(ESP-01, ESP-01S) 와이파이 리스트 검색 이전 글에 이어서 ESP01을 기준으로 설명합니다. ESP01로 현재 있는 곳에 퍼지고 있는 와이파이가 어떤 것들이 있는지 확인할 수 있습니다. 다행히도 이 코드는 예제 파일에 포함되어 있습니다. 파일 - 에제 - ESP8266WIFI - WifiScan 예제를 선택해 주시면 됩니다. 코드는 아래와 같습니다. /* This sketch demonstrates how to scan WiFi networks. The API is almost the same as with the WiFi Shield library, the most obvious difference being the different file you need to include..

ESP8266(ESP-01, ESP-01S) 개요, 업로드하기

ESP8266(ESP-01, ESP-01S) 개요, 업로드하기 와이파이 기능을 사용할 수 있는 ESP8266칩을 장착한 모듈의 이름은 ESP-01, ESP-01S 으로 판매됩니다. 본체 프로세서 칩은 오른쪽과 같이 ESP8266EX로 되어 있습니다만 ESP8266으로 부릅니다. ESP8266, ESP-01등 혼용해서 사용되는데, 이는 칩과 모듈명으로 따로 구분하시는 것이 좋습니다. ※ 제조사에 따르면, ESP8266의 칩도 있지만 현재 대부분 판매, 생산되는 것은 ESP8266EX 입니다. ESP8266칩을 사용해서 만든 모듈이나 보드들은 많이 있기 때문에 해당 모듈의 데이터시트를 참고하여 개발하시거나 공부하시는 것을 추천드립니다. ESP-01 모듈은 저렴하고 자료가 많기 때문에 접근이 용이할 듯 합니다..

[c/c++] #pragma once, 헤더파일 중복 피하기

[c/c++] #pragma once, 헤더파일 중복 피하기 C/C++에서는 헤더 파일의 중복으로 2번 불러와질 수 있습니다. 이때에는 컴파일러 에러를 띄울 수 있습니다. // aa.h int add(int a, int b); //bb.h include "aa.h" int remove(int a, int b); //main.c or main.cpp include "bb.h" include "aa.h" // 2번 선언되는 경우 int main(){ ... } 위의 코드에서 aa.h 이 두 번 include 되었음을 알 수 있습니다. bb.h 헤더파일에서 한 번 include 되었는데 main 코드에서 한번 더 include이 되었습니다. 이런 경우를 방지하기 위해서 2가지 방법이 있습니다. #ifndef ..

개발/C와 C++ 2022.10.02

[ESP32 에러] rst:0xf (BROWNOUT_RST),boot:0x29 (SPI_FAST_FLASH_BOOT)

[ESP32 에러] rst:0xf (BROWNOUT_RST),boot:0x29 (SPI_FAST_FLASH_BOOT) ESP32를 PCB에 적용하거나 개발 키트를 활용할 때, BROWNOUT_RST 에러가 발생하는 경우가 있습니다. 이 에러는 ESP32에 공급되는 전력이 적거나 부족한 경우에 발생합니다. 따라서 ESP32 에 공급되는 전원을 충분히 해주고, 다시 시리얼 통신을 연결해주면 해당 에러는 발생하지 않게 됩니다. 저의 경우에는 PCB artwork를 만들 때, 레귤레이터와 esp32의 GND끼리 연결해주지 않는 해선 안 되는 실수를 저지르는 바람에 해당 에러가 발생했습니다. 물론 이 경우도 GND가 연결이 되지 않았기 때문에 전력이 충분히 공급되지 않았습니다.

SPI 통신

SPI 통신 SPI 통신은 Serial Peripheral Interface의 약자로 시리얼 통신 중 하나입니다. 이 SPI은 여러 가지가 있지만 기본적인 연결은 다음과 같습니다. 마스터 기기와 슬레이브 기기간의 통신의 연결입니다. 여기에 사용되는 MISO, MOSI, SCK, CS 핀은 기기나 제조사에 따라 다른 이름으로 불립니다. 이는 헷갈리기 쉽기 때문에 정리해둔 글을 참조해주시면 좋습니다. 일단 많이 사용되는 이름인 위 이름을 사용하겠습니다. 간단하게 핀을 알아보면 다음과 같습니다. MOSI (Master Out, Slave In) : 데이터를 슬레이브에서 받고, 마스터에서 나가는 핀 MISO (Master In, Slave Out) : 데이터를 마스터에서 받고, 슬레이브에서 나가는 핀 CS (C..