Sisukord:
- Samm: riistvara seadistamine
- Samm: Pi tarkvara installimine
- Samm: Pythoni seadistamine
- Samm: käivitage Python
- Samm: mis saab siis, kui ma ei ela USA -s?
- 6. samm: lõplikud mõtted
Video: Covid-19 statistika + Raspberry Pi + I2C LCD: 6 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-31 10:18
Nii otsustasin ühel päeval juhuslikult välklambist hankida mõned mul lebavad osad ja teha midagi, mis pakuks mulle reaalajas statistikat Covid-19 kohta. Ma ei kulutanud palju aega selle kena väljanägemisele, sest miks teha midagi püsivat, kui seda sündmust ei toimu? Seetõttu on minu ekraan lihtsalt väikese pappkasti külge kinnitatud.
Vajalikud osad:
- Raspberry Pi - mis tahes mudel. Kasutasin Raspberry Pi 3A+
- 20x4 I2C LCD -ekraan - pole konkreetset kaubamärki… kuid vajab I2C seljakotti
- Naiste ja naiste vahelülid - vaid 4 neist, et ühendada I2C Pi -ga
www.adafruit.com/product/4027
www.amazon.com/gp/product/B01GPUMP9C/ref=p…
www.amazon.com/gp/product/B01L5ULRUA/ref=p…
Need lingid lähevad otse allikatesse, kust ma ostsin. Vabandame, et Adafruit praegu ei paku, kuid Amazon on … vaid aeglaselt, kuna nende põhitähelepanu on suunatud olulistele asjadele, mida need pole. Kõik on saadaval mujal Amazon ja eBay.
Selle kõige jaoks on ilmselgelt vaja vahelduvvooluadapterit, USB -kaablit ja microSD -kaarti.
Samm: riistvara seadistamine
Viidake lisatud pinout -pildile. See ütleb B+, kuid see kehtib ka kõigi teiste Raspberry Pi mudelite kohta, mis on pärast seda tulnud.
Kui LCD -ekraanile on kinnitatud I2C seljakott, vajab see ühendus ainult 4 juhtme töötamist.
Ühendage GND mis tahes Raspberry Pi maandusnõelaga: tihvt 6, 9, 14, 20, 25, 30, 34, 39. Ühendasin selle tihvtiga 6.
Ühendage VCC mõlema Raspberry Pi 5 -voldise kontaktiga: tihvt 2, 4. Ma kasutasin tihvti 4
Ühendage SDA tihvtiga 3.
Ühendage SCL tihvtiga 5.
Kui te järgisite minu seadistust, saate lõpuks GPIO päistes kõik 4 juhtmest 2x2 mustriga.
Teie paigaldusmeetod võib olla ükskõik, mida võite ette kujutada… või mitte midagi. Nagu sissejuhatuses ütlesin, ei kesta see koroonaviiruse tüvi igavesti, nii et ma ei vaja oma seadistusi kummagi jaoks. Kui otsustan pärast selle sündmuse lõppu selle seadistuse alles jätta, võin selle muuta ilmateateks või millekski muuks.
Kinnitasin mutri ja poldi koos nailonist vahetükkidega oma Pi 3A+kõigi 4 nurga külge. See on rangelt vabatahtlik. Ma tegin seda sellepärast, et mul on see mõnikord metallpinnal, mulle ei meeldinud, kui minu ajutised seadistused on korpuse sees oleval Pi -l, ja ma ei taha riskida selle segamisega, sest unustasin selle metallist eemaldada pinnale enne selle sisselülitamist.
Samm: Pi tarkvara installimine
Nagu sissejuhatuses ütlesin, pole vahet, millist Raspberry Pi mudelit kasutate. Ma kasutan seda Raspberry Pi 3A+ -l WiFi kaudu, kuid olen seda testinud ka Raspberry Pi 2 -l Etherneti kaabli abil ja Raspberry Pi Zero versiooni 1.3 (kõige esimene jadakaamera pistikuga Pi Zero) koos USB WiFi -dongliga.
Ma ei kirjuta, kuidas Raspbiani MicroSD -kaardile installida, sest selle tegemiseks on miljoneid juhiseid. Mul on 16 GB microSD, kus töötab Raspbian Buster Lite. Vahemärkusena: ma kasutan peaaegu alati Raspbian Lite'i, sest ma ei vaja üheski oma projektis teisi kasutuid tarkvarapakette. Kui installin tarkvara apt-get abil, installib see puuduvad eeltingimused.
Ühendage võrguga. Jällegi on seal miljoneid juhiseid selle kohta, kuidas seda teha, nii et ma ei hakka siin põhjalikult tutvuma. Võite kasutada traadiga või traadita ühendust, kuid selleks on vaja Interneti -ühendust.
Valikuline, kuid võite lubada SSH -l ühenduse luua PuTTY abil. Ma tegin.
Värskendage kõike ja taaskäivitage:
sudo apt värskendus
sudo apt upgrade -y sudo apt dist-upgrade sudo rpi-update sudo taaskäivitamine
See on üks seadistus, mille ma siin läbi teen. Jällegi on selleks miljoneid viise, kuid parim viide, mille leidsin, on siin:
Siin on tipphetked:
sudo apt install i2c-tools
sudo apt install python-smbus
Samuti peate lubama I2C
sudo raspi-config
- 5 liidese valikut
- P5 I2C
Muudatuste rakendamiseks taaskäivitage
sudo taaskäivitamine
Nüüd on aeg vaadata, kas olete seda kõike siiani õigesti teinud
i2cdetect -y 1
Kui teie ekraan on sisse lülitatud ja teie Raspberry Pi näeb seda, kuvatakse teile diagramm. 20x4, mille ostsin Amazonist ja kasutasin selle projekti jaoks, aadress on 27. Tehniliselt on see hiljem ilmuvate pythoni skriptide jaoks 0x27. Olen näidanud sama aadressi 2 16x2 kuvari jaoks, mille ostsin ka Amazonist, ja ühe 40x2 ekraani, mille leidsin eBayst.
Samm: Pythoni seadistamine
Nii et nüüd keerukate asjade juurde. Püüan hoida seda võimalikult lihtsana. Alustuseks kirjutan lihtsalt failid kodukataloogi.
puudutage I2C_LCD_driver.py
nano I2C_LCD_driver.py
Kleepige allolev sisu oma äsja loodud pythoni skripti.
#-*-kodeerimine: utf-8-*- # Algne kood leiti aadressilt: #
"""
Compiled, mashed and generally mutilated 2014-2015 by Denis Pleic Made available under GNU GENERAL PUBLIC LICENSE
# Modified Python I2C library for Raspberry Pi
# as found on https://gist.github.com/DenisFromHR/cc863375a6e19… # Joined existing 'i2c_lib.py' and 'lcddriver.py' into a single library # added bits and pieces from various sources # By DenisFromHR (Denis Pleic) # 2015-02-10, ver 0.1
"""
# i2c bus (0 -- original Pi, 1 -- Rev 2 Pi)
I2CBUS = 0
# LCD Address
ADDRESS = 0x27
import smbus
from time import sleep
class i2c_device:
def _init_(self, addr, port=I2CBUS): self.addr = addr self.bus = smbus. SMBus(port)
# Write a single command
def write_cmd(self, cmd): self.bus.write_byte(self.addr, cmd) sleep(0.0001)
# Write a command and argument
def write_cmd_arg(self, cmd, data): self.bus.write_byte_data(self.addr, cmd, data) sleep(0.0001)
# Write a block of data
def write_block_data(self, cmd, data): self.bus.write_block_data(self.addr, cmd, data) sleep(0.0001)
# Read a single byte
def read(self): return self.bus.read_byte(self.addr)
# Read
def read_data(self, cmd): return self.bus.read_byte_data(self.addr, cmd)
# Read a block of data
def read_block_data(self, cmd): return self.bus.read_block_data(self.addr, cmd)
# commands
LCD_CLEARDISPLAY = 0x01 LCD_RETURNHOME = 0x02 LCD_ENTRYMODESET = 0x04 LCD_DISPLAYCONTROL = 0x08 LCD_CURSORSHIFT = 0x10 LCD_FUNCTIONSET = 0x20 LCD_SETCGRAMADDR = 0x40 LCD_SETDDRAMADDR = 0x80
# flags for display entry mode
LCD_ENTRYRIGHT = 0x00 LCD_ENTRYLEFT = 0x02 LCD_ENTRYSHIFTINCREMENT = 0x01 LCD_ENTRYSHIFTDECREMENT = 0x00
# flags for display on/off control
LCD_DISPLAYON = 0x04 LCD_DISPLAYOFF = 0x00 LCD_CURSORON = 0x02 LCD_CURSOROFF = 0x00 LCD_BLINKON = 0x01 LCD_BLINKOFF = 0x00
# flags for display/cursor shift
LCD_DISPLAYMOVE = 0x08 LCD_CURSORMOVE = 0x00 LCD_MOVERIGHT = 0x04 LCD_MOVELEFT = 0x00
# flags for function set
LCD_8BITMODE = 0x10 LCD_4BITMODE = 0x00 LCD_2LINE = 0x08 LCD_1LINE = 0x00 LCD_5x10DOTS = 0x04 LCD_5x8DOTS = 0x00
# flags for backlight control
LCD_BACKLIGHT = 0x08 LCD_NOBACKLIGHT = 0x00
En = 0b00000100 # Enable bit
Rw = 0b00000010 # Read/Write bit Rs = 0b00000001 # Register select bit
class lcd:
#initializes objects and lcd def _init_(self): self.lcd_device = i2c_device(ADDRESS)
self.lcd_write(0x03)
self.lcd_write(0x03) self.lcd_write(0x03) self.lcd_write(0x02)
self.lcd_write(LCD_FUNCTIONSET | LCD_2LINE | LCD_5x8DOTS | LCD_4BITMODE)
self.lcd_write(LCD_DISPLAYCONTROL | LCD_DISPLAYON) self.lcd_write(LCD_CLEARDISPLAY) self.lcd_write(LCD_ENTRYMODESET | LCD_ENTRYLEFT) sleep(0.2)
# clocks EN to latch command
def lcd_strobe(self, data): self.lcd_device.write_cmd(data | En | LCD_BACKLIGHT) sleep(.0005) self.lcd_device.write_cmd(((data & ~En) | LCD_BACKLIGHT)) sleep(.0001)
def lcd_write_four_bits(self, data):
self.lcd_device.write_cmd(data | LCD_BACKLIGHT) self.lcd_strobe(data)
# write a command to lcd
def lcd_write(self, cmd, mode=0): self.lcd_write_four_bits(mode | (cmd & 0xF0)) self.lcd_write_four_bits(mode | ((cmd << 4) & 0xF0))
# write a character to lcd (or character rom) 0x09: backlight | RS=DR< # works! def lcd_write_char(self, charvalue, mode=1): self.lcd_write_four_bits(mode | (charvalue & 0xF0)) self.lcd_write_four_bits(mode | ((charvalue << 4) & 0xF0)) # put string function with optional char positioning def lcd_display_string(self, string, line=1, pos=0): if line == 1: pos_new = pos elif line == 2: pos_new = 0x40 + pos elif line == 3: pos_new = 0x14 + pos elif line == 4: pos_new = 0x54 + pos
self.lcd_write(0x80 + pos_new)
for char in string:
self.lcd_write(ord(char), Rs)
# clear lcd and set to home
def lcd_clear(self): self.lcd_write(LCD_CLEARDISPLAY) self.lcd_write(LCD_RETURNHOME)
# define backlight on/off (lcd.backlight(1); off= lcd.backlight(0)
def backlight(self, state): # for state, 1 = on, 0 = off if state == 1: self.lcd_device.write_cmd(LCD_BACKLIGHT) elif state == 0: self.lcd_device.write_cmd(LCD_NOBACKLIGHT)
# add custom characters (0 - 7)
def lcd_load_custom_chars(self, fontdata): self.lcd_write(0x40); for char in fontdata: for line in char: self.lcd_write_char(line)
The address in that content assumes your LCD address is 0x27. If this is not the case for you, you will need to change it on the line "ADDRESS = 0x27" before you type Ctrl+X to save and exit. Otherwise, just save and exit. This file will need to exist in the same directory as the script that we will use later.
That code was on "https://www.circuitbasics.com/raspberry-pi-i2c-lcd-set-up-and-programming/" just in case it did not paste correctly onto this page.
Now create and edit the main python script:
touch covid19.py
nano covid19.py
Paste the below text into your newly created python script.
import I2C_LCD_driverimport socket import time import fcntl import struct import json import urllib2
display = I2C_LCD_driver.lcd()
url = ("https://coronavirus-19-api.herokuapp.com/countries/usa") data = json.load(urllib2.urlopen(url))
try:
while True: data = json.load(urllib2.urlopen(url)) cases = data['cases'] todaycases = data['todayCases'] deaths = data['deaths'] todaydeaths = data['todayDeaths'] recovered = data['recovered'] active = data['active'] critical = data['critical'] casesperonemillion = data['casesPerOneMillion'] deathsperonemillion = data['deathsPerOneMillion'] display.lcd_display_string("COVID-19 Total Stats", 1) display.lcd_display_string("Cases: " + str(cases), 2) display.lcd_display_string("Deaths: " + str(deaths), 3) display.lcd_display_string("Recovered: " + str(recovered), 4) time.sleep(30) display.lcd_display_string(" ", 1) display.lcd_display_string(" ", 2) display.lcd_display_string(" ", 3) display.lcd_display_string(" ", 4) display.lcd_display_string("COVID-19: " + "%s" %time.strftime("%Y/%m/%d"), 1) display.lcd_display_string("Cases: " + str(todaycases), 2) display.lcd_display_string("Deaths: " + str(todaydeaths), 3) display.lcd_display_string("Active: " + str(active), 4) time.sleep(20) display.lcd_display_string(" ", 1) display.lcd_display_string(" ", 2) display.lcd_display_string(" ", 3) display.lcd_display_string(" str(recovered),="">
Ma tean, et see skript on üsna räpane, kuid see on tõhus. See näitab Covid-19 juhtumite praegust statistikat Ameerika Ühendriikides. Peamist andmebaasi uuendatakse iga 5 minuti järel. Minu skript võtab 3 minuti täielikuks ringkäiguks 1 minuti ja tõmbab uuendatud numbrid iga kord, kui tsükkel uuesti algab.
Samm: käivitage Python
Alustagem:
python covid19.py
Esimesel lehel kuvatakse juhtumite ja surmajuhtumite koguarv pärast seda, kui koroonaviirus esimest korda riiki tabas. Teisel lehel kuvatakse need numbrid juhtumite ja surmajuhtumite kohta, mis juhtusid ainult praegusel päeval. Kolmas näitab kriitilises seisundis inimesi, seejärel juhtumeid ja surmajuhtumeid miljoni inimese kohta. Kolmanda lehe teine rida näitas riigi esimese juhtumi kuupäeva, kuid pidin selle eemaldama, sest skript võib mõnikord vea teha ja krahhi tuua, viidates sellele veale.
Selle skripti automaatseks käivitamiseks on mitmeid viise, kuid ma ei hakka siin selle üksikasjadesse laskuma. Käivitan oma käsu pärast seda, kui olen SSH -ga PuTTY kaudu ühenduse loonud. Töötamise ajal ei saa te muid käske täita enne, kui vajutate klahvikombinatsiooni Ctrl+C.
Samm: mis saab siis, kui ma ei ela USA -s?
Seda skripti saab muuta, et kuvada teiste riikide statistikat. Nagu näete, pärineb minu skripti URL API -st siit: (ärge kasutage nende lehtede vaatamiseks Internet Explorerit. See proovib.json -faili alla laadida. Ma kasutasin Chrome'i)
coronavirus-19-api.herokuapp.com/countries/usa
Külastage nüüd sama aadressi, kuid üks kaust kõrgemal
coronavirus-19-api.herokuapp.com/countries
See loetleb iga riigi statistika. Ilmselgelt on see õudusunenägu, kui üritate sellelt lehelt API -andmeid tõmmata. Seega on parem avada oma riigi leht. Meie Kanada sõbrad peaksid skripti muutma järgmiseks URL -iks:
coronavirus-19-api.herokuapp.com/countries/canada
Siin on väga oluline märkus. API URL peab olema spetsiifiline… see tähendab, et URL -is pole tühikuid. Veebisirvimisel asendatakse veebiaadressid tühikutega "%20" ja see tähendab, et meie 2 -osaliste nimedega riikide sõbrad, näiteks Uus -Meremaa, peaksid selle skripti URL -i asendama järgmisega:
coronavirus-19-api.herokuapp.com/countries/new%20zealand
6. samm: lõplikud mõtted
Olen aastate jooksul teinud palju asju koos Raspberry Pi ja Arduinoga, kuid suurem osa sellest, mida olen ehitanud, on lihtsalt teiste ideede kordused. See on peaaegu sama, välja arvatud see, et koostasin sellesse seadistusse tükke paljudest allikatest. Kuigi see seadistus ei hoia teid sellel raskel ajal turvaliselt ja tervena, hoiab see teid seadistamise ajal kindlasti hõivatud ja hoiab teid hiljem kursis.
Kui teil pole neid osi juba olemas, ärge stressake nende ostmisel, kui te ei mõtle selle ehitamisele tõsiselt. Nagu ma juba ütlesin, lähevad tarneajad praegu pikemaks, sest neid jõupingutusi tehakse oluliste esemete nimel. Need osad olid mul juba ainult õppimiseks ja katsetamiseks. Karbile paigaldatud ekraan oli algselt seadistatud vaatama minu võrgus teise Raspberry Pi reaalajas statistikat, kus töötab Pi-Hole. Pärast seda, kui see Covid-19 sündmus on läbi, võin selle muuta ilmastikukuvaks.
Kõigile, kes loevad, tahan öelda selle õpetliku:
www.instructables.com/id/DIY-Hand-Sanitize…
Ma pole seda veel proovinud, kuid mul on need täpsed koostisosad ja ma võin seda mõnda aega proovida.
Soovitan:
Raspberry Pi - HIH6130 I2C niiskuse ja temperatuuri anduri Pythoni õpetus: 4 sammu
Raspberry Pi - HIH6130 I2C niiskus- ja temperatuurianduri Pythoni õpetus: HIH6130 on digitaalse väljundiga niiskus- ja temperatuuriandur. Need andurid tagavad täpsuse taseme ± 4% RH. Tööstusharu juhtiva pikaajalise stabiilsusega, tõelise temperatuuriga kompenseeritud digitaalse I2C-ga, tööstusharu juhtiva töökindlusega, energiatõhususega
Raspberry Pi - HIH6130 I2C niiskuse ja temperatuuri anduri Java õpetus: 4 sammu
Raspberry Pi - HIH6130 I2C niiskuse ja temperatuuri anduri Java õpetus: HIH6130 on digitaalse väljundiga niiskus- ja temperatuuriandur. Need andurid tagavad täpsuse taseme ± 4% RH. Tööstusharu juhtiva pikaajalise stabiilsusega, tõelise temperatuuriga kompenseeritud digitaalse I2C-ga, tööstusharu juhtiva töökindlusega, energiatõhususega