Tartalomjegyzék:
- 1. lépés: Hardver beállítása
- 2. lépés: Pi szoftver telepítése
- 3. lépés: Python telepítése
- 4. lépés: Futtassa a Python programot
- 5. lépés: Mi van, ha nem az Egyesült Államokban élek?
- 6. lépés: Utolsó gondolatok
Videó: Covid-19 statisztika + Raspberry Pi + I2C LCD: 6 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-31 10:20
Így egy napon véletlenül a semmiből úgy döntöttem, hogy beszerezek néhány aludt részt, és készítek valamit, ami valós idejű statisztikákat szolgáltat a Covid-19-ről. Nem szántam sok időt arra, hogy szépnek tűnjek, mert miért kell valami állandóvá tenni, ha ez az esemény nem lesz? Ezért a kijelzőm csak egy kis kartondobozba van szerelve.
Szükséges alkatrészek:
- Raspberry Pi - bármilyen modell. Én a Raspberry Pi 3A+ -t használtam
- 20x4 I2C LCD kijelző - nincs külön márka… de szüksége van az I2C hátizsákra
- Női és női áthidaló vezetékek - mindössze 4 db csatlakozik az I2C -hez a Pi -hez
www.adafruit.com/product/4027
www.amazon.com/gp/product/B01GPUMP9C/ref=p…
www.amazon.com/gp/product/B01L5ULRUA/ref=p…
Ezek a linkek közvetlenül azokhoz a forrásokhoz vezetnek, ahonnan vásároltam. Sajnálattal kell mondanom, hogy az Adafruit jelenleg nem szállít, de az Amazon… csak lassan, mivel elsősorban az alapvető cikkekre összpontosítanak, amelyekre nem. Mindez megtalálható máshol az Amazon -on és az eBay -en.
Nyilvánvalóan szüksége lesz egy hálózati adapterre, USB -kábelre és microSD -kártyára.
1. lépés: Hardver beállítása
Hivatkozzon a csatolt pinout képre. Azt írja, hogy B+, de minden más Raspberry Pi modellre is vonatkozik, ami azután jött.
Az LCD kijelzőhöz csatlakoztatott I2C hátizsákkal ez a kapcsolat csak 4 vezetéket igényel.
Csatlakoztassa a GND -t a Raspberry Pi bármelyik földelőcsapjához: 6, 9, 14, 20, 25, 30, 34, 39. Tű. Csatlakoztattam a 6. tűhöz.
Csatlakoztassa a VCC -t a Raspberry Pi 5 voltos csapjai bármelyikéhez: 2., 4. tű. Én a 4 -es tűt használtam
Csatlakoztassa az SDA -t a 3 -as érintkezőhöz.
Csatlakoztassa az SCL -t az 5. tűhöz.
Ha követte a beállításomat, akkor mind a 4 vezetéket 2x2 -es mintával fogja megkapni a GPIO fejléceken.
A szerelési módszer bármi lehet, amit csak el tud képzelni… vagy semmi. Ahogy a bevezetőben mondtam, a koronavírus ezen törzse nem tart örökké, így nincs szükségem a beállításomra egyikhez sem. Ha úgy döntök, hogy megtartom ezt a beállítást az esemény befejezése után, akkor előfordulhat, hogy időjárás -kijelzővé alakítom, vagy valami hasonlóvá.
Anyát és csavart rögzítettem a nejlon távtartókkal a Pi 3A+mind a 4 sarkához. Ez szigorúan opcionális. Ezt azért tettem, mert néha fémfelületen van ez, nem szerettem, ha az ideiglenes beállításokat egy tokban lévő Pi -n találom, és nem akarom kockáztatni, hogy elrontom, mert elfelejtettem eltávolítani a fémből bekapcsolás előtt.
2. lépés: Pi szoftver telepítése
Ahogy a bevezetőben mondtam, nem mindegy, hogy milyen Raspberry Pi modellt használ. Ezt Raspberry Pi 3A+ -n használom WiFi -n keresztül, de teszteltem ezt a Raspberry Pi 2 -n is Ethernet -kábelen, és a Raspberry Pi Zero 1.3 -as verzióján (a legelső Pi Zero soros kameracsatlakozóval), USB WiFi hardverkulccsal.
Nem fogom leírni, hogyan kell a Raspbian -t MicroSD -kártyára telepíteni, mert milliónyi utasítás található erre. Van egy 16 GB -os microSD -m, amelyen Raspbian Buster Lite fut. Mellékesen megjegyzem, hogy szinte mindig Raspbian Lite -t használok, mert nincs szükségem a többi haszontalan szoftvercsomagra egyetlen projektemben sem. Ha az apt-get segítségével telepítem a szoftvert, akkor az hiányzó előfeltételeket telepíti.
Csatlakozás hálózathoz. Ismét több millió utasítás található arra vonatkozóan, hogyan kell ezt megtenni, ezért nem fogok itt részletesen foglalkozni. Vezetékes vagy vezeték nélküli, de ehhez internetkapcsolat szükséges.
Opcionális, de engedélyezheti az SSH csatlakozását a PuTTY használatával. Én csináltam.
Frissíts mindent, majd indítsd újra:
sudo apt frissítés
sudo apt upgrade -y sudo apt dist-upgrade sudo rpi-update sudo reboot
Ez az egyik beállítás, amelyet itt fogok végigvinni. Ismét millió módon lehet ezt megtenni, de a legjobb referencia itt található:
Íme a legfontosabb tudnivalók:
sudo apt install i2c-tools
sudo apt install python-smbus
Az I2C engedélyezése is szükséges
sudo raspi-config
- 5 interfész lehetőség
- P5 I2C
Indítsa újra a módosításokat
sudo újraindítás
Most itt az ideje, hogy megnézze, helyesen tette -e mindezt
i2cdetect -y 1
Ha a kijelző be van kapcsolva, és a Raspberry Pi látja, akkor megjelenik egy diagram. Az Amazon -on vásárolt és ehhez a projekthez használt 20x4 címe 27. Technikailag ez 0x27 lesz a későbbi python -szkriptekhez. Ugyanezt a címet mutattam 2 16x2 -es kijelzőn, amelyeket szintén az Amazon -on vettem, és egy 40x2 -es kijelzőt, amelyet az eBay -en találtam.
3. lépés: Python telepítése
Tehát most az összetett dolgokról. Megpróbálom a lehető legegyszerűbbé tenni. Kezdetnek csak fájlokat fogok írni a saját könyvtárba.
érintse meg az I2C_LCD_driver.py elemet
nano I2C_LCD_driver.py
Illessze be az alábbi tartalmat az újonnan létrehozott python -szkriptbe.
#-*-kódolás: utf-8-*- # Az eredeti kód megtalálható: #
"""
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),="">
Tudom, hogy ez a forgatókönyv elég zavaros, de hatékony. Megmutatja a Covid-19 esetek aktuális statisztikáit az Egyesült Államokban. A fő adatbázis 5 percenként frissül. A szkriptem 1 percet vesz igénybe ahhoz, hogy teljesen átlépjen 3 oldalon, és minden alkalommal, amikor a ciklus újra elkezdődik, lehívja a frissített számokat.
4. lépés: Futtassa a Python programot
Kezdjük:
python covid19.py
Az első oldalon a koronavírus országot először sújtó megbetegedések és halálesetek száma látható. A második oldalon azok az esetek és halálesetek számai láthatók, amelyek csak az aktuális napon történtek. A harmadik a kritikus állapotú embereket mutatja, majd egymillió emberre jutó esetek és halálesetek. A harmadik oldal második sora az első eset dátumát mutatta az országban, de muszáj volt eltávolítanom, mert a szkript néha hibázott, és összeomlott a sorra hivatkozva.
Vannak módok a szkript automatikus futtatására, de itt nem részletezem ezt. Csak futtatom az enyémet parancsra, miután SSH csatlakoztam hozzá a PuTTY -n keresztül. Futtatása közben nem tud más parancsokat végrehajtani, amíg nem nyomja meg a Ctrl+C billentyűkombinációt.
5. lépés: Mi van, ha nem az Egyesült Államokban élek?
Ez a szkript módosítható más országok statisztikáinak megjelenítésére. Amint láthatja, a szkriptemben szereplő URL innen származik:
coronavirus-19-api.herokuapp.com/countries/usa
Most keresse fel ugyanazt a címet, de egy mappával feljebb
coronavirus-19-api.herokuapp.com/countries
Ez felsorolja az egyes országok statisztikáit. Nyilvánvaló, hogy rémálom lesz az API -adatok lekérése erről az oldalról. Ezért a legjobb, ha az adott országhoz tartozó oldalt nyitja meg. Kanadai barátainknak az alábbi URL -re kell szerkeszteniük a szkriptet:
coronavirus-19-api.herokuapp.com/countries/canada
Nagyon fontos megjegyzés itt. Az API URL -jének specifikusnak kell lennie … azaz szóközök nem lehetnek az URL -ben. A webböngészés során a webcímek szóközeit "%20" helyettesíti, és ezzel együtt a két részből álló országbeli barátainknak, például Új -Zélandnak, le kell cserélniük az URL -t ebben a szkriptben:
coronavirus-19-api.herokuapp.com/countries/new%20zealand
6. lépés: Utolsó gondolatok
Sok mindent csináltam a Raspberry Pi -vel és az Arduino -val az évek során, de a legtöbb, amit építettem, csak mások ötleteinek másolata. Ez majdnem ugyanaz, kivéve, ha sok forrásból állítottam össze darabokat ebbe a beállításba. Bár ez a beállítás nem tart biztonságban és egészségben ebben a nehéz időszakban, minden bizonnyal elfoglalt lesz a beállítás során, és később is tájékoztatja Önt.
Ha még nem rendelkezik ezekkel az alkatrészekkel, ne stresszelje magát, ha megvásárolja, kivéve, ha komolyan gondolja az építését. Amint azt korábban mondtam, a szállítási idő jelenleg hosszabb, mert ezeket az erőfeszítéseket az alapvető cikkek felé fordítják. Ezek a részek már csak tanuláshoz és kísérletezéshez voltak. A dobozra szerelt kijelzőt eredetileg úgy állították be, hogy valós idejű statisztikákat jelenítsen meg egy másik Raspberry Pi-n a hálózatomon, amelyen Pi-Hole fut. Miután ez a Covid-19 esemény véget ért, lehet, hogy időjárási kijelzővé alakítom.
Aki olvassa, szeretném kiáltani ezt a tanulságosat:
www.instructables.com/id/DIY-Hand-Sanitize…
Még nem próbáltam, de megvannak a pontos összetevők, és lehet, hogy kipróbálom valamikor.
Ajánlott:
Raspberry Pi - HIH6130 I2C páratartalom és hőmérséklet érzékelő Python bemutató: 4 lépés
Raspberry Pi - HIH6130 I2C Python és páratartalom érzékelő bemutató: A HIH6130 egy digitális kimenettel rendelkező páratartalom és hőmérséklet érzékelő. Ezek az érzékelők ± 4% RH pontossági szintet biztosítanak. Az iparág vezető hosszú távú stabilitásával, valódi hőmérséklet-kompenzált digitális I2C-vel, az iparág vezető megbízhatóságával, energiahatékonyságával
Raspberry Pi - HIH6130 I2C páratartalom és hőmérséklet érzékelő Java oktatóanyag: 4 lépés
Raspberry Pi - HIH6130 I2C Páratartalom és hőmérséklet érzékelő Java oktatóanyag: A HIH6130 egy digitális kimenettel rendelkező páratartalom és hőmérséklet érzékelő. Ezek az érzékelők ± 4% RH pontossági szintet biztosítanak. Az iparág vezető hosszú távú stabilitásával, valódi hőmérséklet-kompenzált digitális I2C-vel, az iparág vezető megbízhatóságával, energiahatékonyságával