Запустив редактор, добавляем в этот файл строки с именем сети и паролем:
network={
ssid="TP-LINK_AB11"
psk="12345678"
}
Для завершения редактирования нажимаем Ctrl+X, и на вопрос, сохранить ли файл, нажимаем Y (yes). Перезагружаемся.
В завершении, можно проверить наличие интернета с помощью команды ping www.google.com. Если все нормально, мы должны увидеть время ответа от сервера. Раз уж у нас появился интернет, запустим обновление системы, введем 2 команды sudo apt-get update и затем sudo apt-get upgrade. Процесс может занять минут 5-10, после чего Raspberry Pi можно выключить (ввести команду sudo halt). Теперь монитор и клавиатуру можно отключить.
Шаг-4. Настраиваем удаленный доступ
Теперь мы можем разместить Raspberry Pi там где нам удобно, и включить ее. Первым делом нужно узнать IP-адрес платы, его можно посмотреть в настройках домашнего маршрутизатора, либо в командной строке Windows (Win+R - cmd) ввести команду arp -a. В результате мы должны узнать IP-адрес, в моем случае это 192.168.0.104.
Если в качестве настольного компьютера мы используем OSX или Linux, то для коннекта к Raspberry Pi нам достаточно ввести команду ssh pi@192.168.0.104. Если же мы используем Windows, то сначала нужно скачать SSH-клиент, в качестве которого удобно использовать putty. Устанавливаем putty в какую-либо папку, затем вводим команду:
putty.exe pi@192.168.0.104
Если все было сделано правильно, появится окно ввода, примерно такое же, какое мы видели, когда подключали Raspberry Pi к монитору. Только теперь все те же действия мы можем делать удаленно. После ввода пароля raspberry, мы попадаем в уже знакомую нам командную строку:

На этом настройка завершена, мы можем использовать Raspberry Pi.
Кстати, вполне удобным является создание статического IP-адреса для Raspberry Pi в домашней сети (например 192.168.0.111), при этом он не будет меняться, что удобнее. Желающие могут найти соответствующие онлайн-руководства по настройке.
4.2 Основные команды Linux
Мы настроили удаленный доступ, и сначала нужно немного освоиться в среде Linux. Для начала целесообразно поставить файловый менеджер mc, для чего ввести команду sudo apt-get install mc. Apt-get это “менеджер программ”, а mc это название программы, которую мы устанавливаем. После завершения установки командой mc можно открыть файловый менеджер, напоминающий FAR или (если кто помнит) Norton Commander.

Здесь удобно то, что доступны как операции с файлами, так и доступ к консоли, просмотреть вывод которой можно с помощью клавиш Ctrl+O.
Также можно поэкспериментировать с командами ls (список файлов), mkdir (создание папки) и cd (смена текущей папки).
Чтобы создать текстовый файл, например текст программы, можно воспользоваться уже известным нам редактором nano. Например, чтобы создать программу на языке Python, наберем nano file1.py. В открывшемся окне введем текст программы (его можно просто скопировать через буфер обмена):
print “Hello world”
Завершить редактирование можно нажатием Ctrl+X, затем нужно нажать Y для подтверждения сохранения файла.
Сам редактор во время редактирования должен выглядеть примерно так:

Теперь можно выполнить программу, введя команду python test1.py.
Если все было сделано правильно, мы увидим результат выполнения:

Ура! Мы запустили нашу первую программу в среде Linux.
Установим также модуль для дополнительных библиотек языка Python, он нам пригодится в дальнейшем: sudo apt-get install python-pip. Также установим программу git, с помощью которой удобно скачивать исходные тексты программ: sudo apt-get install git.
Для копирования программ с “большого” компьютера можно использовать программу WinSCP, которая позволяет иметь прямой доступ к файловой системе Raspberry Pi. Это позволит редактировать программы на компьютере, затем копировать их в папку на Raspberry Pi, что достаточно удобно.
4.3. Основы языка Python
Код для Arduino мы писали на Си, здесь же мы будем использовать язык Python. Он удобен своей компактностью, отсутствием необходимости компиляции программ, и наличием большого количества дополнительных библиотек.
Для запуска Python-программы необходимо:
- Создать файл с текстом программы, например с помощью редактора nano:
nano test1.py
- Запустить программу на исполнение:
sudo python test1.py
Мы используем sudo т.к. наши программы будут работать с портами ввода-вывода, без этого они доступны не будут.
Кстати, чтобы запустить короткую программу на Python, ее необязательно сохранять в файл, код можно ввести непосредственно в интерпретатор. Для этого достаточно запустить python и просто ввести подряд соответствующие строки:

Закрыть интерпретатор Python можно нажатием Ctrl+D.
Рассмотрим простые примеры использования языка Python.
Объявление и вывод переменных
В Python достаточно ввести имя и значение.
x = 3
y = 10
print("x=", x)
print(x+y)
В отличие от языка С++, тип переменной будет определен автоматически, указывать его не нужно. Его можно при необходимости узнать, введя print (type(x)).
Циклы
В отличие от того же С++ или Java, циклы в Python задаются отступами, что после других языков программирования может быть непривычным. Часть кода, находящаяся внутри цикла, будет выполнена заданное количество раз.
Вывод чисел от 1 до 9:
for p in range(1,10):
print (p)
Вывод чисел от 1 до 9 с шагом 2:
for p in range(1,10,2):
print (p)
Для сравнения, вот такой код без отступов работать не будет, и это важно помнить, например при копировании кода из этой книги:
for p in range(1,10):
print (p)
Кстати, в Python 2.7 функция range возвращает объект “список”, и соответственно выделяет память заданного размера. Для большинства примеров в книге это не критично, но если нужно написать код типа for p in range(1,10000000), то range следует заменить на xrange, в противном случае программа вполне может занять гигабайт памяти даже на простом с виду цикле. Для Python 3.xx это не требуется.
Массивы
Массив это линейный набор чисел, с которыми удобно выполнять однотипные операции, например вычисление суммы или среднего арифметического.
Объявляем массив чисел:
values = [1,2,3,5,10,15,20]
Добавляем элемент в массив:
values.append(7)
Выводим массив на экран:
print (values)
Выводим элементы массива построчно:
for p in values:
print (p)
Это же можно сделать с помощью индексов (нумерация элементов массива начинается с 0):
for i in range(0,len(values)):
print (values[i])
Можно создать массив определенного размера, заполненный определенными числами. Создадим массив из 100 элементов, заполненный нулями.
values = [0.0] * 100
print (values)
Есть немного более сложный, но и более гибкий вариант создания массива. Создадим массив из 100 элементов, заполненный нулями:
values = [0.0 for i in range(100)]
Создадим массив, заполненный числами 0,1,..,99:
values = [i for i in range(100)]
Создадим массив, заполненный квадратами чисел:
values = [i*i for i in range(100)]
Создать двухмерный массив в Python также несложно:
matrix4x4 = [ [0,0,0,0], [0,0,0,0], [0,0,0,0], [0,0,0,0]]
matrix4x4[0][0] = 1
print (matrix4x4)
Аналогично вышеописанному способу, можно создать 2х-мерный массив 100x100:
values100x100 = [ [0.0 for j in range(100)] for i in range(100)]
Арифметические операции
Сложение, умножение, деление:
x1 = 3
x2 = (2*x1*x1 + 10*x1 + 7)/x1
Возведение в степень:
x3 = x1**10
print (x1,x2,x3)
Переменную также можно увеличить или уменьшить:
x1 += 1
x1 -= 10
print (x1)
Остаток от деления:
x2 = x1 % 6
print (x2)
Условия в Python кстати, задаются отступами, аналогично циклам:
x1 = 123
print (x1)
if x1 % 2 == 0:
print("x1 even number")
else:
print("x1 odd number")
Подсчитаем сумму элементов массива:
values = [1,2,3,5,10,15,20]
s = 0
for p in values:
s += p
print(s)
Также для этого можно воспользоваться встроенной функцией sum:
values = [1,2,3,5,10,15,20]
print(sum(values))
Пожалуй, этого не хватит чтобы устроиться на работу программистом, но вполне достаточно для понимания примеров в книге. Теперь вернемся к Raspberry Pi.
Примечание
У языка Python есть одна неприятная особенность - по умолчанию он “не знает” русской кодировки, ее нужно принудительно указывать в начале файла:
# -*- coding: utf-8 -*-
print "Русский текст"
Без этого интерпретатор выдаст ошибку. Поэтому чтобы не загромождать код и не писать # -*- coding: utf-8 -*- каждый раз в каждом примере, в дальнейших программах все комментарии будут писаться на английском.
4.4. GPIO: порты ввода-вывода
Знакомство с любой новой платой, мы начнем с уже традиционного - подключим светодиод. Тем более, что как можно увидеть, принципы по сути ничем не отличаются от Arduino. В этом, как и в любых следующих проектах, будем считать что Raspberry Pi включена и готова к работе, а доступ осуществляется через putty.
Наша первая схема будет совсем простой:

Принцип, как можно видеть, точно такой же - мы подключаем светодиод через токоограничительный резистор (кто забыл как это работает, может перечитать главу 1.4). Когда резистор подключен, включим Raspberry Pi и напишем код.
Если мы делаем такой проект первый раз, то сначала нужно поставить необходимые библиотеки. Введем команду sudo apt-get install python-rpi.gpio. GPIO - это general-purpose input/output, или “общие порты ввода вывода”, как раз то что нам нужно.
Запустим редактор для создания или редактирования файла, введем команду:
nano led_blink.py
Скопируем и вставим туда следующий код:
import RPi.GPIO as GPIO
import time
LedPin = 31 # GPIO6
# Setup
GPIO.setmode(GPIO.BOARD)
GPIO.setup(LedPin, GPIO.OUT)
# Loop
try:
while True:
GPIO.output(LedPin, GPIO.HIGH) # led on
time.sleep(1.0)
GPIO.output(LedPin, GPIO.LOW) # led off
time.sleep(1.0)
except KeyboardInterrupt: # Ctrl+C stop
pass
# Close
GPIO.cleanup()
Нажмем Ctrl+X для выхода из редактора, на вопрос сохранения файла нажмем Y (yes).
Теперь можно запустить программу, и мы увидим мигающий светодиод:
sudo python led_blink.py
Для завершения работы нажмем Ctrl+C, и мы вернемся обратно в командную строку.
Ура, программа работает! Разберем код программы подробнее.
- Строка import RPi.GPIO as GPIO указывает интерпретатору, что надо загрузить модуль RPi.GPIO и использовать его под названием GPIO (писать каждый раз RPi.GPIO было бы слишком длинно). Команда import time таким же способом загружает модуль time. Строка LedPin = 31 создает переменную с нужным номером вывода, тут все просто.
- Строка GPIO.setmode(GPIO.BOARD) указывает, какую нумерацию выводов мы будем использовать. Есть два варианта: 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 нужно будет добавить команду запуска: