raspberry pi로 I2C 연결 유기 EL을 사용하여 시계 만들기

사용 부품



raspberry pi zero
OLED 단위 (0.96/백색/I2C)
PIR 센서 모듈 [DSUN-PIR]

총 1500엔 정도

유기 EL 구매



최근 유기 EL이 신경이 쓰여 버렸기 때문에 사 버렸다. 매우 싸다.
샀던 것은 이것,

OLED 단위 (0.96/백색/I2C)
h tp // w w. 다행히. 코 m/p 로즈 ct/14958

다만, 유기EL의 굽기 문제가 무섭기 때문에 사람이 없을 때는 소등시키려고 생각했다.
(망가지면 또 하나 구입해도 될까?)

단자부



4개 붙어 있다.
VCC와 GND는 그대로, VCC는 3.3V에서도 움직인다. 다만, VCC와 GND는 반대로 하면 즉시 망가지는 것 같다.
나머지 2개는 I2C 접속, GPIO의 3.3v 부근에 있는 것이 I2C.

alt

I2C 설정



대략적인 설정은 이하의 사이트를 참고로 했습니다.
Make.
htp://마케. BC에서. jp / et al sp bet ry-p / 2c % 3 % 82 % 92 % 4 % BD % BF % 3 % 81 % 86 % 에 F % BC % 88 % 8 % A 8 % A D % 에 5% 에이 9% 에이 7% B7% 에이 8% 에 F% BC% 89/
연결하여 다음 명령,
sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

연결된 장치의 주소가 나타납니다.

유기 EL의 이동 방법



이번에 사용하는 유기 EL은 SSD1306 컨트롤러이다.
ぇtps://ぇあrん. 아다 f 루이 t. 이 m / s 1306-o-d-sp-ys-u-th et sp 벨 ry-Pi-an-d-bea-g-Bneck-b-ck / Oh-r-ww

유기 EL을 사용하기 위해 Adafruit 라이브러리 설치.
git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git
cd Adafruit_Python_SSD1306
sudo python setup.py install

여기서 Pillow라는 이미지 라이브러리가 없으면 움직이지 않는다는 것으로,
sudo pip install Pillow

이 때 python 라이브러리와 python-pip이 필요합니다.

시계 본체



실제로 만든 시계 코드,
#!/usr/bin/python
# coding: UTF

import math
import time
import datetime
import RPi.GPIO as GPIO
import os

import Adafruit_GPIO.SPI as SPI
import Adafruit_SSD1306

from PIL import Image
from PIL import ImageFont
from PIL import ImageDraw

RST = 24
disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST)
disp.begin()
width = disp.width
height = disp.height
disp.clear()
disp.display()
image = Image.new('1', (width, height))
draw = ImageDraw.Draw(image)
SENSOR_PIN = 25
GPIO.setmode(GPIO.BCM)
GPIO.setup(SENSOR_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(RST ,GPIO.OUT)

while True:

  pin_status = GPIO.input(SENSOR_PIN)
  print pin_status
  time.sleep(1)
  while pin_status==1:

            time.sleep(0.2)
            pin_status = GPIO.input(SENSOR_PIN)
            print pin_status

            font = ImageFont.truetype('/home/pi/font/OpenSans-Light.ttf', 22, encoding='unic')
            date_str = datetime.datetime.now().strftime(" %m/%d %a")
            maxwidth, unused = draw.textsize(date_str, font=font)
            draw.rectangle((0,0,width,height), outline=0, fill=0)
            x=0
            for i, c in enumerate(date_str):
                if x > width:
                    break
                if x < -20:
                    char_width, char_height = draw.textsize(c, font=font)
                    x += char_width
                    continue
                y = 2
                draw.text((x, y), c, font=font, fill=255)
                char_width, char_height = draw.textsize(c, font=font)
                x += char_width

            font = ImageFont.truetype('/home/pi/font/7barP.TTF', 35, encoding='unic')
            time_str = datetime.datetime.now().strftime("%H:%M:%S")
            maxwidth, unused = draw.textsize(time_str, font=font)
            x=2
            for i, c in enumerate(time_str):
                if x > width:
                    break
                if x < -20:
                    char_width, char_height = draw.textsize(c, font=font)
                    x += char_width
                    continue
                y = 29
                draw.text((x, y), c, font=font, fill=255)
                char_width, char_height = draw.textsize(c, font=font)
                x += char_width

            disp.image(image)
            disp.display()

            if pin_status==0:
                disp.clear()
                disp.display()

인감 센서는
PIR 센서 모듈 [DSUN-PIR]
h tp // w w. 다행히. 코 m/p 로즈 ct/10254
SENSOR_PIN = 25 사용. 놀이 방법은 ↓대로
ぃ tp // 코 m / 라 오카 카 아카 아 / ms / 7f93400 아 0834b97124b

구성

import 당
① 유기 EL이나 인감 센서의 설정.

while True:
②인감센서로부터의 정보를 받아들인다.

while pin_status==1:
③ pin_status==1로 사람이 있다고 판단하여 시계 표시.

if pin_status==0:
④ pin_status==0으로 사람이 없다고 판단하여 화면의 정보를 지우고 while True로 돌아간다.
disp.clear()
disp.display()

문자 글꼴
font = ImageFont.truetype

여기서 문자의 크기와 글꼴을 지정할 수 있습니다. 시계 방향의 폰트를 가지고 이것하면 보기 쉽다.

time.sleep 정보
이것이 없으면 역시 힘들고 싶은, 1시간 정도하면 시계 멈춘다.
전류치의 거동이 이상했다 ....



동영상(손떨림이나 초점이 없으면 보기 어려울지도 모릅니다만 양해)
alt

IMAGE ALT TEXT HERE
물론 인체감지 센서는 검출 간격과 검출 범위를 설정할 수 있습니다.

사용감



소비 전력은 거기까지 늘어나지 않았다고 느낀다.
전류치는 0.07A 증가했지만, 정직 오차일까.

곤고



날짜를 일본어 표기로 하고 싶다.
일기예보이고 싶다.

적당한 성격상, 공부 부족한 곳 있습니다만 잘 부탁드립니다.

좋은 웹페이지 즐겨찾기