فهرست مطالب
هدف از این آموزش راهاندازی I2C BUS رسپبری پای به زبان پایتون میباشد. (شما میتوانید سنسورهای مشابه که خروجی I2C دارند را به این روش راه اندازی نمایید).
قطعات مورد نیاز:
- رزبری پای ( رزبری پای مورد استفاده در این اموزش Raspberry Pi3 model B می باشد.)
- سیم برد بورد
OLED LCD
ماژول نمایشگر OLED یک نمایشگر تک رنگ 0.96 اینچی با رزولیشن 64*128 پیکسل است که به دلیل کنتراست بالا قابلیت خوانایی زیادی را برای کاربر فراهم میآورد. این ماژول نور پس زمینه را خود ایجاد کرده و فاقد Backlight میباشد که از این نظر در مقایسه با LCD باریکتر و شفافیت و کنتراست آن بیشتر است. این ماژول را میتوان در کاربردهای مختلف تجاری نظیر نمایشگرهای تلفن همراه، مدیا پلیرهای دیجیتال قابل حمل رادیو و دوربینهای دیجیتال بکار برد. ولتاژ تغذیه برای این ماژول 3.3V و جریان مصرفی آن بطور میانگین 20 میلی آمپر میباشد. این ماژول به آسانی توسط آردینو قابل راهاندازی است.
ولتاژ تغذيه سنسور بين 1.8 تا 3.6 ولت بوده و خروجي سنسور بصورت ديجيتال و با رابط I2C است و شما به راحتی میتوانید تنها با دو سیم با برد رزبریپای ارتباط برقرار کنید.
تعریف پایه های OLED LCD
برای آسانتر شدن اتصال سخت افزاری سنسور ترتیب پایهها را ملاحظه میکنید:

نحوه اتصال بین OLED LCD و رزبری پای
همانند تصویر زیر برای اتصال مراحل زیر را دنبال می کنیم:
- اتصال پین مثبت سنسور به پین 3.3 ولت برد رزبری پای ( سیم قرمز )
- اتصال پین منفی سنسور به پین GND برد رزبری پای ( سیم مشکی )
- اتصال پین دیتا سنسور به پین SDA رزبری پای ( سیم آبی )
- اتصال پین کلاک سنسور به پین SCL رزبری پای ( سیم نارنجی )

کدنویسی
آماده سازی نرم افزاری Raspberry Pi
قبل از اسکریپت نویسی پایتون باید از فعال بودن I2C و اپدیت بودن رزبری پای مورد استفاده مطمئن شویم .بدین منظور پنجره CommandLine را باز کرده و دستورات زیر را جهت آپدیت سیستم عامل و نصب آن وارد میکنیم:
sudo apt-get update
sudo apt-get upgrade
در ادامه بعد از به روز رسانی و نصب آن باید python و (پکیجهای کتابخانه استاندارد پایتون) pip را بر روی رزبری پای خود نصب کنیم. بدین منظور دستور زیر را در CommandLine وارد میکنیم:
sudo apt-get install python-dev python-pip
حال قبل از دانلود کتابخانه BMP180 با وارد کردن دستور زیر در CommandLine از نصب بودن آخرین نسخه پکیجهای setuptools, wheel و pip مطمئن میشویم:
sudo python -m pip install --upgrade pip setuptools wheel
اکنون با استفاده از دستور زیر برسی کرده که آیا برد رزبری پای OLED را میشناسد یا خیر:
sudo i2cdetect -y 1
در صورت مواجهه با Error دستور زیر را وارد کنید:
sudo i2cdetect -y 0
که بعد از شناسایی ماژول پاسخ زیر را در پنجره CLW مشاهده میکنید:

حال با استفاده از دستور زیر پکیج I2C را برای رزبری دانلود کرده :
sudo apt-get install git build-essential python-dev python-smbus
و در پایان کتابخانه پایتون OLED را دانلود می کنیم و سپس نصب کتابخانه: CD Adafruit_Python_SSD1306
sudo python setup.py install
تمامی دستورات آماده سازی به ترتیب به صورت زیر می باشد:
udo apt install -y python-dev
sudo apt install -y python-imaging python-smbus i2c-tools
sudo apt install -y python-pil
sudo apt install -y python-pip
sudo apt install -y python-setuptools
برنامه نویسی پایتون برای OLED
ابتدا با وارد کردن دستور زیر یک اسکریپت پایتون برای کدنویسی ایجاد میکنیم:
nano ~/OLED.py
سپس بعد از وارد شدن به اسکریپت پایتون ، ابتدا کتابخانه مربوط به سنسور را با دستور زیر اضافه میکنیم :
import Adafruit_Python_SSD1306
در مثال زیر یک عبارت را بر روی lcd حرکت میدهیم:
import math
import time
import Adafruit_GPIO.SPI as SPI
import Adafruit_SSD1306
from PIL import Image
from PIL import ImageFont
from PIL import ImageDraw
# Raspberry Pi pin configuration:
RST = 24
# Note the following are only used with SPI:
DC = 23
SPI_PORT = 0
SPI_DEVICE = 0
# Beaglebone Black pin configuration:
# RST = 'P9_12'
# Note the following are only used with SPI:
# DC = 'P9_15'
# SPI_PORT = 1
# SPI_DEVICE = 0
# 128x32 display with hardware I2C:
disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST)
# 128x64 display with hardware I2C:
# disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST)
# 128x32 display with hardware SPI:
# disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST, dc=DC, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE, max_speed_hz=8000000))
# 128x64 display with hardware SPI:
# disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST, dc=DC, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE, max_speed_hz=8000000))
# Initialize library.
disp.begin()
# Get display width and height.
width = disp.width
height = disp.height
# Clear display.
disp.clear()
disp.display()
# Create image buffer.
# Make sure to create image with mode '1' for 1-bit color.
image = Image.new('1', (width, height))
# Load default font.
font = ImageFont.load_default()
# Alternatively load a TTF font. Make sure the .ttf font file is in the same directory as this python script!
# Some nice fonts to try: http://www.dafont.com/bitmap.php
# font = ImageFont.truetype('Minecraftia.ttf', 8)
# Create drawing object.
draw = ImageDraw.Draw(image)
# Define text and get total width.
text = 'WWW.REDRONIC.COM'
maxwidth, unused = draw.textsize(text, font=font)
# Set animation and sine wave parameters.
amplitude = height/4
offset = height/2 - 4
velocity = -2
startpos = width
# Animate text moving in sine wave.
print('Press Ctrl-C to quit.')
pos = startpos
while True:
# Clear image buffer by drawing a black filled box.
draw.rectangle((0,0,width,height), outline=0, fill=0)
# Enumerate characters and draw them offset vertically based on a sine wave.
x = pos
for i, c in enumerate(text):
# Stop drawing if off the right side of screen.
if x > width:
break
# Calculate width but skip drawing if off the left side of screen.
if x < -10:
char_width, char_height = draw.textsize(c, font=font)
x += char_width
continue
# Calculate offset from sine wave.
y = offset+math.floor(amplitude*math.sin(x/float(width)*2.0*math.pi))
# Draw text.
draw.text((x, y), c, font=font, fill=255)
# Increment x position based on chacacter width.
char_width, char_height = draw.textsize(c, font=font)
x += char_width
# Draw the image buffer.
disp.image(image)
disp.display()
# Move position for next frame.
pos += velocity
# Start over if text has scrolled completely off left side of screen.
if pos < -maxwidth:
pos = startpos
# Pause briefly before drawing next frame.
time.sleep(0.1)
در پایان با اتمام نوشتن کد بالا و فشار دادن کلیدهای CTRL+X و سپس Y (در انتها زدن کلید Enter) اقدام به ذخیره اسکریپت نوشته شده کرده و با وارد کردن دستور زیر در پنجره CommandLine آن را اجرا میکنیم.
python ~/OLED.py
خروجی برنامه
