فهرست مطالب:

Covid-19 Stats + Raspberry Pi + I2C LCD: 6 مرحله
Covid-19 Stats + Raspberry Pi + I2C LCD: 6 مرحله

تصویری: Covid-19 Stats + Raspberry Pi + I2C LCD: 6 مرحله

تصویری: Covid-19 Stats + Raspberry Pi + I2C LCD: 6 مرحله
تصویری: Display Covid-19 Data Using Maker Pi Pico and CircuitPython 2024, جولای
Anonim
Covid-19 Stats + Raspberry Pi + I2C LCD
Covid-19 Stats + Raspberry Pi + I2C LCD

بنابراین یک روز به طور تصادفی از بین رفتم ، تصمیم گرفتم چند قسمت را که در آن قرار داشتم تهیه کنم و چیزی تهیه کنم که آمار بلادرنگ از کووید -19 را در اختیارم قرار دهد. من زمان زیادی را برای زیبا جلوه دادن آن اختصاص ندادم ، چرا وقتی چیزی که این رویداد قرار نیست برگزار شود ، چیزی را دائمی می کند؟ بنابراین ، صفحه نمایش من فقط روی یک جعبه مقوایی کوچک نصب شده است.

قطعات مورد نیاز:

  • رزبری پای - هر مدلی. من از Raspberry Pi 3A+ استفاده کردم
  • نمایشگر LCD 20x4 I2C - مارک خاصی ندارد … اما به کوله پشتی 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…

این پیوندها مستقیماً به منابعی که از آنها خرید کرده ام می رسد. با عرض پوزش می گویم که Adafruit در حال حاضر تحویل نمی دهد ، اما آمازون … فقط به دلیل تمرکز اصلی آنها بر روی اقلام ضروری ، که اینها نیستند ، به آرامی انجام می شود. همه را می توان در جاهای دیگر در آمازون و eBay یافت.

بدیهی است که برای انجام همه اینها به یک آداپتور AC ، کابل USB و کارت microSD نیاز دارید.

مرحله 1: راه اندازی سخت افزار

راه اندازی سخت افزار
راه اندازی سخت افزار

به تصویر pinout پیوست شده مراجعه کنید. روی آن B+گفته می شود ، اما در مورد هر مدل رزبری پای دیگری که بعد از آن آمده است نیز صدق می کند.

با یک کوله پشتی I2C متصل به صفحه LCD ، این اتصال فقط به 4 سیم برای کار نیاز دارد.

GND را به هر یک از پایه های پایه روی رزبری پای وصل کنید: پین 6 ، 9 ، 14 ، 20 ، 25 ، 30 ، 34 ، 39. آن را به پین 6 وصل کردم.

VCC را به یکی از پین های 5 ولتی رزبری پای وصل کنید: پین 2 ، 4. من از پین 4 استفاده کردم

SDA را به پین 3 وصل کنید.

SCL را به پین 5 وصل کنید.

اگر از تنظیمات من پیروی کنید ، هر 4 سیم را در الگوی 2x2 در هدرهای GPIO به پایان خواهید رساند.

روش نصب شما می تواند هر چیزی باشد که می توانید تصور کنید … یا اصلا هیچ باشد. همانطور که در مقدمه گفتم ، این نوع ویروس کرونا برای همیشه دوام نخواهد داشت ، بنابراین من به تنظیمات هیچ کدام نیاز ندارم. اگر تصمیم بگیرم این تنظیم را پس از پایان این رویداد حفظ کنم ، ممکن است آن را به نمایشگر آب و هوا یا چیز دیگری تبدیل کنم.

من مهره و پیچ را به همراه جداکننده های نایلونی به هر 4 گوشه Pi 3A+خود وصل کردم. این کاملا اختیاری است. من این کار را به این دلیل انجام دادم که گاهی اوقات آن را روی یک سطح فلزی دارم ، دوست نداشتم که تنظیمات موقت خود را روی یک Pi که در داخل قاب قرار دارد داشته باشم و نمی خواهم آن را بهم بزنم زیرا فراموش کردم آن را از روی فلز بردارم. سطح آن را قبل از روشن کردن روشن کنید.

مرحله 2: راه اندازی نرم افزار Pi

راه اندازی نرم افزار Pi
راه اندازی نرم افزار Pi
راه اندازی نرم افزار Pi
راه اندازی نرم افزار Pi
راه اندازی نرم افزار Pi
راه اندازی نرم افزار Pi

همانطور که در مقدمه گفتم ، مهم نیست که از چه مدل رزبری پای استفاده می کنید. من این را در Raspberry Pi 3A+ از طریق WiFi استفاده می کنم اما این را روی Raspberry Pi 2 روی کابل اترنت و Raspberry Pi Zero نسخه 1.3 (اولین Pi Pi Zero با کانکتور دوربین سریال) با دانگل USB USB آزمایش کرده ام.

من قصد ندارم نحوه نصب Raspbian بر روی کارت MicroSD را توضیح دهم زیرا میلیون ها دستورالعمل برای انجام این کار وجود دارد. من یک microSD 16 گیگابایتی دارم که Raspbian Buster Lite را اجرا می کند. از نظر جانبی ، من تقریباً همیشه از Raspbian Lite استفاده می کنم زیرا در هیچ یک از پروژه های خود به بسته های نرم افزاری بی فایده دیگر احتیاج ندارم. اگر نرم افزاری را با استفاده از apt-get نصب کنم ، پیش نیازهای لازم را نصب می کند.

به یک شبکه متصل شوید. باز هم ، میلیون ها دستورالعمل در مورد چگونگی انجام این کار وجود دارد ، بنابراین من در اینجا به طور عمیق صحبت نمی کنم. می توانید سیم کشی یا بی سیم شوید ، اما برای این کار به اتصال به اینترنت نیاز دارید.

اختیاری است ، اما می توانید SSH را با استفاده از PuTTY متصل کنید. من کردم.

همه چیز را به روز کنید و سپس راه اندازی مجدد کنید:

به روز رسانی sudo apt

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

این یکی از تنظیماتی است که من در اینجا به آن می پردازم. باز هم ، میلیون ها راه برای انجام این کار وجود دارد ، اما بهترین مرجعی که من پیدا کردم اینجاست:

در اینجا نکات برجسته وجود دارد:

sudo apt install i2c-tools

sudo apt python-smbus را نصب کنید

همچنین باید I2C را فعال کنید

sudo raspi-config

- 5 گزینه رابط

- P5 I2C

راه اندازی مجدد برای اعمال تغییرات

راه اندازی مجدد sudo

اکنون وقت آن است که ببینیم آیا تا به حال همه این کارها را به درستی انجام داده اید یا خیر

i2cdetect -y 1

اگر صفحه نمایش شما روشن است و با رزبری پای شما قابل مشاهده است ، یک نمودار ظاهر می شود. آدرس 20x4 که من در آمازون خریدم و برای این پروژه استفاده می کنم 27 است. از لحاظ فنی این برای اسکریپت های پایتون بعداً 0x27 مشخص می شود. من همان نشانی آدرس را برای 2 صفحه نمایش 16x2 که در آمازون خریدم و 40x2 را در eBay پیدا کردم.

مرحله 3: راه اندازی پایتون

بنابراین ، در مورد موارد پیچیده. من سعی می کنم تا آنجا که می توانم آن را ساده نگه دارم. برای شروع ، من فقط فایلها را در فهرست اصلی می نویسم.

I2C_LCD_driver.py را لمس کنید

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

می دانم که این اسکریپت بسیار کثیف است ، اما م effectiveثر است. این آمار فعلی را برای موارد کووید -19 در ایالات متحده نشان می دهد. پایگاه داده اصلی هر 5 دقیقه به روز می شود. اسکریپت من 1 دقیقه طول می کشد تا به طور کامل 3 صفحه را مرور کند و هر بار که چرخه دوباره شروع می شود ، اعداد به روز شده را می کشد.

مرحله 4: Python را اجرا کنید

پایتون را اجرا کنید
پایتون را اجرا کنید
پایتون را اجرا کنید
پایتون را اجرا کنید

شروع کنیم:

پایتون covid19.py

صفحه اول تعداد کل موارد و مرگ و میرها را از زمان شیوع ویروس کرونا در کشور نشان می دهد. صفحه دوم این اعداد را برای موارد و مرگ هایی که فقط در روز جاری رخ داده است نشان می دهد. مورد سوم افراد در وضعیت بحرانی را نشان می دهد ، سپس موارد و مرگ ها به ازای هر یک میلیون نفر. در خط دوم در صفحه سوم تاریخ اولین مورد در کشور نشان داده می شد ، اما مجبور شدم آن را حذف کنم زیرا گاهی اوقات خطا خطا می کند و با استناد به آن خط با خطا خراب می شود.

راه هایی وجود دارد که باعث می شود این اسکریپت به طور خودکار اجرا شود ، اما من در اینجا به جزئیات آن نمی پردازم. من فقط بعد از اتصال SSH به PuTTY ، فرمان خود را اجرا می کنم. در حالی که در حال اجرا است ، تا زمانی که Ctrl+C را فشار ندهید ، نمی توانید دستورات دیگری را اجرا کنید.

مرحله 5: اگر در ایالات متحده زندگی نکنم چه کنم؟

این اسکریپت را می توان تغییر داد تا آمار سایر کشورها را نشان دهد. همانطور که می بینید ، آدرس اسکریپت من از API در اینجا گرفته شده است: (برای مشاهده این صفحات از Internet Explorer استفاده نکنید. سعی می کند فایل.json را بارگیری کند. من از Chrome استفاده کردم)

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

اکنون از همان آدرس دیدن کنید ، اما یک پوشه بالاتر

coronavirus-19-api.herokuapp.com/countries

این لیست آمار مربوط به هر کشور را نشان می دهد. بدیهی است که این یک کابوس خواهد بود که سعی می کند داده های API را از این صفحه بیرون بکشد. بنابراین بهتر است صفحه را برای کشور خاص خود باز کنید. دوستان ما در کانادا باید اسکریپت را به این آدرس ویرایش کنند:

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

یادداشت بسیار مهم در اینجا. نشانی وب API باید خاص باشد … به این معنی که در URL نشانی خالی وجود ندارد. در مرور وب ، فضاهای یک آدرس وب با "٪ 20" جایگزین می شوند و با این اوصاف ، دوستان ما در کشورهایی با 2 نام قسمت ، مانند نیوزلند به عنوان مثال ، باید URL این اسکریپت را با موارد زیر جایگزین کنند:

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

مرحله ششم: اندیشه های نهایی

من در طول این سالها کارهای زیادی با Raspberry Pi و Arduino انجام داده ام ، اما بیشتر آنچه ساخته ام فقط تکرار ایده های دیگران است. این مورد تقریباً یکسان است با این تفاوت که من قطعاتی را از منابع مختلف در این تنظیم گردآوری کرده ام. اگرچه این تنظیمات شما را در این دوران سخت ایمن و سالم نمی کند ، اما مطمئناً هنگام تنظیم آن شما را مشغول خواهد کرد و پس از آن شما را در جریان خواهد گذاشت.

اگر هنوز این قطعات را ندارید ، برای خرید آنها استرس وارد نکنید مگر اینکه در ساخت آن جدی باشید. همانطور که قبلاً گفتم ، زمان حمل و نقل در حال حاضر بیشتر طول می کشد زیرا این تلاش ها برای اقلام ضروری انجام می شود. من فقط این قسمتها را برای یادگیری و آزمایش در اختیار داشتم. صفحه نمایش روی جعبه در ابتدا برای مشاهده آمار زمان واقعی رزبری پای دیگر در شبکه من که Pi-Hole را اجرا می کند ، تنظیم شده بود. پس از پایان این رویداد کووید -19 ، ممکن است آن را به نمایشگر آب و هوا تبدیل کنم.

برای هر کسی که می خواند ، می خواهم فریاد بزنم این آموزنده:

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

من هنوز آن را امتحان نکرده ام ، اما مواد دقیق آن را دارم و ممکن است مدتی آن را امتحان کنم.

توصیه شده: