Daftar Isi:

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

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

Video: Statistik Covid-19 + Raspberry Pi + LCD I2C: 6 Langkah
Video: Сводные таблицы Excel с нуля до профи за полчаса + Дэшборды! | 1-ое Видео курса "Сводные Таблицы" 2024, November
Anonim
Statistik Covid-19 + Raspberry Pi + LCD I2C
Statistik Covid-19 + Raspberry Pi + LCD I2C

Jadi secara tiba-tiba suatu hari, saya memutuskan untuk mendapatkan beberapa bagian yang saya miliki dan membuat sesuatu yang akan memberi saya statistik waktu nyata tentang Covid-19. Saya tidak meluangkan banyak waktu untuk membuatnya terlihat bagus karena mengapa membuat sesuatu yang permanen ketika acara ini tidak akan terjadi? Oleh karena itu, tampilan saya hanya dipasang ke kotak kardus kecil.

Bagian yang dibutuhkan:

  • Raspberry Pi - model apa pun. Saya menggunakan Raspberry Pi 3A+
  • Layar LCD I2C 20x4 - tidak ada merek tertentu…tetapi memang membutuhkan ransel I2C
  • Kabel jumper female ke female - Hanya 4 dari mereka 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…

Tautan ini langsung menuju ke sumber yang saya beli. Maaf untuk mengatakan bahwa Adafruit tidak mengirimkan sekarang, tetapi Amazon … hanya lambat karena fokus utama mereka adalah pada barang-barang penting, yang tidak. Semua dapat ditemukan di tempat lain di Amazon dan eBay.

Anda jelas membutuhkan adaptor AC, kabel USB, dan kartu microSD untuk menjalankan semua ini.

Langkah 1: Pengaturan Perangkat Keras

Pengaturan Perangkat Keras
Pengaturan Perangkat Keras

Referensi gambar pinout terlampir. Dikatakan B+, tetapi itu berlaku untuk setiap model Raspberry Pi lain yang telah datang setelah itu juga.

Dengan ransel I2C yang terpasang pada layar LCD, koneksi ini hanya membutuhkan 4 kabel untuk bekerja.

Hubungkan GND ke salah satu pin ground pada Raspberry Pi: Pin 6, 9, 14, 20, 25, 30, 34, 39. Saya menghubungkannya ke pin 6.

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

Hubungkan SDA ke pin 3.

Hubungkan SCL ke Pin 5.

Jika Anda mengikuti pengaturan saya, Anda akan mendapatkan semua 4 kabel dalam pola 2x2 pada header GPIO.

Metode pemasangan Anda dapat berupa apa saja yang dapat Anda bayangkan… atau tidak sama sekali. Seperti yang saya katakan di intro, jenis virus corona ini tidak akan bertahan selamanya, jadi saya tidak perlu menyiapkan keduanya. Jika saya memutuskan untuk mempertahankan pengaturan ini setelah acara ini selesai, saya mungkin mengubahnya menjadi tampilan cuaca atau semacamnya.

Saya memasang mur dan baut bersama dengan spacer nilon ke keempat sudut Pi 3A+ saya. Ini benar-benar opsional. Saya melakukan ini karena terkadang saya memiliki ini di permukaan logam, tidak suka pengaturan sementara saya pada Pi yang ada di dalam kasing, dan tidak ingin mengambil risiko mengacaukannya karena saya lupa melepasnya dari logam permukaan sebelum menyalakannya.

Langkah 2: Pengaturan Perangkat Lunak Pi

Pengaturan Perangkat Lunak Pi
Pengaturan Perangkat Lunak Pi
Pengaturan Perangkat Lunak Pi
Pengaturan Perangkat Lunak Pi
Pengaturan Perangkat Lunak Pi
Pengaturan Perangkat Lunak Pi

Seperti yang saya katakan di intro, tidak masalah model Raspberry Pi apa yang Anda gunakan. Saya menggunakan ini pada Raspberry Pi 3A+ melalui WiFi tetapi juga mengujinya pada Raspberry Pi 2 pada kabel ethernet, dan Raspberry Pi Zero versi 1.3 (Pi Zero pertama dengan konektor kamera serial) dengan dongle USB WiFi.

Saya tidak akan mengetik cara menginstal Raspbian ke kartu MicroSD karena ada jutaan instruksi tentang cara melakukannya. Saya memiliki microSD 16GB yang menjalankan Raspbian Buster Lite. Di samping catatan, saya hampir selalu menggunakan Raspbian Lite karena saya tidak memerlukan paket perangkat lunak lain yang tidak berguna dalam proyek saya. Jika saya menginstal perangkat lunak menggunakan apt-get, itu akan menginstal prasyarat yang hilang.

Hubungkan ke jaringan. Sekali lagi, ada jutaan instruksi di luar sana tentang cara melakukan ini, jadi saya tidak akan membahasnya secara mendalam di sini. Anda dapat menggunakan kabel atau nirkabel, tetapi ini akan membutuhkan koneksi internet.

Opsional, tetapi Anda dapat mengaktifkan SSH untuk terhubung menggunakan Putty. Ya.

Perbarui semuanya lalu reboot:

sudo apt update

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

Ini adalah salah satu pengaturan yang akan saya lalui di sini. Sekali lagi, ada jutaan cara untuk melakukan ini, tetapi referensi terbaik yang saya temukan ada di sini:

Berikut adalah sorotannya:

sudo apt install i2c-tools

sudo apt install python-smbus

Anda juga harus mengaktifkan I2C

sudo raspi-config

- 5 Opsi Antarmuka

- P5 I2C

Nyalakan ulang untuk menerapkan perubahan

sudo reboot

Sekarang saatnya untuk melihat apakah Anda melakukan ini semua dengan benar sejauh ini

i2cdetect -y 1

Jika layar Anda menyala dan dapat dilihat oleh Raspberry Pi Anda, Anda akan memiliki bagan yang muncul. Alamat untuk 20x4 yang saya beli di Amazon dan digunakan untuk proyek ini adalah 27. Secara teknis ini akan mengidentifikasi sebagai 0x27 untuk skrip python yang akan datang nanti. Saya telah menunjukkan alamat yang sama untuk 2 tampilan 16x2 yang juga saya beli di Amazon dan satu 40x2 yang saya temukan di eBay.

Langkah 3: Pengaturan Python

Jadi sekarang untuk hal-hal yang kompleks. Saya akan mencoba membuatnya sesederhana mungkin. Sebagai permulaan, saya hanya akan menulis file ke direktori home.

sentuh I2C_LCD_driver.py

nano I2C_LCD_driver.py

Rekatkan konten di bawah ini ke skrip python yang baru Anda buat.

# -*- coding: utf-8 -*-# Kode asli ditemukan 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 cukup berantakan, tetapi efektif. Ini akan menunjukkan statistik saat ini untuk kasus Covid-19 di Amerika Serikat. Basis data utama diperbarui setiap 5 menit. Skrip saya membutuhkan 1 menit untuk sepenuhnya menggilir 3 halaman dan akan menarik nomor yang diperbarui setiap kali siklus dimulai lagi.

Langkah 4: Jalankan Python

Jalankan Python
Jalankan Python
Jalankan Python
Jalankan Python

Mari kita mulai:

python covid19.py

Halaman pertama menunjukkan jumlah total kasus dan kematian sejak virus corona pertama kali menyerang negara itu. Halaman kedua menunjukkan angka-angka untuk kasus dan kematian yang terjadi hanya pada hari ini. Yang ketiga menunjukkan orang dalam kondisi kritis, kemudian kasus dan kematian per satu juta orang. Baris kedua pada halaman ketiga digunakan untuk menunjukkan tanggal kasus pertama di negara itu, tetapi saya harus menghapusnya karena skrip terkadang error dan crash mengutip baris itu dengan kesalahan.

Ada beberapa cara untuk membuat skrip ini berjalan secara otomatis, tetapi saya tidak akan membahasnya secara detail di sini. Saya baru saja menjalankan perintah saya setelah saya menghubungkan SSH melalui Putty. Saat sedang berjalan, Anda tidak akan dapat menjalankan perintah lain sampai Anda menekan Ctrl+C.

Langkah 5: Bagaimana Jika Saya Tidak Tinggal di AS?

Skrip ini dapat dimodifikasi untuk menampilkan statistik negara lain. Seperti yang Anda lihat, URL dalam skrip saya diambil dari API di sini: (jangan gunakan Internet Explorer untuk melihat halaman ini. Ini akan mencoba mengunduh file.json. Saya menggunakan Chrome)

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

Sekarang kunjungi alamat yang sama, tetapi satu folder lebih tinggi

coronavirus-19-api.herokuapp.com/countries

Ini daftar statistik untuk setiap negara. Jelas itu akan menjadi mimpi buruk mencoba menarik data API dari halaman ini. Jadi yang terbaik adalah membuka halaman untuk negara spesifik Anda. Teman-teman 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…artinya tidak ada spasi di URL. Dalam penjelajahan web, spasi di alamat web diganti dengan "%20" dan dengan itu, teman-teman kita di negara-negara dengan 2 nama bagian, seperti Selandia Baru misalnya, perlu mengganti URL dalam skrip ini dengan:

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

Langkah 6: Pikiran Terakhir

Saya telah melakukan banyak hal dengan Raspberry Pi dan Arduino selama bertahun-tahun, tetapi sebagian besar yang saya buat hanyalah replika dari ide orang lain. Yang ini hampir sama kecuali saya mengkompilasi potongan dari banyak sumber ke dalam pengaturan ini. Meskipun pengaturan ini tidak akan membuat Anda tetap aman dan sehat selama masa sulit ini, itu pasti akan membuat Anda sibuk saat Anda mengaturnya dan itu akan memberi Anda informasi setelahnya.

Jika Anda belum memiliki suku cadang ini, jangan memaksakan diri untuk membelinya kecuali Anda serius ingin membangunnya. Seperti yang saya katakan sebelumnya, waktu pengiriman sekarang lebih lama karena upaya itu dilakukan untuk barang-barang penting. Saya hanya memiliki bagian-bagian ini untuk belajar dan bereksperimen. Tampilan yang dipasang di kotak awalnya diatur untuk melihat statistik waktu nyata dari Raspberry Pi lain di jaringan saya yang menjalankan Pi-Hole. Setelah acara Covid-19 ini selesai, saya mungkin mengubahnya menjadi tampilan cuaca.

Bagi siapa pun yang membaca, saya ingin meneriakkan instruksi ini:

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

Saya belum mencobanya, tetapi saya memiliki bahan-bahan yang tepat, dan saya mungkin akan mencobanya suatu saat nanti.

Direkomendasikan: