Obsidian sync를 사용하지 않아도 아이폰에서는 obsidian 연동이 매우 쉽다고 합니다.

이 글에서는 우분투, 안드로이드폰에서 사용하기 위해서 Google drive와 연동하는 방법에 대한 내용을 정리합니다.

1. 우분투 + Google drive (참고 1)

rclone이라는 프로그램을 먼저 살펴봤습니다.(참고 2)

그냥 따라하기만 해도 뭔가 복잡하고 어려웠습니다.

그래서 다른 방법은 없는지 살펴보다가 google-drive-ocamlfuse 프로그램을 사용하는 방법을 확인했습니다. (참고1, 참고3)

 

(1-1) 아래와 같이 프로그램만 설치하고

$ sudo add-apt-repository ppa:alessandro-strada/ppa
$ sudo apt update
$ sudo apt install google-drive-ocamlfuse

(1-2) Google drive와 연동할 폴더를 생성하고,

$ mkdir gdrive

(1-3) Google drive와 연동하면 됩니다.

$ google-drive-ocamlfuse ~/gdrive

이 경우, Google drive의 전체 내용을 gdrive 폴더에서 확인할 수 있습니다.

구글 계정과의 연동은 참고 링크를 확인해 주십시오.

 

2. 우분투 + Google drive (특정 폴더)

만약 특정 폴더만 mount하고 싶은 경우에는 다음과 같이 합니다.

 

(2-1) config 파일을 확인합니다.

$ cd ~/.gdfuse/default
$ rm -r cache
$ gedit config

(2-2) config 파일에서 root_folder 부분을 찾습니다.

root_folder=

(2-3) 이 부분에 mount를 하고자 하는 특정 폴더의 이름을 적어 주면 된다고 합니다. (참고 3)

그런데, 저는 folder id를 입력해 줘야 동작했습니다.

참고 4를 살펴보면 아래와 같은 내용이 있습니다.

Root folder ID
...
So if the folder you want rclone to use has a URL which looks like https://drive.google.com/drive/folders/1XyfxxxxxxxxxxxxxxxxxxxxxxxxxKHCh in the browser, then you use 1XyfxxxxxxxxxxxxxxxxxxxxxxxxxKHCh as the root_folder_id in the config.

즉, 웹브라우저에서 Google drive에 접속한 후 mount하고자 하는 특정 폴더로 이동합니다.

이때 주소창에 보이는 주소에서 folders 이후의 주소를 복사해서 config 파일의 root_folder 뒤에 붙여 넣으면 됩니다.

 

3. 기타

처음에 mount한 경우에 우분투에서 폴더를 생성하거나 파일을 생성하는 경우에 "Input/output error" 문제가 있었고, read only로 mount되는 것을 debug message에서 확인할 수 있었습니다.

웹브라우저로 Google drive에 가서 text 파일을 만들고, 우분투에서 내용을 추가할 수 있었습니다.

이후 동작에 특별한 문제는 없었습니다.

이유는 모르지만 read only로 mount되는 경우가 있어 보입니다. (참고 5)

 

동작 이후 unmount는 아래 명령어를 사용했습니다.

$ fusermount -u ~/gdrive

.bashrc에 다음과 같은 alias를 만들어서 사용하고 있습니다.

alias gmount='google-drive-ocamlfuse ~/gdrive/'
alias gunmount='fusermount -u ~/gdrive'

 

- End -


참고 1. https://bigbigpark.tistory.com/43

참고 2. https://www.woobi.net/board2/4781

참고 3. https://jdselectron.tistory.com/164

참고 4. https://rclone.org/drive/

참고 5. https://astrada.github.io/google-drive-ocamlfuse/

 

 

 

 

반응형

'프로그래밍 > Tips & sites' 카테고리의 다른 글

[Sites] CRC  (0) 2020.09.12
[Tips] 파워포인트 매크로  (0) 2019.12.28
[Tips] VIM  (0) 2019.12.17
[Tips] Notepad++  (0) 2019.12.15

지금까지 사용한 메모 프로그램들에 대한 생각입니다.

  • 에버노트
    • 본격적으로 처음 사용한 앱입니다.
    • 좋은 자료를 찾아도 어떻게 정리할지 고민이었는데, 에버노트의 web scraper는 신기원이었습니다.
    • 하지만, 정리 없이 계속 자료를 채우기만 하니 어느덧 무거운 짐이 되어버렸습니다.
    • 다양한 환경에서 작업을 하는데 무료로는 2개의 기기만 지원하면서 사용 빈도가 줄어들었습니다.
    • 아직도 몇몇 노트들은 주로 사용하고 있지만, 자료 저장의 용도로는 더 이상 사용하지 않게 되었습니다.
    • 무료로 유용하게 사용하는 입장에서 매우 고마운 프로그램입니다.
  • 구글 Keep
    • 간단한 todo list나 메모를 적는 용도로 사용합니다.
    • 스마트폰에서 가끔 생각나는 것을 간단하게 메모하는 용도로 사용합니다.
    • 결국에는 정리가 필요하지만, 계속 사용할 예정입니다.
  • 노션
    • 에버노트의 대안으로 여러 프로그램을 알아보던 중 알게된 프로그램입니다.
    • 테스트 중에 블록 1000개의 제한으로 사용하기 힘들겠다고 생각하고 있었는데, 블록 사용이 무제한으로 되면서 지금까지 사용하고 있습니다.
    • 여러 플랫폼과 기기에서 sync를 지원해 줍니다.
    • toc (table of content), tog(toggle list), code, header등의 몇가지 단축키에 익숙해 지면서 더욱 많이 사용하고 있습니다.
    • 아직 DB까지는 제대로 사용하고 있지 못합니다.
    • 내용이 많이지면 느려진다고 이야기가 계속 들려옵니다.
    • 보기 좋게 정리하는 경우나  DB 위주로의 사용을 고려하고 있습니다.
    • 매우 유용한 메모 프로그램으로 계속 사용할 예정입니다.
  • Upnote
    • 게시판의 추천으로 처음 사용을 검토했습니다.
    • 월정액이 아니고 life time 요금제가 있어서 해당 요금제를 구매해서 사용하고 있습니다.
    • Web scraper도 되고 속도도 빠르며 백업도 간단하게 제공한다는 장점이 있어 보입니다.
    • 다양한 기능에서 다른 프로그램에 뒤진다는 평가가 있습니다.
    • 에버노트를 이어서 자료를 수집하는 용도로 사용할 예정입니다.

모두 잘 사용하고 있는 메모 프로그램들입니다만, Obsidian이라는 또 다른 프로그램을 검토하고 있습니다.

원래는 글쓰기나 제텔카스텐 용도로 많이 사용하는 프로그램인데, 각종 자료를 정리하고 검색하기에도 좋을 것 같아서 살펴보고 있습니다.

Obsidian Sync를 구독하지 않으면, 우분투와 안드로이드에서는 멀티 플랫폼으로 사용하기는 불편할 것 같습니다.

앞으로 Obsidian을 어떻게 사용하게 될지 잘 모르겠지만, 친해지기를 바래봅니다.

 

- End -

반응형

Table Of Content

우분투가 갑자기 부팅되지 않았는데, 해결했습니다.

문제 상황을 자세히 적고, 해결 방안도 정리해 둡니다.

