Мазмуну:

Covid-19 статистикасы + Raspberry Pi + I2C ЖК: 6 кадам
Covid-19 статистикасы + Raspberry Pi + I2C ЖК: 6 кадам

Video: Covid-19 статистикасы + Raspberry Pi + I2C ЖК: 6 кадам

Video: Covid-19 статистикасы + Raspberry Pi + I2C ЖК: 6 кадам
Video: 🦠 Мониторинг Covid-19 на ESP8266 (😷 Статистика по коронавирусу на Arduino) 2024, Июль
Anonim
Covid-19 статистикасы + Raspberry Pi + I2C ЖК
Covid-19 статистикасы + Raspberry Pi + I2C ЖК

Ошентип, кокусунан кокусунан бир күнү, мен жатып калган бир нече бөлүктү алып, мага Ковид-19 боюнча реалдуу убакыт статистикасын бере турган нерсени жасоону чечтим. Мен аны жагымдуу кылуу үчүн көп убакыт короткон жокмун, анткени бул иш -чара болбой турганда эмне үчүн бир нерсени түбөлүккө жасаш керек? Ошондуктан, менин дисплейим кичинекей картон кутуга орнотулган.

Тетиктер керектелет:

  • Raspberry Pi - каалаган модель. Мен Raspberry Pi 3A+ колдондум
  • 20x4 I2C LCD дисплейи - өзгөчө бренд жок … бирок I2C рюкзагына муктаж
  • Аялдан аялга секирүүчү зымдар - I2Cди Пи менен туташтыруу үчүн алардын 4ү гана

www.adafruit.com/product/4027

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

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

Бул шилтемелер мен сатып алган булактарга түз барат. Кечиресиз, Adafruit азыр жеткирилбей жатат, бирок Amazon … алардын негизги көңүлү негизги нерселерге багытталгандыктан. Баарын Amazon жана eBayден башка жерден тапса болот.

Мунун баары менен иштөө үчүн сизге AC адаптери, USB кабели жана microSD карт керек болот.

1 -кадам: Аппараттык орнотуу

Аппараттык орнотуу
Аппараттык орнотуу

Тиркелген pinout сүрөтүнө шилтеме бериңиз. Бул B+дейт, бирок ал андан кийин келген башка Raspberry Pi моделине тиешелүү.

ЖК дисплейге тиркелген 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ди 5 -пинге туташтырыңыз.

Эгерде сиз менин орнотуумду аткарсаңыз, анда GPIO аталыштарындагы 2х2 үлгүдөгү бардык 4 зым менен бүтөсүз.

Сиздин монтаждоо ыкмасы сиз элестеткен нерсенин баары болушу мүмкүн … же таптакыр жок. Киришүүдө айтканымдай, бул коронавирустун штаммы түбөлүккө болбойт, андыктан мага менин орнотуумдун да кереги жок. Бул иш -чара аяктагандан кийин бул орнотууну сактоону чечсем, мен аны аба ырайынын дисплейине же башка нерсеге айландырышым мүмкүн.

Мен гайканы жана болтту нейлон аралыгы менен бирге Pi 3A+дын 4 бурчуна бекиттим. Бул такыр милдеттүү эмес. Мен муну кээде металл бетинде болгондугум үчүн жасадым, корпустун ичиндеги Пидеги убактылуу орнотууларымды жаккан жокмун жана аны чаташтыргым келбейт, анткени мен аны металлдан алып салууну унутуп койгом. күйгүзүүдөн мурун бетине.

2 -кадам: Pi программалык камсыздоону орнотуу

Pi программалык камсыздоону орнотуу
Pi программалык камсыздоону орнотуу
Pi программалык камсыздоону орнотуу
Pi программалык камсыздоону орнотуу
Pi программалык камсыздоону орнотуу
Pi программалык камсыздоону орнотуу

Мен кириште айткандай, Raspberry Pi кандай моделин колдонгонуңуз маанилүү эмес. Мен муну WiFi аркылуу Raspberry Pi 3A+ колдонуп жатам, бирок аны Ethernet кабелинде Raspberry Pi 2де жана Raspberry Pi Zero 1.3 версиясында (сериялык камера туташтыргычы бар эң биринчи Pi Zero) USB WiFi донглинде сынап көрдүм.

Мен Raspbianды MicroSD картасына кантип орнотууну жазбайм, анткени муну кантип жасоо боюнча миллиондогон көрсөтмөлөр бар. Менде Raspbian Buster Lite иштеп жаткан 16 ГБ microSD бар. Кошумча маалымат катары, мен дээрлик ар дайым Raspbian Lite колдонуп келем, анткени менин башка долбоорлорумда башка пайдасыз программалык камсыздоолорго муктаж эмесмин. Эгерде мен apt-get аркылуу программалык камсыздоону орнотсом, ал жок болгон өбөлгөлөрдү орнотот.

Тармакка туташуу. Дагы, муну кантип жасоо керектиги боюнча миллиондогон көрсөтмөлөр бар, ошондуктан мен бул жакка терең кирбеймин. Сиз зымдуу же зымсыз барсаңыз болот, бирок бул үчүн интернет байланышы талап кылынат.

Кошумча, бирок сиз SSHти PuTTY аркылуу туташууга иштетсеңиз болот. Мен кылдым.

Баарын жаңыртып, кайра жүктөңүз:

sudo apt update

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

Бул мен бул жерден өтө турган бир жөндөө. Дагы, муну кылуунун миллиондогон жолдору бар, бирок мен тапкан эң жакшы шилтеме ушул жерде:

Бул жерде урунттуу учурлар:

sudo apt i2c-куралдарын орнотуу

sudo apt install python-smbus

Ошондой эле I2C иштетүү керек болот

sudo raspi-config

- 5 Interfacing Options

- P5 I2C

Өзгөртүүлөрдү колдонуу үчүн өчүрүп күйгүзүңүз

sudo өчүрүп күйгүзүү

Эми мунун баарын буга чейин туура кылдыңызбы, көрүүгө убакыт келди

i2cdetect -y 1

Эгерде дисплейиңиз иштетилсе жана аны Raspberry Pi аркылуу көрө алсаңыз, анда сизде диаграмма пайда болот. Мен Амазонкадан сатып алган жана бул долбоорду колдонгон 20x4 дареги 27. Техникалык жактан бул кийинчерээк келе турган питон скрипттери үчүн 0x27 деп аныкталат. Мен ошол эле даректик шоуну 2 16x2 дисплейде өткөрдүм, мен дагы Amazonдон сатып алдым жана eBayден тапкан 40x2.

3 -кадам: Python орнотуу

Эми татаал нерселер үчүн. Мен аны мүмкүн болушунча жөнөкөй сактоого аракет кылам. Баштоо үчүн, мен үй каталогуна файлдарды жазам.

тийүү I2C_LCD_driver.py

nano I2C_LCD_driver.py

Төмөндөгү мазмунду жаңы түзүлгөн питон скриптине чаптаңыз.

#-*-коддоо: 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),="">

Мен билем, бул скрипт абдан башаламан, бирок натыйжалуу. Ал Кошмо Штаттардагы Ковид-19 учурларынын учурдагы статистикасын көрсөтөт. Негизги маалымат базасы 5 мүнөт сайын жаңыртылып турат. Менин сценарийим 3 беттен толугу менен өтүүгө 1 мүнөт кетет жана цикл кайра башталган сайын жаңыртылган номерлерди тартып турат.

4 -кадам: Pythonду иштетүү

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 маалыматын алууга аракет кылган коркунучтуу түш болот. Андыктан бетиңизди конкреттүү өлкөңүз үчүн ачыңыз. Канададагы досторубуз бул сценарийди түзөтүшү керек:

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

Бул жерде абдан маанилүү эскертүү. APIнин URLи конкреттүү болушу керек … URLде боштук жок дегенди билдирет. Веб -браузерде веб -даректеги боштуктар "%20" менен алмаштырылат жана ошону менен, 2 бөлүктөн турган өлкөлөрдөгү досторубуз, мисалы Жаңы Зеландия, бул скрипттеги 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…

Мен азырынча аракет кыла элекмин, бирок менде так ингредиенттер бар, мен аны бир аздан кийин сынап көрүшүм мүмкүн.

Сунушталууда: