использовать. Есть два варианта: GPIO.BOARD “говорит” о том, что будет использоваться сквозная нумерация выводов на плате. В этом случае пин имеет номер 31 (см. картинку на следующей странице). Второй вариант, GPIO.BCM задает нумерацию в номерах GPIO, в этом случае наш вывод 31 имел бы номер 6, т.к. он называется GPIO06. В принципе, практически все равно, какой способ использовать - вся эта путаница пошла от старых плат Raspberry Pi, которые имели меньшее число выводов. Главное, придерживаться какого-то одного стандарта и не путать одни номера с другими. Разумеется, если номер будет неправильный, светодиод не загорится.

На картинке показаны оба варианта нумерации выводов Raspberry Pi:

- Строки GPIO.output(LedPin, GPIO.HIGH) и GPIO.output(LedPin, GPIO.LOW) устанавливают нужный логический уровень “1” или “0”, что соответствует 0 или 3.3В, также как на плате ESP32. Функция time.sleep(1.0) делает паузу в 1 секунду.

- try..except - это незнакомая нам до этого конструкция, называемая обработчиком исключений. Цикл while True выполняется бесконечное число раз, но если пользователь нажмет Ctrl+C, то система пошлет программе исключение KeyboardInterrupt, в котором мы можем выполнить какой-то код. В данном случае кода нет, строка pass просто указывает на то, что нужно перейти на следующую строку.

- В завершении работы программы, функция GPIO.cleanup() освобождает ресурсы GPIO, и программа закрывается.

Важно

В отличие от Arduino, наша программа не будет стартовать сама при старте Raspberry Pi. Если нужно, можно добавить это самостоятельно, отредактировав файл автозапуска rc.local. Введем команду: sudo nano /etc/rc.local

Внутрь файла rc.local нужно будет добавить команду запуска:

sudo python /home/pi/led_blink.py &

Команду sudo мы уже знаем, знак & говорит о том, что программа будет запущена в фоновом режиме. /home/pi/led_blink.py - это путь к программе, он может быть и другим. Кстати, узнать путь к текущему каталогу можно, введя команду pwd.

Сохранив файл, перезагрузим Paspberry Pi - мы увидим мигающий светодиод.

4.5. Используем I2C

Достаточно большое количество разнообразных устройств (экраны, датчики, АЦП) можно подключить к шине I2C. Но перед ее первым использованием, необходимо настроить Raspberry Pi.

Шаг-1. Запустить sudo raspi-config и активировать I2C, как показано на рисунке (это достаточно сделать только один раз):

После изменения настроек следует перезагрузить Raspberry Pi.

Шаг-2. Поставить программу i2c-tools, введя команду: sudo apt-get install i2c-tools

Теперь можно ввести команду и посмотреть доступные i2c-устройства:

sudo i2cdetect -y 1

Отобразится окно примерно такого вида:

Если ничего не было подключено, список будет пуст, иначе мы увидим номера подключенных устройств.

Шаг-3. Подключение устройства

Шина I2C использует 2 провода для передачи данных (пины “3” и “5” на Raspberry Pi), еще 2 будут нужны для “0” и питания. Пример для подключения I2C-дисплея показан на рисунке. Обратим внимание, что для питания устройства используется вывод “3.3В”.

После того как устройство подключено, следует еще раз набрать команду i2cdetect -y 1 и убедиться, что его адрес виден в списке. Без этого пытаться запустить какой-либо код бессмысленно.

4.6. Подключаем OLED-дисплей

Наличие дисплея безусловно актуально для многих устройств, так что и Raspberry Pi мы также не оставим без внимания. Тем более, что дисплей подойдет тот же самый, который мы уже рассматривали.

Подключим дисплей, как показано на предыдущей странице. Убедимся, что дисплей “виден” в системе, должен отображаться код 3С:

Теперь установим библиотеки, необходимые для работы дисплея. Введем следующие команды:

sudo apt-get install python-imaging python-smbus pillow

sudo apt-get install git

git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git

На этом шаге будет создан каталог Adafruit_Python_SSD1306. Зайдем в него и запустим установку библиотек для Python:

cd Adafruit_Python_SSD1306

sudo python setup.py install

Все готово. Проверить работу дисплея можно, запустив программу stats.py, находящуюся в папке examples:

sudo python examples/stats.py

Если все было сделано правильно, дисплей покажет информацию о системе:

Рассмотрим пример использования такого дисплея:

from PIL import Image, ImageDraw, ImageFont

import Adafruit_SSD1306

import time

disp = Adafruit_SSD1306.SSD1306_128_64(rst=None, i2c_address=0x3C)

# disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST, i2c_address=0x3C)

disp.begin()

# Load default font.

font = ImageFont.load_default()

# Create blank image for drawing. '1' - monochrome 1-bit color

image = Image.new('1', (disp.width, disp.height))

draw = ImageDraw.Draw(image)

value = 0

while True:

# Clear screen

draw.rectangle((0,0,width,height), outline=0, fill=0)

draw.text((x, top), "Hello world", font=font, fill=255)

draw.text((x, top+8), "Value "+ str(value), font=font, fill=255)

disp.image(image)

disp.display()

time.sleep(0.5)

Разберем код подробнее. Директивы import подключают необходимые библиотеки. Затем мы создаем в памяти объект disp класса Adafruit_SSD1306.SSD1306_128_64 (либо 128_32, если мы имеем такой дисплей). i2c_address - это адрес дисплея. Функция ImageFont.load_default, как нетрудно догадаться из названия, загружает в память шрифт. Затем, с помощью функции Image.new мы создаем в памяти монохромное изображение-буфер, в которое будем рисовать данные. Подготовленное изображение выводится с помощью метода disp.image(), метод disp.display() обновляет картинку на экране. Такая технология

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату