산타가 온 시간을 알려주는 장치 만들기
소개
Christmas One Night Hackason 팀은 두근두근입니다.
산타가 문을 열었던 시간을 기록하고 이메일로 보내는 장치를 만들었습니다.
데모
산타가 방에 들어오면 알림이 오는 녀석 만들었다 피 c. 라고 r. 이 m/KD가 Kq4PXD — 두근두근 (@otukaw)
메커니즘
산타가 방에 들어오면 알림이 오는 녀석 만들었다 피 c. 라고 r. 이 m/KD가 Kq4PXD — 두근두근 (@otukaw)
메커니즘
문이 열리면 근접 센서로 감지하여 파이썬으로 보냅니다.
코드
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가 다루지 않았기 때문에 시리얼 통신을 사용할 수 없어…
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 = ''
→sendMail.py의 두 번째 줄 설명으로 해결(내 환경의 경우)
감상
하룻밤은 놀랍고 짧습니다...
결국 산타는 보이지 않았다.
참고 사이트
htps : // 이 m/나카스케_/있어 ms/607cf74d8841f76에 59c6
Reference
이 문제에 관하여(산타가 온 시간을 알려주는 장치 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/wakuto/items/0c900266930fa26dfef1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)