Სარჩევი:

Covid-19 სტატისტიკა + ჟოლო Pi + I2C LCD: 6 ნაბიჯი
Covid-19 სტატისტიკა + ჟოლო Pi + I2C LCD: 6 ნაბიჯი

ვიდეო: Covid-19 სტატისტიკა + ჟოლო Pi + I2C LCD: 6 ნაბიჯი

ვიდეო: Covid-19 სტატისტიკა + ჟოლო Pi + I2C LCD: 6 ნაბიჯი
ვიდეო: 🤒🔥 HOW TO create a THERMAL FEVER DETECTOR: Raspberry Pi + OpenCV + Python | Lesson 3 2024, ნოემბერი
Anonim
Covid-19 სტატისტიკა + ჟოლო Pi + I2C LCD
Covid-19 სტატისტიკა + ჟოლო Pi + I2C LCD

ასე რომ, ერთ დღეს მოულოდნელად, მე გადავწყვიტე მომეპოვებინა რამდენიმე ნაწილი, რომელიც მე მქონდა მოტყუებული და შემექმნა ის, რაც მომცემდა რეალურ დროში სტატისტიკას Covid-19– ის შესახებ. მე არ დავუთმე ბევრი დრო იმისთვის, რომ ის ლამაზად გამოიყურებოდეს, რადგან რატომ ხდება რაღაც მუდმივი, როდესაც ეს მოვლენა არ იქნება? ამიტომ, ჩემი ეკრანი მხოლოდ პატარა მუყაოს ყუთზეა დამონტაჟებული.

საჭირო ნაწილები:

  • ჟოლო პი - ნებისმიერი მოდელი. მე გამოვიყენე 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…

ეს ბმულები პირდაპირ მიდის იმ წყაროებზე, საიდანაც შევიძინე. უკაცრავად, რომ ადაფრუტი არ აწვდის ახლა, მაგრამ ამაზონი… უბრალოდ ნელ -ნელა იმის გამო, რომ მათი ძირითადი აქცენტი კეთდება არსებით ნივთებზე, რაც ეს არ არის. ყველაფერი შეგიძლიათ ნახოთ სხვაგან ამაზონსა და eBay– ზე.

თქვენ აშკარად დაგჭირდებათ AC ადაპტერი, USB კაბელი და microSD ბარათი ამ ყველაფრის გასატარებლად.

ნაბიჯი 1: აპარატურის დაყენება

აპარატურის დაყენება
აპარატურის დაყენება

იხილეთ თანდართული pinout სურათი. ნათქვამია B+, მაგრამ ეს ეხება ყველა სხვა ჟოლოს მოდელს, რომელიც მოვიდა ამის შემდეგაც.

LCD ეკრანზე მიმაგრებული I2C ზურგჩანთით, ამ კავშირის მუშაობისთვის საჭიროა მხოლოდ 4 მავთული.

დაუკავშირეთ GND Raspberry Pi- ს ნებისმიერ გრუნტის ქინძისთავს: პინ 6, 9, 14, 20, 25, 30, 34, 39. მე მას მივაერთე პინ 6 -თან.

დაუკავშირეთ VCC Raspberry Pi– ს 5 ვოლტიან ქინძისთავებს: Pin 2, 4. მე გამოვიყენე pin 4

დაუკავშირეთ SDA პინ 3 -ს.

შეაერთეთ SCL პინ 5 -თან.

თუ მიჰყევით ჩემს კონფიგურაციას, თქვენ დაასრულებთ ოთხივე მავთულს 2x2 ნიმუშით GPIO სათაურებზე.

თქვენი სამონტაჟო მეთოდი შეიძლება იყოს ყველაფერი რაც თქვენ წარმოგიდგენიათ … ან საერთოდ არაფერი. როგორც შესავალში ვთქვი, კორონავირუსის ეს შტამი სამუდამოდ არ გაგრძელდება, ამიტომ არც მე მჭირდება ჩემი დაყენება. თუ მე გადავწყვიტე შევინარჩუნო ეს კონფიგურაცია ამ მოვლენის დასრულების შემდეგ, შეიძლება ის ამინდის ჩვენებად ვაქციო ან რამე.

ჩემი Pi 3A+ - ის ოთხივე კუთხეში დავამაგრე თხილი და ჭანჭიკი ნეილონის გამყოფებთან ერთად. ეს მკაცრად არჩევითია. მე ეს გავაკეთე იმიტომ, რომ მე ზოგჯერ მაქვს ეს მეტალის ზედაპირზე, არ მომეწონა ჩემი დროებითი დაყენება Pi– ზე, რომელიც არის ქეისის შიგნით და არ მინდა გავაფუჭო, რადგან დამავიწყდა მისი ამოღება ლითონიდან ზედაპირზე ჩართვამდე.

ნაბიჯი 2: Pi პროგრამული უზრუნველყოფის დაყენება

Pi პროგრამული უზრუნველყოფის დაყენება
Pi პროგრამული უზრუნველყოფის დაყენება
Pi პროგრამული უზრუნველყოფის დაყენება
Pi პროგრამული უზრუნველყოფის დაყენება
Pi პროგრამული უზრუნველყოფის დაყენება
Pi პროგრამული უზრუნველყოფის დაყენება

როგორც მე ვთქვი შესავალში, არ აქვს მნიშვნელობა რა ჟოლოს მოდელს იყენებთ. მე ვიყენებ მას Raspberry Pi 3A+ - ზე WiFi- ზე, მაგრამ ასევე გამოვცადე ეს Raspberry Pi 2 – ზე Ethernet კაბელზე და Raspberry Pi Zero ვერსია 1.3 (პირველი Pi Zero სერიული კამერის კონექტორით) USB WiFi დონლით.

მე არ ვაპირებ აკრიფოთ როგორ დავაყენო Raspbian MicroSD ბარათზე, რადგან არსებობს მილიონობით ინსტრუქცია თუ როგორ უნდა გავაკეთოთ ეს. მე მაქვს 16 GB microSD გაშვებული Raspbian Buster Lite. მეორე მხრივ, მე თითქმის ყოველთვის ვიყენებ Raspbian Lite- ს, რადგან არ მჭირდება სხვა უსარგებლო პროგრამული პაკეტები ჩემს ნებისმიერ პროექტში. თუ პროგრამას დავაყენებ apt-get– ის გამოყენებით, ის დააინსტალირებს დაკარგული წინაპირობებს.

დაკავშირება ქსელში. ისევ და ისევ, არსებობს მილიონობით ინსტრუქცია იმის შესახებ, თუ როგორ უნდა გავაკეთოთ ეს, ასე რომ მე აქ სიღრმისეულად არ ვისაუბრებ. შეგიძლიათ შეხვიდეთ უკაბელოდ, მაგრამ ამას დასჭირდება ინტერნეტ კავშირი.

სურვილისამებრ, მაგრამ თქვენ შეგიძლიათ ჩართოთ SSH დაკავშირება PuTTY გამოყენებით. Მე გავაკეთე.

განაახლეთ ყველაფერი და გადატვირთეთ:

sudo apt განახლება

sudo apt განახლება -y sudo apt dist-upgrade sudo rpi- განახლება sudo გადატვირთვა

ეს არის ერთი კონფიგურაცია, რომელსაც აქ გავივლი. ისევ და ისევ, ამის გასაკეთებლად მილიონობით გზა არსებობს, მაგრამ საუკეთესო მინიშნება, რაც მე ვიპოვე, სწორედ აქ არის:

აქ არის მაჩვენებლები:

sudo apt დააინსტალირეთ i2c- ინსტრუმენტები

sudo apt დააინსტალირეთ python-smbus

თქვენ ასევე უნდა ჩართოთ I2C

sudo raspi-config

- 5 ინტერფეისის პარამეტრები

- P5 I2C

გადატვირთეთ, რომ გამოიყენოთ ცვლილებები

sudo გადატვირთვა

ახლა დროა ვნახოთ, ეს ყველაფერი სწორად გააკეთეთ აქამდე

i2cdetect -y 1

თუ თქვენი ეკრანი გააქტიურებულია და შეგიძლიათ ნახოთ თქვენი Raspberry Pi– ით, გექნებათ სქემა, რომელიც გამოჩნდება. 20x4 მისამართები, რომლებიც მე შევიძინე ამაზონში და გამოვიყენე ამ პროექტისთვის არის 27. ტექნიკურად ეს იქნება 0x27 პითონის სკრიპტებისთვის, რომელიც მოგვიანებით მოვა. მე მქონდა იგივე მისამართის ჩვენება 2 16x2 დისპლეისთვის, რომელიც ასევე შევიძინე ამაზონზე და ერთი 40x2 ვიპოვე eBay– ზე.

ნაბიჯი 3: პითონის დაყენება

ახლა რაც შეეხება რთულ ნივთებს. შევეცდები შევინახო ის რაც შეიძლება მარტივად. დამწყებთათვის, მე უბრალოდ დავწერ ფაილებს სახლის დირექტორიაში.

შეეხეთ 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),="">

მე ვიცი, რომ ეს სკრიპტი საკმაოდ არეულია, მაგრამ ეფექტურია. ის აჩვენებს შეერთებულ შტატებში Covid-19 შემთხვევების მიმდინარე სტატისტიკას. ძირითადი მონაცემთა ბაზა განახლდება ყოველ 5 წუთში. ჩემს სკრიპტს 1 წუთი სჭირდება 3 გვერდის სრულად გადასაადგილებლად და განახლებულ რიცხვებს გაიყვანს ყოველ ჯერზე, როდესაც ციკლი თავიდან იწყება.

ნაბიჯი 4: გაუშვით პითონი

გაუშვით პითონი
გაუშვით პითონი
გაუშვით პითონი
გაუშვით პითონი

Მოდით დავიწყოთ:

პითონი 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 ნაწილის სახელი, მაგალითად, მაგალითად, ახალი ზელანდია, უნდა შეცვალონ URL ამ სკრიპტში:

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

ნაბიჯი 6: საბოლოო აზრები

მე ბევრი რამ გავაკეთე ჟოლოს პითან და არდუინოსთან წლების განმავლობაში, მაგრამ უმეტესობა იმისა, რაც მე ავაშენე, მხოლოდ სხვათა იდეების რეპლიკაა. ეს არის თითქმის იგივე, გარდა იმისა, რომ მე შევაგროვე ცალი მრავალი წყაროდან ამ კონფიგურაციაში. მიუხედავად იმისა, რომ ეს კონფიგურაცია არ დაგიცავს უსაფრთხოდ და ჯანსაღად ამ რთულ დროს, ის აუცილებლად დაგაკავებს დაყენების პროცესში და შეგატყობინებს ამის შემდგომ.

თუ თქვენ ჯერ არ გაქვთ ეს ნაწილები, ნუ იდარდებთ მათ ყიდვაზე, თუ სერიოზულად არ აპირებთ მის მშენებლობას. როგორც უკვე ვთქვი, გადაზიდვის დრო ახლა უფრო გრძელია, რადგან ეს ძალისხმევა მიმართულია აუცილებელ ნივთებზე. მე მხოლოდ ეს ნაწილები მქონდა უკვე სწავლისა და ექსპერიმენტისთვის. ყუთზე დამონტაჟებული ჩვენება თავდაპირველად შეიქმნა ჩემს ქსელში სხვა Raspberry Pi- ს სტატისტიკის სანახავად, რომელიც მუშაობს Pi-Hole. მას შემდეგ, რაც Covid-19 ღონისძიება დასრულდა, შეიძლება ის ამინდის ჩვენებად ვაქციო.

ვინც კითხულობს, მინდა გავყვირო ამ სასწავლებელს:

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

მე ჯერ არ მიცდია, მაგრამ მაქვს ზუსტად ის ინგრედიენტები და შეიძლება ვცადო გარკვეული დროის განმავლობაში.