맥에서 Volta 노드 버전 관리자를 사용할 경우

React native를 사용 시 노드를 찾을 수 없다고 에러가 나는 경우

 

volta 사용 시

node bin 경로가 아래와 같이 변경되기 때문에

/Users/username/.volta/tools/image/node/16.13.1/bin/node

 

 

/usr/local/bin에 노드 심볼릭 링크를 생성해 주어야 한다.

ln -s $(which node) /usr/local/bin/node

'개발 > 에러해결' 카테고리의 다른 글

Electron setup SQLite 3  (1) 2019.09.21
라즈베리파이 3 먼지센서 PM1001 , UART 사용기  (1) 2016.10.01
IE8 JSON 데이터 다루기  (0) 2016.05.09

Electron에서 Sqlite3 설치 시

 

스크립트

npm install sqlite3 --save

npm install electron-builder --save-dev

 

npm install

npm start -> Script에 [electron .] 이라고 정의됨

 

Package.json에 해야할 일

Script 밑에

"postinstall""electron-builder install-app-deps"

추가

 

실행

 

에러 해결 참조는 여기서 

https://www.youtube.com/watch?v=vKUVJHV3og4

 

SQLite 코드는 Main.js에 

const sqlite3 = require('sqlite3').verbose();

const db = new sqlite3.Database('./db/moneynode.db');

추가해서 확인하였습니다.

라즈베리파이에 온/습도 센서인 DHT-11은 GPIO핀에 그냥 꽂고, 기존에 퍼져있는 Adafruit의 라이브러리를 사용하니

금방 해결되었습니다. 하지만 먼지 센서인 PM1001은 자료가 별로 없었습니다. 심지어 영어로된 자료 조차도....

한글로 포스팅하신 분이 한분 계셨는데 그나마 파이썬이 아닌 C언어로 짜셨고, WiringPi 라이브러리를 사용하셨네요.

해당 블로그로 이동


저는 무조건 파이썬으로 해결하고 싶어서 그냥 뛰어들었습니다. 운영체제는 라즈베리안이 아닌 Ubuntu Mate입니다.

PM1001 센서를 라즈베리파이3에 연결하고 사용하기 위해서는

1. 물리적인 핀 연결

2. 코드 상의 시리얼 확인, 포트 확인

3. 신호를 주고 받아 데이터가 제대로 나오는지 확인

4. 데이터를 실제 사용되는 단위로 변환


해야 합니다.


먼저 주의 해야 할 점은 PM1001은 UART 통신을 합니다.  UART 통신이란?

시리얼 통신입니다. 센서에서 나오는 TX, RX 핀의 경우 5V로 나오지만 라즈베리파이에서 나오는 TX, RX핀의 경우 3.3V입니다.

이 상태 그대로 연결했다가는 전압의 차이로 인해 얼마 못가서 라즈베리파이가 망가질 확률이 높습니다.

이 상황을 해결하기 위해 나온 물건이 "레벨 컨버터"라고 있지만, 너무 비싸서.... 그냥 저항 분압을 사용하기로 합니다.

네이버지식인이지만설명이있는 저항분압이란?
저항과 핀을 연결해서 전압을 다운시키는 방법입니다.



1. 핀을 연결하는 방법은 다음과 같습니다. 제가 만든 것이 아니라 링크로 대체합니다. 사진보기

주의해야 할 점은 저항은 1Kohm 이상을 사용하셔야 합니다.


2. 핀을 다 연결하신 후에는 라즈베리파이에서 센서를 제대로 인식을 하는지 확인해야 합니다.

저는 파이썬을 이용하기로 했으니, 다음과 같이 입력해 현재 연결되어있는 포트를 확인합니다.

"python -m serial.tools.list_ports"

아무 설정도 하지  않고 포트 확인을 했을 경우 "/dev/ttyAMA0"가 나옵니다. 실제로도 사용하는 포트는 이 포트입니다.

설명서에는 pyserial을 사용해서 해당 포트로 특정 값을 보내라고 나와 있습니다. 설명서1 설명서2


하지만 실제로 해보면 아무 반응도 오지 않습니다. 이 부분에서 헤매다가 찾아보니 원인은 라즈베리파이에 있었습니다.

관련링크1    관련링크2    관련링크3


라즈베리파이3는 와이파이와 블루투스 모듈이 내장되어 있습니다. 라즈베리파이2 까지는 없던 항목입니다.

하여 UART 통신 관련 기능을 찾아보면 cmdline.txt에서 tty관련 항목을 제거하라는 부분이 있는데 우분투 때문인지는 확인하지 못했지만

라즈베리파이3에서는 관련 항목이 존재하지 않습니다. *해당항목은 확인 후 수정하겠습니다.


원인은 내장 블루투스 였습니다. 내장 블루투스가 "/dev/ttyAMA0" 포트를 차지하고 있어 해당 포트를 사용해도 아무 반응이 없습니다.

그래서 내장 블루투스를 죽이고 해당 포트를 사용하는 방법이있습니다.  위의 관련링크1 에 해당 방법이 존재합니다.


The latest emonSD for emonPi / emonBase seemed to work out of the box with the RasPi3, however it became apparent that something rather important was missing...serial comms with the emonPi's ATmega328!

The emonPi communicates with the RasPi via GPIO 14/15 which on the Model B,B+ and Pi2 is mapped to UART0. However on the Pi3 these pins are mapped to UART1 since UART0 is now used for the Bluetooth module. However UART1 is software UART and baud rate is dependent to clock speed which can change with the CPU load, under voltage and temperature; therefore not stable enough. One hack is to force the CPU to a lower speed ( add core_freq=250 to /boot/cmdline.txt)which cripples the Pi3 performance.

A better solution for the emonPi is to disable BT and map UART1 back to UART0 (ttyAMA0) so we can talk to the emonPi in the same way as before.

First update:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo rpi-update

To disable onboard Pi3 Bluetooth and restore UART0/ttyAMA0 over GPIOs 14 & 15 modify:

sudo nano /boot/config.txt

Add to the end of the file

dtoverlay=pi3-disable-bt

We also need to run to stop BT modem trying to use UART

sudo systemctl disable hciuart

See RasPi device tree commit for pi3-disable-bt and raspi forum thread discussion.

Reboot and test serial coms with:

sudo minicom -D /dev/ttyAMA0 -b38400



입니다. 해당 방법을 적용한 후에 다시 신호를 보내면 정상 작동합니다.

이로써 시리얼 포트에 관련된 에러는 해결 했습니다. 이제 파이썬으로 코드를 작성하고, 변환하는 일이 남았습니다.


너무 길어서 파트2에서 쓰도록하겠습니다.

'개발 > 에러해결' 카테고리의 다른 글

Volta sh + React native 사용 시 Node버전  (0) 2022.01.07
Electron setup SQLite 3  (1) 2019.09.21
IE8 JSON 데이터 다루기  (0) 2016.05.09

찾은 결과물1.

http://stackoverflow.com/questions/8306294/script438-object-doesnt-support-property-or-method-keys-for-ie/16183419

2.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys


자바스크립트에서 JSON데이터를 다룰 때 IE8에서 동작해야 하는지 체크해야 할 때가 있다.

싫지만...

어찌되었든 핸들링해야 할 때 JSON 데이터의 개수를 가져와야 할 때가 있는데


IE11이나 다른 브라우저에서는 제공하지만 IE8에서는 제공하지 않는 Object.Keys라는 함수가 있다.

그래서 해당 함수를 추가해 주어야 한다.


 if (!Object.keys) {
  Object.keys = (function () {
    var hasOwnProperty = Object.prototype.hasOwnProperty,
        hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'),
        dontEnums = [
          'toString',
          'toLocaleString',
          'valueOf',
          'hasOwnProperty',
          'isPrototypeOf',
          'propertyIsEnumerable',
          'constructor'
        ],
        dontEnumsLength = dontEnums.length;

return function (obj) {
      if (typeof obj !== 'object' && typeof obj !== 'function' || obj === null) throw new TypeError('Object.keys called on non-object');

var result = [];
for (var prop in obj) {
        if (hasOwnProperty.call(obj, prop)) result.push(prop);
      }
if (hasDontEnumBug) {
        for (var i=0; i < dontEnumsLength; i++) {
          if (hasOwnProperty.call(obj, dontEnums[i])) result.push(dontEnums[i]);
        }
      }
      return result;
    }
  })()
};


+ Recent posts