분류 전체보기 272

ESP-WROOM-32 보드 사용하기 2편(WIFI)

안녕하세요. 오늘은 ESP32보드로 WIFI기능을 사용해보겠습니다. 먼저 WIFI기능을 사용하기전에 알아야 할 개념과 WIFI를 이용해서 WEB으로 통신을 할것이므로 HTTP에 대해서도 알아보겠습니다.1. ESP32 WIFI mode에는 3가지가 있습니다1) AP(Access Point) MODE : 다른 디바이스들이 연결가능한 모드입니다. (공유기와 유사합니다) 예를들어 WIFI가 없는 곳에서 ESP32를 AP모드로 만들고 핸드폰에서 ESP32와 연결한다음 ESP32로부터 데이터를 받을 수 있습니다. 2) STA(station) MODE : 공유기에 접속할수있는 모드입니다. 3) STA+AP MODE : AP모드와 STA모드 모두를 사용할 수 있는 모드입니다. 예를들어 초기에 STA모드로 설정하여 WI..

ESP-WROOM-32 보드 사용하기 1편(개발환경)

안녕하세요. 오늘은 ESP-WROOM-32보드의 개발환경을 구축해보겠습니다.해당보드는 espressif사의 제품이고 기본적인 통신(UART,SPI,I2C..)외에 무선통신(WIFI, BLUETOOTH, BLE)를 지원합니다. 개발환경은 아두이노로 구성하겠습니다.*보드 특징플레시메모리가 448kB이고 UART가 3개나 있습니다. 보드에 CP2102가 있어서 1개는 CP2102에 연결되어있습니다. 그래서 USB로 UART통신이 가능하고 펌웨어다운로드도 별도의 장비가 필요없습니다.*개발환경구축하기 (아두이노 2.2.1 기준)1) Arduino IDE를 다운받습니다 (https://www.arduino.cc/en/software)2) File -> Preferences를 클릭합니다3) Additional boa..

파이썬으로 조이스틱 제어하기 (USB HID)

안녕하세요. 오늘은 조이스틱을 사용해보겠습니다. 조이스틱은 아래의 제품을 사용했습니다.https://www.devicemart.co.kr/goods/view?no=1377049해당제품은 라즈베리와 호환되는 제품인것같고 일반PC에서 사용하려면 USB 데이터를 받고나서 처리를 해줘야 합니다. USB HID 통신을 사용하고 파이썬을 이용했습니다.제품에 대한 데이터시트를 못찾아서 프로토콜 분석기를 이용해서 키가 눌렸을때의 데이터를 얻었습니다.해당 디바이스에서 아무것도 눌리지 않았을때 주기적으로 01 80 80 7F 7F 0F 00 00이 옵니다.왼쪽 방향키를 누르는경우 01 80 80 00 7F 0F 00 00이 옵니다. 그래서 해당 데이터일때 왼쪽으로 움직여주면 됩니다.모든 키의 데이터를 적으면 아래와 같습니..

USB 2.0 SOF 통신파형 알아보기

안녕하세요. 오늘은 USB SOF 통신 파형을 알아보겠습니다. (FS기준)USB D+ D- 파형을 측정해보면 주기적으로 통신을 합니다. FS기준으로 1ms마다 통신을하고 HS기준으로는 125us마다 통신을 합니다. 주기적으로 통신을 하는 이 파형에 대해 알아보겠습니다. 이 파형은 SOF 패킷입니다.(GPT 지식)USB 통신에서 SOF(Start of Frame)는 USB 버스에서 시간을 동기화하기 위해 전송됩니다. USB는 비동기 통신 프로토콜이며, 여러 장치들이 한 버스를 공유하면서 동작합니다. 따라서 시간을 동기화하여 데이터를 정확하게 전송하고 수신할 수 있도록 합니다. SOF 패킷은 매 프레임마다 전송되며, USB 장치들은 이를 기반으로 데이터를 전송하거나 수신할 타이밍을 조절합니다. 이를 통해 U..

MCU지식/USB통신 2024.05.12

ATMEGA32U4 breakout-보드 사용하기 7편(External Interrupt)

안녕하세요. 오늘은 기존의 프로젝트에서 External Interrupt를 사용해보겠습니다.ATMEGA32u4에는 5개의 외부인터럽트가 있습니다.기존의 프로젝트에서는 PD0~PD3을 이미 다른기능으로 사용중이고 PE6은 사용하지않고있으므로 PE6을 외부인터럽트로 사용하겠습니다.초기세팅을 Falling edge로 했고 Port의 상태는 HIGH로 해놨습니다.EICRB 레지스터로 외부인터럽트 발생조건을 바꿀때 EIMSK를 disable해놔야 예상치못한 인터럽트가 안뜬다고해서 EICRB레지스터를 설정할때는 EIMSK를 disable 상태로 했습니다. 또한 cli로 인터럽트발생조건(low/both/falling/rising)을 바꿀수있게해서 디버깅할때 조건을 바꿀수있게 했습니다.#include "int.h"#i..

ATMEGA32U4 breakout-보드 사용하기 6편(SSD1306)

안녕하세요. 오늘은 기존의 프로젝트에서 SSD1306를 사용해보겠습니다. SSD1306은 다양한 통신인터페이스를 지원하는데 이 글에서는 I2C를 이용하겠습니다. (참고한 소스코드 : https://github.com/elo1957/OLED-ssd1306-atmega/tree/master) SSD1306은 128x64 Dot matrix panel입니다. 이 글에서는 가로 8bit 세로8bit를 이용해서 한글자를 만들것이므로 한줄당 글자는 최대 16글자, 줄은 8줄이 됩니다. 기본적인 SSD1306 동작하는방식을 알아보겠습니다. I2C Write통신 데이터포맷입니다. slave address - control byte - data byte 포맷으로 보내면 됩니다. SSD1306은 read는 사용하지않습니다..

ATMEGA32U4 breakout-보드 사용하기 5편(I2C)

안녕하세요. 오늘은 기존의 프로젝트에 I2C기능을 추가하겠습니다. 기본적인 I2C기능은 아래의링크 참고바랍니다 1) ATMEGA128 TWI(I2C)통신 알아보기 1편 2) ATMEGA128 TWI(I2C)통신 알아보기 2편 3) ATMEGA128 TWI(I2C)통신 알아보기 3편 위에 적은 I2C글에서는 write / read함수 하나에 start, address write, data write등등 기능들을 함수 하나에 넣어놨는데 이번에는 이런 기능들을 분리해서 함수로 구현하고 write, read함수에서 사용하는 형식으로 하겠습니다 void i2cInit() { PORTD |= 0x03; // SDA,SCL pull-up setting PD0: SCL, PD1: SDA TWBR = 0x48; /* S..

ATMEGA32U4 breakout-보드 사용하기 4편(CLI)

안녕하세요. 오늘은 기존의 프로젝트에 CLI기능을 추가하겠습니다. CLI란 Command Line Interface의 약자이고 명령어를 입력해서 장치의 동작을 제어하고 상태를 모니터링할 수 있는 방법을 의미합니다. 해당 프로젝트는 이미 UART로 송수신기능이 구현되어있으므로 UART로 CLI기능을 추가하겠습니다. 이미 구현되어있는 CLI코드가 있으므로 해당 코드를 이 프로젝트에 옮겨서 사용하겠습니다. 해당코드는 UART통신할때 Write/Read하는 함수만 CLI코드에 동작가능하게 넣으면 되므로 다른 프로젝트에도 적용이 매우 쉽습니다. 그래서 해당코드를 설명하는 방식으로 적겠습니다. 코드 출처 : https://github.com/chcbaram/stm32wb55-ble/tree/main/firmware..

ATMEGA32U4 breakout-보드 사용하기 3편(USB CDC)

안녕하세요. 오늘은 기존의 프로젝트에 USB CDC를 추가해보겠습니다. CDC는 Communication Device Class를 의미합니다. UART통신과처럼 시리얼포트가 잡히고 터미널프로그램을 이용해서 데이터를 송수신합니다. USB CDC를 사용하면 UART JIG를 사용하지않아도 되므로 편리합니다. ATMEGA32u4 breakout보드는 USB커넥터에 D+, D-가 연결되어 있습니다. 그리고 USB 2.0을 지원합니다. *일반적인 USB CDC 통신 순서 1. USB ENABLE 및 기본 세팅 2. Endpoint 데이터 송수신코드 작성 3. HOST에 연결했을때 셋업EP에 응답하는 표준 디스크립터 작성 4. 셋업 EP로 오는 CDC CLASS에 관한 디스크립터 작성 5. 셋업 EP로 오는 디바이..