Daftar Isi:
- Langkah 1: Pengaturan Perangkat Keras
- Langkah 2: Pengaturan Perangkat Lunak Pi
- Langkah 3: Pengaturan Python
- Langkah 4: Jalankan Python
- Langkah 5: Bagaimana Jika Saya Tidak Tinggal di AS?
- Langkah 6: Pikiran Terakhir
Video: Statistik Covid-19 + Raspberry Pi + LCD I2C: 6 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-31 10:21
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
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
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
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:
Cara Membaca Data DHT di LCD Menggunakan Raspberry Pi: 6 Langkah
Cara Membaca Data DHT di LCD Menggunakan Raspberry Pi: Suhu dan kelembaban relatif merupakan data cuaca penting di lingkungan. Keduanya bisa menjadi data yang dikirimkan oleh stasiun cuaca mini. Membaca suhu dan kelembaban relatif Anda dengan Raspberry Pi dapat dicapai dengan menggunakan berbagai
Antarmuka LCD 16x2 Dengan Raspberry Pi: 7 Langkah
Antarmuka LCD 16x2 Dengan Raspberry Pi: Halo teman-teman,Hari ini saya menghubungkan Layar 16x2 ke Raspberry pi
Menggunakan LCD di Raspberry Pi: 4 Langkah
Menggunakan LCD di Raspberry Pi: Dalam Instruksi ini saya akan menunjukkan kepada Anda cara menggunakan layar LCD 16x2 dengan Raspberry Pi menggunakan kode khusus saya. Kode saya adalah versi modifikasi dari kode server LCD Matt Hawkins, yang membuatnya lebih mudah untuk mengirim teks ke layar. Yang diperlukan: jalankan
Antarmuka 16x2 LCD Alfanumerik And4x4 Matrix Keypad Dengan Raspberry Pi3: 5 Langkah (dengan Gambar)
Antarmuka 16x2 LCD Alfanumerik And4x4 Matrix Keypad Dengan Raspberry Pi3: Dalam instruksi ini, kami menjelaskan cara antarmuka 16x2 LED dan keypad matriks 4x4 dengan Raspberry Pi3. Kami menggunakan Python 3.4 untuk mengembangkan perangkat lunak. Anda juga dapat memilih Python 2.7, dengan sedikit perubahan