1. 문제

  • 우분투(20.04)를 기본 OS로 사용하는데, 필요에 따라서 듀얼 부팅해서 Windows10(최근에 업데이트해서 Windows11)를 사용합니다.
  • 우분투로 부팅해서 사용하다가, 필요에 따라서 윈도우로 부팅해서 작업 후 다시 우분투로 돌아가려고 하는데 부팅이 되지 않습니다. 에러 메시지는 root file system을 찾을 수 없다는 것이었습니다.
  • 우분투 설치 USB로 부팅해서 boot-repair를 실행했는데 "Recommanded repair" 항목이 보이지 않고, "Create a Bootinfo summary" 항목만 보입니다.
  • 검색해 보니 AHCI 모드나 기타 다양한 설명이 있는데 관련이 없었습니다. (BIOS에서 해당 기능을 찾을 수도 없었고, Windows에서 파티션을 암호화하지도 않았습니다.)
  • 어떻게든 부팅시키고 싶은 마음에 Clonezilla로 복원을 시도했는데 백업한 파티션을 확인할 수 없습니다.
  • 다시 우분투 설치 USB로 부팅해서, Disks 프로그램으로 SSD를 확인하는데, 여러 파티션이 아닌 하나로 보이며, 파일시스템의 종류도 확인할 수 없습니다. 윈도우로 부팅해서 SSD를 살펴보면 여러 파티션이 문제없이 보였습니다.
  • 우분투 설치 USB로 부팅 후 mount 명령어를 살펴보니, 평상시 보지 못하던 파티션인 /dev/nvme0n1등의 파티션이 보입니다. SSD는 /dev/sda...에 mount가 되어야 하는데 이상하게 생각되었습니다.
  • 결론적으로 우분투가 SSD의 물리적인 문제가 아니라, 파티션 정보를 인식하지 못하는 문제로 판단했습니다.
  • 이후 단계는 모두 우분투 설치 USB로 부팅 후 진행했습니다
  • fdisk -l 명령어로 partition들의 정보를 확인해 보니, SSD 파티션 항목에서 "The primary GPT table is corrupt, but the backup appears OK, so that will be used."라는 메시지를 확인할 수 있었습니다. GPT table의 문제로 파티션을 확인할 수 없었던 것입니다.

2. 해결

아래 링크를 참고해서 해결했습니다.

https://lihashgnis.blogspot.com/2016/07/recovering-from-corrupted-gpt-partition_30.html

 

gdisk로 "GPT: damaged"라는 메시지를 확인할 수 있었습니다.

$ sudo gdisk -l /dev/nvme0n1

그리고, 링크에 있는 명령어들로 문제를 해결했습니다.

$ sudo gdisk /dev/nvme0n1

GPT fdisk (gdisk) version 1.0.1

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): r

Recovery/transformation command (? for help): b

Recovery/transformation command (? for help): c
Warning! This will probably do weird things if you've converted an MBR to
GPT form and haven't yet saved the GPT! Proceed? (Y/N): Y

Recovery/transformation command (? for help): v

No problems found. 3437 free sectors (1.7 MiB) available in 2
segments, the largest of which is 2014 (1007.0 KiB) in size.

Recovery/transformation command (? for help): w

참고로 gdisk의 명령어들은 다음과 같습니다.

Command (? for help): ?
b	back up GPT data to a file
c	change a partition's name
d	delete a partition
i	show detailed information on a partition
l	list known partition types
n	add a new partition
o	create a new empty GUID partition table (GPT)
p	print the partition table
q	quit without saving changes
r	recovery and transformation options (experts only)
s	sort partitions
t	change a partition's type code
v	verify disk
w	write table to disk and exit
x	extra functionality (experts only)
?	print this menu

반드시 w로 write를 하고 다시 한번 gdisk로 GPT의 상태를 확인해야 합니다.

 

- End -

반응형

본 글은 외장 모니터의 EDID를 읽어서 정상인 경우에만 연결하지 않고, 무조건 연결하는 방법에 대한 것입니다.

 

외장 모니터(HDMI)를 잘 쓰다가, 갑자기 연결이 되지 않는 문제가 발생했습니다.

 

xrandr 명령어를 이용하면 HDMI가 연결되지 않았습니다.

$ xrandr
...
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-1 disconnected (normal left inverted right x axis y axis)
DP-2 disconnected (normal left inverted right x axis y axis)
HDMI-2 disconnected (normal left inverted right x axis y axis)

dmesg로 확인해 보니 아래와 같은 메시지를 확인할 수 있었습니다.

[00] BAD  00 ff ff ff ff ff ff 00 05 e3 53 23 ec 02 00 00
[00] BAD  28 15 01 03 80 33 1d 78 2a 6e 95 a3 54 4f 9f 26
[00] BAD  00 50 54 bf ef 00 d1 c0 b3 00 95 00 81 80 81 40
[00] BAD  81 c0 01 01 01 01 02 3a 80 18 71 38 2d 40 58 2c
[00] BAD  45 00 fd 1e 11 00 00 1e 00 00 00 fd 00 32 4c 1e
[00] BAD  53 11 00 0a 20 20 20 20 20 20 00 00 00 fc 00 32
[00] BAD  33 35 33 0a 20 20 20 20 20 20 20 20 00 00 00 ff
[00] BAD  00 41 49 4a 42 41 4f 41 30 30 30 37 34 38 01 05

때로는 메시지 위에 "EDID is invalid:"라는 메시지가 보이기도 했습니다.

 

EDID(위키피디아)는 모니터 정보를 PC에 전달하는 것으로, 결론적으로 EDID 에러 때문에 PC가 외장 모니터를 인식하지 못하는 이슈입니다.

EDID는 EEPROM에 저장되는데 문제가 발생하기도 하는 것 같습니다. - "Some people say hot-plugging the cables can cause corruption."(링크 1)

링크 2를 참고해서, 아래 명령을 실행했지만 edid.bin이 생성되지 않았습니다. (read-edid edid-decode 설치 후 실행)

$ sudo get-edid -m 0 > edid.bin

그래서, 앞서 dmesg로 확인한 EDID를 c 프로그램을 이용해서 binary 파일(edid.bin)을 생성하고 아래 명령을 수행해 보았습니다.

$ parse-edid < edid.bin
Partial Read... Try again

EDID는 256 bytes 인데, 128 bytes만 변환해서 나오는 에러입니다. 나머지 128 bytes를 모두 0으로 채워서 edid.bin을 생성한 후 명령어를 실행하면,

$ parse-edid < edid.bin
WARNING: Checksum failed
Trying to continue...
Section "Monitor"
...

모니터에 대한 정보는 잘 나오는데, Checksum에러가 발생한 것을 확인할 수 있었습니다.

다시 아래 명령을 실행하면,

$ cat edid.bin | edid-decode
edid-decode (hex):
...
Has 1 extension block
Checksum: 0x5 (should be 0x16)
...

Checksum이 원래 0x16이어야 하는데 0x5로 잘못되었다는 내용을 확인할 수 있습니다.

위키피디아를 확인하면 Checksum의 위치는 128 bytes의 맨 마지막 byte입니다.

이를 0x05 -> 0x16으로 변경 후 edid.bin을 새로 생성해서 위 명령들을 수행하면 정상적으로 수행되는 것을 확인할 수 있었습니다.

 

결론적으로 외부 모니터로부터 EDID를 읽었는데 Checksum이 틀려서 발생하는 문제였습니다.

 

링크 3을 참조하면, edid.bin 파일은 /lib/firmware/에 위치하는 것으로 보입니다. 그래서 아래 명령어로 edid.bin을 복사했습니다.

$ cp edid.bin /lib/firmware/edid.bin

그리고 링크 2를 참고해서 grub을 변경했습니다.

$ sudo vi /etc/default/grub

# 원래 내용
#GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
# 수정 내용
GRUB_CMDLINE_LINUX_DEFAULT="drm.edid_firmware=HDMI-A-1:edid.bin video=HDMI-A-1:D quiet splash"

위 명령어는 /lib/firmware/ 폴더에 있는 edid.bin 파일을 이용해서 HDMI-A-1를 연결하겠다는 내용으로 이해됩니다.

내용을 저장한 후 grub을 업데이트 해 줍니다.

$ sudo update-grub

이후 다시 부팅했더니 외부 모니터가 정상 동작합니다.

 

[주의사항]

노트북에서 사용하다 보니 문제점을 확인했습니다.

강제로 EDID를 인식시키는 방법이므로, 외장 모니터가 연결되어 있지 않아도 외장 모니터가 있다고 인식합니다.

따라서 어플리케이션이 다른 화면에 나타나서 컨트롤이 어려울 수 있고, 마우스의 움직임도 이상합니다.

이때는 grub에서 예전에 사용하던 설정으로 변경하여 EDID 파일을 사용하지 않도록 했습니다.

EDID를 외장모니터에 직접 write하는 것도 방법이라고 하는데, 해당 방법은 아직 진행하지 못했습니다.

 

- End -

 

링크 1) https://wiki.debian.org/RepairEDID

링크 2) https://kodi.wiki/view/Archive:Creating_and_using_edid.bin_via_xorg.conf

링크 3) https://askubuntu.com/questions/1011098/how-to-eliminate-edid-checksum-errors

 

반응형

Websocket 스펙인 RFC6455를 살펴봤습니다.

약 3000 라인이 조금 넘는 text 파일인데, 앞서 자료들을 찾아 읽고 나서인지 기본적인 내용을 파악하기는 힘들지 않았습니다.

 

주요 내용을 정리하면 다음과 같습니다.

 

- The protocol consists of an opening handshake followed by basic message framing, layered over TCP.

- The goal of this technology is to provide a mechanism for browser-based applications that need two-way communication with servers that does not rely on opening multiple HTTP connections
- The WebSocket Protocol is designed to supersede existing bidirectional communication technologies that use HTTP as a transport layer to benefit from existing infrastructure (proxies, filtering, authentication).

  HTTP가 제공하는 기존의 인프라를 이용할 수 있다.
- The protocol has two parts: a handshake and the data transfer.

  Handshake와 data transfer로 구성된다.
- In a handshake, the leading line from the client follows the Request-Line format. 

  And the leading line from the server follows the Status-Line format. (HTTP Spec.)
- After a successful handshake, clients and servers transfer data back and forth in conceptual units referred to in this specification as "messages". On the wire, a message is composed of one or more frames.

  Handshake 이후에 메시지들을 주고 받게 된다.
- A frame has an associated type. Each frame belonging to the same message contains the same type of data. This version of the protocol defines six frame types and leaves ten reserved for future use.

1.3. Opening Handshake

- For this header field, the server has to take the value (as present in the header field, e.g., the base64-encoded [RFC4648] version minus any leading and trailing whitespace) and concatenate this with the Globally Unique Identifier (GUID, [RFC4122]) "258EAFA5-E914-47DA-95CA-C5AB0DC85B11" in string form, which is unlikely to be used by network endpoints that do not understand the WebSocket Protocol. A SHA-1 hash (160 bits) [FIPS.180-3], base64-encoded (see Section 4 of [RFC4648]), of this concatenation is then returned in the server's handshake.

https://not-to-be-reset.tistory.com/91를 살펴보면, 위 내용을 Python으로 실제 시험할 수 있습니다.

- The |Sec-WebSocket-Accept| header field indicates whether the server is willing to accept the connection.

 

1.4. Closing Handshake
- By sending a Close frame and waiting for a Close frame in response, certain cases are avoided where data may be unnecessarily lost.

1.5. Design Philosophy
- The WebSocket Protocol is designed on the principle that there should be minimal framing.
- It is expected that metadata would be layered on top of WebSocket by the application layer, in the same way that metadata is layered on top of TCP by the application layer (e.g., HTTP).

4.1. Client Requirements
- The handshake consists of an HTTP Upgrade request, along with a list of required and optional header fields.

5. Data Framing
- A client MUST mask all frames that it sends to the server
- A server MUST NOT mask any frames that it sends to the client.
- Octet i of the transformed data ("transformed-octet-i") is the XOR of octet i of the original data ("original-octet-i") with octet at index i modulo 4 of the masking key ("masking-key-octet-j"):
- Control frames are identified by opcodes where the most significant bit of the opcode is 1.  Currently defined opcodes for control frames include 0x8 (Close), 0x9 (Ping), and 0xA (Pong).  Opcodes 0xB-0xF are reserved for further control frames yet to be defined.

 

이후에는 필요한 시점에 참고하면 될 것 같습니다.

 

- End -

반응형

'프로그래밍 > Network' 카테고리의 다른 글

[Network] Websocket 기초  (0) 2021.11.23

물론 스펙을 정독하고 이해하는 것이 정석이겠습니다만, 항상 쉬운 길을 찾게되네요.

하지만, 그 길을 걷다 보면 무슨 내용인지 전혀 파악이 되지 않을 때도 많습니다. ㅠㅠ

몇가지 reference link들을 정리하면서, websocket에 대해서 파악해 봅니다.

 

1. https://en.wikipedia.org/wiki/WebSocket

  • WebSocket is located at layer 7 in the OSI model and depend on TCP at layer 4. 
  • WebSocket enables streams of messages on top of TCP.

2. https://www.mischianti.org/2020/12/07/websocket-on-arduino-esp8266-and-esp32-client-1/

  • WebSocket is a computer communications protocol, providing full-duplex communication channels over a single TCP connection.
  • The big difference from REST server is that in an http request you send request and you must wait response to have the data and start new request on the same connection, with the WS you can stream requests and stream responses than operate when you want.

그리고, 가장 중요한 그림이 나옵니다.

Rest와 Websocket 비교

3. https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers

  • A WebSocket server is nothing more than an application listening on any port of a TCP server that follows a specific protocol.
  • WebSocket servers are often separate and specialized servers (for load-balancing or other practical reasons), so you will often use a reverse proxy (such as a regular HTTP server) to detect WebSocket handshakes, pre-process them, and send those clients to a real WebSocket server. This means that you don't have to bloat your server code with cookie and authentication handlers (for example).
  • First, the server must listen for incoming socket connections using a standard TCP socket.
  • The Sec-WebSocket-Accept header is important in that the server must derive it from the Sec-WebSocket-Key that the client sent to it. To get it, concatenate the client's Sec-WebSocket-Key and the string "258EAFA5-E914-47DA-95CA-C5AB0DC85B11" together (it's a "magic string"), take the SHA-1 hash of the result, and return the base64 encoding of that hash.

Frame format

내용을 정리하자면 다음과 같습니다.

  • HTTP와 유사하게 OSI 모델의 7 layer에 위치하는 application
  • Full duplex로, client의 요청 없이도 서버가 데이터의 전송을 시작할 수 있음

결론적으로 "TCP protocol 상에서 돌아가는 application으로 서버와 clients간에 full duplex를 지원하는 프로토콜" 정도로 이해할 수 있어 보입니다.

 

- End -

 

 

반응형

'프로그래밍 > Network' 카테고리의 다른 글

[Network] Websocket - RFC6455  (0) 2021.11.24

Python으로 text 파일을 열어서 처리를 하려고 하는데, 이상한 데이터(예를 들면 0xff)가 읽힌다는 에러가 발생하기도 합니다.

 

[error] encoding : utf8, message : 'utf-8' codec can't decode byte 0xff in position 8: invalid continuation byte

 

이때 utf8, cp949, euc-kr등으로 변경하라는 가이드가 많이 보입니다.

제가 사용한 text 파일들은 이런 방법으로도 문제가 계속 발생했습니다.

 

python3의 경우, errors = ignore 옵션을 추가하면 문제가 해결되었습니다.

open(path, 'r', encoding='utf-8', errors='ignore')

관련 링크들입니다.

https://stackoverflow.com/questions/30700166/python-open-file-error

 

python open file error

I am trying to open some file and I know there are some errors in the file with UTF-8 encoding, so what I will do in python3 is open(fileName, 'r', errors = 'ignore') but now I need to use pyth...

stackoverflow.com

https://stackoverflow.com/questions/12468179/unicodedecodeerror-utf8-codec-cant-decode-byte-0x9c

 

UnicodeDecodeError: 'utf8' codec can't decode byte 0x9c

I have a socket server that is supposed to receive UTF-8 valid characters from clients. The problem is some clients (mainly hackers) are sending all the wrong kind of data over it. I can easily

stackoverflow.com

- End -

반응형

'프로그래밍 > Python' 카테고리의 다른 글

[Python] 디버깅  (0) 2020.05.03
[Python] 폴더 생성, tar 예제  (0) 2020.05.03
[Python] Animation 예제  (0) 2020.05.03
[Python] matplotlib 예제  (0) 2020.05.03

"차이나는 클라스"는 일종의 숙제처럼 시청하고 있습니다.

가끔은 너무 감동적이고, 때로는 나와 다른 생각을 접하기도 하지만, 다양한 분야를 접할 수 있다는 면에서 기분나쁘지 않은 숙제라고 할 수 있겠습니다.

 

Kaist 정재승 교수님에 대해서는 호감을 가지고 있습니다.

뇌과학이라는 분야에 대해서 대중들에게 쉽게 내용을 전달해 주시기도 하니까요.

 

인생 수업도 열심히 보고 있는데, 정재승 교수님이 마지막 부분에 말씀하신 내용을 간단하게 적으면 다음과 같습니다.

 

60년대생 : 민주화를 쟁취했으나, 그들의 삶은 민주적이지 않고 권위적이다.

70년대생 : 풍요롭고, 문화적 혜택을 많이 받았다. 그러나 보다 나은 세상이 되도록 이바지 한 것은 없다

80년대생 : 워라벨등에 있어서 그들 나름대로 세상을 바꾸려고 노력했다.

90년대생 : 남아선호 사상을 집안에서 경험하지 않은 세대이지만, 세상은 남아선호 사상이 여전하다.

              그들은 40~50대의 마음에 들려하지 않으며, 자신들의 삶을 살고 있다.

 

경험해 본 세대에 대해서는 동의하기도 이견이 있기도 하지만, 경험하지 못한 세대에 대해서는 새로운 정보라고 받아들이고자 합니다.

세상은 '여전히' 빠르게 변하고 있습니다.

 

- End -

 

 

반응형

'소소한 생각들' 카테고리의 다른 글

메모 프로그램들  (0) 2022.04.03
이세돌과 알파고  (0) 2018.04.11
미야자키 하야오의 끝나지 않은 이야기  (0) 2018.03.26
사람은 왜 눈이 두개일까?  (0) 2018.02.04
[영화] 부라더  (0) 2017.12.31

참고한 article은 다음과 같습니다.

https://www.instructables.com/Develop-ESP32-With-PlatformIO-IDE/

 

Develop ESP32 With PlatformIO IDE

Develop ESP32 With PlatformIO IDE: This instructables show how to use PlatformIO IDE develop with ESP32 board.

www.instructables.com

위 문서에는 Arduino와 Platform IO에 대해 다음 항목들에 대한 장단점도 정리되어 있습니다.

  • Version Upgrade
  • Add platform support
  • Add library
  • Platform and Library Update
  • IDE feature

다음과 같은 순서로 Platform IO를 설치합니다.

 

1. VSCode(https://code.visualstudio.com/download)를 먼저 설치해야 합니다.

Platform IO는 VSCode에서 extension으로 설치할 수 있기 때문입니다.

 

2. VSCode를 실행하고, Extension을 선택합니다.

3. Extension 중 Platform IO를 설치합니다.

 

4. Platform IO가 정상적으로 설치되면, extension 밑에 Platform IO 아이콘이 나타납니다. 이를 눌러서 Platform IO를 실행합니다.

 

5. PIO 홈에서 Open을 클릭합니다.

 

6. PIO Home에서 Platform -> Embedded -> Espressif을 선택합니다.

   하위 항목에 다양한 Espressif Platform이 나타납니다.

 

7. 이중에서, Espressif 32를 Install합니다. 지금까지 기본적인 설정은 완료되었습니다.

8. 새로운 프로젝트를 시작하기 위해서, PlatformIO Home으로 이동해서 "New project"를 클릭합니다.

 

9. Project wizard에서 적절한 항목들을 선택합니다.

   ESP32 CAM 동작을 위해서 아래와 같은 항목들을 선택해서 Project를 시작했습니다.

 

10. 위 그림에서 Finish를 클릭하면, Platform IO가 프로젝트에 필요한 환경을 자동으로 설정합니다. (시간이 조금 걸릴 수 있습니다.)

 

11. 코드를 작성합니다.

 

12. 코드 작성 후 필요한 컴파일, 업로드, 모니터등은 메뉴에서 선택해도 되지만, 맨 아래 아이콘을 직접 클릭해도 됩니다.

코드의 기본적인 구조는 Arduino와 같다고 보시면 됩니다.

 

- End -

반응형

'Embedded > MCU' 카테고리의 다른 글

[MCU] ESP32 CAM 사용하기 - (2) Arduino 개발 환경  (0) 2021.08.09
[MCU] ESP32 CAM 사용하기 - (1) 서론  (0) 2021.08.08

ESP32 CAM을 위한 Arduino 개발 환경의 셋업을 정리해 놓은 문서는 많습니다.

아래에 참고한 문서들의 링크와 간단한 comment를 달아 두었으니, 참고해 주십시오.

"남보공방"님의 글만 참고하셔도 충분해 보입니다.

 

일단 아래 링크를 참고해서, ESP32 보드 매니저를 설치합니다.

https://makernambo.com/78

 

ESP32 개발환경 설치

아두이노 IDE에서 ESP32관련 개발을 하려면 다음과 같이 ESP32 보드메니저를 추가해 주어야 한다. 1. 아두이노 IDE 업그레이드 1.6.x대의 아두이노 IDE 버전은 최신 버전의 ESP개발환경을 설치하는 과

makernambo.com

Assets를 누르기 전
Assets를 눌러서 확장한 경우

맨 마지막 "보드 선택" 순서부터는 아래 링크를 따라하면 됩니다.

https://makernambo.com/109

 

ESP32-CAM 소개와 사용방법

1. ESP32-CAM소개 ESP32-CAM 모듈은 ESPressif Systems라는 회사에서 개발하여 인기를 얻고 있는 ESP32 기본 모듈에 아예 카메라까지 내장하여 싸고 편리하게 활용할 수 있도록 판매되는 제품이다. 즉 아두이

makernambo.com

 

  • FTDI 컨버터를 사용해도 되며, 아두이노에 직접 연결해도 동일합니다. 아두이노에 연결하는 경우, 프로그래밍을 수행하면 아두이노가 아니라 ESP32 CAM 보드를 프로그래밍하게 됩니다. 즉, PC 입장에서 아두이노는  단순히 USB to Serial 역할만 수행하게 됩니다. 따라서 FTDI 컨버터를 사용하건, 아두이노를 사용하여 연결하건 프로그래밍을 위해서는 GPIO0를 GND와 연결해서 프로그래밍 모드로 변경해 주어야 합니다. 프로그래밍이 완료되면 GPIO0를 Float한 후 동작을 확인하면 됩니다.
  • Serial 모니터링시 프로그램 설정에서 Carriage-Return 설정을 변경해 주어야 다음 라인이 정상적으로 시작부터 표시됩니다.
  • Linux에서 Minicom을 사용하는 경우라면 Ctrl+A, Z를 누른 후 Carriage-Return 설정을 변경해 주면 됩니다. 스트리밍 서버 접속 후 기본적으로는 화면이 나오지 않으며, 맨 아래에 "Start Stream"이나 "Get Still"을 눌러와 카메라의 화면을 확인할 수 있습니다.

자세한 사항은 위 링크를 참고하여 주십시오.

 

- End -

반응형

+ Recent posts