Բովանդակություն:

Covid-19 վիճակագրություն + ազնվամորի Պի + I2C LCD ՝ 6 քայլ
Covid-19 վիճակագրություն + ազնվամորի Պի + I2C LCD ՝ 6 քայլ

Video: Covid-19 վիճակագրություն + ազնվամորի Պի + I2C LCD ՝ 6 քայլ

Video: Covid-19 վիճակագրություն + ազնվամորի Պի + I2C LCD ՝ 6 քայլ
Video: COVID-19․ համաշխարհային վիճակագրություն 2024, Հուլիսի
Anonim
Covid-19 վիճակագրություն + ազնվամորի Պի + I2C LCD
Covid-19 վիճակագրություն + ազնվամորի Պի + I2C LCD

Այսպիսով, մի օր պատահականորեն հանկարծակիի եկավ, ես որոշեցի ձեռք բերել մի քանի մասեր, որոնց շուրջը պառկած էի և պատրաստել մի բան, որն ինձ կներկայացներ իրական ժամանակի վիճակագրություն Covid-19- ի վերաբերյալ: Ես շատ ժամանակ չեմ հատկացրել այն գեղեցիկ տեսք ունենալու համար, որովհետև ինչու՞ ինչ -որ բան մշտական դարձնել, երբ այս իրադարձությունը չի լինելու: Հետեւաբար, իմ էկրանը պարզապես տեղադրված է մի փոքրիկ ստվարաթղթե տուփի վրա:

Պահանջվող մասեր.

  • Ազնվամորի Pi - ցանկացած մոդել: Ես օգտագործեցի Raspberry Pi 3A+
  • 20x4 I2C LCD էկրան - ոչ մի ապրանքանիշ … բայց կարիք ունի I2C ուսապարկի
  • Իգական և կին ցատկող լարեր. Դրանցից ընդամենը 4 -ը `I2C- ն Pi- ին միացնելու համար

www.adafruit.com/product/4027

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

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

Այս հղումները գնում են անմիջապես դեպի այն աղբյուրները, որոնցից ես գնել եմ: Sorավով պետք է նշեմ, որ Adafruit- ը ներկայումս չի առաքում, բայց Amazon- ը… պարզապես դանդաղորեն պայմանավորված է նրանց հիմնական ուշադրության կենտրոնում էական ապրանքների վրա, որոնք դրանք չեն: Ամեն ինչ կարելի է գտնել Amazon- ում և eBay- ում:

Այս ամենի հետ մեկտեղ ակնհայտորեն ձեզ հարկավոր կլինի AC ադապտեր, USB մալուխ և microSD քարտ:

Քայլ 1: Սարքավորման կարգավորում

Սարքաշարի տեղադրում
Սարքաշարի տեղադրում

Անդրադառնալ կից pinout նկարին: Այն ասում է B+, բայց դա վերաբերում է բոլոր մյուս Raspberry Pi մոդելներին, որոնք եկել են այդ մոդելից հետո:

LCD էկրանին ամրացված I2C ուսապարկով այս կապի համար անհրաժեշտ է ընդամենը 4 լար:

GND- ը միացրեք Raspberry Pi- ի գրունտներից որևէ մեկին. Pin 6, 9, 14, 20, 25, 30, 34, 39. Ես այն միացրել եմ 6 -րդ կապին:

Միացրեք VCC- ն Raspberry Pi- ի 5 վոլտ կապումներից որևէ մեկին. Pin 2, 4. Ես օգտագործել եմ 4 -րդ կապը

SDA- ն միացրեք 3 -րդ կապին:

Միացրեք SCL- ը Pin 5 -ին:

Եթե հետևեցիք իմ կարգավորմանը, GPIO- ի վերնագրերի վրա կհայտնվեք բոլոր 4 լարերը 2x2 ձևով:

Ձեր տեղադրման մեթոդը կարող է լինել այն ամենը, ինչ դուք կարող եք պատկերացնել… կամ ընդհանրապես ոչինչ: Ինչպես ես ասացի ներածության մեջ, կորոնավիրուսի այս տեսակը հավերժ չի տևի, այնպես որ ես ոչ մեկի կարիք չունեմ Եթե որոշեմ պահպանել այս կարգավորումը այս իրադարձության ավարտից հետո, կարող եմ այն վերածել եղանակի ցուցադրման կամ այլ բանի:

Ես ամրացրեցի մի ընկույզ և պտուտակ նեյլոնե բացիչների հետ միասին իմ Pi 3A+ - ի բոլոր 4 անկյուններում: Սա խիստ ընտրովի չէ: Ես դա արեցի, քանի որ երբեմն դա ունենում եմ մետաղյա մակերևույթի վրա, ինձ դուր չէր գալիս իմ ժամանակավոր կարգավորումները Pi- ի վրա, որը գտնվում է պատյանում, և չեմ ուզում ռիսկի ենթարկել այն խափանել, քանի որ մոռացել եմ այն մետաղից հանել մակերեսին, նախքան այն միացնելը:

Քայլ 2: Pi ծրագրակազմի տեղադրում

Pi ծրագրակազմի տեղադրում
Pi ծրագրակազմի տեղադրում
Pi ծրագրակազմի տեղադրում
Pi ծրագրակազմի տեղադրում
Pi ծրագրակազմի տեղադրում
Pi ծրագրակազմի տեղադրում

Ինչպես ասացի ներածության մեջ, կապ չունի, թե ինչ Raspberry Pi մոդել եք օգտագործում: Ես դա օգտագործում եմ Raspberry Pi 3A+ - ով WiFi- ով, բայց նաև այն փորձարկել եմ Raspberry Pi 2 -ի վրա Ethernet մալուխի վրա, և Raspberry Pi Zero 1.3 տարբերակի վրա (առաջին Pi Zero- ն սերիական տեսախցիկի միակցիչով) USB WiFi հանգույցով:

Ես չեմ պատրաստվում մուտքագրել, թե ինչպես տեղադրել Raspbian- ը MicroSD քարտի վրա, քանի որ միլիոնավոր ցուցումներ կան, թե ինչպես դա անել: Ես ունեմ 16 ԳԲ microSD, որն աշխատում է Raspbian Buster Lite- ով: Կողքից նշեմ, որ ես գրեթե միշտ օգտագործում եմ Raspbian Lite- ը, քանի որ իմ ոչ մի նախագծում ինձ պետք չեն այլ անօգուտ ծրագրային փաթեթներ: Եթե տեղադրեմ ծրագրակազմ apt-get- ի միջոցով, այն կտեղադրի բացակայող նախադրյալները:

Միացեք ցանցին: Կրկին, կան միլիոնավոր հրահանգներ, թե ինչպես դա անել, այնպես որ ես այստեղ չեմ խորանա: Կարող եք միանալ լարով կամ անլար, բայց դրա համար կպահանջվի ինտերնետ կապ:

Լրացուցիչ, բայց դուք կարող եք SSH- ին միացնել PuTTY- ի միջոցով: Ես արել եմ.

Թարմացրեք ամեն ինչ, ապա վերագործարկեք.

sudo apt թարմացում

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

Սա մեկ կարգավորում է, որով ես կանցնեմ այստեղ: Կրկին, դա անելու միլիոնավոր եղանակներ կան, բայց իմ գտած լավագույն տեղեկանքը հենց այստեղ է ՝

Ահա ամենագեղեցիկը.

sudo apt տեղադրել i2c- գործիքներ

sudo apt տեղադրել python-smbus

Դուք նաև պետք է միացնեք I2C- ը

sudo raspi-config

- Ինտերֆեյսերի 5 տարբերակ

- P5 I2C

Վերագործարկեք ՝ փոփոխությունները կիրառելու համար

sudo վերագործարկում

Այժմ ժամանակն է տեսնել, թե արդյոք դուք այս ամենը ճիշտ եք արել մինչ այժմ

i2cdetect -y 1

Եթե ձեր էկրանը միացված է և այն կարելի է տեսնել ձեր Raspberry Pi- ով, ապա կունենաք գծապատկեր, որը հայտնվում է: 20x4 հասցեն, որը ես գնել եմ Amazon- ում և օգտագործում եմ այս նախագծի համար, 27 -ն է: Տեխնիկապես դա կճանաչվի որպես 0x27 պիթոնի սցենարների համար, որոնք հետագայում կգան: Ես ունեցել եմ նույն հասցեի ցուցադրումը 2 16x2 էկրանների համար, որոնք ես գնել եմ նաև Amazon- ում և մեկ 40x2- ը, որը գտել եմ eBay- ում:

Քայլ 3: Python- ի կարգավորում

Այսպիսով, հիմա բարդ իրերի մասին: Ես կփորձեմ պահել այն որքան հնարավոր է պարզ: Սկսնակների համար ես պարզապես ֆայլեր կգրեմ տնային գրացուցակում:

հպեք I2C_LCD_driver.py- ին

nano I2C_LCD_driver.py

Տեղադրեք ստորև բերված բովանդակությունը ձեր նորաստեղծ Python սցենարի մեջ:

#-*-կոդավորում ՝ utf-8-*- # Բնօրինակի կոդը գտնվել է ՝ #

"""

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

Գիտեմ, որ այս սցենարը բավականին խառնաշփոթ է, բայց արդյունավետ: Այն ցույց կտա ԱՄՆ-ում Covid-19 դեպքերի ընթացիկ վիճակագրությունը: Հիմնական տվյալների բազան թարմացվում է յուրաքանչյուր 5 րոպեն մեկ: Իմ սցենարը տևում է 1 րոպե ՝ 3 էջ ամբողջովին շրջանցելու համար և ամեն անգամ, երբ ցիկլը նորից սկսվի, նոր թվեր կքաշի:

Քայլ 4: Գործարկեք Python- ը

Գործարկել Python- ը
Գործարկել Python- ը
Գործարկել Python- ը
Գործարկել Python- ը

Եկեք սկսենք:

պիթոն covid19.py

Առաջին էջը ցույց է տալիս դեպքերի և մահվան դեպքերի ընդհանուր թիվը կորոնավիրուսի առաջին հարվածից հետո: Երկրորդ էջը ցույց է տալիս այդ թվերը դեպքերի և մահերի համար, որոնք տեղի են ունեցել միայն ընթացիկ օրը: Երրորդը ցույց է տալիս ծայրահեղ ծանր վիճակում գտնվող մարդկանց, ապա դեպքեր և մահեր մեկ միլիոն մարդու հաշվով: Երրորդ էջի երկրորդ տողը ցույց էր տալիս երկրում առաջին դեպքի ամսաթիվը, բայց ես ստիպված էի այն հեռացնել, քանի որ սցենարը երբեմն սխալվում էր և խափանվում ՝ այդ տողը սխալմամբ նշելով:

Այս սցենարը ինքնաբերաբար գործարկելու եղանակներ կան, բայց դրա մասին այստեղ չեմ մանրամասնի: Ես ուղղակի գործարկում եմ իմը հրամանով այն բանից հետո, երբ ես SSH- ը միանում եմ դրան PuTTY- ի միջոցով: Մինչ այն աշխատում է, դուք չեք կարողանա կատարել այլ հրամաններ, մինչև չսեղմեք Ctrl+C:

Քայլ 5. Ի՞նչ անել, եթե ես չապրեմ ԱՄՆ -ում:

Այս սցենարը կարող է փոփոխվել ՝ այլ երկրների վիճակագրությունը ցուցադրելու համար: Ինչպես կարող եք տեսնել, իմ սցենարի URL- ն այստեղից վերցված է API- ից. (Մի օգտագործեք Internet Explorer- ը ՝ այս էջերը դիտելու համար: Այն կփորձի բեռնել.json ֆայլը: Ես օգտագործել եմ Chrome- ը)

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

Այժմ այցելեք նույն հասցեն, բայց մեկ թղթապանակ ավելի բարձր

coronavirus-19-api.herokuapp.com/countries

Սա թվարկում է յուրաքանչյուր երկրի վիճակագրությունը: Ակնհայտ է, որ դա կլինի մղձավանջ, որը փորձում է այս էջից քաշել API- ի տվյալները: Այսպիսով, ավելի լավ է էջը բացել ձեր կոնկրետ երկրի համար: Կանադայի մեր ընկերները պետք է խմբագրեն սցենարը այս URL- ի համար.

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

Շատ կարևոր նշում այստեղ: API- ի URL- ը պետք է լինի որոշակի… այսինքն ՝ URL- ում բացատներ չկան: Վեբ զննարկման ընթացքում վեբ հասցեում տեղերը փոխարինվում են «%20» -ով, և դրա հետ մեկտեղ 2 մասի անուններով երկրներում գտնվող մեր ընկերները, օրինակ ՝ Նոր alandելանդիան, պետք է այս սցենարի URL- ը փոխարինեն հետևյալով.

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

Քայլ 6: Վերջնական մտքեր

Այս տարիների ընթացքում ես շատ բաներ եմ արել Raspberry Pi- ի և Arduino- ի հետ, բայց իմ կառուցածի մեծ մասը պարզապես ուրիշների գաղափարների կրկնություններն են: Այս մեկը գրեթե նույնն է, բացառությամբ, որ ես բազմաթիվ աղբյուրներից կտորներ եմ հավաքել այս կարգավորման մեջ: Չնայած այս կարգավորումը ձեզ չի պահի ապահով և առողջ այս դժվարին ժամանակաշրջանում, այն, անշուշտ, ձեզ կպահպանի զբաղվածության ընթացքում, և դրանից հետո ձեզ կտեղեկացնի:

Եթե դուք դեռ չունեք այս մասերը, մի լարվեք ինքներդ դրանք գնելիս, եթե դրանք կառուցելու հարցում լուրջ չեք վերաբերվում: Ինչպես նախկինում ասացի, բեռնափոխադրման ժամանակներն այժմ ավելի երկար են տևում, քանի որ այդ ջանքերը դրվում են էական ապրանքների վրա: Ես միայն այս հատվածներն ունեի արդեն սովորելու և փորձարկելու համար: Տուփի վրա տեղադրված էկրանն ի սկզբանե ստեղծվել էր իմ ցանցում Pi-Hole- ով աշխատող մեկ այլ Raspberry Pi- ի իրական ժամանակի վիճակագրությունը դիտելու համար: Covid-19- ի այս իրադարձության ավարտից հետո ես գուցե այն դարձնեմ եղանակի ցուցադրում:

Ով կարդում է, ես ուզում եմ բացականչել այս խրատականին.

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

Ես դեռ չեմ փորձել, բայց ես ունեմ այդ ճշգրիտ բաղադրիչները, և գուցե որոշ ժամանակ փորձեմ:

Խորհուրդ ենք տալիս: