Skip to content

Node‐RED GPIO & dht11 details

김선영 edited this page Oct 30, 2024 · 4 revisions

raspberrypi 5 dht11 practice

실습 환경

sudo apt-get update
sudo apt-get upgrade

먼저 운영체제를 업그레이드 해준다.

git clone https://github.com/adafruit/Adafruit_Python_DHT.git 으로 라이브러리 설치 (홈 디렉터리에 설치)

  1. ls 명령어로 설치한 라이브러리 폴더 이름을 클릭!
  2. cd Adafruit_Python_DHT 입력해서 해당 폴더로 이동
  3. sudo python setup.py install 명령어 실행
  • 다시 home 으로 이동해서 sudo apt-get install –y libgpiod-dev 명령어로 libgpiod 설치
  • libgpiod는 파이썬 패키지가 아니라 시스템 패키지로 설치해야 하는 라이브러리 입니다.
  • 라즈베리 파이의 패키지 관리 도구인 apt를 사용해야 합니다.

libgpiod을 수동으로 설치해서 에러 해결함

오류 메세지

raise RuntimeError("DHT sensor not found, check wiring")
RuntimeError: DHT sensor not found, check wiring
Lost access to message queue
  1. 필수 패키지 설치 먼저 libgpiod를 수동으로 컴파일하기 위해 필요한 필수 패키지를 설치합니다.
sudo apt-get update
sudo apt-get install -y git build-essential autoconf automake libtool pkg-config
  1. libgpiod 소스 코드 다운로드 이제 libgpiod 소스 코드를 GitHub에서 다운로드합니다.
git clone https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git
cd libgpiod
  1. 소스 코드 컴파일 및 설치 소스 코드 디렉터리로 이동한 후, 아래 명령어를 사용해 libgpiod를 컴파일하고 설치합니다.
./autogen.sh
./configure
make
sudo make install

이 명령어는 libgpiod를 수동으로 컴파일하고 설치하는 과정입니다. 설치가 완료되면 libgpiod가 라즈베리 파이에서 정상적으로 사용 가능해집니다.

  1. 설치 확인 설치가 완료되면 libgpiod가 제대로 설치되었는지 확인하기 위해 다음 명령어를 실행하세요.
gpiodetect

이 명령어가 작동하면, libgpiod가 정상적으로 설치되었음을 의미합니다.

GPIO 접근 권한 문제 라즈베리 파이에서 GPIO 핀을 제어할 때 권한 문제가 발생할 수 있습니다. gpio 그룹에 사용자가 추가되어 있는지 확인하고, 추가 후 라즈베리 파이를 재부팅합니다.

sudo usermod -aG gpio pi
sudo reboot
sudo pip3 install adafruit-circuitpython-dht

이 명령어는 dht11 실습을 위한 파이썬 라이브러리를 설치하는건데, 사용하니까 다음과 같은 오류가 떴다.

오류 메세지

오류

error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.
  • 가상환경을 사용하지 않은 상태일때, 가상환경을 먼저 생성했다.

가상환경 생성

python3 -m venv ~/dht11_env

가상환경 활성화

source ~/dht11_env/bin/activate
  • python 가상환경을 사용해서 가상환경내에서 라이브러리를 깔았다.
pip3 install adafruit-circuitpython-dht

가상환경에 라이브러리를 다운로드하기 위해 sudo를 빼고 이렇게 입력했더니 성공.


이제 adafruit를 import해서 파이썬에서 dht11 데이터를 받을수있다.

코드

import time
import board
import adafruit_dht

dhtDevice = adafruit_dht.DHT11(board.D4)
temperature_c = dhtDevice.temperature        
temperature_f = temperature_c * (9 / 5) + 32    
humidity = dhtDevice.humidity
print("Temp: {:.1f} F / {:.1f} C    Humidity: {}% ".format(temperature_f, temperature_c, humidity))
time.sleep(2.0)

하드웨어 연결

07

vcc는 그대로꼽아서 문제되지않지만 gnd는 -연결단자에 꼽아야함! 실수.

  • 온습도 센서 VCC : 1번 핀 (3.3v) - 3.3v 전압 핀

  • 온습도 센서 GND : 6번 핀 (Ground) - ground

  • 온습도 센서 DAT : GPIO 4 (7번핀)

결과화면

07

reference


Use Node-RED in raspberrypi5 os

  • 설치 과정
  1. nodejs 설치
  2. npm으로 node-red 설치

첫 시도는 sudo apt-get를 통해 설치했지만 비추천, 이유는 gpio nod를 읽어오지 못함.

최신버젼의 nodejs와 node-red 설치를 하려면 해결과정 참고

02

node-red가 설치 된 화면이다. 설치가 완료되면 한번 실행해주자.

  • directory 주소창에 ~/.node-red를 작성하면 생성된 node-red 폴더를 볼수있음.
666
08

필요한 node-red 모듈이 설치되면 modules폴더 안에 해당 패키지 이름의 폴더가 생긴다!

  • gpio 모듈 설치를 위해 npm을 사용했다.
  • npm은 노드 패키지 매니저로 nodejs를 설치하면 사용할수있다.
05

http://127.0.0.1:1880/에 접속해서 node-red 플로우 창을 열었다.

  • 명령어 node-red 를 입력하면 서버가 열리고 위 이미지처럼 주소를 알려준다.
  • node-red는 플로우 페이지에서 drag & drop으로 하드웨어 기능을 제어할 수 있다.
09
  • flow page에서 새로운 node를 추가하고 싶다면 햄버거모양의 네비게이션바를 클릭
  • Manage palette (팔레트 관리)에 들어가서 검색하면 됨.

Node-RED GPIO led practice

13

플로우를 위 사진처럼 구현함.

image
  • 설정방법: inject payload를 booleon type으로 해야 0, 1에 따라 true, false로 불을 켜고 끄는 기능이 잘 동작합니다.
KakaoTalk_20241014_110823738.mp4

오류

노드 conetcing 오류가 뜨면 빨간색 점이 찍히면서 0, 또는 1을 출력했을때 아래의 오류가 찍힌다.

14 Oct 02:46:06 - [error] [rpi-gpio out:4f9480a235312ea2] nrgpio python command not running

오류를 구글에 검색해서 해결법이 적힌 글을 발견! 참고글

image

"sudo apt-get update -y" 또는 "sudo apt-get upgrade -y" 를 사용하지 않았고

설치 명령어

bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

위 명령어로 최신버전의 node-js와 node-red를 설치했더니 gpio노드 정상작동했습니다

reference1

reference2


node-red dht11 practice

dht11 센서 정보를 노드로 불러오기는 실패함. /dev/gimem이 raspberry5에서 호환이안되서...

exec 노드로 파이썬 가상환경을 실행하고 온습도데이터를 json파싱함.

image

node-red 콘솔에 데이터가 출력되는 모습

image

debug 노드에 데이터가 출력되는 모습

코드

import time
import board
import adafruit_dht
import json

def read_sensor():
    try:
        dhtDevice = adafruit_dht.DHT11(board.D4)
        temperature_c = dhtDevice.temperature
        temperature_f = temperature_c * (9 / 5) + 32
        humidity = dhtDevice.humidity
        
        return json.dumps({
            "temperature_c": round(temperature_c, 1),
            "temperature_f": round(temperature_f, 1),
            "humidity": humidity
        })
    except RuntimeError as error:
        return json.dumps({"error": str(error)})
    except Exception as error:
        return json.dumps({"error": f"Unexpected error: {str(error)}"})
    finally:
        dhtDevice.exit()

print(read_sensor())

브래드보드를 쓰지 않고 연결, 내부 풀업 저항을 사용함.

Clone this wiki locally