Je suis un amateur comme le travail électronique, mais pour commencer
Faites un rappel de parapluie en utilisant. Il y a une application météo sur mon téléphone portable qui dit "Quand il pleut, quelle heure est-il le matin?", Mais quand je sors, je l'oublie parfois. .. C'est comme le mettre dans la porte d'entrée et afficher la probabilité de précipitation sur l'écran LCD déclenché par l'entrée du capteur humain. Je souhaite également utiliser une batterie d'alimentation. Dans certains cas, pensez à réduire la consommation d'énergie. C'était terminé pour le moment! Il n'y a rien de techniquement avancé.
Il s'est avéré être quelque chose comme ça. Si vous êtes bien préparé à l'entrée, vous serez correctement averti! Je voudrais vérifier combien de temps durera cette batterie.
J'ai acheté le GPIO Hammer Header parce que je ne suis pas sûr de la soudure. Le jeu de pièces électroniques OSOYOO est recommandé aux personnes n'ayant aucune expérience du travail électronique. C'est bon marché, le tutoriel est facile et j'en suis satisfait.
Voir ci-dessous. http://osoyoo.com/ja/2016/04/10/drive-16x2-lcd-with-raspberry-pi/ http://osoyoo.com/ja/2016/06/01/drive-i2c-lcd-screen-with-raspberry-pi/
Voir ci-dessous. http://osoyoo.com/ja/2016/07/14/motionsensor-pi/
J'ai créé l'article enfant suivant. Obtenir la probabilité de précipitation à partir de XML avec Python
C'était terminé, mais à ce moment-là, j'ai connecté le VCC et le GND de l'écran LCD à l'envers et en ai cassé un: pleurez:
--Améliorations -Requests.get () est appelé une fois pour ~~ 12-18h et 18-24h. ~~ --2017 / 08/13 Addendum: Correction de l'utilisation de la notation d'inclusion tapple (strictement, générateur?) Enseignée par @shiracamus. ――Je ne sais pas comment savoir s'il est rétroéclairé.
umbrella_reminder.py
#!/usr/bin/env python2
# coding: utf-8
# If motion sensor detected a person, get and show today's rain fall chance
# of Yokohama (East of Kanagawa) on LCD for 30 seconds.
# If not, wait 1 second and check again.
# for general use
import time
# for motion sensor (referred to as "MS")
import RPi.GPIO as GPIO
# for LCD
import smbus
# for rain fall chance
import datetime
import requests
import xml.etree.ElementTree as ET
# constants for motion sensor
MS_GPIO_INPUT_PIN = 14
# constants for LCD
LCD_I2C_ADDR = 0x3F
LCD_CHR_DISP_WIDTH = 16
LCD_CHR_DRAM_WIDTH = 0x28
LCD_NUM_LINES = 2
LCD_PULSE_WAIT = 0.0005
LCD_DELAY_WAIT = 0.0005
I2C_CMD_MODE = 0x00
I2C_CHR_MODE = 0x01
I2C_ENABLE_BIT = 0x04
I2C_BACKLIGHT_OFF = 0x00
I2C_BACKLIGHT_ON = 0x08
bus = smbus.SMBus(1)
def initialize_gpio_for_ms():
GPIO.setwarnings(False)
GPIO.cleanup()
GPIO.setwarnings(True)
GPIO.setmode(GPIO.BCM)
GPIO.setup(MS_GPIO_INPUT_PIN, GPIO.IN, pull_up_down = GPIO.PUD_UP)
def initialize_lcd():
send_byte_to_lcd(0x33, I2C_CMD_MODE) # establish 4 bits mode
send_byte_to_lcd(0x32, I2C_CMD_MODE) # establish 4 bits mode
send_byte_to_lcd(0x01, I2C_CMD_MODE) # 000001 clear display, return cursor to the home position
# send_byte_to_lcd(0x02, I2C_CMD_MODE) # 000010 return cursor to the home position
send_byte_to_lcd(0x06, I2C_CMD_MODE) # 000110 cursor move direction: increment, display shift: disabled
send_byte_to_lcd(0x0C, I2C_CMD_MODE) # 001100 display on, cursor off, blink off
# send_byte_to_lcd(0x10, I2C_CMD_MODE) # 010000 move cursor without writing, not used for initialization
send_byte_to_lcd(0x28, I2C_CMD_MODE) # 101000 4 bits mode, use 2 lines, use 5 dots font
time.sleep(LCD_DELAY_WAIT)
def send_byte_to_lcd(lcd_data, i2c_mode):
first_data = ((lcd_data & 0xF0) << 0) | i2c_mode
second_data = ((lcd_data & 0x0F) << 4) | i2c_mode
write_and_toggle_lcd_enable(first_data)
write_and_toggle_lcd_enable(second_data)
def write_and_toggle_lcd_enable(data):
time.sleep(LCD_DELAY_WAIT)
bus.write_byte(LCD_I2C_ADDR, (data | I2C_ENABLE_BIT))
time.sleep(LCD_PULSE_WAIT)
bus.write_byte(LCD_I2C_ADDR, (data & ~I2C_ENABLE_BIT))
time.sleep(LCD_DELAY_WAIT)
def turn_off_lcd():
send_byte_to_lcd(0x08, (I2C_CMD_MODE | I2C_BACKLIGHT_OFF))
def turn_on_lcd():
send_byte_to_lcd(0x0C, (I2C_CMD_MODE | I2C_BACKLIGHT_ON))
def move_cursor(line, offset):
if line < 0 or LCD_NUM_LINES <= line:
print('invalid line')
return False
if offset < 0 or LCD_CHR_DRAM_WIDTH <= offset:
print('invalid offset')
return False
if line == 0:
line_data = 0x00
elif line == 1:
line_data = 0x40
data = 0x80 + line_data + offset
send_byte_to_lcd(data, (I2C_CMD_MODE | I2C_BACKLIGHT_ON))
return True
def show_text_to_line(message, line):
if move_cursor(line, 0) == False:
return
message = message.ljust(LCD_CHR_DISP_WIDTH)
for i in range(LCD_CHR_DISP_WIDTH):
send_byte_to_lcd(ord(message[i]), (I2C_CHR_MODE | I2C_BACKLIGHT_ON))
def get_yokohama_rain_fall_chances():
today = datetime.datetime.today().strftime("%Y/%m/%d")
url = 'http://www.drk7.jp/weather/xml/14.xml'
response = requests.get(url)
root = ET.fromstring(response.content)
return ((period.get('hour'), period.text)
for area in root.iter('area')
if area.get('id').encode('utf-8') == 'Est'
for info in area.findall('info')
if info.get('date') == today
for period in info.find('rainfallchance').findall('period'))
def main():
initialize_gpio_for_ms()
initialize_lcd()
target_periods = '12-18', '18-24'
while True:
motion_detected = True if GPIO.input(MS_GPIO_INPUT_PIN) != 0 else False
if motion_detected:
print('motion detected')
turn_on_lcd()
curr_line = 0
for period, rain_fall_chance in get_yokohama_rain_fall_chances():
if period in target_periods:
text = period + 'h ' + rain_fall_chance + '%'
show_text_to_line(text, curr_line)
print(text)
curr_line += 1
if curr_line >= LCD_NUM_LINES:
break
time.sleep(30)
else:
print('motion not detected')
turn_off_lcd()
time.sleep(1)
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
pass
finally:
send_byte_to_lcd(0x01, I2C_CMD_MODE)
turn_on_lcd()
show_text_to_line('Goodbye!', 0)
GPIO.cleanup()
En regardant diverses choses, je craignais que le circuit de protection fonctionne et que la sortie s'arrête lorsque le courant est faible dans les batteries mobiles récentes, mais j'ai pu utiliser ma propre batterie normalement. .. Je me demande si le circuit de protection ne fonctionne pas car il est bon marché? Ou y a-t-il une quantité décente de courant qui circule? Je souhaite également mesurer la consommation électrique. ANKER Astro Slim2
Je ne l'ai pas encore fait.
Recommended Posts