Përmbajtje:

Statistikat Covid-19 + Raspberry Pi + I2C LCD: 6 hapa
Statistikat Covid-19 + Raspberry Pi + I2C LCD: 6 hapa

Video: Statistikat Covid-19 + Raspberry Pi + I2C LCD: 6 hapa

Video: Statistikat Covid-19 + Raspberry Pi + I2C LCD: 6 hapa
Video: Hiển thị số ca nhiễm Covid trên màn hình LCD I2C với Raspberry Pi 2024, Nëntor
Anonim
Covid-19 Stats + Raspberry Pi + I2C LCD
Covid-19 Stats + Raspberry Pi + I2C LCD

Kështu që rastësisht nga e kaltra një ditë, vendosa të marr disa pjesë që kisha shtrirë dhe të bëja diçka që do të më jepte statistika në kohë reale për Covid-19. Unë nuk kam kushtuar shumë kohë për ta bërë atë të duket bukur sepse pse të bëj diçka të përhershme kur kjo ngjarje nuk do të jetë? Prandaj, ekrani im është montuar vetëm në një kuti të vogël kartoni.

Pjesët e nevojshme:

  • Raspberry Pi - çdo model. Kam përdorur Raspberry Pi 3A+
  • Ekran LCD 20x4 I2C - pa markë të veçantë … por ka nevojë për shpinës I2C
  • Telat e bluzave nga femra në femra - Vetëm 4 prej tyre për të lidhur I2C me Pi

www.adafruit.com/product/4027

www.amazon.com/gp/product/B01GPUMP9C/ref=p…

www.amazon.com/gp/product/B01L5ULRUA/ref=p…

Këto lidhje shkojnë drejtpërdrejt në burimet nga të cilat kam blerë. Na vjen keq të them se Adafruit nuk po jep tani, por Amazon po… ngadalë për shkak të fokusit të tyre kryesor në artikujt thelbësorë, të cilët nuk janë. Të gjitha mund të gjenden diku tjetër në Amazon dhe eBay.

Ju padyshim do t'ju duhet një përshtatës AC, kabllo USB dhe kartë microSD për të shkuar me të gjithë këtë.

Hapi 1: Konfigurimi i harduerit

Konfigurimi i harduerit
Konfigurimi i harduerit

Referojuni figurës së bashkangjitur pinout. Thotë B+, por vlen për çdo model tjetër Raspberry Pi që ka ardhur edhe pas atij.

Me një çantë shpine I2C të bashkangjitur në ekranin LCD, kjo lidhje kërkon vetëm 4 tela për të punuar.

Lidheni GND me cilindo nga kunjat e tokëzimit në Raspberry Pi: Pin 6, 9, 14, 20, 25, 30, 34, 39. Unë e lidha atë me pin 6.

Lidhni VCC me njërën nga kunjat 5 volt në Raspberry Pi: Pin 2, 4. Kam përdorur pin 4

Lidhni SDA me pin 3.

Lidhni SCL me Pin 5.

Nëse ndiqni konfigurimin tim, do të përfundoni me të 4 telat në një model 2x2 në titujt GPIO.

Metoda juaj e montimit mund të jetë gjithçka që mund të imagjinoni… ose asgjë fare. Siç thashë në hyrje, ky lloj i koronavirusit nuk do të zgjasë përgjithmonë, kështu që nuk kam nevojë për konfigurimin tim për asnjërën. Nëse vendos ta mbaj këtë konfigurim pasi të ketë mbaruar kjo ngjarje, mund ta kthej atë në një ekran moti ose diçka tjetër.

Unë bashkangjita një arrë dhe rrufe në qiell së bashku me ndarës najloni në të 4 qoshet e Pi 3A+tim. Kjo është rreptësisht opsionale. Unë e bëra këtë sepse ndonjëherë e kam këtë në një sipërfaqe metalike, nuk më pëlqeu të kem instalimet e mia të përkohshme në një Pi që është brenda një kase dhe nuk dua të rrezikoj ta prish atë sepse kam harruar ta heq atë nga metali sipërfaqe para se ta ndizni.

