카레

준비물: 돼지고기 or 소고기, 양파 2개, 당근 반개, 감자 반개, 카레 고형분 2인분, 버터 쪼금

  1. 양파, 당근, 감자는 얇게 채 썰기해서 준비. 당근, 감자는 채칼을 이용하면 쉽게 가능.
  2. 후라이팬에 버터 (없으면 올리브유)를 넣고, 양파를 다 넣고 살짝 갈색이 될때까지 볶는다.
  3. 고기를 넣고 볶는다.
  4. 고기가 핏기가 사라지면, 당근, 감자를 넣고 볶는다.
  5. 야채가 숨이 죽고 좀 익었다 싶으면 (이때쯤 양파는 좀더 진한 갈색으로 변함), 물을 700ml 정도 넣고 끓인다.
  6. 물이 끓기 시작하면, 카레를 넣고 저어준다.
  7. 야채가 완전히 익을때까지 저어준다.

끝!.

양파가 볶으면 볶을수록 단맛이 올라와, 아이들도 좋아하는 달달한 맛을 느낄수 있음. 거의 익어버려 양파의 아삭한 감이 사라지므로 먹기도 편함.

Jetson Nano GPIO 사용 해보기

Jetson Nano에는 라즈베리파이와 마찬가지로 40핀의 GPIO 헤더가 존재한다. 이를 이용해 다양한 외부기기와 연결 가능한데, python의 라이브러리를 이용하면 사용자가 제어 가능하다.

먼저 필요한 패키지를 설치한다. python3는 기본 설치되어 있고, pip3는 설치해야 한다.

$ sudo apt install python3-pip

다음으로 Jetson.GPIO 패키지를 설치한다.

$ sudo pip3 install Jetson.GPIO

이제 python3를 실행하고 설치한 패키지를 import 해보면 다음과 같이 퍼미션 에러가 발생한다. 몇가지 설정이 필요하다.

>>> import Jetson.GPIO
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.6/dist-packages/Jetson/GPIO/__init__.py", line 1, in <module>
    from .gpio import *
  File "/usr/local/lib/python3.6/dist-packages/Jetson/GPIO/gpio.py", line 33, in <module>
    raise RuntimeError("The current user does not have permissions set to "
RuntimeError: The current user does not have permissions set to access the library functionalites. Please configure permissions or use the root user to run this

gpio 그룹을 생성하고 사용자를 gpio 그룹에 추가한다.

$ sudo groupadd -f -r gpio
$ sudo usermod -a -G gpio <user_id>

다음으로 udev 룰을 rules.d 디렉토리로 복사한다.

$ sudo cp /opt/nvidia/jetson-gpio/etc/99-gpio.rules /etc/udev/rules.d/

재부팅하거나, 다음과 같이 입력하여 udev 룰을 다시 불러온다. (재부팅해야 함.)

$ sudo udevadm control --reload-rules && sudo udevadm trigger

이제 python3를 실행한 다음, 패키지를 import 해보면, 정상적으로 사용 가능하다. 몇가지 예제 코드들이 /opt/nvidia/jetson-gpio/samples에 있으므로 참고하면 될듯하다. 사용법은 RPi.GPIO와 동일하다.

>>> import Jetson.GPIO as GPIO
>>> GPIO.setmode(GPIO.BOARD)
>>> GPIO.setup(33, GPIO.OUT)
>>> GPIO.output(33, GPIO.HIGH)
>>> GPIO.output(33, GPIO.LOW)

위와 같이 간단히 사용 가능하고, 인터럽트, 콜백함수 등 다양한 기능을 지원한다. 몇가지 주의 사항으로는,

  • GPIO의 전압은 5V가 아닌 3.3V
  • PWM 기능은 지원하지 않음
  • I2C, SPI는 각각 두개씩 지원
  • 몇가지 특수펑션들 사용하고, 전원관련 핀을 빼면 여분의 GPIO는 별로 없는듯.

상세한 핀아웃은 https://www.jetsonhacks.com/nvidia-jetson-nano-j41-header-pinout/을 참고하면 됨.

Jetson Nano Developer Kit 사양 & 크기 정보

Technical Specifications

GPU128-core Maxwell
CPUQuad-core ARM A57 @ 1.43 GHz
Memory4 GB 64-bit LPDDR4 25.6 GB/s
StoragemicroSD (not included)
Video Encode4K @ 30 | 4x 1080p @ 30 | 9x 720p @ 30 (H.264/H.265)
Video Decode4K @ 60 | 2x 4K @ 30 | 8x 1080p @ 30 | 18x 720p @ 30 (H.264/H.265)
Camera1x MIPI CSI-2 DPHY lanes
ConnectivityGigabit Ethernet, M.2 Key E
DisplayHDMI 2.0 and eDP 1.4
USB4x USB 3.0, USB 2.0 Micro-B
OthersGPIO, I2C, I2S, SPI, UART
Mechanical100 mm x 80 mm x 29 mm

보드 자체의 크기는 실제 측정해보면 100mm x 79mm 이다. 나사 홀의 위치는 다음과 같다.

Blockly 실행 해보기

지난번 포스팅 (https://ahnbk.com/?p=469)대로 Blockly 소스를 받아 빌드하고, 그 결과물로 실행보도록 한다. 나중에 iOS나 Android에서도 어짜피 webview를 이용해서 실행해야 하므로, 과정은 동일하다.

먼저 작업할 디렉토리를 생성한다. 여기에선 편의상 blockly_demo란 디렉토리를 사용한다.

$ mkdir blockly_demo
$ cd blockly_demo

이제 이 디렉토리에 빌드된 파일을 복사한다.

javascript_compressed.js
blocks_compressed.js
blockly_compressed.js

다음으로 demos/mobile/html/toolbox_standard.js 툴박스 파일도 작업 디렉토리로 복사한다. 또 localization 관련한 디렉토리도 복사한다. 복사 위치는 msg 디렉토리 밑으로 한다. 본래 Blockly 디렉토리의 msg/js 디렉토리를 현재 개발 디렉토리로 복사한다. 완료되었으면 다음과 같이 보여야 한다.

이제 에디터를 이용해서 파일을 하나 생성한다. 파일 이름은 index.html 이다. 파일 내용은 다음과 같다.

<!DOCTYPE html>
<!-- HTML file to host Blockly in a mobile WebView. -->
<html>
<head>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <link rel="stylesheet" href="styles.css">
  <script src="blockly_compressed.js"></script>
  <script src="blocks_compressed.js"></script>
  <!-- TODO: Select msg file based on locale. -->
  <script src="msg/js/en.js"></script>
  <script src="toolbox_standard.js"></script>
</head>
<body>
  <div id="blocklyDiv"></div>
  <script type="text/javascript">
    var workspacePlayground = Blockly.inject('blocklyDiv', {
          media: 'media/',
          toolbox: BLOCKLY_TOOLBOX_XML['standard'],
          zoom: {controls: true}
        });
  </script>
</body>
</html>

또 style.css 파일로 생성하여 다음과 같이 입력한다.

html, body, #blocklyDiv {
    border: 0;
    height: 100%;
    margin: 0;
    padding: 0;
    width: 100%;
}

이제 크롬, 사파리, 인터넷 익스플로러 등 웹브라우저를 이용해 index.html을 열어본다.

Blockly가 잘 로딩되어 실행됨을 볼수 있다.

벚꽃

아… 올해도 제대로 된 벚꽃 구경은 못하나보다. 매년 가자가자 했는데, 결국엔 벚꽃 구경 소식은 뉴스로만 듣게 되는듯.

독산역 앞 벚꽃거리

아쉬우나마 길거리 걸어가다 찍은 벚꽃 거리 사진을 올린다. 업무 때문에 정처없이 걸어다가 문득 보인 철길 옆으로 주욱 늘어선 벚꽃 나무 사진.