Sisällysluettelo:
- Vaihe 1: Laitteiston asennus
- Vaihe 2: Pi -ohjelmiston asennus
- Vaihe 3: Python -asennus
- Vaihe 4: Suorita Python
- Vaihe 5: Mitä jos en asu Yhdysvalloissa?
- Vaihe 6: Viimeiset ajatukset
Video: Covid-19-tilastot + Raspberry Pi + I2C LCD: 6 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-31 10:19
Niinpä sattumanvaraisesti eräänä päivänä päätin hankkia muutaman osan, jotka olin makaamassa, ja tehdä jotain, joka toimittaisi minulle reaaliaikaisia tilastoja Covid-19: stä. En käyttänyt paljon aikaa sen näyttämiseen kauniilta, koska miksi tehdä jotain pysyvää, kun tämä tapahtuma ei tule olemaan? Siksi näyttöni on juuri asennettu pieneen pahvilaatikkoon.
Tarvittavat osat:
- Raspberry Pi - mikä tahansa malli. Käytin Raspberry Pi 3A+
- 20x4 I2C LCD -näyttö - ei tiettyä merkkiä… mutta tarvitsee I2C -reppun
- Naaras -naarashyppyjohdot - Vain 4 niistä yhdistää I2C: n Pi: hen
www.adafruit.com/product/4027
www.amazon.com/gp/product/B01GPUMP9C/ref=p…
www.amazon.com/gp/product/B01L5ULRUA/ref=p…
Nämä linkit siirtyvät suoraan lähteisiin, joista ostin. Ikävä sanoa, että Adafruit ei toimita tuotteita juuri nyt, mutta Amazon on… vain hitaasti, koska niiden pääpaino on olennaisissa kohteissa, joita nämä eivät ole. Kaikki löytyy muualta Amazonista ja eBaysta.
Tarvitset ilmeisesti verkkolaitteen, USB -kaapelin ja microSD -kortin.
Vaihe 1: Laitteiston asennus
Katso liitteenä olevaa pinout -kuvaa. Siinä lukee B+, mutta se koskee myös kaikkia muita Raspberry Pi -malleja, jotka ovat tulleet sen jälkeen.
Kun I2C -reppu on kiinnitetty LCD -näyttöön, tämä liitäntä vaatii vain 4 johtoa.
Kytke GND mihin tahansa Raspberry Pi: n maadoitusnastaan: nasta 6, 9, 14, 20, 25, 30, 34, 39. Liitin sen nastaan 6.
Liitä VCC jompaankumpaan 5 voltin nastaan Raspberry Pi: nastassa 2, 4. Käytin nasta 4
Liitä SDA nastaan 3.
Liitä SCL nastaan 5.
Jos seurasit asetuksiani, päädyt GPIO -otsikoiden kaikkiin 4 johtoon 2x2 -kuvioina.
Asennusmenetelmäsi voi olla mitä tahansa kuvitella… tai ei mitään. Kuten sanoin introssa, tämä koronaviruksen kanta ei kestä ikuisesti, joten en tarvitse asetuksiani kumpaankaan. Jos päätän säilyttää tämän asennuksen tämän tapahtuman jälkeen, saatan muuttaa sen säänäytöksi tai jotain.
Kiinnitin mutterin ja pultin sekä nylonvälikkeet Pi 3A+: n kaikkiin neljään kulmaan. Tämä on ehdottomasti valinnainen. Tein tämän, koska minulla on joskus tämä metallipinnalla, en pitänyt väliaikaisista asetuksistani kotelon sisällä olevalla Pi: llä, enkä halua ottaa riskiä sotkea sitä, koska unohdin poistaa sen metallista pintaan ennen sen kytkemistä päälle.
Vaihe 2: Pi -ohjelmiston asennus
Kuten sanoin introssa, sillä ei ole väliä mitä Raspberry Pi -mallia käytät. Käytän tätä Raspberry Pi 3A+ -laitteessa WiFi -yhteydellä, mutta olen testannut tätä myös Raspberry Pi 2: lla ethernet -kaapelilla ja Raspberry Pi Zero -versiolla 1.3 (ensimmäinen Pi Zero, jossa on sarjakameran liitin) USB -WiFi -sovittimen kanssa.
En aio kirjoittaa, miten Raspbian asennetaan MicroSD -kortille, koska siihen on miljoonia ohjeita. Minulla on 16 Gt: n microSD -kortti, jossa on Raspbian Buster Lite. Sivuhuomautuksena käytän melkein aina Raspbian Litea, koska en tarvitse muita hyödyttömiä ohjelmistopaketteja missään projektissani. Jos asennan ohjelmiston apt-getin avulla, se asentaa puuttuvat edellytykset.
Yhdistä verkkoon. Jälleen on olemassa miljoonia ohjeita siitä, miten tämä tehdään, joten en mene syvemmälle täällä. Voit käyttää langallista tai langatonta yhteyttä, mutta tämä edellyttää Internet -yhteyttä.
Valinnainen, mutta voit ottaa SSH -yhteyden käyttöön PuTTY: n avulla. Minä tein.
Päivitä kaikki ja käynnistä uudelleen:
sudo apt päivitys
sudo apt upgrade -y sudo apt dist-upgrade sudo rpi-update sudo uudelleenkäynnistys
Tämä on yksi asetus, jonka aion käydä läpi täällä. Jälleen on miljoonia tapoja tehdä tämä, mutta paras löytämäni viite on täällä:
Tässä kohokohdat:
sudo apt asentaa i2c-tools
sudo apt asentaa python-smbus
Sinun on myös otettava I2C käyttöön
sudo raspi-config
- 5 liitäntävaihtoehtoa
- P5 I2C
Käynnistä muutokset, jotta muutokset tulevat voimaan
sudo uudelleenkäynnistys
Nyt on aika tarkistaa, oletko tehnyt tämän kaiken oikein tähän asti
i2cdetect -y 1
Jos näyttösi on kytketty päälle ja Raspberry Pi voi nähdä sen, saat näkyviin kaavion. Osoitteen 20x4: lle, jonka ostin Amazonista ja jota käytin tässä projektissa, on 27. Teknisesti tämä tunnistaa 0x27: ksi python -komentosarjoille, jotka tulevat myöhemmin. Minulla on ollut sama osoitenäyttö kahdelle 16x2 -näytölle, jotka ostin myös Amazonista, ja yhdelle 40x2 -näytölle, jonka löysin eBayssa.
Vaihe 3: Python -asennus
Joten nyt monimutkaisista asioista. Yritän pitää sen mahdollisimman yksinkertaisena. Aloittelijoille kirjoitan vain tiedostoja kotihakemistoon.
kosketa I2C_LCD_driver.py
nano I2C_LCD_driver.py
Liitä alla oleva sisältö äskettäin luotuun python -komentosarjaan.
#-*-koodaus: utf-8-*- # Alkuperäinen koodi löytyi osoitteesta: #
"""
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),="">
Tiedän, että tämä käsikirjoitus on melko sotkuinen, mutta se on tehokas. Se näyttää Yhdysvaltojen nykyiset tilastot Covid-19-tapauksista. Päätietokanta päivitetään 5 minuutin välein. Käsikirjoituksessani kestää 1 minuutti 3 sivun selaamiseen kokonaan ja se hakee päivitetyt numerot aina, kun sykli alkaa uudelleen.
Vaihe 4: Suorita Python
Aloitetaanpa:
python covid19.py
Ensimmäisellä sivulla näkyy tapausten ja kuolemien kokonaismäärä sen jälkeen, kun koronavirus ensimmäisen kerran osui maahan. Toisella sivulla näkyvät ne tapaukset ja kuolemat, jotka tapahtuivat vain kuluvana päivänä. Kolmas esittää kriittisessä tilassa olevia ihmisiä, sitten tapauksia ja kuolemia miljoonaa ihmistä kohden. Kolmannen sivun toinen rivi näytti maan ensimmäisen tapauksen päivämäärän, mutta minun oli poistettava se, koska skripti joskus erehtyi ja kaatui viitaten kyseiseen riviin virheellä.
On olemassa tapoja saada tämä komentosarja toimimaan automaattisesti, mutta en mene tähän yksityiskohtiin. Suoritan omani vain komennolla, kun SSH muodostaa yhteyden PuTTY: n kautta. Kun se on käynnissä, et voi suorittaa muita komentoja ennen kuin painat Ctrl+C.
Vaihe 5: Mitä jos en asu Yhdysvalloissa?
Tätä skriptiä voidaan muokata näyttämään muiden maiden tilastot. Kuten ehkä huomaat, skriptini URL -osoite tulee sovellusliittymästä täältä: (älä käytä Internet Exploreria näiden sivujen katseluun. Se yrittää ladata.json -tiedoston. Käytin Chromea)
coronavirus-19-api.herokuapp.com/countries/usa
Käy nyt samassa osoitteessa, mutta yksi kansio korkeammalla
coronavirus-19-api.herokuapp.com/countries
Tässä luetellaan kunkin maan tilastot. On selvää, että se on painajainen yrittäessään noutaa API -tietoja tältä sivulta. Joten on parasta avata tietyn maan sivu. Kanadan ystäviemme on muokattava käsikirjoitus tähän URL -osoitteeseen:
coronavirus-19-api.herokuapp.com/countries/canada
Erittäin tärkeä huomautus tässä. Sovellusliittymän URL -osoitteen on oltava täsmällinen… eli ei välilyöntejä URL -osoitteessa. Verkkoselauksessa verkko -osoitteen välilyönnit korvataan "%20", ja näin ollen ystäviemme maissa, joissa on 2 -osainen nimi, kuten Uudessa -Seelannissa, on korvattava tämän skriptin URL -osoite seuraavasti:
coronavirus-19-api.herokuapp.com/countries/new%20zealand
Vaihe 6: Viimeiset ajatukset
Olen tehnyt monia asioita Raspberry Pi: n ja Arduinon kanssa vuosien varrella, mutta suurin osa siitä, mitä olen rakentanut, on vain kopioita muiden ideoista. Tämä on melkein sama, paitsi että olen koonnut palasia monista lähteistä tähän kokoonpanoon. Vaikka tämä asetus ei pidä sinua turvassa ja terveenä tänä vaikeana aikana, se pitää sinut varmasti kiireisenä asennuksen aikana ja pitää sinut ajan tasalla myöhemmin.
Jos sinulla ei ole jo näitä osia, älä stressaa ostamasta niitä, ellet ole tosissasi rakentamassa niitä. Kuten aiemmin sanoin, toimitusajat kestävät tällä hetkellä pidempään, koska nämä ponnistelut kohdistetaan olennaisiin tuotteisiin. Minulla oli nämä osat vain oppimista ja kokeilua varten. Laatikkoon asennettu näyttö on alun perin asetettu näyttämään reaaliaikaisia tilastoja toisesta Raspberry Pi -verkostostani, joka käyttää Pi-Holea. Tämän Covid-19-tapahtuman päätyttyä voin muuttaa sen säänäytöksi.
Kaikille lukijoille haluan huutaa tämän opettavaisen:
www.instructables.com/id/DIY-Hand-Sanitize…
En ole vielä kokeillut, mutta minulla on tarkat ainesosat, ja voisin kokeilla sitä jonkin aikaa.
Suositeltava:
Raspberry Pi - HIH6130 I2C Kosteus- ja lämpötila -anturi Python -opetusohjelma: 4 vaihetta
Raspberry Pi - HIH6130 I2C Kosteus- ja lämpötila -anturi Python -opetusohjelma: HIH6130 on kosteus- ja lämpötila -anturi, jossa on digitaalinen lähtö. Nämä anturit antavat tarkkuustason ± 4% RH. Alan johtava pitkän aikavälin vakaus, todellinen lämpötilakompensoitu digitaalinen I2C, alan johtava luotettavuus, energiatehokkuus
Raspberry Pi - HIH6130 I2C Kosteus- ja lämpötila -anturin Java -opetusohjelma: 4 vaihetta
Raspberry Pi - HIH6130 I2C Kosteus- ja lämpötila -anturi Java -opetusohjelma: HIH6130 on kosteus- ja lämpötila -anturi, jossa on digitaalinen lähtö. Nämä anturit antavat tarkkuustason ± 4% RH. Alan johtava pitkän aikavälin vakaus, todellinen lämpötilakompensoitu digitaalinen I2C, alan johtava luotettavuus, energiatehokkuus