Hapi 2: Konfigurimi i softuerit Pi

Konfigurimi i softuerit Pi
Konfigurimi i softuerit Pi
Konfigurimi i softuerit Pi
Konfigurimi i softuerit Pi
Konfigurimi i softuerit Pi
Konfigurimi i softuerit Pi

Siç thashë në hyrje, nuk ka rëndësi se çfarë modeli Raspberry Pi përdorni. Unë jam duke e përdorur këtë në një Raspberry Pi 3A+ mbi WiFi, por gjithashtu e kam testuar atë në Raspberry Pi 2 në kabllo ethernet, dhe Raspberry Pi Zero versioni 1.3 (Pi Zero i parë me lidhësin e kamerës serike) me një dongle USB WiFi.

Unë nuk do të shkruaj se si të instaloj Raspbian në një kartë MicroSD sepse ka miliona udhëzime se si ta bëni këtë. Unë kam një microSD 16 GB që funksionon Raspbian Buster Lite. Në një shënim anësor, unë pothuajse gjithmonë përdor Raspbian Lite sepse nuk kam nevojë për paketat e tjera softuerike të padobishme në asnjë nga projektet e mia. Nëse instaloj softuer duke përdorur apt-get, ai do të instalojë parakushtet që mungojnë.

Lidhu me një rrjet. Përsëri, ka miliona udhëzime atje se si ta bëni këtë, kështu që unë nuk do të shkoj në thellësi këtu. Mund të shkoni me tel ose pa tel, por kjo do të kërkojë një lidhje interneti.

Opsionale, por mund të aktivizoni lidhjen SSH duke përdorur PuTTY. Unë e bëra.

Përditësoni gjithçka, pastaj rindizni:

sudo apt përditësim

sudo apt upgrade -y sudo apt dist-upgrade sudo rpi-update sudo reboot

Ky është një konfigurim që do të kaloj këtu. Përsëri, ka miliona mënyra për ta bërë këtë, por referenca më e mirë që gjeta është pikërisht këtu:

Këtu janë pikat kryesore:

sudo apt install i2c-tools

sudo apt instaloni python-smbus

Ju gjithashtu do të duhet të aktivizoni I2C

sudo raspi-config

- 5 opsione ndërlidhjeje

- P5 I2C

Rinisni për të aplikuar ndryshimet

rindez sudo

Tani është koha për të parë nëse i keni bërë të gjitha siç duhet deri më tani

i2cdetect -y 1

Nëse ekrani juaj është ndezur dhe mund të shihet nga Raspberry Pi juaj, do të keni një tabelë që shfaqet. Adresa për 20x4 që bleva në Amazon dhe e përdor për këtë projekt është 27. Teknikisht kjo do të identifikohet si 0x27 për skriptet python që do të vijnë më vonë. Unë kam pasur të njëjtën shfaqje adresash për 2 ekrane 16x2 që kam blerë gjithashtu në Amazon dhe një 40x2 që kam gjetur në eBay.

Hapi 3: Konfigurimi i Python

Pra, tani për gjërat komplekse. Do të përpiqem ta mbaj sa më thjeshtë. Për të filluar, unë thjesht do të shkruaj skedarë në drejtorinë e shtëpisë.

prek I2C_LCD_driver.py

nano I2C_LCD_driver.py

Ngjiteni përmbajtjen e mëposhtme në shkrimin tuaj python të krijuar rishtas.

#-*-kodimi: utf-8-*- # Kodi origjinal gjendet në: #

"""

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),="">

E di që ky skenar është mjaft i çrregullt, por është efektiv. Do të tregojë statistikat aktuale për rastet e Covid-19 në Shtetet e Bashkuara. Baza e të dhënave kryesore azhurnohet çdo 5 minuta. Skenarit tim i duhet 1 minutë që të kalojë plotësisht nëpër 3 faqe dhe do të tërheqë numra të përditësuar sa herë që cikli fillon përsëri.

Hapi 4: Drejtoni Python

Drejtoni Python
Drejtoni Python
Drejtoni Python
Drejtoni Python

Le të fillojmë:

python covid19.py

Faqja e parë tregon numrin total të rasteve dhe vdekjeve që kur koronavirusi goditi për herë të parë vendin. Faqja e dytë tregon ato numra për rastet dhe vdekjet që kanë ndodhur vetëm në ditën aktuale. E treta tregon njerëz në gjendje kritike, pastaj raste dhe vdekje për një milion njerëz. Rreshti i dytë në faqen e tretë përdorte për të treguar datën e rastit të parë në vend, por më duhej ta hiqja sepse skenari nganjëherë gabonte dhe rrëzohej duke e cituar atë linjë me një gabim.

Ka mënyra për ta bërë këtë skenar të funksionojë automatikisht, por këtu nuk do të hyj në detaje. Unë thjesht drejtoj timen me komandë pasi të lidhem me SSH me të përmes PuTTY. Ndërsa funksionon, nuk do të jeni në gjendje të ekzekutoni ndonjë komandë tjetër derisa të shtypni Ctrl+C.

Hapi 5: Po sikur të mos jetoj në SHBA?

Ky skenar mund të modifikohet për të treguar statistikat për vendet e tjera. Siç mund ta shihni, URL -ja në skriptin tim vjen nga një API këtu: (mos përdorni Internet Explorer për të parë këto faqe. Do të përpiqet të shkarkojë një skedar.json. Kam përdorur Chrome)

coronavirus-19-api.herokuapp.com/countries/usa

Tani vizitoni të njëjtën adresë, por një dosje më të lartë

coronavirus-19-api.herokuapp.com/countries

Kjo rendit statistikat për çdo vend. Natyrisht që do të jetë një makth që përpiqet të tërheqë të dhënat e API nga kjo faqe. Kështu që është më mirë të hapni faqen për vendin tuaj specifik. Miqtë tanë në Kanada do të duhet të modifikojnë skriptin në këtë URL:

coronavirus-19-api.herokuapp.com/countries/canada

Shënim shumë i rëndësishëm këtu. URL -ja në API duhet të jetë specifike … që do të thotë se nuk ka hapësira në një URL. Në shfletimin e uebit, hapësirat në një adresë uebi zëvendësohen me "%20" dhe me këtë, miqtë tanë në vendet me 2 emra pjesësh, si Zelanda e Re për shembull, do të duhet të zëvendësojnë URL -në në këtë skenar me:

coronavirus-19-api.herokuapp.com/countries/new%20zealand

Hapi 6: Mendimet përfundimtare

Kam bërë shumë gjëra me Raspberry Pi dhe Arduino gjatë viteve, por shumica e asaj që kam ndërtuar janë thjesht përsëritje të ideve të të tjerëve. Ky është pothuajse i njëjtë përveç se kam përpiluar pjesë nga shumë burime në këtë konfigurim. Edhe pse ky konfigurim nuk do t'ju mbajë të sigurt dhe të shëndetshëm gjatë kësaj kohe të vështirë, ai me siguri do t'ju mbajë të zënë ndërsa e keni vendosur dhe do t'ju mbajë të informuar më pas.

Nëse nuk i keni ende këto pjesë, mos u stresoni duke i blerë ato nëse nuk jeni serioz në lidhje me ndërtimin e tyre. Siç thashë më parë, kohët e transportit po zgjasin më shumë tani sepse ato përpjekje po bëhen drejt artikujve thelbësorë. I kisha vetëm këto pjesë tashmë për të mësuar dhe eksperimentuar. Ekrani i montuar në kuti u krijua fillimisht për të parë statistikat në kohë reale të një Raspberry Pi tjetër në rrjetin tim që funksionon Pi-Hole. Pasi të ketë mbaruar kjo ngjarje Covid-19, mund ta kthej atë në një shfaqje moti.

Për këdo që lexon, unë dua t'i bëj një britmë këtij udhëzuesi:

www.instructables.com/id/DIY-Hand-Sanitize…

Unë nuk e kam provuar akoma, por kam përbërësit e saktë, dhe mund ta provoj ca kohë.

Recommended: