반응형

리눅스(우분투)에 설치된 비주얼 스튜디오에서 파이썬을 프로그래밍해보자.


pip가 설치되지 않았다면 설치한다.


폴더를 만들어 준다.


폴더내에 파이썬 소스를 작성할 파일을 만든다. 확장자는 .py로 한다.


Python extension을 설치한다.



Linter pylint가 설치되지 않았다는 메세지가 나온다. Install 한다.


소스를 입력하고 Ctrl+F5키를 누르면 실행된다.

Run - Run Without Debugging을 선택해도 된다.


반응형
Posted by J-sean
:
반응형

리눅스(우분투)에서 비주얼 스튜디오 코드를 설치하고 코딩해 보자.


비주얼 스튜디오 홈페이지에 접속하고 Debian, Ubuntu용 .deb을 선택한다.


설치파일을 다운로드한다.


다운로드한 설치파일을 실행한다.


Install을 선택한다.



설치는 간단히 끝난다.


build-essential을 설치한다.


설치된 Visual Studio Code를 실행한다.


Welcome 화면이 나타난다.



File - Open Folder... 를 선택한다.


원하는 폴더를 만들고 선택한다.


EXPLORER - 위에서 만든 폴더에서 New File을 선택한다.


원하는 파일이름을 지정한다. C++ 프로그램을 만들기 위해 확장자는 .cpp로 지정한다.



Extensions에서 c/c++를 설치한다.


간단한 C++ 코드를 입력한다.


Terminal - Configure Default Build Task...를 선택한다.


C/C++: g++ build active file을 선택한다.



Terminal - Run Build Task...를 선택한다.


빌드가 진행된다.


위에서 만든 폴더로 가면 빌드된 파일이 있다. 실행해 본다.


task를 변경하고 싶다면 아래 예처럼 tasks.json 파일을 변경한다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
{
    "version""2.0.0",
    "runner""terminal",
    "type""shell",
    "echoCommand"true,
    "presentation": {
        "reveal""always"
    },
    "tasks": [
        // C++
        {
            "label""save and compile for C++",
            "command""g++",
            "args": [
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "group""build",
            "problemMatcher": {
                "fileLocation": [
                    "relative",
                    "${workspaceRoot}"
                ],
                "pattern": {
                    "regexp""^(.*):(\\d+):(\\d+):\\s+(warning error):\\s+(.*)$",
                    "file"1,
                    "line"2,
                    "column"3,
                    "severity"4,
                    "message"5
                }
            }
        },
        // C
        {
            "label""save and compile for C",
            "command""gcc",
            "args": [
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "group""build",
            "problemMatcher": {
                "fileLocation": [
                    "relative",
                    "${workspaceRoot}"
                ],
                "pattern": {
                    "regexp""^(.*):(\\d+):(\\d+):\\s+(warning error):\\s+(.*)$",
                    "file"1,
                    "line"2,
                    "column"3,
                    "severity"4,
                    "message"5
                }
            }
        },
        {
            "label""execute",
            "command""cd ${fileDirname} && ./${fileBasenameNoExtension}",
            "group""test"
        }
    ]
}


tasks.json 예제


필요하다면 File -Preferences - Keyboard Shortcuts 에서 새로만든 task의 단축키를 지정할 수 있다.


Open Keyboard Shortcuts (JSON) 아이콘을 클릭한다.


아래 예처럼 keybindings.json 파일을 수정한다.



1
2
3
4
5
6
7
[
    // Compile
    { "key""ctrl+shift+1""command""workbench.action.tasks.build" },
 
    // Execute
    { "key""ctrl+shift+2""command""workbench.action.tasks.test" }
]


keybidings.json 예제


반응형
Posted by J-sean
:
반응형

리눅스(우분투) 서버에 X Window(GUI)를 설치해 보자.


sudo apt update를 실행해서 package list를 업데이트한다.


업데이트가 완료되면 sudo apt upgrade를 실행해서 package를 upgrade/install/remove한다.


sudo apt install ubuntu-desktop-minimal 명령으로 X Window 설치를 진행한다.


sudo apt install ubuntu-desktop-minimal: 최소 설치

sudo apt install ubuntu-desktop: 전체 설치


1,695 MB의 디스크 공간이 필요하다. 설치는 꽤 오랫동안 진행된다.



설치가 완료되면 startx 명령어로 X Window를 실행한다.


Welcome! 이라고 한다.


키보드를 선택한다.


내 위치정보를 공개할지 선택한다.



간단한 설정이 완료되었다.


재부팅이 필요하다.


재부팅하면 바로 X Window가 실행된다. 로그인 하자.


X Window 화면이 나타난다.



부팅시 X Window가 자동 실행되지 않도록 하려면 아래 명령어를 입력한다.


sudo systemctl set-default multi-user


부팅시 다시 X Window가 자동 실행되게 하려면 아래 명령어를 입력한다.


sudo systemctl set-default graphical


직접 Run Level을 변경해 X Window 자동 실행 여부를 결정할 수 도 있다. 현재 default.target은 graphical.target을 가리키고 있다.


multi-user.target을 가리키도록 변경한다.



재부팅하면 X Window가 아닌 Console로 부팅된다.


startx를 실행하면 약간 다른 모양의 X Window가 실행된다.


Log Out 해 보자.


다시 콘솔 화면으로 돌아간다.


X Window로 부팅하려면 아래 명령어를 입력한다.

sudo ln -sf /lib/systemd/system/graphical.target /lib/sytemd/system/default.target


반응형
Posted by J-sean
:

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

반응형

전자기 유도 방식으로 통신하는 NFC나 RFID는 이제 일상생활에 흔히 사용되는 통신이다.

 

  RFID NFC
사용 주파수 125kHz~2.45GHz 13.56MHz
연결범위 ~100m ~10cm
통신 단방향 양방향

RFID와 NFC의 차이

 

NFC는 양방향 통신이 가능하므로 태그와 리더가 통합될 수 있지만 RFID는 태그와 리더가 분리 되어있다. 또, RFID는 장거리 통신이 가능하고, NFC는 암호화가 가능해 보안성이 높다는 특징 때문에 NFC는 모바일 기기 등 개인 단말기에 자주 사용되는 반면, RFID는 개인뿐 아니라 물류 등 각종 산업에서 활발하게 이용되고 있다.

 

이렇게 우리 생활에 편리함을 더해주는 NFC와 RFID 태그를 쉽게 읽고 복사하는 방법을 알아보자.

 

스마트 카드 키 머신(?)이라고 한다. 중국어로 정신 없이 적혀 있지만 아래 주파수 대역의 통신 방식을 읽고 쓸 수 있는걸 알 수 있다.

125kHz, 250kHz, 375kHz, 500kHz, 625khz, 750kHz, 875kHz, 1000kHZ, 13.56MHz

 

태그 복사기의 각 부분 설명.

 

상자를 열어 보자. 바로 태그 복사기가 보인다.

 

몇몇 기능키와 숫자키가 있다.

 

 

뒷면에는 읽고 쓸 카드를 고정할 수 있는 밴드와 배터리(AAA) 커버가 있다. USB 전원으로도 동작 가능하다.

 

간단한 매뉴얼과 USB 케이블도 함께 들어있다.

 

같이 구매한 125kHz, 13.56MHz 태그들.

 

사용 방법은 영상으로 확인하자.

 

 

ISO/IEC 14443 Type A 규격의 태그라도 위 영상의 방법으로 복사 되지 않는 경우가 있다. (NFC라는 설명이 붙은 태그) Google Play Store에서 MIFARE Classic Tool을 설치하고 WRITE TAG를 선택한다.

 

Clone UID - OPEN THE CLONE UID TOOL을 선택한다.

 

원본 태그를 스캔하면 자동으로 UID가 입력된다. GENERATE BLOCK 0 AND CLONE UID 버튼을 누른다.

 

Waiting for magic tag(2nd gen) 메세지가 나오면 복사될 태그를 스캔한다.

 

 

복사가 완료되면 검증을 위해 다시 스캔한다.

 

문제없이 복사되었다면 Successfully cloned UID 메세지가 나오고 복사 과정이 다시 진행된다.

 

반응형
Posted by J-sean
:
반응형

L293D는 다이오드가 내장된 DC모터 드라이버다.


L293D DC Motor Driver


L293D Pin Map

Enable 1, 2와 Enable 3, 4는 PWM(0~255)으로 모터 속도를 제어한다.

모터가 높은 전압을 사용한다면 Vcc 2에 외부 전원을(4.5~36V) 연결한다. (Vcc 1은 내부 로직용 전압이다)


Peak output current(nonrepetitive, t ≤ 100 µs): 1.2A

Continuous output current: 600mA

l293d.pdf


드라이버 내부에는 모터에서 발생하는 역기전력으로 인한 MCU 손상 방지용 다이오드가 내장되어 있다.

GND(4, 5, 12, 13)는 모두 연결되어 있어서 하나만 외부 GND에 연결하면 된다.



위 다이어그램과 같이 연결한다.


L293D - Arduino

Enable 1, 2 - D8

Input 1 - D9

Output 1 - Motor +

GND - GND

Output 2 - Motor -

Input 2 - D10

Vcc 2 - 5V

Vcc 1 - 5V




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#define EN1 8
#define IN1 9
#define IN2 10
 
void setup() {
  pinMode(EN1, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
}
 
void loop() {
  digitalWrite(EN1, HIGH);
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  delay(1000);
 
  digitalWrite(EN1, LOW);
  delay(1000);
 
  digitalWrite(EN1, HIGH);
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  delay(1000);
 
  digitalWrite(EN1, LOW);
  delay(1000);
}


위 코드를 컴파일하고 아두이노에 업로드한다. 'CW 회전 - 1초 대기 - CCW 회전 - 1초 대기'가 반복된다.


반응형
Posted by J-sean
: