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 증가했지만, 정직 오차일까.

곤고



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

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

좋은 웹페이지 즐겨찾기