Руководство по программированию Raspberry PI

Ответить
Oleg
Сообщения: 186
Зарегистрирован: 12 июл 2023, 12:09
Руководство по программированию Raspberry PI

Сообщение Oleg »

Чтобы научиться программировать, удобнее всего попробовать изменить какие- -нибудь простые программы и постепенно разобраться, что в них к чему. Все про- граммы, которые понадобятся вам для этой книги, доступны для скачивания, поэтому работать можно и без опыта программирования. Однако полезно пред- ставлять себе, что и как устроено.

Hello, World

Обычно первая программа, которую вы пишете на новом языке, просто выводит на экран слова Hello, world. Чтобы познакомиться с ней, запустите редактор nano и введите следующую команду:

$ nano hello.py

Расширение ру указывает, что файл с программой написан на языке Python. Далее введите в редактор nano следующий текст и сохраните файл:

print('Hello, World')


Затем запустите программу:

$ python hello.py
Hello, World


Табуляция и отступы

Программисты привыкли оформлять код особым образом, чтобы он легче воспринимался. В языке С для Arduino блоки кода внутри функции или инструкции пишутся с отступами, чтобы вы сразу видели, к какой функции или команде относится код. В Python такой стиль не дело вкуса, а обязательное требование.

В Python нет скобок { или }, которые указывали бы начало и конец блока кода Чтобы показать, какие строки кода связаны друг с другом, используются отступы.

Рассмотрим пример кода:

Код: Выделить всё

while True:
    GPIO.output (control_pin, False)
    time.sleep(5) 
    GPIO.cutput (control pin, True)
    time,sleep (2)
print("Завершено")
Это цикл while (точно такого же вида, как цикл в языке С для Arduino, описанный на форуме "Руководство по программированию Arduino"). В нашем случае условие выполняется (True). Значение ее всегда равно тебе, поэтому цикл получается бесконечным. В конце первой строки стоит двоеточие (:). Оно указывает, что далее идет блок кода. Как можно видеть, двоеточие в Python аналогично { в С для Arduino, только закрывающий символ отсутствует.

Строки в блоке кода должны быть отделены от предыдущей строки. Пока вы придерживаетесь оформления, не важно, сколько именно пробелов вы оставляете между строками кода. Большинство программистов используют на каждом уровне отступа четыре пробела.

В конце блока кода никакой символ не ставится, просто прекращаются отступы. Обратите внимание: в приведенном примере кода последняя команда print находится за пределами цикла. Поскольку цикл whilе бесконечен, последняя строка так и не будет исполнена.

Переменные

Переменные в Python напоминают переменные в С на Arduino, но отличаются тем, что при первом использовании переменной не требуется указывать, относится ли она к типу int, float или к какому-либо другому. Переменной просто присваивается значение, и ничто (кроме здравого смысла) не мешает вам присвоить одной и той же переменной целочисленное значение, а через минуту - уже строковое Например, следующий код вполне допустим, но не слишком удачен:

a = 123.45

a = "message"


При работе со строками можно использовать либо двойные кавычки (как в приведенном примере), либо одиночные.
Oleg
Сообщения: 186
Зарегистрирован: 12 июл 2023, 12:09
Re: Руководство по программированию Raspberry PI

Сообщение Oleg »

Инструкции if, while и пр.

В Python есть структура if...else, как и в С на Arduino, но блоки кода внутри инструкции if обозначаются при помощи двоеточий и отступов:

Код: Выделить всё

if x > 10: 
    print("x - больше!")
else:
    print("x - меньше"
В основном принцип инструкций такой же как и в С на Arduino

Библиотека RPi.GPIO

Как и в Arduino С, в Python поддерживаются библиотеки - их просто потребуется импортировать, а потом можно будет использовать в программе.
В большинстве случаев приходится работать с колодкой GPIO, расположенной на Raspberry Pi. Самая популярная библиотека Python для управления контактами GРІО, которая и используется в этой книге, называется RPi.GPIO. Эта библиотека предустановлена на Raspbian, поэтому ее установкой заниматься не придется, можно просто импортировать ее в программу и начинать использовать.

Существует небольшая путаница с именованием контактов на колодке GPIO в Raspberry Pi: иногда указывается позиция контакта на колодке (1, 2, 3, 4 и т. д.), а иногда функция контакта. На заре существования Raspberry Pi оба варианта бы ли достаточно распространены. Сегодня большинство пользователей предпочитают именовать контакты по их функциям. Библиотека RPi.GPIO поддерживает оба способа именования контактов, но ей нужно сообщить, какой вариант использовать. Соответствующий код вы встретите в начале почти любой программы Python из этой книги:

Код: Выделить всё

import RP1.GPIO as GPIO
GPIO.setmode (GPIO.BCM)
Первая строка импортирует библиотеку RPi.GPIO, а вторая определяет Broadcom (ВМС) - это название чипа в Raspberry Pi На Raspberry Pi, в отличие от Arduino, нет аналоговых входов. Однако библиотека RPi.GPIO поддерживает аналоговые ШИМ-входы.

Колодка СРІО

На рисунке показаны варианты подключения к колодке GPIO. Если у вас старая модель Raspberry Рі, где всего 26 контактов, то тех контактов, которые находятся под пунктирной линией, у вас на плате не будет. Большинство проектов можно выполнять на любых моделях Raspberry Рі, поэтому мы будем работать лишь с первыми 26 контактами.
Колодка GPIO
Колодка GPIO
Снимок экрана 2023-08-21 163157.jpg (29.09 КБ) 2054 просмотра
В отличие от Arduino, на самой схеме Raspberry Pi имена контактов не нанесены на печатную плату (РСВ), поэтому сложно определить, где какой контакт. Чтобы было проще можно купить или самостоятельно изготовить трафарет, накладываемый поверх контактов, например. Raspberry Leaf (https://www.adafruit.com/products/2196). Обратите внимание, что некоторые контакты пронумерованы (допустим 2), но рядом также указана функция (например, SDA). Когда вы будете упоминать в коде контакты GРІО, просто ссылайтесь на них по номеру.

Цифровые выходы

В приводимом далее примере показано, как сконфигурировать контакт 18 с колодки GPIO в качестве цифрового выхода, а затем установить высокий уровень выходного сигнала:

Код: Выделить всё

import RPi.GPIO as GPIO
GPIO.setmode (GPIO.BCM)
GPIO.setup(18, GPIO.OUT) 
GPIO.output (18, True)
Когда мы устанавливаем выход при помощи команды GPIO. output, на нем можно задать высокий уровень выходного напряжения, применив значение True или 1. либо низкий, применив False или 0.

Цифровые входы

Цифровые входы на Raspberry Pi функционально во многом похожи на цифровые входы Arduino:

GPIO.setup(18. GPIO.IN)
value GPIO. input (18)
print(value)

Указать, что на входе работает подтягивающий резистор, можно вот так:

GPIO.setup(switch_pin, GPIO.IN, pull_up_down-GPIO, PUD_UP)

Аналоговые выходы

Работа с аналоговыми выходами на Raspberry Pi протекает в два этапа. Сначала нужно задать контакт в качестве выхода, а затем определить ШИМ-канал, который будет использовать этот выход.

Ответить