산타가 온 시간을 알려주는 장치 만들기

소개



Christmas One Night Hackason 팀은 두근두근입니다.
산타가 문을 열었던 시간을 기록하고 이메일로 보내는 장치를 만들었습니다.

데모



산타가 방에 들어오면 알림이 오는 녀석 만들었다 피 c. 라고 r. 이 m/KD가 Kq4PXD — 두근두근 (@otukaw)


메커니즘



December 24, 2019



문이 열리면 근접 센서로 감지하여 파이썬으로 보냅니다.



코드




Xmass.ino

void setup() {
    Serial.begin(9600);
    // センサ
    pinMode(10, INPUT);
    // ブザー
    pinMode(11, OUTPUT);
    // 申し訳程度のイルミネーション
    pinMode(12, OUTPUT);
    pinMode(LED_BUILTIN, OUTPUT);
}

// ドアあいた : '1'
// ドア閉まった: '0'

bool state = true;
bool prev_state = true;

unsigned long t;
unsigned long prev_t = millis();
void loop() {
    t = millis();
    if(t - prev_t >= 10) {
      if(!digitalRead(10)) {
          digitalWrite(LED_BUILTIN, HIGH);
          digitalWrite(11, HIGH);
          digitalWrite(12, LOW);
          state = true;
      } else {
          digitalWrite(LED_BUILTIN, LOW);
          digitalWrite(11, LOW);
          digitalWrite(12, HIGH);
          state = false;
      }
      prev_t = t;
    }

    if(prev_state != state) {
        if(state) {
            Serial.write('1');
        } else {
            Serial.write('0');
        }
    }
    prev_state = state;
}




sendMail.py

import sys
sys.path.append('C:\\Users\\ユーザー名\\Appdata\\local\\programs\\python\\python37\\lib\\site-packages')
import datetime
import serial
import smtplib
from email.mime.text import MIMEText
from email.utils import formatdate
from email.header import Header
import ssl
import signal
signal.signal(signal.SIGINT, signal.SIG_DFL)


FROM_ADDRESS = '自分のGmailアドレス'
MY_NAME = '表示名'
MY_PASSWORD = '自分Gmailのパスワード'
TO_ADDRESS = '送信先アドレス'
BCC = ''
SUBJECT = '件名'
BODY = ''

jp = 'iso-2022-jp'

def create_message(from_addr, to_addr, bcc_addrs, subject, body):
    msg = MIMEText(body)
    msg['Subject'] = subject
    msg['From'] = '%s <%s>'%(Header(MY_NAME.encode(jp),jp).encode(), FROM_ADDRESS) 
    msg['To'] = to_addr
    msg['Bcc'] = bcc_addrs
    msg['Date'] = formatdate()
    return msg

def send(from_addr, to_addrs, msg):
    smtpobj = smtplib.SMTP_SSL('smtp.gmail.com', 465, timeout=10)
    smtpobj.login(FROM_ADDRESS, MY_PASSWORD)
    smtpobj.sendmail(from_addr, to_addrs, msg.as_string())
    smtpobj.close()

def mail():
    print(BODY)
    to_addr = TO_ADDRESS
    subject = SUBJECT
    body = BODY

    msg = create_message(FROM_ADDRESS, to_addr, BCC, subject, body)
    send(FROM_ADDRESS, to_addr, msg)

ser = serial.Serial('COM6', 9600, timeout=0)

while(True):
        now = datetime.datetime.now()
        c = ser.read()
        if(c == b'1'):
            BODY += str(now.year) + '年' + str(now.month) + '月' + str(now.day) + '日' + str(now.hour) + '時' + str(now.minute) + '分' + str(now.second) + '秒\n'
            print(BODY)
        if(now.second == 0):
            mail()
            BODY = ''




개인 하마리 포인트



  • pip로 인스톨 한 것에 path가 다루지 않았기 때문에 시리얼 통신을 사용할 수 없어…


→sendMail.py의 두 번째 줄 설명으로 해결(내 환경의 경우)



감상



하룻밤은 놀랍고 짧습니다...

결국 산타는 보이지 않았다.



참고 사이트





htps : // 이 m/나카스케_/있어 ms/607cf74d8841f76에 59c6


좋은 웹페이지 즐겨찾기