본문 바로가기

분류 전체보기895

OpenCV ] 에서 사용하는 주요 클래스들 (C++) 예제 코드 출처 : OpenCV 4로 배우는 컴퓨터 비전과 머신러닝 유용하게 사용되는 기본 자료형 클래스 Point_ : 2차원 정수 좌표계에서 점의 좌표를 표현하는 클래스는 Point2i 에서 다시 Point로 재정의 됨 Size_ : 사각형 영역의 가로 세로 크기를 나타내는 width와 height 멤버변수를 가지고 있음 Rect_ : 정수형 사각형 정보를 표현하는 Rect2i 는 다시 Rect 로 재정의됨. 정수형 멤버변수 x, y, width, height를 가지고 있으며 Rect rc(10,10,60,40); // (10,10) 좌표부터 그려지는 크기가 60x40인 사각형 RotatedRect : 회전된 사각형을 표현하는 클래스. 회전된 사각형의 중심점 좌표를 나타내는 center(Point2f.. 2022. 8. 9.
STM32 ] FreeRTOS + Semaphore ISR 사용 예제 추가설명 되지 않은 기타 설정은 이전 글과 동일하다. 2022.08.08 - [MCU/STM32 (ARM Cortex-M)] - STM32 ] FreeRTOS 사용해보기 STM32 ] FreeRTOS 사용해보기 정의 RTOS는 실시간 시스템을 위해 개발된 운영체제로, 멀티태스킹 환경에서 Task 처리시간을 일관되게 유지하기 위한 용도로 사용한다. RTOS는 시분할 시스템 하에서 우선순위 기반 스케줄링을 통 eteo.tistory.com 예제 코드 출처 : https://m.blog.naver.com/eziya76/220951244572 Mutex는 ISR(Interrupt Service Routine)에서 신호를 보내는게 불가능한데 세마포어는 ISR에서 신호를 보낼 수 있다. Task 중 세마포어를 대기.. 2022. 8. 8.
STM32 ] FreeRTOS 사용해보기 정의 RTOS는 실시간 시스템을 위해 개발된 운영체제로, 멀티태스킹 환경에서 Task 처리시간을 일관되게 유지하기 위한 용도로 사용한다. RTOS는 시분할 시스템 하에서 우선순위 기반 스케줄링을 통해 우선순위가 높은 task가 먼저 작업을 처리할 수 있게 함으로써 구현한다. 참고. 스케줄링 : 프로세스들에게 CPU 등 자원을 배정하는 것을 말함. 설정 Interface는 CMSIS_V2로 선택한다. CMSIS는 Cortex Microcontroller Software Interface Standard의 약자로 ARM Cortex 시리즈끼리의 호환성 및 이식성 증대를 위해 ARM사에서 정한 소프트웨어를 말한다. 그리고 CMSIS_RTOS 는 ARM사에서 RTOS의 API를 추상화해서 RTOS의 종류가 달라.. 2022. 8. 8.
OpenCV ] 환경설정 및 프로젝트 만들기 + 재사용을 위한 템플릿 내보내기 (C++) 1. 홈페이지 접속 후 다운로드 https://opencv.org/ 2. 압축 풀기 설치 후 폴더 구조 opencv-build-x64-vc15 폴더 내에 Visual Studio 2017/2019 용 OpenCV DLL파일, 유틸리티와 OpenCV LIB 파일이 있다. 3. 환경설정 내PC 오른쪽 클릭-속성-고급시스템 설정-고급 탭에서 환경변수 클릭 사용자 변수 새로 만들기 변수 이름 : OPENCV_DIR 값 : C:\opencv\build 사용자 변수 - PATH 환경변수 더블클릭 - 새로만들기 %OPENCV_DIR%\x64\vc15\bin 추가 cmd 창을 열어 확인 잘 추가 되었는지 확인 4. Visual Studio 에서 새 프로젝트 만들기 프로젝트 생성 OpenCV 라이브러리는 64비트로 빌드.. 2022. 8. 6.
STM32 ] Timer Input Capture 사용하여 PWM 신호 캡쳐하기 먼저 클락 설정 PWM 파형을 만들어 내기 위한 TIM1 설정 TIM1은 APB2에서 클락소스를 공급받는다. PSC와 ARR의 값을 위와 같이 설정해서 Frequency 를 50Hz로 맞춰줬다. 펄스폭은 소스코드 상에서 수정할거라 안건드렸다. 인풋캡처를 위한 TIM2 설정 TIM2은 APB1에서 클락소스를 공급받는다. PSC를 90-1로 해서 1us 업카운터로 설정한다. 인풋캡처 채널은 하나는 Rising Edge 하나는 Falling Edge로 설정한다. TIM2의 인터럽트 켜기 소스코드 /* USER CODE BEGIN PV */ int __io_putchar(int ch){ HAL_UART_Transmit(&huart3, &ch, 1, 1000); return ch; } /* USER CODE EN.. 2022. 7. 25.
STM32 ] 자율주행 코드 짜기 - 프로젝트 준비과정 (6) 먼저 GPS모듈을 통해 자동차의 위도, 경도를 확인하였고, 어플과의 블루투스 통신을 통해 사용자가 찍은 Waypoint(목적지)의 위도, 경도까지 확인할 수 있었다. 그리고 Waypoint의 위치에서 자동차의 위치를 빼주면 두 포인트 사이의 위도차, 경도차를 알 수 있고 직선거리로의 차이 c는 피타고라스의 정리에 의해 구할 수 있다. 다만 이건 평면 위에서의 거리이고 구 위에서의 거리는 하버사인공식(Haversine Formular)로 구할 수 있는데 어차피 우리는 블루투스 모듈의 통신거리 한계로 테스트 환경이 좁은 지역 안에서 해야하기 때문에 그냥 피타고라스의 정리를 사용하기로 하였다. 다음은 방위각. 지자기센서를 통해 자동차의 방위각은 알아낼 수 있다. Waypoint의 방위각이 문제인데 문과생으로서.. 2022. 7. 25.
STM32 ] SPI 통신 사용하기 SPI : Serial Peripheral Interface 동기식, 전이중 통신이며 마스터와 슬레이브 모드로 동작한다. 최대 클럭이 제한되어 있지 않아 속도 제한이 없어 I2C보다 훨씬 빠르다. 기본은 SCLK, MOSI, MISO, CS 4개의 선이 필요한데 많은 베리에이션이 있다. 1:1 통신시 SCLK (Serial Clock) : 마스터가 출력하는 동기용 Clock 라인 MOSI (Master Output Slave Input) : 마스터 출력, 슬레이브 입력. SDI 로도 표기 된다. MISO (Master Input Slave Output) : 슬레이브 출력, 마스터 입력. SDO 로도 표기 된다. CS (Chip Select) : 마스터가 어떤 슬레이브와 통신할 지 선택할 때 사용하는 선... 2022. 7. 24.
STM32 ] TIMER OC (Output Compare 단자 출력) 사용 예제 OC : 출력비교 모드는 카운터(CNT)의 값이 캡쳐/비교기에 설정된 (CCRx)값과 일치할 때 인터럽트 또는 해당 핀에 출력을 발생시키는 모드이다. 이전에 이어서 타이머 OC 모드에서 핀의 출력을 사용하는 버전이다. 핀 출력을 쓰는 모드로 설정했기 때문에 핀이 잡힌다. PSC를 9000-1로 해서 10KHz로 분주하고 ARR은 16비트 카운터 타이머의 최대값인 0xffff-1로 한다. 이렇게 하면 업데이트 인터럽트가 6.5535초 마다 발생할 거다 하지만 업데이트 인터럽트는 안쓴다. 모든채널을 OC 인터럽트 발생시 출력이 토글되게끔 설정하고 CCR값은 위와 같이 설정한다. 소스코드 /* USER CODE BEGIN 2 */ HAL_TIM_OC_Start_IT(&htim3, TIM_CHANNEL_1); .. 2022. 7. 21.
STM32 ] TIMER OC (Output Compare No Output) 사용 예제 OC : 출력비교 모드는 카운터(CNT)의 값이 캡쳐/비교기에 설정된 (CCRx)값과 일치할 때 인터럽트 또는 해당 핀에 출력을 발생시키는 모드이다. TIM4 의 업 카운터와 OC(출력비교) 모드를 이용하여 LED On/Off 하는 예제 1. 타이머의 Frequency를 1Hz로 맞춰서 업데이트 인터럽트를 발생 시 HAL_TIM_PeriodElapsedCallback 에서 LED를 On 시킴 2. OC 모드에서 CCR값과 CNT의 값이 일치할 때 출력비교 인터럽트(CCxI)가 발생하고 HAL_TIM_OC_DelayElapsedCallback 함수에서 LED를 Off 시킴 3. 스위치 1~4 의 EXTI 인터럽트 발생시 HAL_GPIO_EXTI_Callback 함수에서 CCR값을 변경시킴 호환보드에 대한 .. 2022. 7. 21.
STM32 ] 어플과 STM32간 블루투스 통신을 통한 데이터 송수신 - 프로젝트 준비과정 (5) 어플 화면 SCAN 버튼을 눌러 블루투스 페어링 합니다. Control을 누르면 아래 버튼을 사용해 수동제어를 할 수 있고, Waypoint 버튼을 누른 뒤 어플 지도상의 파란색 마커(Waypoint)를 찍으면 해당 위치로 자율주행을 시작합니다. bluetooth.c 중 일부 void BT_Init() { HAL_UART_Receive_IT(&huart7, &rx7_data, sizeof(rx7_data)); } void transmit_To_Phone(){ char buf[GPSBUFSIZE] = {0,}; sprintf(buf, "A,%.13f\n\r", GPS.dec_latitude); //HAL_UART_Transmit(&huart3, (unsigned char *)buf, strlen(buf),.. 2022. 7. 19.
STM32 ] BLDC 모터 제어 - 프로젝트 준비과정 (4) BLDC 모터 제어와 앱인벤터를 통한 앱개발은 팀 동료가 담당한 분야이긴 하나 프로젝트 전체 이해도 향상을 위해 개인적으로 정리한 내용과 동료의 자료를 첨부합니다. DC모터 Brushed DC 모터는 2개의 전선으로만 구성되어 있으며 전동기를 구동시키기 위한 드라이버의 설계 및 제어가 용이하다는 장점이 있지만, Brush의 접촉을 통해서 회전에 따라 전기자 전류의 극성이 바뀌게 되므로, 기계적 소음과 전기적 잡음이 심하며 내구성이 떨어진다. 반면, BLDC 모터는 Brush가 제거된 형태로, 3상 모터의 6단계 정류(모터 위상의 전류를 전환하여 동작을 생성하는 공정) 패턴을 생성하기 위해 3개의 전선이 필요하며, 모터 컨트롤러가 사용된다. 이러한 6단계 정류 위상이 전자기장을 움직이면 영구 자석(회전자).. 2022. 7. 19.
STM32 ] 초음파 센서로 거리재기 Timer Input Capture 사용 + 노이즈 (튀는 값) 제거 참고 사이트 : https://controllerstech.com/hcsr04-ultrasonic-sensor-and-stm32/ 참고 유튜브 : https://www.youtube.com/watch?v=ti_1ZwRolU4 배선 HC-SR04 VCC 5V GND GND Trig PA5 (GPIO Output) Echo PA6 (TIM3 CH1 Input Capture) Cube MX 설정 TIM3은 APB1 클락소스(90MHz)를 공급받는다. 그리고 Prescaler 값을 90-1 로 해주면 1us(마이크로초) 마다 CNT가 오른다. 그리고 TIM3은 16비트 카운터라서 ARR은 최대값인 0xffff-1로 해준다. + UART3 설정도 켠다 소스코드 /* USER CODE BEGIN PD */ #def.. 2022. 7. 18.
STM32 ] DAC 제어 (오실로스코프로 파형 확인) DAC : Digital to Analog Converter 디지털 신호를 아날로그 전압 신호로 변환하여 출력하는 장치를 말한다. STM32F429 보드는 2채널의 12비트 DAC 컨버터가 있고 DAC CHANNEL_1의 출력핀은 PA4 (DAC_OUT1) DAC CHANNEL_2의 출력핀은 PA5 (DAC_OUT2) 으로 정해져있다. 1.8v ~Vdda(3.3V) 사이의 별도의 Vref+ 기준전압을 따로 사용할 수도 있고 타이머의 TRGO (트리거 아웃풋)을 사용하는 것도 가능하다. DHR에 로드된 데이터는 ABP1 1클럭 사이클 후 DOR 레지스터로 전송되고 데이터가 DOR 레지스터에 로드되면 DAC변환이 시작되어, t(SETTING) 시간 후 DAC_OUT pin을 통해 아날로그 값이 출력된다. D.. 2022. 7. 18.
STM32 ] ADC + MFC + MySQL, 시리얼 통신 및 DB연동, 검색기능, 실시간 그래프 구현 (쓰레드 사용) 깃허브 주소 : https://github.com/joeteo/MfcDbAdc GitHub - joeteo/MfcDbAdc Contribute to joeteo/MfcDbAdc development by creating an account on GitHub. github.com https://github.com/joeteo/AdcMfcDb.git GitHub - joeteo/AdcMfcDb Contribute to joeteo/AdcMfcDb development by creating an account on GitHub. github.com 핀설정 가변저항의 VCC, GND는 보드의 +3.3v, GND 에 연결 OUT핀은 아래 ADC 핀에 연결 ADC 설정. DMA 모드를 사용하였다. STM32 whi.. 2022. 7. 17.
MFC ] 시리얼 통신으로 LED 제어하기 (3) + MySQL (IoT) STM32 → UART 수신 인터럽트로 '1'이 들어오면 LED를 켜고 '0'이 들어오면 LED를 끈다. MFC → 외부 DB에 접속해 '1' 또는 '0'이 들어있는 1행1열의 테이블을 타이머를 사용해서 0.5초 간격으로 읽어오고 해당 값을 STM32에 시리얼 통신으로 송신한다. STM32 수신 인터럽트 부분 /* USER CODE BEGIN 4 */ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart->Instance == USART3){ if(rx=='1'){ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, 1); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, 1); HAL_GPIO_WritePi.. 2022. 7. 17.
MFC ] 실시간 그래프 그리는 법 Real-Time-Chart sin, cos, tan 그래프를 10ms 마다 그리는 예제파일 다이얼로그의 Picture Control을 아이디 IDC_STATIC_RT_GRAPH 로 추가하고 위치와 크기를 맞춘다. 다이얼로그의 -Dlg.h 파일에서 OScopeCtrl.h 파일을 include 하고 COScopeCtrl 컨트롤의 객체 포인터 _rtGraph를 선언해 둔다. // COScopeCtrl의 헤더 파일 인클루드 #include "OScopeCtrl.h" ... class *Dlg : public CDialog { ... // COScopeCtrl 컨트롤의 객체 포인터를 선언 COScopeCtrl *_rtGraph; ... }; onInitDialog() 함수에서는 IDC_STATIC_RT_GRAPH 컨트롤의 위치와 크기를 얻.. 2022. 7. 17.
MFC ] 다이얼로그 종료시 함수 호출 순서 OnClose, OnDestory, PostNcDestroy X 버튼을 눌러서 다이얼로그를 종료한경우 OnSysCommand start OnClose OnSysCommand end DestroyWindow start OnDestroy DestroyWindow end OnNcDestroy start PostNcDestroy OnNcDestroy end EndDialog(), OnOk(), OnCancel() 등을 이용하여 다이얼로그를 종료한경우 DestroyWindow start OnDestroy DestroyWindow end OnNcDestroy start PostNcDestroy OnNcDestroy end 출처 : https://wendys.tistory.com/117 보다시피 WM_CLOSE 메시지의 핸들러인 OnClose()는 EndDialog(), On.. 2022. 7. 15.
MFC ] CString 문자열 파싱하는 여러 방법 2022.07.14 - [프로그래밍/MFC (C++)] - MFC ] stringstream 사용하여 문자열 파싱하기 일전에 CString 타입을 string 타입으로 바꾸고 stringstream을 사용해서 파싱하는 방법에 대한 글을 적었는데 다른 방법도 있다. 1. AfxExtractSubString 을 사용하는 방법 int lineCount; lineCount = result.Replace('\n',','); for (int i = 0; i < lineCount; i++) { CString tmpID, tmpName, tmpAuthor, tmpPrice, tmpOther; AfxExtractSubString(tmpID, result, 5 * i + 0, ','); AfxExtractSubString.. 2022. 7. 14.
STM32 ] SysTick Timer Callback 함수 사용하기 이전에 분명 정리한 거 같은데 기록이 없어서 정리용도로 빠르게 테스트해봄 HAL_GetTick 함수를 따라가 보면 uwTick을 리턴하는 것으로 되어있다. 이 uwTick이 SysTick 타이머 클락 소스로 1밀리초마다 카운트되고 HAL_Delay 함수도 이 uwTick을 사용하고 있다. Drivers - STM32F4xx_HAL_Driver - Src - stm32f4xx_hal_cortex.c 파일에 가면 아래와 같이 있다. 그중에 HAL_SYSTICK_IRQHandler() 함수를 가져와 stm32f4xx_it.c 에 있는 SysTick_Handler() 함수 안에 넣는다. 그리고 아까 IRQHandler() 함수 바로 아래 있던 HAL_SYSTICK_Callback 함수를 가져와 전역구간에서 재정.. 2022. 7. 14.
MFC ] 리스트 컨트롤 제일 하단으로 내리는 법 m_list.SendMessage(WM_VSCROLL, SB_BOTTOM); 아래는 리스트 컨트롤 새로고침 시마다 자동으로 아래로 내려가게끔 한 것 2022. 7. 14.
MFC ] stringstream 사용하여 문자열 파싱하기 예제코드 CString result; string str = CT2CA(result); istringstream ss(str); string line; int i = 0; while(getline(ss, line, '\n')) { istringstream linestream(line); string cell; getline(linestream, cell, ','); m_list.InsertItem(i, cell.c_str()); int j = 0; while (getline(linestream, cell, ',')) { m_list.SetItem(i, j, LVIF_TEXT, cell.c_str(), NULL, NULL, NULL, NULL); j++; } i++; } '\n' 와 ',' 로 구분하는 형.. 2022. 7. 14.
MFC ] char* -> CString , CString -> char* 변환하기 char* -> CString 변환 char* h1 = "hello"; CString h2 = h1; 그냥 대입해주면 된다 = 연산자 오버로딩이 되어있기 때문이다. CString -> char* 변환 방법1 char* h1 = "hello"; CString h2 = h1; CString w1 = _T("world"); char* w2 = LPSTR(LPCTSTR(w1)); 방법2 CString w1 = _T("world"); char* w2 = w1.GetBuffer(0); 2022. 7. 14.
MFC ] MySQL 을 활용한 도서 관리 프로그램 (1) 깃허브 주소 : https://github.com/joeteo/bookManagerMFCandMysql.git GitHub - joeteo/bookManagerMFCandMysql Contribute to joeteo/bookManagerMFCandMysql development by creating an account on GitHub. github.com 자료 추가 및 선택 행 삭제 기능 구현 먼저 이전에 쓴 글을 참조해서 데이터 베이스를 생성하고 MySQL 라이브러리를 포함 시킨다. 2022.07.13 - [프로그래밍/MFC (C++)] - MFC ] Visual Studio에서 MySQL 라이브러리 추가하기 2022.07.13 - [데이터베이스] - MySQL ] HeidiSQL 기본 사용법 CM.. 2022. 7. 14.
MFC ] 시리얼 통신으로 LED 제어하기 (2) 이전 버전을 개선하였다. 2022.07.09 - [프로그래밍/MFC (C++)] - MFC ] 시리얼 통신으로 LED 제어하기 (1) MFC ] 시리얼 통신으로 LED 제어하기 (1) 깃허브 주소: https://github.com/joeteo/LEDSerialCMD GitHub - joeteo/LEDSerialCMD Contribute to joeteo/LEDSerialCMD development by creating an account on GitHub. github.com https://github.com/joeteo/.. eteo.tistory.com 깃허브 주소: https://github.com/joeteo/MFC_test01.git GitHub - joeteo/MFC_test01 Contri.. 2022. 7. 13.
MySQL ] HeidiSQL 기본 사용법 암호를 누르고 열기 세션명에서 오른쪽 클릭 - 데이터베이스 새로 생성 데이터 베이스에서 오른쪽 클릭 - 테이블 새로 생성 테이블을 클릭하고 컬럼을 추가하며 설정을 해준다. 정수는 INT형 문자열은 VARCHAR 문자 인코딩은 utf-8로 한다. 그 밖의 길이나 부호, NULL 허용, 0으로 채움 등 필요한 설정을 하고 디폴트값을 정해둘 수 있다. id와 같이 중복되면 안되는 기본키는 기본값을 자동으로 1씩 증가하게 AUTO_INCREMENT로 설정하고 프라이머리 키로 설정해준다. 반드시 테이블의 설정을 변경한 후 저장해줘야 적용이 된다. CRUD (Create, Read, Update, Date) 기본 쿼리문 예제 쿼리문을 입력하고 재생버튼을 누른 뒤 데이터 탭에 가서 F5를 눌러야 변경된 데이터가 보인.. 2022. 7. 13.
MySQL ] HeidiSQL 외부 접속 계정 추가하기 HeidiSQL 에서 사용자 인증 및 권한 관리 사용자 계정 추가 - 모든 곳에서 접근 허용 객체 추가로 특정 db에 대한 권한만 전체 허용 저장. 설정 끝. 일전에 올린적 있는 MysqlController.h 에 선언된 호스트 IP, User, Password, DB Name 등을 수정하면 MFC 프로그램으로 외부 DB에 접속해 관리할 수 있다. 2022. 7. 13.
MFC ] DoModal() 창 닫기, 강제 종료 this->EndDialog(IDCANCEL); 혹은 EndDialog(0); 해도 된다. 중요. 창 종료와는 별개로 할당받은 건 해제해줘야 한다. 참고. Modeless 모달리스 인 경우 창 생성시 DoModal() 대신 Create() 로 다이얼로그 생성하고 닫을 땐 EndDialog() 대신 DestroyWindow() 로 다이얼로그를 닫는다. 참고. 2022. 7. 13.
MFC ] 리스트 컨트롤에서 클릭된 아이템 값 가져오기 1. 클릭된 인덱스 알아내기 리스트 컨트롤 자체의 멤버변수인 .GetSelectionMark(); 을 사용한다. int clickindex = m_list.GetSelectionMark(); 아무것도 안눌렸을 때는 -1 반환 리스트 컨트롤 오른쪽 클릭 후 이벤트 처리 함수 추가 클래스 목록을 주의해서 확인하고 NM_CLICK을 선택한다. 생성된 함수안에 아래와 같이 입력한다. /* void CbookManagerDlg::OnNMClickList1(NMHDR* pNMHDR, LRESULT* pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast(pNMHDR); // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다. NM_LISTVIEW* pN.. 2022. 7. 13.
STM32 ] 소프트웨어적으로 Chattering 채터링현상 Debounce 디바운스하기 채터링이란 스위치의 접점이 닫히거나 열리는 순간 기계적인 진동에 의해 매우 짧은 시간 안에 스위치가 붙었다 떨어지는 것을 반복하는 현상으로 Bounce 라고도 한다. 디바운스는 채터링 현상을 억제하는 해결법을 말한다. 커패시터를 추가하는 등 하드웨어적인 방법이 있고 소프트웨어적으로 해결하는 방법이 있다. 아래에선 소프트웨어적으로 해결하는방법을 소개한다. 버튼은 외부 풀다운저항을 달아놨고 EXTI Rising Edge에 트리거 되도록 했다. NVIC 설정도 켜고 각각 버튼이 눌렸을 때 LED가 토글되게 소스코드를 짰다. 디바운스 코드 추가하지 않았을 때 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if(GPIO_Pin==GPIO_PIN_8){ HAL_GPIO_To.. 2022. 7. 13.
MySQL ] MySQL 설치하기 및 HeidiSQL 설치하기 Community(GPL) 버전으로 설치 아카이브를 눌러 옛날 버전을 받도록 하겠다. 64bit용은 따로 없으며 32bit 용을 다운받으면 된다. 5.7.20 버전의 오프라인 설치파일 다운로드 MySQL 서버는 x64 버전으로 커넥터를 Visual Studio 개발환경에 맞춰 x86으로 한다. 의존성 문제로 설치가 필요한 경우 설치해준다. 이 다음은 디폴트로 설치한다. 비밀번호 넣고 이 뒤에도 디폴트 설치하면 끝난다. HeidiSQL 다운로드 받은 후 디폴트 설치한다. 암호를 입력하고 열기를 누른다. 호스트명 / IP 에 있는 127.0.0.1 은 Local Host를 뜻한다. 2022. 7. 13.