Isi kandungan:

Statistik Covid-19 + Raspberry Pi + I2C LCD: 6 Langkah
Statistik Covid-19 + Raspberry Pi + I2C LCD: 6 Langkah

Video: Statistik Covid-19 + Raspberry Pi + I2C LCD: 6 Langkah

Video: Statistik Covid-19 + Raspberry Pi + I2C LCD: 6 Langkah
Video: Hiển thị số ca nhiễm Covid trên màn hình LCD I2C với Raspberry Pi 2024, Julai
Anonim
Statistik Covid-19 + Raspberry Pi + I2C LCD
Statistik Covid-19 + Raspberry Pi + I2C LCD

Oleh itu, secara tidak sengaja, saya memutuskan untuk mendapatkan beberapa bahagian yang saya ada dan membuat sesuatu yang akan memberi saya statistik masa nyata mengenai Covid-19. Saya tidak meluangkan banyak masa untuk membuatnya kelihatan cantik kerana mengapa membuat sesuatu yang kekal ketika acara ini tidak akan berlangsung? Oleh itu, paparan saya hanya dipasang pada kotak kadbod kecil.

Bahagian yang diperlukan:

  • Raspberry Pi - sebarang model. Saya menggunakan Raspberry Pi 3A +
  • Paparan LCD 20x4 I2C - tidak ada jenama tertentu … tetapi memerlukan beg galas I2C
  • Wayar pelompat wanita ke wanita - Hanya 4 daripadanya untuk menghubungkan I2C ke Pi

www.adafruit.com/product/4027

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

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

Pautan ini terus ke sumber yang saya beli. Maaf untuk mengatakan bahawa Adafruit tidak menyampaikan sekarang, tetapi Amazon… perlahan kerana fokus utama mereka adalah terhadap barang-barang penting, yang bukan. Semua boleh didapati di tempat lain di Amazon dan eBay.

Anda pasti memerlukan penyesuai AC, kabel USB, dan kad microSD untuk menggunakan semua ini.

Langkah 1: Persediaan Perkakasan

Persediaan Perkakasan
Persediaan Perkakasan

Rujuk gambar pinout yang dilampirkan. Ia mengatakan B +, tetapi ini berlaku untuk setiap model Raspberry Pi lain yang juga ada setelahnya.

Dengan beg galas I2C yang terpasang pada paparan LCD, sambungan ini hanya memerlukan 4 wayar untuk berfungsi.

Sambungkan GND ke salah satu pin tanah pada Raspberry Pi: Pin 6, 9, 14, 20, 25, 30, 34, 39. Saya menyambungkannya ke pin 6.

Sambungkan VCC ke salah satu pin 5 volt pada Raspberry Pi: Pin 2, 4. Saya menggunakan pin 4

Sambungkan SDA ke pin 3.

Sambungkan SCL ke Pin 5.

Sekiranya anda mengikuti persediaan saya, anda akan berakhir dengan semua 4 wayar dalam corak 2x2 pada tajuk GPIO.

Kaedah pemasangan anda boleh menjadi apa sahaja yang anda bayangkan … atau tidak sama sekali. Seperti yang saya katakan di intro, ketegangan coronavirus ini tidak akan bertahan selamanya, jadi saya tidak memerlukan persediaan saya. Sekiranya saya memutuskan untuk mengekalkan persediaan ini setelah acara ini selesai, saya mungkin mengubahnya menjadi paparan cuaca atau sesuatu.

Saya melekatkan mur dan selak bersama spacer nilon ke semua 4 sudut Pi 3A + saya. Ini adalah pilihan. Saya melakukan ini kerana kadang-kadang saya memilikinya di permukaan logam, tidak suka pemasangan sementara pada Pi yang ada di dalam casing, dan tidak mahu mengambil risiko mengacaukannya kerana saya lupa mengeluarkannya dari logam permukaan sebelum menghidupkannya.

Langkah 2: Persediaan Perisian Pi

Persediaan Perisian Pi
Persediaan Perisian Pi
Persediaan Perisian Pi
Persediaan Perisian Pi
Persediaan Perisian Pi
Persediaan Perisian Pi

Seperti yang saya katakan di intro, tidak kira model Raspberry Pi yang anda gunakan. Saya menggunakan ini pada Raspberry Pi 3A + melalui WiFi tetapi juga telah mengujinya pada Raspberry Pi 2 pada kabel ethernet, dan Raspberry Pi Zero versi 1.3 (Pi Zero pertama dengan penyambung kamera bersiri) dengan dongle WiFi USB.

Saya tidak akan menaip cara memasang Raspbian ke kad MicroSD kerana terdapat berjuta-juta arahan mengenai cara melakukannya. Saya mempunyai microSD 16GB yang menjalankan Raspbian Buster Lite. Sebagai catatan, saya hampir selalu menggunakan Raspbian Lite kerana saya tidak memerlukan pakej perisian lain yang tidak berguna dalam projek saya. Sekiranya saya memasang perisian menggunakan apt-get, ia akan memasang prasyarat yang hilang.

Sambungkan ke rangkaian. Sekali lagi, terdapat berjuta-juta arahan di luar sana mengenai cara melakukan ini, jadi saya tidak akan membahasnya secara mendalam di sini. Anda boleh menggunakan kabel atau tanpa wayar, tetapi ini memerlukan sambungan internet.

Pilihan, tetapi anda boleh membolehkan SSH menyambung menggunakan PuTTY. Saya telah lakukan.

Kemas kini semuanya kemudian reboot:

sudo apt kemas kini

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

Ini adalah satu persediaan yang akan saya lalui di sini. Sekali lagi, terdapat berjuta-juta cara untuk melakukan ini, tetapi rujukan terbaik yang saya dapati ada di sini:

Berikut adalah sorotan:

sudo apt pasangkan alat-alat i2c

sudo apt pasang python-smbus

Anda juga perlu mengaktifkan I2C

sudo raspi-config

- 5 Pilihan Antaramuka

- P5 I2C

But semula untuk menerapkan perubahan

rebo sudo

Sekarang tiba masanya untuk melihat apakah anda melakukan ini dengan betul setakat ini

i2cdetect -y 1

Sekiranya paparan anda dihidupkan dan dapat dilihat oleh Raspberry Pi anda, anda akan mempunyai carta yang muncul. Alamat untuk 20x4 yang saya beli di Amazon dan gunakan untuk projek ini adalah 27. Secara teknikal ini akan dikenal pasti sebagai 0x27 untuk skrip python yang akan datang kemudian. Saya mempunyai pameran alamat yang sama untuk 2 paparan 16x2 yang juga saya beli di Amazon dan satu 40x2 yang saya dapati di eBay.

Langkah 3: Persediaan Python

Jadi sekarang untuk perkara yang kompleks. Saya akan berusaha memastikannya semudah yang saya dapat. Sebagai permulaan, saya hanya akan menulis fail ke direktori utama.

sentuh I2C_LCD_driver.py

nano I2C_LCD_driver.py

Tampal kandungan di bawah ke dalam skrip python yang baru anda buat.

# - * - pengekodan: utf-8 - * - # Kod asal dijumpai di: #

"""

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

Saya tahu skrip ini agak tidak kemas, tetapi berkesan. Ia akan menunjukkan statistik terkini untuk kes Covid-19 di Amerika Syarikat. Pangkalan data utama dikemas kini setiap 5 minit. Skrip saya mengambil masa 1 minit untuk mengitar sepenuhnya 3 halaman dan akan menarik nombor yang dikemas kini setiap kali kitaran bermula semula.

Langkah 4: Jalankan Python

Jalankan Python
Jalankan Python
Jalankan Python
Jalankan Python

Mari kita mulakan:

python covid19.py

Halaman pertama menunjukkan jumlah kes dan kematian sejak coronavirus pertama kali melanda negara ini. Halaman kedua menunjukkan angka-angka untuk kes dan kematian yang berlaku hanya pada hari ini. Yang ketiga menunjukkan orang dalam keadaan kritikal, kemudian kes dan kematian per satu juta orang. Baris kedua di halaman ketiga digunakan untuk menunjukkan tarikh kes pertama di negara ini, tetapi saya harus menghapusnya kerana skrip kadang-kadang salah dan tidak sengaja memetik baris tersebut dengan kesalahan.

Terdapat beberapa cara untuk menjadikan skrip ini dijalankan secara automatik, tetapi saya tidak akan membincangkannya secara terperinci di sini. Saya hanya menjalankan arahan saya setelah saya SSH menyambungnya melalui PuTTY. Semasa berjalan, anda tidak akan dapat menjalankan perintah lain sehingga anda menekan Ctrl + C.

Langkah 5: Bagaimana jika saya tidak tinggal di Amerika Syarikat?

Skrip ini dapat diubah untuk menunjukkan statistik untuk negara lain. Seperti yang anda lihat, URL dalam skrip saya diambil dari API di sini: (jangan gunakan Internet Explorer untuk melihat halaman ini. Ia akan cuba memuat turun fail.json. Saya menggunakan Chrome)

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

Sekarang lawati alamat yang sama, tetapi satu folder lebih tinggi

coronavirus-19-api.herokuapp.com/countries

Ini menyenaraikan statistik untuk setiap negara. Jelas sekali ini akan menjadi mimpi buruk untuk menarik data API dari halaman ini. Oleh itu, sebaiknya buka halaman untuk negara tertentu anda. Rakan-rakan kita di Kanada perlu mengedit skrip ke URL ini:

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

Catatan yang sangat penting di sini. URL ke API harus spesifik… bermaksud tidak ada ruang dalam URL. Dalam melayari laman web, ruang dalam alamat web diganti dengan "% 20" dan dengan kata itu, rakan kita di negara-negara dengan 2 nama bahagian, seperti New Zealand misalnya, perlu mengganti URL dalam skrip ini dengan:

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

Langkah 6: Pemikiran Akhir

Saya telah melakukan banyak perkara dengan Raspberry Pi dan Arduino selama bertahun-tahun, tetapi kebanyakan yang saya bina hanyalah ulangan idea orang lain. Yang ini hampir sama kecuali saya menyusun potongan dari banyak sumber ke dalam persediaan ini. Walaupun persediaan ini tidak akan membuat anda selamat dan sihat sepanjang masa yang sukar ini, ia pasti akan membuat anda sibuk semasa anda menyiapkannya dan ini akan memberi anda maklumat selepas itu.

Sekiranya anda belum memiliki bahagian ini, jangan tertekan untuk membelinya kecuali anda serius membinanya. Seperti yang saya katakan sebelumnya, masa penghantaran mengambil masa yang lebih lama sekarang kerana usaha itu dilakukan untuk barang keperluan. Saya hanya mempunyai bahagian-bahagian ini untuk belajar dan bereksperimen. Paparan kotak yang dipasang pada asalnya disiapkan untuk melihat statistik masa nyata Raspberry Pi lain di rangkaian saya yang menjalankan Pi-Hole. Setelah acara Covid-19 ini berakhir, saya mungkin mengubahnya menjadi paparan cuaca.

Untuk sesiapa sahaja yang membaca, saya ingin memberi penjelasan kepada arahan ini:

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

Saya belum mencubanya, tetapi saya mempunyai ramuan yang tepat, dan saya mungkin mencubanya beberapa ketika.

Disyorkan: