Агуулгын хүснэгт:

Ковид-19 статистик + Raspberry Pi + I2C LCD: 6 алхам
Ковид-19 статистик + Raspberry Pi + I2C LCD: 6 алхам

Видео: Ковид-19 статистик + Raspberry Pi + I2C LCD: 6 алхам

Видео: Ковид-19 статистик + Raspberry Pi + I2C LCD: 6 алхам
Видео: 🦠 Мониторинг Covid-19 на ESP8266 (😷 Статистика по коронавирусу на Arduino) 2024, Долдугаар сарын
Anonim
Ковид-19 статистик + Raspberry Pi + I2C LCD
Ковид-19 статистик + Raspberry Pi + I2C LCD

Нэг л өдөр гэнэт санамсаргүй байдлаар би хэвтэж байсан хэдэн хэсгээ авч, надад Ковид-19-ийн талаарх бодит цагийн статистик мэдээллийг өгөхөөр шийдлээ. Үүнийг сайхан болгохын тулд би маш их цаг зарцуулсангүй, яагаад гэвэл энэ арга хэмжээ тийм ч удахгүй болохгүй юмыг яагаад байнгын болгодог юм бэ? Тиймээс миний дэлгэцийг жижиг цаасан хайрцагт суулгасан болно.

Шаардлагатай эд ангиуд:

  • Raspberry Pi - ямар ч загвар. Би Raspberry Pi 3A+ ашиглаж байсан
  • 20x4 I2C LCD дэлгэц - ямар ч брэнд байхгүй … гэхдээ I2C үүргэвч хэрэгтэй
  • Эмэгтэй, эмэгтэй холбогч утас - I2C -ийг Pi -тэй холбохын тулд ердөө 4 ширхэг

www.adafruit.com/product/4027

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

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

Эдгээр холбоосууд нь миний худалдаж авсан эх сурвалж руу шууд ордог. Адафрут яг одоо хүргэлт хийгээгүй гэж хэлэхэд уучлаарай, гэхдээ Амазон нь голчлон чухал зүйлд анхаарлаа хандуулдаг тул эдгээр нь тийм биш юм. Бүгдийг Amazon болон eBay дээр өөр газраас олж болно.

Энэ бүхэнтэй ажиллахын тулд танд AC адаптер, USB кабель, microSD карт хэрэгтэй болно.

Алхам 1: Тоног төхөөрөмжийн тохиргоо

Тоног төхөөрөмжийн тохиргоо
Тоног төхөөрөмжийн тохиргоо

Хавсаргасан хавчаарын зургийг лавлана уу. Энэ нь B+гэж хэлдэг боловч энэ нь дараа нь гарч ирсэн бусад Raspberry Pi загварт хамаатай.

I2C үүргэвчийг LCD дэлгэц дээр хавсаргасан тул энэ холболтыг ажиллуулахын тулд зөвхөн 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 толгой дээрх 2х2 хэмжээтэй бүх 4 утсыг авах болно.

Таны холбох арга нь таны төсөөлж буй бүх зүйл байж болно … эсвэл огт юу ч биш. Миний танилцуулгад хэлсэнчлэн коронавирусын энэ омог үүрд үргэлжлэхгүй тул миний тохиргоо аль алинд нь хэрэггүй. Хэрэв энэ үйл явдал дууссаны дараа би энэ тохиргоог хадгалахаар шийдсэн бол үүнийг цаг агаарын дэлгэц эсвэл өөр зүйл болгон хувиргаж магадгүй юм.

Би самар, боолтыг Nylon тусгаарлагчийн хамт Pi 3A+-ний бүх 4 буланд холбосон. Энэ нь заавал сонголт биш юм. Би үүнийг заримдаа метал гадаргуу дээр байрлуулсан, хайрцаг доторх Pi дээр түр зуурын тохиргоо хийх дургүй байсан тул металаас салгахаа мартсан тул үүнийг будлиантуулахыг хүсэхгүй байгаа тул би үүнийг хийсэн. асаахаасаа өмнө гадаргуу дээр.

Алхам 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 install i2c-tools

sudo apt суулгах python-smbus

Та мөн I2C -ийг идэвхжүүлэх хэрэгтэй болно

sudo raspi-config

- 5 интерфэйсийн сонголтууд

- P5 I2C

Өөрчлөлтийг ашиглахын тулд дахин ачаална уу

sudo дахин ачаална уу

Одоохондоо та энэ бүгдийг зөв хийсэн эсэхийг харах цаг болжээ

i2cdetect -y 1

Хэрэв таны дэлгэц асаалттай байгаа бөгөөд таны Raspberry Pi -ээр харах боломжтой бол танд гарч ирэх хүснэгт байх болно. Амазон дээрээс худалдаж авсан, энэ төсөлд ашиглаж буй 20х4 хэмжээтэй хаяг нь 27. Техникийн хувьд энэ нь дараа нь гарч ирэх питон скриптүүдийн хувьд 0x27 гэж тодорхойлогдоно. Би Amazon -оос худалдаж авсан 16x2 хэмжээтэй 2 дэлгэц, eBay дээрээс олсон 40x2 хэмжээтэй ижил хаягийн үзүүлбэр үзүүлсэн.

Алхам 3: Python тохиргоо

Тиймээс одоо нарийн төвөгтэй зүйлсийн талаар. Би үүнийг аль болох энгийн байлгахыг хичээх болно. Эхлээд би гэрийн лавлахад файл бичих болно.

I2C_LCD_driver.py дээр дарна уу

нано 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-ийн бодит цагийн статистик мэдээллийг үзэхийн тулд анх тохируулсан болно. Энэхүү Ковид-19 арга хэмжээ дууссаны дараа би үүнийг цаг агаарын дэлгэц болгон хувиргаж магадгүй юм.

Уншиж буй хэн бүхэнд би энэ зааварчилгаа өгөхийг хүсч байна.

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

Би хараахан туршиж үзээгүй байгаа, гэхдээ надад яг ийм орцууд байгаа бөгөөд үүнийг хэсэг хугацаанд туршиж үзэж магадгүй юм.

Зөвлөмж болгож буй: