Raspberry pi 3 model b gpio: Raspberry Pi: распиновка GPIO

Содержание

Как работает GPIO на Raspberry Pi

 

Raspberry Pi не был бы таким популярным, если в нём не предусмотрели GPIO. Этот интерфейс ввода/вывода позволяет сделать из одноплатника практически все что угодно – от удаленных управляемых машинок до систем "умного дома".

У Raspberry Pi GPIO действительно является очень мощным решением, при помощи которого возможно реализовать многие задумки. Но прежде, чем его эксплуатировать на полную катушку, необходимо научиться с ним работать. И как везде, начинать следует с самых простых, базовых вещей.

Особенности GPIO "Малины"

В первую очередь необходимо рассмотреть ключевые особенности этого интерфейса. И самое главное в GPIO Raspberry Pi – это pings (пины). Именно они используются для связи одноплатника с периферией.

В совокупности у "Малины" есть 26 GPIO (портов), однако самих элементов больше:

  • 2 из них отвечают за подачу напряжения в 5 Вольт;
  • 2 – 3,3 Вольта;
  • 8 применяются для заземления;
  • 2 используются исключительно для подключения расширений.

Все они выстроены в 2 ряда. Если расположить плату горизонтально и так, чтобы интерфейс оказался вверху, то к первой паре элементов можно подключать (запитывать) устройства, требующие напряжения в 5 Вольт. Снизу, в свою очередь, находится 1 на 3,3, а второй такой же располагается в этом же ряду, примерно посередине – между 22 и 10 портами.

Чтобы ознакомиться с распиновкой GPIO Raspberry следует изучить схему. Её рекомендуется загрузить на компьютер, чтобы при необходимости можно было быстро обратиться к данной информации – заучить сразу расположение всех элементов не получится.


Управление электроприборами через Raspberry Pi

Через что возможно взаимодействовать с GPIO Raspberry

Работать с GPIO Raspberry Pi можно практически через любой инструмент. К сегодняшнему дню созданы соответствующие библиотеки почти под все распространенные языки программирования. С GPIO Raspberry Pi возможно взаимодействовать даже через PHP и JavaScript (node.js).

Однако человеку, который только начинает знакомиться с "Малиной", рекомендуется пробовать взаимодействовать с данным интерфейсом посредством Python. Это обусловлено, во-первых, что для GPIO в Raspbian уже предустановлена соответствующая библиотека для Пайтона, а, во-вторых, этот ЯП является основным для рассматриваемого одноплатника.

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

Купить
Raspberry PI

Проверенный поставщик

MyRaspberri.ru рекоммендует

Дополнительные утилиты для работы с GPIO

Для удобства можно установить дополнительное ПО, которое позволит более эффективно взаимодействовать с интерфейсом "Малины". Например, некоторые из них позволяют работать с GPIO без соответствующих привилегий.

К таким утилитам, в частности, относятся: quck2wire-gpio-admin и WiringPi GPIO utility. Первая из них является более функциональной.

Если требуется прямой доступ к портам, также можно инсталлировать еще и PRIO. Расписывать принцип его работы и вышеуказанных программ нет смысла, так как всю необходимую информацию возможно получить из официальной документации.

Следует отметить, что любые из указанных программ возможно легко найти в репозитории Raspbian.

Управление GPIO "Малины" через Python

И теперь самое интересное: как выполняется управление GPIO Raspberry Pi через Пайтон.

Абсолютно отсутствует необходимость рассказывать о самом языке Python и подробно описывать библиотеку. Эту информацию легко найти на официальных сайтах соответствующих проектов – лучше изложить материал, чем там, крайне тяжело.

Однако есть смысл просто продемонстрировать некоторые принципы взаимодействия с GPIO. Конечно, перед написанием кода следует подключить устройство, с которым нужно работать к GPIO.

Первое, что потребуется сделать – это подключить библиотеку, делается это так: import PRi.GPIO as GPIO.

Далее нужно дать интерпретатору понять, что обращение к портам будет выполняться по их названиям. Это выполняется инструкцией: GPIO.setmode(GPIO.BCM). Предварительно также рекомендуется сбросить текущее состояние интерфейса (мало ли каково оно, хотя это и не критично) – GPIO.cleanup().

Далее можно сконфигурировать порты на выход и вход. Первое делается так: GPIO.setup(НОМЕР_ПОРТА, GPIO.OUT), а второе – GPIO.setup(НОМЕР_ПОРТА, GPIO.IN).

То есть, как можно убедиться, абсолютно ничего сложного в работе с GPIO нет. Главное – знать название портов (возможно почерпнуть из схемы) и функции, предусмотренные библиотекой.

Итог: что понадобится для работы с GPIO

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

  • сама "Малина";
  • установленная на ней Raspbian;
  • внешнее устройство, управление которым вас интересует;
  • умение работать с документацией.

Даже с нуля и без знания ЯП в GPIO Raspberry возможно более или менее освоиться за пару вечеров. Работать с интерфейсом "Малины" очень просто. Это связано с тем, что данный одноплатник создавался, в том числе с целью обучения людей взаимодействия с компьютерами на уровне железа. Конечно, ничего сложного без глубоких знаний сделать не получится. Но так происходит всегда в процессе обучения. Со временем, с приобретением знаний и опыта можно будет реализовывать все более и более интересные вещи.

Варианты правильного питания для Raspberry Pi 3

Одна из самых популярных версий одноплатных компьютеров — это Raspberry Pi 3 модель B. Несмотря на то что с момента его выпуска прошло уже четыре года, сообщество электронщиков с интересом следит за его развитием. Сегодня одна из актуальных тем — питание raspberry pi 3.

Особенности RPi3b

Для тех, кто “переболел” предыдущей версией “малины” будет интересно узнать насколько далеко ушел RPi3b. Теперь он оснащен:

  • 4-х ядерным процем, с частотой 1.2 Ггерц;
  • Оперативкой в один Гб;
  • Целых четыре юсбишных порта;
  • 40-пиновое подключение к устройствам ввода/вывода.

Кроме того, есть ещё интересные изменения, которые могут понравиться любителям малогабаритной электроники.

Во-первых, на его борту процессор нового поколения Cortex-A53. Теперь он поддерживает и 64-битные инструкции, которые были недоступны, в предыдущей модели Cortex-A7.

Во-вторых — дополнен модулем WiFi стандарта 802.11n.

В-третьих, эта модель обзавелась модулем Bluetooth. В RPi3b Bluetooth версии v4.1.

Теперь такая “Малина” стала более интересной в плане производительности и расширения функционала.

Для чего может быть использован Raspberry Pi 3B

После краткого обзора можно рассказать, как применяется этот “малиновый” одноплатник. Так же как и у обычного компьютера, RPi3b больше нужно смотреть не только на характеристики “железа”, а на возможности, которые дают все устройства, помещенные как на плату, так и подключенных к ней.

А количество подключаемых устройств зависят от софта, установленного в операционную систему. У одноплатника ОС довольно много. Основная, естественно, Raspbian. Поэтому большинству пользователей рекомендуют начинать юзать “малину” именно с нее.

У новой малины кроме, операционки, не менее важным было и энергопитание всего этого хозяйства.

Для питания для raspberry pi 3 model b производителем предусмотрен разъём micro-USB. Такие разъемы широко применяются в современных смартфонах. Но теперь необходимо предусмотреть запас энергии для питания мини-компьютера. Как ни крути “Малина” в корне отличается от смартфона и задачи у них разные.

Да взять, например, несколько вариантов применения Pi 3B.

Если установить SD-карту с образом операционки Raspbian, подключить кабельные — клавиатуру и мышь через имеющиеся на борту USB-разъемы, а монитор присоединить по каналу HDMI и перед нами уже полноценный, готовый к работе, компьютер!

У пользователя не возникнет неудобств с переходом на новую систему, потому что:

  • привычный рабочий стол;
  • браузер Chromium;
  • офисный пакет от LibreOffice;
  • приложения для почтовых служб;
  • нужный всем интернет, который подключается по каналу Wi-Fi (хотя есть возможность и кабельного Ethernet-соединения).

Кто-то может и заметить, что современный смартфон делает тоже самое. И глубоко ошибется. Мы не зря уделяем так много внимания питанию этого устройства.

Кроме выше изложенных возможностей Raspberry Pi 3 model B, на нем можно пройти курс первичного обучения программированию на различных языках:

  1. Scratch.
  2. Python.
  3. Perl.
  4. C/С++.
  5. JavaScript.

С помощью приложения Wolfram Mathematica можно выполнять сложные математические расчеты, а в Sonic Pi писать любую электронную музыку.

И для всего этого хозяйства нужно только одно — правильный блок питания для raspberry pi 3. И зарядка от телефона со стандартными характеристиками тут не подойдет.

Где купить

Проблемы питания

Когда идет активная работа, на экране монитора в углу появляется предупреждение — значок “молния”. Не хватает питания! И это не проблема платы Pi 3B, а типичная ошибка начинающих пользователей таких устройств.

У больших компьютеров на этот счет построена целая система правильного снабжения электричеством всем блоков и элементов платы.

А между тем и для Pi 3B также важно правильная подача электроэнергии. От этого, естественно, зависит насколько долго и надёжно проработает этот девайс.

Попробуем разобраться.

Из приведенной схемы распиновки хорошо видно, что помимо элементов GPIO, есть выводы для напряжения 3.3 V, 5 V, а также выводы GND. И это требование очень важно — их нарушать нельзя! Если отдельные GPIO могут выполнять альтернативные функции (на схеме это синие блоки) то нагрузочные пределы превышать крайне не рекомендуется. Весь блок Raspberry Pi может выйти из строя.

Правильное питание Raspberry Pi 3

У первых образцов “малины” потребление едва дотягивало до 80 мА. На с каждым новым поколением этих устройств энергопотребление только возрастало и становилось более мощным. При этом надо учитывать возросшее число портов USB, к которым тоже подключают другие устройства потребляющие энергию.

Изначально имеющийся разъём microUSB был спроектирован под 1.8 А. Исходя из этого, пользователи подключались 1 амперными блоками питания для зарядки телефонов или покупали в интернете аналогичные адаптеры для подключения “малинок”. Но они совсем не учитывают тот факт, что Raspberry Pi 3 это всё-таки компьютер, который уже нуждается в качественном и, что главнее, в стабилизированном электропитании с 5 вольтами на входе и с 2.5 амперами силы тока.

Если это условие нарушается, система, в лучшем случае, зависнет, в худшем — выйдет из строя! При этом повреждаются сектора на SD-карте и теряются все данные. Понятно, что в спокойном состоянии системы этого не произойдёт, но если ее нагрузить, риски аварии возрастают в разы.

Если у raspberry pi питание снижается, об этом говорит и сама система. Она работает медленнее, а в углу выводится пиктограмма в виде молнии — “питания недостаточно”!

Теперь становится понятным, насколько важен вопрос — подходящий трансформатор. Не каждый USB-зарядник для этого подходит.

Но и это еще не всё!

Не менее важный момент — качество самого питающего кабеля. Вероятность приобрести плохой кабель очень велика. Рекомендуется применять кабель 20AWG или аналогичный. Как вариант, можно просто купить оригинальный блок питания 2.5 A/ 5 V.

Длина кабеля тоже имеет значение.

У стандартных проводов при длительной эксплуатации нередко случаются заломы. Это приводит к потере контакта для питания raspberry pi 3. Оно просто пропадает.

Как мы уже говорили, выход — замена кабеля. Но есть и еще одно условие — длина провода. Замечено многими пользователями — при стандартных требованиях к блоку питания 2.5 A 5 V, значок молния все равно появляется в углу экрана. Причина кроется в длине кабеля. Как правило, он метровый. Опытные пользователи советуют ограничить длину кабеля 30-ю сантиметрами. Для “Малины” это оптимальный вариант.

Внимание! Для особо пытливых умов не лишним будет напомнить — питание устройства Raspberry Pi 3 допускается или от блока питания 5 Вольт/2.5 Ампер, или от входа USB. Оба сразу не применять!

Питание Raspberry Pi 3 от аккумулятора

У raspberry pi 3 блок питания от сети 220 вольт, можно заменить электроснабжением от аккумулятора. Но тут важно обратить внимание на то, чтобы он выдавал напряжение не менее пяти вольт. Большинство выносных аккумуляторов именно 5 Вольт и выдают. Главное чтобы они смогли выдавать ток не менее 2.5 Ампер.

Для RPi 3 b, который будет использоваться в переносном варианте, собственно говоря, не нужно работать на полную мощность. Поэтому тут хватит и силы тока на выходе в 1.8 Ампер.

Опять же не забываем, что питание происходит через разъем micro-USB в стандартном исполнении, который применен на большинстве современных смартфонах.

И если модель Pi 3B, будет использоваться как обычный настольный компьютер, для его питания все-таки нужен ток не менее 2 А, а лучше 2.5 А.

И только при этом условии “Малина” сможет стабильно работать. При недостатке электроснабжения возможны подтормаживания системы.

Хотя справедливости ради, нужно сказать, что тормозить система может и по другим причинам.

Например:

  1. Карта microSD не отвечает требуемому классу скорости — ниже 10.
  2. Слишком длинный кабель питания.
  3. Слабый контакт в самом кабеле — провод просто изношен.
  4. Зарядка выдает ток менее 2.5 А.

Так что, в любом случае, к выбору источника питания для “Малины” нужно подходить крайне осторожно. Для автономной работы один источник питания, для стационарных систем совсем другой.

Подключение «Малины» к USB-порту

Да системные требования позволяют использовать “малину” в качестве медиацентра. И многие пользователи понимают это слишком буквально, подавая напряжение напрямую с USB-выхода телевизора. Кажется, это быстрый вариант и не надо занимать лишнее гнездо у розетки. Но это поспешное решение.

Почему?

Да USB-порт телевизора реально выдает требуемые 5 Вольт. Именно это напряжение и необходимо для работы “Малины”. Но вот беда — сила тока не та! Она меньше чем требуется для стабильной работы одноплатника.

У телевизора USB-порт выдает каких-то “жалких” 0.4–0.5 Ампер. А сколько надо? Правильно — 2.5 Ампер!

Поэтому в этих условиях (питание от USB-порта телевизора) Raspberry Pi, или вообще не будет работать, или запустится, но с большими тормозами.

Так как силы тока не хватает, а плата продолжает работать, рано или поздно настанет тот “радостный” момент, которого так ждал мучитель — плата издаст последний писк и затейливо задымится!

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

На заметку! Если подать питание 2.5 A/ 5 V на разъём microUSB Raspberry, то общая 40-пиновая шина сама станет источником питания. К ней можно будет подключать устройства, которые питаются +5 В и +3.3 В.

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

Заключение

Raspberry Pi 3 Model B — перспективная модель в плане потребления электроэнергии миникопьютера. Для больших собратьев питание 5 Вольт/2.5 Ампер— недосягаемый горизонт. В этом плане для пользователя “Малины” есть только один повод для беспокойства — не превышать допустимого энергопотребления. Хотя и тут есть выход из положения — установка дополнительных систем охлаждения, таких как кулер или радиатор на процессор.

И тогда на базе “малины” можно будет собирать целые сервера!

Видео по теме

Facebook

Twitter

Мой мир

Вконтакте

Одноклассники

Pinterest

Wiring Pi - библиотека работы с GPIO. Часть 1

Данная статья рассчитана на пользователей, имеющих представления об основах GPIO Raspberry Pi.

Если эта тема для вас новая, то перед прочтением статьи рекомендую ознакомится с другими статьями для начинающих на тему GPIO - их можно найти в разделе"Документация"

В настоящее время самой популярной библиотекой для работы с GPIO на Raspberry Pi сталаwiringPi

1. Если у вас нет утилиты git для работы с github-репозиториями, то устанавливаем:

sudo apt-get install git-core

2. Скачиваем исходники библиотеки из репозитория -

git clone git://git.drogon.net/wiringPi

3. Устанавливаем:

cd wiringPi
./build

После того, как библиотека wiring Pi установлена, вы можете использовать её в своих проектах. Пример:


#include  //подключаем заголовочный файл библиотеки
int main (void)
{
  wiringPiSetup () ; //инициализируем библиотеку
  pinMode (0, OUTPUT) ;
  for (;;)
  {
    digitalWrite (0, HIGH) ; delay (500) ;
    digitalWrite (0,  LOW) ; delay (500) ;
  }
  return 0 ;
}

Компилируем исходник:

gcc -Wall -o example example.c -lwiringPi

Запускаем:

sudo ./example

Библиотека должна быть обязательно инициализирована вызовом функции wiringPiSetup() После этого можно использовать библиотечные функции

Если библиотека была инициализирована функцией wiringPiSetup() , то в функции следует передавать "виртуальный" номер пина. Таблицу соответствия "виртуальных" пинов (колонка wPi) реальным можно получить при помощи команды gpio readall (утилита gpio устанавливается автоматически вместе с библиотекой WiringPi)

void pinMode (int pin, int mode) Устанавливает режим работы пина. Доступные значения параметра mode: INPUT, OUTPUT, PWM_OUTPUT, GPIO_CLOCK. Примечание: режим работы PWM_OUTPUT поддерживается только пином BCM_GPIO 18, режим GPIO_CLOCK поддерживается только пином BCM_GPIO 4

void pullUpDnControl (int pin, int pud) Включает внутренние подтягивающие резисторы для пина, работающего в режиме INPUT. Возможные значения PUD_OFF (подтягивающие резисторы отключены), PUD_DOWN (подтяжка к земле), PUD_UP (подтяжка к 3.3v)/Сопротивление подтягивающих резисторов на Raspberry Pi составляет около 50KОм

void digitalWrite (int pin, int value) Устанавливает высокий (value=1)/низкий уровень(value=0) на пине, работающем в режиме OUTPUT

void pwmWrite (int pin, int value) Параметр value задаёт коэффициент заполнения импульса (про ШИМ и что такое заполнение импульса можно прочитать в этой статье -http://raspberrypi.ru/blog/readblog/50.html), value принимает значения от 0 (0% заполнения импульса) до 1024 (100% заполнение импульса). Аппаратная ШИМ поддерживается только пином BCM_GPIO 18

int digitalRead (int pin) Считывание состояния пина. В зависимости от логического уровня функция возвращает 0 или 1

analogRead (int pin) Функция считывает значение АЦП. Поскольку на Raspberry Pi нет встроенного АЦП, то перед вызовом функции в программе необходимо инициализировать внешний АЦП (пример использования можно найти в этой статье -http://raspberrypi.ru/blog/571.html)

analogWrite (int pin, int value) Функция записывает значение в АЦП.

unsigned int millis (void) Возвращает время (в миллисекундах) прошедшее с момента вызова функции инициализации (wiringPiSetup) библиотеки WiringPi. Значение сбрасывается через 49 дней

unsigned int micros (void) Возвращает время (в микросекундах) прошедшее с момента вызова функции инициализации (wiringPiSetup) библиотеки WiringPi. Значение сбрасывается приблизительно через 71 минуту

void delay (unsigned int howLong) Приостанавливает выполнение программы на период времени, заданный в параметре howLong (задаётся в миллисекундах)

void delayMicroseconds (unsigned int howLong) Приостанавливает выполнение программы на период времени, заданный в параметре howLong (задаётся в микросекундах)

int wiringPiISR (int pin, int edgeType, void (*function)(void)) Регистрирует функцию, которая будет выполнена при наступлении условия прерывания. Условие прерывания (параметр edgeType) может принимать следующие значения:

  • INT_EDGE_FALLING (прерывание при смене уровня на пине с высокого на низкий)
  • INT_EDGE_RISING (прерывание при смене уровня на пине с низкого на высокий)
  • INT_EDGE_BOTH (прерывание при любой смене уровня на пине)
  • INT_EDGE_SETUP

При условии INT_EDGE_SETUP не будет происходить инициализации пина - подразумевается, что он уже был настроен в другом приложении.

В случае если следующее прерывание наступает до окончания обработки предыдущего, то оно также будет обработано. Но если 2 прерывания будут находится в обработке одновременно, то последующие прерывания будут игнорироваться.

Функция-обработчик прерывания выполняется с высоким приоритетом (если программа запущена от пользователя root) и выполняетсяодновременнос основной программой. Также она имеет полный доступ к глобальным переменным и т.д

Продолжение следует...

Небольшой обзор Raspberry Pi 3 Model B

Как-то совсем внезапно вышла третья версия Raspberry Pi.
Я её взял, да и купил.
Коротко — вещь! Пишу обзор частично прямо с неё, производительность очень приятная и не вызывает острого желания перетыкать клаву-мышку в мой основной, довольно неплохой ПК Core i5 4,5GHz с SSD.
Не коротко — прошу под кат.

Куплена плата была импульсивно, после продолжительных страданий в попытке как-то пользоваться Orange Pi One. Но сама идея заинтересовала, хотя и практических применений для себя пока не особо вижу, это не Ардуино, которое позволило собрать пару мечт времен детства. Но обучение новому — это тоже весело.
А тут вот Raspberry Pi 3 выкатили, которая обязана работать образцово, ибо является популяризатором самой идеи ARM-платок. Ну и купил, не смотря на высоковатую цену (а в общем-то, Raspberry Pi 2 где-то за столько и продавалась, по обещанным $35 её не особо купишь).
На Orange Pi One крест тоже не ставлю, на днях обещают новую версию Armbian с поддержкой драйвера видеоядра. Но поглядим. Пока же всё плохо.

Спецификации новой модели:

SoC: Broadcom BCM2837
CPU: 4× ARM Cortex-A53, 1.2GHz
GPU: Broadcom VideoCore IV
RAM: 1GB LPDDR2 (900 MHz)
Сеть: 10/100 Ethernet, 2.4GHz 802.11n wireless
Bluetooth: Bluetooth 4.1 Classic, Bluetooth Low Energy
Накопитель: microSD
GPIO: 40-pin
Порты: HDMI, 3.5mm аудио-видео, 4× USB 2.0, Ethernet, Camera Serial Interface (CSI), Display Serial Interface (DSI)

Как видим, отличие от модели 2 — новый процессор 64 бита, беспроводная сеть и Bluetooth. Неплохо.
Механические размеры идентичны модели 2, все корпуса подойдут.

Бенчмарки на Линуксах гонять не умею, так что вот вам выдержки из официального журнала.
Процессор:

3D графика:

Производительность GPIO:

Потребление энергии.
Вот это проверил легко, подключением через Доктора. Не врут:

Рассмотрим железо

Итак. Купил в чешском интернет-магазине, доставили в Прагу из Чешских Будеёвиц (родина Budweiser, да) на следующий день. Люблю я чешскую почту.
Запаковали нормально, родная коробочка обмотана пупыркой и уложена в еще одну транспортировочную коробку. Хотя это и излишне, мне даже 2,5" жесткие диски в бумажном конверте (!) доходили нормально.

Внутри сама платка в антистатическом пакетике и скучный листок о сертификации.

Коробка почти аналогична по размерам коробке от Orange Pi.

Да и сами платки сопоставимы по размерам.

Вот он, новый процессор Broadcom BCM2837:

USB реализованы встроенным хабом, что не очень хорошо. На нем же висит и проводная сеть.

С нижней стороны у нас вход питания (удобный micro-USB, а не убогий соосный коннектор), полноразмерный HDMI, комбинированный аналоговый аудио-видео выход в виде джека 3,5мм.

Справа 4 USB порта и 10/100 мегабит проводная сеть.

Снизу единственная микросхема оперативной памяти, объемом 1Гб. Хотелось бы видеть 2Гб, но если честно, я так и не смог забить память до свопа при реальном использовании.
Память не греется, радиатор снизу платы нам не понадобится.

Тут же слот microSD.

«Стекляшка» сверху — наш новый беспроводной адаптер.

Микроскопическая антенна сверху платы.
Но уровень сигнала нормальный, сопоставим со смартфоном, скажем.

После включения я обрадовался тому, что процессор особо не греется. Но радовался недолго, при интенсивной нагрузке температура бодро полезла вверх, пальцем трогать стало некомфортно. Вздохнул, пошарился в ящике с радиодеталями и налепил небольшой алюминиевый радиатор. В дальнейшем нагреть проц выше 71 градуса не вышло.

Софт

Операционная система ставится просто до безобразия.
Качаем образ, пишем программой Win32 Disk Imager.

Доступны куча систем, я выбрал основную, поддерживаемую производителем — Raspbian. Она достаточно симпатично выглядит, стабильна и поддерживает все основные функции. Кроме Bluetooth — пока честно анонсировано, что он еще не поддерживается, плата совсем новая.
После загрузки системы открываем консоль и создаем пароль для root:
sudo passwd 

Далее настроим систему.
sudo raspi-config


Тут нас интересуют пункты:
1 — расширяет раздел на всю карточку памяти.
5 — можно настроить язык и раскладки клавиатуры. Я оставил английский.
9 — отключаем overscan (черные поля на мониторе), выбираем распределение оперативной памяти под GPU, включаем шину I2C для подключения сенсоров.

Далее обновляем пакеты:

sudo apt-get update
sudo apt-get upgrade

После настройки, перезагружаемся. Скорее всего, всё будет работать нормально, Малинка умная и сама подбирает нужное разрешение монитора по HDMI.
Собственно, и всё. Система готова к работе.

Работает всё отлично, окошки перетаскиваются без лагов и лесенкок, как было на Orange Pi.
Памяти тоже достаточно. 5 вкладок в браузере с кучей графики и встроенный Minecraft в окне — вообще без проблем. Почти половина оперативки свободна.
(Minecraft не скриншотится почему-то. Но он там есть. :3 )
По ощущениям, конечно, не современная система с SSD, а что-то уровня маломощных Core2 с жестким диском, или BayTrail на eMMC. Но пользоваться в качестве десктопа реально можно, ничего критичного.

Запускал Quake III, работает идеально на максимальных настройках, ~90FPS.

Из коробки мы также имеем неплохой браузер с аппаратным ускорением видео. YouTube играется без проблем.

Однако мне привычнее Firefox, так что накатил его форк Iceweasel.

sudo apt-get install iceweasel

Видео аппаратно не декодирует, YouTube смотрибелен до 480p. Зато все плагины от Windows версии отлично работают.

Потестим пропускную способность сети.
С проводной всё нормально:

А вот Wi-Fi выдает как-то маловато:

Не знаю, почему. Плату и роутер крутил и так, и эдак — разницы нет.
Думаю, причиной является некоторая сырость софта. Так-то адаптер n-стандарта.

Что касается проигрывания видео — всё стандартно для ARM и аппаратных декодеров.
Всё играется, кроме h364hi10p — аниме традиционно в пролёте, софтовый декодер такое осилить не может. Но нормальных людей это волновать не должно, да.
На удивление, из коробки нет плеера, который бы играл файлы по обычному двойному клику.
Есть консольный omxplayer, но такое юзабилити за гранью моего понимания.
Для более-менее комфортного просмотра видео нужно установить Kodi:

Но это не «плеер по клику», а оболочка-медиацентр.
В принципе, ничего страшного. Зато играет всё отлично: субтитры, дорожки переключаются.

GIPO и радиогубительство

Конечно, такое покупают не как замену десктопу, а для всяких классных вещей, которые на PC делать нельзя или не рационально.
Потыкаем в GPIO!
Для начала, подключу датчик давления-температуры BMP180. Он на 3,3 вольта, потому подключается совсем напрямую.

Устанавливаем софт:
sudo apt-get install python-smbus
sudo apt-get install i2c-tools

Сканируем шину I2C:
sudo i2cdetect -y 1


У меня там не только BMP180 (об этом далее), но суть в том, что должны увидеться адреса устройств. BMP180 это 0x77. Если видится — отлично.
Далее используем библиотеку от Adafruit:
learn.adafruit.com/using-the-bmp085-with-raspberry-pi/using-the-adafruit-bmp-python-library
sudo apt-get update
sudo apt-get install git build-essential python-dev python-smbus
git clone https://github.com/adafruit/Adafruit_Python_BMP.git
cd Adafruit_Python_BMP
sudo python setup.py install

И запускаем:
cd examples
sudo python simpletest.py


Работает! Не сложнее Ардуины.
Далее подключим по I2C LCD-дисплей, например.
Тут внимание: Raspberry Pi не дружит с напряжением 5 вольт, дисплей и прочие устройства 5 вольт надо подключить через конвертер уровня логики.
Копеечная штука на Али:

aliexpress.com/item/Free-shipping-4-channel-IIC-I2C-Logic-Level-Converter-Bi-Directional-Module-5V-to-3/32592515127.html
Легким движением руки копипастим пример от Adafruit в пример по подключению дисплея:

Код

import smbus
import time
import Adafruit_BMP.BMP085 as BMP085
from time import sleep, strftime
from datetime import datetime

sensor = BMP085.BMP085()


# Define some device parameters
I2C_ADDR  = 0x3f # I2C device address
LCD_WIDTH = 20   # Maximum characters per line

# Define some device constants
LCD_CHR = 1 # Mode - Sending data
LCD_CMD = 0 # Mode - Sending command

LCD_LINE_1 = 0x80 # LCD RAM address for the 1st line
LCD_LINE_2 = 0xC0 # LCD RAM address for the 2nd line
LCD_LINE_3 = 0x94 # LCD RAM address for the 3rd line
LCD_LINE_4 = 0xD4 # LCD RAM address for the 4th line

LCD_BACKLIGHT  = 0x08  # On
#LCD_BACKLIGHT = 0x00  # Off

ENABLE = 0b00000100 # Enable bit

# Timing constants
E_PULSE = 0.0005
E_DELAY = 0.0005

#Open I2C interface
#bus = smbus.SMBus(0)  # Rev 1 Pi uses 0
bus = smbus.SMBus(1) # Rev 2 Pi uses 1

def lcd_init():
  # Initialise display
  lcd_byte(0x33,LCD_CMD) # 110011 Initialise
  lcd_byte(0x32,LCD_CMD) # 110010 Initialise
  lcd_byte(0x06,LCD_CMD) # 000110 Cursor move direction
  lcd_byte(0x0C,LCD_CMD) # 001100 Display On,Cursor Off, Blink Off 
  lcd_byte(0x28,LCD_CMD) # 101000 Data length, number of lines, font size
  lcd_byte(0x01,LCD_CMD) # 000001 Clear display
  time.sleep(E_DELAY)

def lcd_byte(bits, mode):
  # Send byte to data pins
  # bits = the data
  # mode = 1 for data
  #        0 for command

  bits_high = mode | (bits & 0xF0) | LCD_BACKLIGHT
  bits_low = mode | ((bits<<4) & 0xF0) | LCD_BACKLIGHT

  # High bits
  bus.write_byte(I2C_ADDR, bits_high)
  lcd_toggle_enable(bits_high)

  # Low bits
  bus.write_byte(I2C_ADDR, bits_low)
  lcd_toggle_enable(bits_low)

def lcd_toggle_enable(bits):
  # Toggle enable
  time.sleep(E_DELAY)
  bus.write_byte(I2C_ADDR, (bits | ENABLE))
  time.sleep(E_PULSE)
  bus.write_byte(I2C_ADDR,(bits & ~ENABLE))
  time.sleep(E_DELAY)

def lcd_string(message,line):
  # Send string to display

  message = message.ljust(LCD_WIDTH," ")

  lcd_byte(line, LCD_CMD)

  for i in range(LCD_WIDTH):
    lcd_byte(ord(message[i]),LCD_CHR)

def main():
  # Main program block

  # Initialise display
  lcd_init()

  while True:


    # Send some test
    lcd_string("Hello, MySKU.ru",LCD_LINE_1)
    lcd_string((datetime.now().strftime('%b %d  %H:%M:%S ')),LCD_LINE_2)
    lcd_string('Temp = {0:0.2f} *C'.format(sensor.read_temperature()),LCD_LINE_3)
    lcd_string('Pressure = {0:0.0f} Pa'.format(sensor.read_pressure()),LCD_LINE_4)

    time.sleep(0.5)
    
  
if __name__ == '__main__':

  try:
    main()
  except KeyboardInterrupt:
    pass
  finally:
    lcd_byte(0x01, LCD_CMD)

Запускаем:
sudo python /home/pi/Desktop/lcd_i2c.py

И получаем вывод с датчика на дисплей.

Ну, как-то так.
Я новой игрушкой доволен, как её применить в дальнейшем — придумаю.
Благодарю за внимание.

GPIO-пины Raspberry Pi и их использование из Python

В уже довольно не новом посте, посвященном Raspberry Pi, это устройство рассматривалось исключительно, как маленький и очень дешевый компьютер. Бесспорно, Raspberry Pi им и является. Но, помимо этого, у Raspberry Pi есть еще и 26 пинов GPIO (General Purpose Input Output), что очень кстати в свете моего недавнего увлечения электроникой. Почему? Давайте разберемся.

Отмечу, что все написанное ниже справедливо для Raspberry Pi 2 Model B. Если у вас другая малина, то расположение пинов и другие детали могут отличаться. Поэтому обязательно сверьтесь с официальной документацией. В качестве операционной системы я использовал релиз Raspbian от 2016-09-28, который можно скачать здесь. Более поздние релизы мне не нравятся, потому что из соображений безопасности в них решили по умолчанию отключать SSH. Что довольно смешно, потому что в этот же релиз решили включать Adobe Flash.

Итак, расположение пинов описано на официальном сайте:

На этой картинке явно изображен один из углов устройства (слева вверху), поэтому по ошибке пронумеровать пины вверх ногами довольно сложно. Очень интересно, что курили ребята, решившие так нумеровать пины. Если кто-нибудь знает ответ, расскажите, пожалуйста, в комментариях. Чтобы окончательно всех запутать, они решили сделать две нумерации. Выше представлена «логическая» нумерация. Под этими номерами пины видны операционной системе. Есть еще и «физическая» нумерация, про которую можно прочитать по приведенной выше ссылке. В рамках данной заметки используется исключительно «логическая» нумерация, изображенная на картинке.

Допустим, мы хотим программно управлять напряжением, подаваемым на 2-й пин. Проще всего это сделать через sysfs.

Первым делом «экспортируем» пин, без этого шага им не получится управлять:

echo 2 > /sys/class/gpio/export

Делаем его out-пином, то есть, он будет либо подавать, либо не подавать напряжение в 3.3 вольта:

echo out > /sys/class/gpio/gpio2/direction

Подаем напряжение:

echo 1 > /sys/class/gpio/gpio2/value

Перестаем подавать напряжение:

echo 0 > /sys/class/gpio/gpio2/value

Узнаем, подается ли сейчас напряжение:

cat /sys/class/gpio/gpio2/value

По завершении работы пину можно сделать unexport:

echo 2 > /sys/class/gpio/unexport

Есть мнение, и не только мое, что 3.3 вольта — как-то маловато. Кроме того, было бы неплохо не только включать и выключать напряжение, но и изменять его в некотором диапазоне. Увы, насколько мне известно, ничего этого Raspberry Pi не умеет. Поговаривают, что умеет Arduino, но опыта использования этого устройства на момент написания этих строк у меня нет.

Можете подключить пин к цепи из светодиода и резистора с сопротивлением 470 Ом и проверить, что описанным выше образом светодиод можно включать и выключать. Для земли (то есть, минуса) можно использовать любой пин, изображенный на приведенной выше схеме черным цветом. Понятно, что работу с sysfs можно автоматизировать на любом языке программирования по вкусу. Можно подключить сразу три светодиода разного цвета и получить программно управляемый светофор. Собственно, это я и сделал, воспользовавшись пинами 3 и 4.

Важно! После загрузки Raspberry Pi некоторые пины по дэфолту могут подавать напряжение. Возможно, это не то, чего вы хотите для вашей цепи. У меня по дэфолту ток был на пинах 2, 3 и 14. Я бы советовал перепроверить эту информацию на вашей конкретной Raspberry Pi и конкретной версии Raspbian. Имейте также в виду, что написанная вами же программа может оставить пины в неизвестном состоянии (например, если вы прибьете ее kill’ом). Наверное, в общем случае лучше всего проектировать цепь так, чтобы она была готова к любым комбинациям наличия или отсутствия тока на используемых вами пинах.

До сих пор были рассмотрены out-пины. Они как бы «пишут» на макетную плату, но не позволяют узнать ее текущее состояние. Например, нажата ли в настоящих момент какая-то кнопка. Даже если цепь разомкнута, out-пины об этом не знают. Поэтому есть еще и in-пины.

Экспортируем 5-ый пин и делаем его in-пином:

echo 5 > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio5/direction

Этот пин я подключил к цепи из резистора сопротивлением 10 кОм и кнопки, которая в нажатом состоянии замыкает цепь, а в отпущенном размыкает.

«Прочитать» кнопку можно так:

cat /sys/class/gpio/gpio5/value

Считывается 1, если кнопка не нажата, то есть, цепь разомкнута, и 0, если кнопка нажата, то есть, цепь замкнута.

В итоге получилась такая конструкция (иллюстрация про кнопку взята отсюда):

А вот и скрипт на Python, который при нажатии на кнопку тушит текущий светодиод и зажигает следующий за ним:

#!/usr/bin/env python

import RPi.GPIO as GPIO
import time

# Use "logical" pin numbers
GPIO.setmode(GPIO.BCM)

# Disable "This channel is already in use" warnings
GPIO.setwarnings(False)

# Setup LED's: 2 - green, 3 - yellow, 4 - red
for i in range(2,5):
    GPIO.setup(i, GPIO.OUT)
    GPIO.output(i, False)

current_led = 2
GPIO.output(current_led, True)

# Prepare to read button state
BUTTON = 5
PRESSED_CODE = 0
GPIO.setup(BUTTON, GPIO.IN, pull_up_down=GPIO.PUD_UP)

while True:
#    GPIO.wait_for_edge(BUTTON, GPIO.FALLING)
#    print("Button pressed")
#    GPIO.wait_for_edge(BUTTON, GPIO.RISING)
#    print("Button released")
    time.sleep(0.05)
    if GPIO.input(BUTTON) == PRESSED_CODE:
        GPIO.output(current_led, False)
        current_led = max(2, (current_led + 1) % 5)
        GPIO.output(current_led, True)
        time.sleep(0.1)

Опытным путем удалось подобрать временные задержки, при которых светодиоды переключаются в точности так, как ожидает пользователь. Закомментированный в приведенном коде метод wait_for_edge на практике работает совершенно непредсказуемо. Например, если зажать кнопку на несколько секунд, то последующие нажатия будут приводить к зажиганию светодиодов в каком-то почти случайном порядке.

Насколько мне известно, это по большому счету все, что можно сделать с помощью GPIO на Raspberry Pi. Поправьте, если я не прав.

Дополнение: В комментариях подсказывают, что малина также умеет и ШИМ. Еще один пример использования GPIO в одноплатном компьютере описывает заметка Реверс-инжиниринг роутера на примере GL.iNet GL-AR750.

Метки: Linux, Python, Электроника.

Raspberry Pi. Урок 9. Управление электромотором постоянного тока.

Поскольку нам нужно два управляющих вывода (чтобы подсоединить к разъемам GPIO 4 и 17), нам также понадобится библиотека GPIO. Подробнее о ней в Уроке 4.

Есть много способов получить результат, как на картинке ниже. Но самый простой — это подключить Pi через SSH (смотрите Урок 6) и открыть редактор с помощью этой команды:

Затем вставьте нижеприведенный код и сохранитесь (CTRL-x).

import RPi.GPIO as io

io.setmode(io.BCM)

 

in1_pin = 4

in2_pin = 17

 

io.setup(in1_pin, io.OUT)

io.setup(in2_pin, io.OUT)

 

def set(property, value):

try:

f = open(«/sys/class/rpi-pwm/pwm0/» + property, ‘w’)

f.write(value)

f.close()

except:

print(«Error writing to: « + property + » value: « + value)

 

set(«delayed», «0»)

set(«mode», «pwm»)

set(«frequency», «500»)

set(«active», «1»)

 

def clockwise():

io.output(in1_pin, True)

io.output(in2_pin, False)

 

def counter_clockwise():

io.output(in1_pin, False)

io.output(in2_pin, True)

 

clockwise()

 

while True:

cmd = raw_input(«Command, f/r 0..9, E.g. f5 :»)

direction = cmd[0]

if direction == «f»:

clockwise()

else:

counter_clockwise()

speed = int(cmd[1]) * 11

set(«duty», str(speed))

Сначала программа задает 2 разъема GPIO, как выводы. Затем задает той же вспомогательной функции (“set”), которую мы использовали в Уроке 8, записать модуль ядра ШИМ, который позже используется для того, чтобы задать параметры ШИМ,

Есть еще две другие функции, “clockwise” и “counter_clockwise”, которые контролируют направление вращения двигателя переключая два входных контакта.

Если оба управляющих вывода в позиции HIGH или оба в позиции LOW, мотор будет неподвижен. Но если IN1 в позиции HIGH, а IN2 в позиции LOW, мотор вращается в одном направлении, а если наоборот — то в обратном.

Основной цикл программы ожидает от Вас введения команд в формате буквы (“f” или “r”) и цифры от 0 до 9. Буква задает направление вращения мотора, а цифра — скорость, которая рассчитывается умножением этой цифры на 11, что дает результат от 0 до 99, который совместим с библиотекой ШИМ.

Модель B + выводы ввода-вывода - проекты Raspberry Pi

Обратите внимание, что в настоящее время мы не уверены, будут ли новые функции периферийных контактов выводов 27-40 PWM1, GPCLK1 и GPCLK2 доступны в Raspbian, и если да, то каким выводам они будут назначены, следовательно, дублированные выводы показаны с этими функциями.

Пропал с платы Model B Rev 2

Разъем P5 отсутствует на новой плате модели B +, и его контакты не были перемещены в новый разъем J8.Это означает потерю 2-го порта I2C (хотя это периферийное устройство доступно через разъемы FFC дисплея и камеры - TBC, если это легко включить для общего использования в Raspbian). Контакты, которые больше не отображаются в заголовке:

I2C0 SDA / GPIO28
I2C0 SCL / GPIO29
GPIO30
GPIO31

Выход 3,3 В

Внешняя схема может потреблять в общей сложности до 50 мА максимального тока от выводов 3.3V Out (верно для модели B, предположительно верно для модели B +, но не подтверждено, поскольку полная схема еще не доступна).

Максимальный ток от вывода 3,3 В действительно 50 мА?

Контакты ввода-вывода

Все контакты ввода-вывода - 3,3 В, а не 1,8 В. Контакты не допускают 5В.

Полная информация доступна здесь

Максимальный ток

Максимум 16 мА на вывод ввода-вывода (приемник или источник) при общем токе со всех выводов, не превышающем 51 мА (верно для модели B, предположительно верно для модели B +, но не подтверждено, поскольку полная схема еще не доступна). См. Подробное объяснение здесь.

Состояние при включении

Вероятно, все контакты установлены как входы при включении питания (TBC).

Следовательно, контакты I2C (например, Pj-3 и P8-5) имеют высокий уровень из-за подтягивающих резисторов на этих контактах.

Подтягивающий и понижающий резисторы

Порты GPIO включают в себя возможность включать и отключать внутренние подтягивающие или понижающие резисторы из кода.

Подтягивания: 50 км - максимум 65 км.

Pull-down составляет 50K мин. - 60K макс.

I2C

Подтягивающие резисторы 1K8 включены в плату RPi, поэтому не требуются извне (верно для модели B, так что предположительно верно для модели B +, но не подтверждено, поскольку полная схема еще не доступна).

Подключение контактов RPi 3.3V I2C к устройству 5V, например Arduino - см. Здесь.

SPI

Сигналы выбора микросхемы предназначены для двух независимых подчиненных устройств. Похоже, что с включенным в Raspbian портом SPI оба контакта CS0 и CS1 назначены ему и поэтому не могут использоваться в качестве ввода-вывода (наше предположение - правильно?)

Штифт ШИМ

Вывод PWM, доступный в заголовке GPIO, используется совместно с аудиосистемой (верно для модели B, так что предположительно верно для модели B + - не подтверждено, поскольку полная схема еще не доступна).Это означает, что вы не можете использовать выход PWM и одновременно воспроизводить звук через разъем 3,5 мм.

Интерфейс 3.3V / 5V

Смотрите нашу другую страницу здесь

ID_SD и ID_SC контакты

Они предназначены для автоматической конфигурации eeprom, которую вы можете включить в свой RPi, добавленный на плату, и который Raspbian будет читать, чтобы обнаружить подключенную плату. Подробнее см. Здесь.

ПОЛЕЗНО?

Мы извлекаем огромную пользу из ресурсов в Интернете, поэтому мы решили, что должны попытаться вернуть часть наших знаний и ресурсов сообществу, открыв многие внутренние заметки и библиотеки нашей компании через такие мини-сайты, как этот.Мы надеемся, что вы найдете этот сайт полезным.

Пожалуйста, не стесняйтесь комментировать, если вы можете добавить справку на эту страницу или указать проблемы и решения, которые вы нашли, но обратите внимание, что мы не предоставляем поддержку на этом сайте. Если вам нужна помощь в решении проблемы, воспользуйтесь одним из множества онлайн-форумов.

Raspberry Pi 3 Model B, четырехъядерный, 1,2 ГГц, 1 ГБ ОЗУ

Детали

Обзор

Raspberry Pi 3 Model B - это Raspberry Pi третьего поколения с 64-битным 1.Четырехъядерный процессор 2 ГГц, 1 ГБ оперативной памяти, Wi-Fi (b / g / n) и Bluetooth 4.1.

По сравнению с Raspberry Pi 2 процессор работает на 33% более высокой тактовой частоте (1,2 ГГц против 0,9 ГГц), более современное ядро ​​также означает более эффективный набор инструкций, особенно при выполнении операций с 64-битными значениями.

Производительность видео и 3D также значительно выросла, поскольку VideoCore работает на частоте 400 МГц для обработки видео (с 250 МГц), а процессор 3D-графики работает на частоте 300 МГц (с 250 МГц).

В общем случае можно ожидать, что Raspberry Pi 3 будет работать примерно на 50% быстрее, чем Raspberry Pi 2 с тем же программным обеспечением.

Характеристики

  • Broadcom BCM2837 64-битный четырехъядерный процессор ARM Cortex-A53 SoC с тактовой частотой 1,2 ГГц
  • 1 ГБ RAM
  • 4 порта USB2.0 с выходом до 1,2 А
  • Расширенный 40-контактный разъем GPIO
  • Видео / аудиовыход через 4-контактный разъем 3,5 мм, HDMI, камеру CSI или Raw LCD (DSI)
  • Память: microSD
  • 10/100 Ethernet (RJ45)
  • BCM43143 WiFi на борту
  • Bluetooth Low Energy (BLE) на борту
  • Низкоуровневые периферийные устройства: 27 x GPIO UART I2C bus SPI bus с двумя чипами +3.3 В + 5 В Земля
  • Требования к питанию: 5 В при 2,4 А через источник питания microUSB
  • Поддерживает Raspbian, Windows 10 IoT Core, OpenELEC, OSMC, Pidora, Arch Linux, RISC OS и многое другое!

Разъемы

  • Ethernet: разъем Ethernet 10/100 BaseT
  • Видеовыход: HDMI (версии 1.3 и 1.4); Композитный RCA (PAL и NTSC)
  • Аудиовыход: Аудиовыход, разъем 3,5 мм; HDMI; Разъем USB 4 x USB 2.0
  • Разъем GPIO: 40-контактный 2.Разъем расширения 54 мм (100 мил): полоска 2x20; Обеспечивает 27 контактов GPIO, а также линии питания +3,3 В, +5 В и GND
  • Разъем камеры: 15-контактный последовательный интерфейс камеры MIPI (CSI-2)
  • Разъем дисплея: 15-контактный плоский гибкий кабель с последовательным интерфейсом дисплея (DSI) с двумя линиями передачи данных и полосой синхронизации
  • Слот для карты памяти: Push / pull Micro SDIO

GPIO и макет

Заголовок и макет GPIO остаются такими же, как и раньше, поэтому все ваши существующие HAT и дополнительные платы будут нормально работать с Raspberry Pi 3.

Некоторые случаи не будут идеальными:

  • светодиодные индикаторы переместились (для размещения антенны беспроводной локальной сети)
  • слот microSD больше не подпружинен, поэтому требуется немного больше места для доступа
  • процессор получает немного больше вентиляции для управления теплом
  • некоторые из более мелких компонентов на плате были перемещены
  • вполне вероятно, что металлические корпуса вызовут проблемы с сигналом беспроводной локальной сети и Bluetooth.
Устройство Raspberry_Pi_3 Raspberry_Pi_Zero Raspberry_Pi_1 Raspberry_Pi_2
CPU Четырехъядерный процессор ARM Cortex-A53 с тактовой частотой 1,2 ГГц от Broadcom ЦП ARM11 Broadcom с тактовой частотой 1 ГГц Процессор ARM11 Broadcom, 700 МГц, Четырехъядерный процессор ARM Cortex-A7, 900 МГц, от Broadcom
GPU Videocore IV Videocore IV Videocore IV Videocore IV
Память 1 ГБ 512 МБ 512 МБ 1 ГБ
Хранилище Слот для карты microSD Слот для карты microSD Слот для SD-карты Слот для карты microSD
Возможности подключения 4 порта USB, HDMI, Ethernet, 3.Аудиоразъем 5 мм, Wi-Fi, Bluetooth 1 x microUSB, mini-HDMI, незаполненный композитный видеоразъем 4 порта USB, HDMI, Ethernet, аудиоразъем 3,5 мм 4 порта USB, HDMI, Ethernet, аудиоразъем 3,5 мм
ОС Linux, Windows 10 IoT core Linux Linux Linux, ядро ​​Windows 10 IoT
Разъемы Интерфейс камеры (CSI), GPIO, SPI, I2C, JTAG Незаполненный 40-контактный разъем GPIO, SPI, I2C Интерфейс камеры (CSI), GPIO, SPI, I2C, JTAG Интерфейс камеры (CSI), GPIO, SPI, I2C, JTAG

Мы предоставляем серию надстроек Raspberry Pi 3, включая

Как настроить UART на Raspberry Pi 3 • Схемы

Введение в настройку UART

В этой статье мы попытаемся настроить UART на Raspberry Pi 3 и Raspberry Pi Zero W с использованием последней версии ядра debian «Jessy».Раньше это было довольно просто на предыдущих версиях моделей Raspberry Pi, но на модели Raspberry Pi 3 это немного отличается.
BCM2837 на Raspberry Pi3 имеет 2 UART (как и его предшественники), однако для поддержки функции Bluetooth полнофункциональный UART PL011 был перемещен с контактов заголовка на чип Bluetooth, а мини-UART стал доступен на контактах заголовка 8 и 10. Таким образом, miniUART теперь доступен на / dev / ttyS0 .
Теперь модуль bluetooth занимает канал UART / dev / ttyAMA0 , который на предыдущих моделях использовался в качестве основного последовательного интерфейса GPIO UART.
Итак, на Raspberry Pi 3 аппаратный интерфейс UART, используемый для Bluetooth, называется / dev / ttyAMA0 , а новый UART, подключенный к контактам 8 и 10 на разъеме GPIO J8, называется / dev / ttyS0 .

К сожалению, есть ряд других последствий:

Mini UART - это вторичный UART с низкой пропускной способностью, предназначенный для использования в качестве консоли.
Mini UART имеет следующие особенности:

  • FIFO глубиной 8 символов для приема и передачи.
  • 7- или 8-битная операция.
  • 1 стартовый и 1 стоповый бит.
  • Паритет отсутствует.
  • Прорыв поколения.
  • RTS с программным управлением, CTS с программным управлением.
  • Автоматическое управление потоком с программируемым уровнем FIFO.
  • Скорость передачи определяется системными часами.

Нет поддержки четности, и пропускная способность ограничена, но последнее не должно влиять на большинство видов использования.

Перед тем, как начать, обычно имеет смысл обновить вашу установку до последней версии debian «jessy»:
Сначала обновите список пакетов вашей системы, введя следующую команду:

Затем обновите все установленные пакеты до последних версий с помощью команды:

sudo apt-get dist-upgrade

Вообще говоря, регулярное выполнение этого позволит поддерживать вашу установку в актуальном состоянии.
Также имейте в виду, что загруженные файлы пакетов (файлы .deb) хранятся в / var / cache / apt / archives. Вы можете удалить их, чтобы освободить место с помощью команды sudo apt-get clean .

Чтобы узнать версию ядра и версию дистрибутива, запустите:
Версия ядра:

Версия распространения:

Некоторые проблемы:
В некоторых выпусках jessy есть проблема, из-за которой UART в некоторых ситуациях работает не так, как задумано:
См. Сообщение на raspi org здесь.
И следующий пост на git здесь.

Некоторые проблемы

В некоторых выпусках jessy есть проблема, из-за которой UART в некоторых ситуациях работает не так, как задумано:
См. Сообщение на raspi org здесь.
И следующий пост на git здесь.

Настройка UART на распи 3 GPIO

По какой-то странной причине для Pi3 с последним ядром 4.4.9 по умолчанию отключен UART. Чтобы включить его, вам нужно изменить enable_uart = 1 в /boot/config.txt . (Больше нет необходимости добавлять core_freq = 250 , чтобы зафиксировать частоту ядра, чтобы получить стабильную скорость передачи.)
Если вы не используете Bluetooth (или пользуетесь нетребовательно), можно поменять местами порты обратно в дереве устройств. Есть модули pi3-miniuart-bt и pi3-disable-bt, которые описаны здесь в / boot / overlays / README. Смотрите в конце этой статьи, как это сделать.

Как уже упоминалось, по умолчанию новый GPIO UART не включен, поэтому первое, что нужно сделать, это отредактировать файл config.txt, чтобы включить последовательный UART:

sudo nano /boot/config.txt

и добавьте строку (внизу):
  enable_uart = 1  
Инжир.1. Отредактируйте файл /boot/config.txt с помощью nano Вам необходимо перезагрузиться, чтобы изменения вступили в силу.

Чтобы проверить, куда указывают ваши последовательные порты, вы можете использовать команду list с длинным списком в формате « -l »:

Рис. 2. Список каталога / dev

В длинном списке вы найдете:
serial0 -> ttyS0
serial1 -> ttyAMA0

Таким образом, на Raspberry Pi 3 и Raspberry Pi Zero W, serial0 будет указывать на контакты 8 и 10 GPIO J8 и использовать / dev / ttyS0 .На других Raspberry Pi он будет указывать на / dev / ttyAMA0 .

Поэтому, где возможно, обращайтесь к последовательному порту через псевдоним «serial0», и ваш код должен работать как на Raspberry Pi 3, так и на других Raspberry Pi.

Отключение консоли (при необходимости)

По умолчанию Raspberry Pi использует последовательный порт для «консольного» входа в систему и через программную службу под названием «getty».
Если вы используете последовательный порт для чего-либо, кроме консоли, вам необходимо отключить его.Это будет немного отличаться в зависимости от того, используете ли вы Raspberry Pi 3 или нет.
Для компьютеров без Raspberry Pi 3 помните, что / dev / ttyAMA0 связан со службой getty (console).

Для Raspberry Pi 3 команда ссылается на / dev / ttyS0:

sudo systemctl stop [email protected]
sudo systemctl disable [email protected]

«Отключить» остановит загрузку при перезагрузке.

Еще нужно убрать консоль из cmdline.текст. Если вы отредактируете это с помощью:

sudo nano /boot/cmdline.txt

…… вы увидите что-то вроде этого:
 
dwc_otg.lpm_enable = 0 console = serial0,115200 console = tty1 root = / dev / mmcblk0p2 rootfstype = ext4 elevator = deadline fsck.repair = yes root wait
  

удалите строку: console = serial0,115200 и сохраните и перезагрузитесь, чтобы изменения вступили в силу:

Или что-нибудь, связанное с console =, которое не является console = tty1, удалите его. Убедитесь, что вы случайно не добавили разрыв строки в этот файл, он должен оставаться одной строкой с пробелами между параметрами, но без пробелов вокруг любого знака =.
Чтобы включить последовательную консоль, отредактируйте файл, используя:

судо нано /boot/cmdline.txt

Измените файл на следующий:
 
dwc_otg.lpm_enable = 0 console = tty1 console = serial0 (или ttyAMA0), 115200 root = / dev / mmcblk0p2 rootfstype = ext4 elevator = deadline fsck.repair = yes rootwait
  

Выйдите и сохраните изменения.
Перезагрузитесь, чтобы изменения вступили в силу.

Протестируйте свой UART с помощью Python и эмулятора терминала

sudo apt-get install python-serial

Теперь на Raspberry Pi введите следующий код в текстовый редактор, следя за тем, чтобы отступы были правильными:

 

импортный серийный номер

серийный порт = серийный.Последовательный ("serial0", скорость передачи = 9600, тайм-аут = 3,0)

в то время как True:
    serialport.write ("скажи что-нибудь:")
    rcv = port.read (10)
    serialport.write ("rnВы отправили:" + repr (rcv))
  

Сохраните результат как файл serialtest.py, а затем запустите его с помощью:

sudo python serialtest.py

Если все работает, вы должны увидеть следующие строки, повторяющиеся, по одной каждые 3 секунды, в эмуляторе терминала:

Скажите что-нибудь:
Вы отправили: ”
Попробуйте ввести несколько символов в окне эмулятора терминала.Вы не увидите, как символы, которые вы вводите, сразу появляются - вместо этого вы увидите что-то вроде этого:

Скажи что-нибудь:
Вы отправили: ’abcabc’

Замена последовательных портов на Raspberry Pi 3

Если вы не хотите использовать Bluetooth и хотите, чтобы высокопроизводительный / dev / ttyAMA0 вернулся на GPIO, вы можете сделать это через оверлей устройства под названием «pi3-miniuart-bt», то есть использовать mini-uart. ( / dev / ttyS0 ) для Bluetooth.

Для использования добавьте следующую строку в / boot / config.текст

судо нано /boot/config.txt

и добавьте (в конце файла):

dtoverlay = pi3-miniuart-bt

Сохраните и перезагрузите компьютер, чтобы изменения вступили в силу.

Вы можете проверить, сработало ли это:

и вы увидите что-то вроде этого:

Заменены псевдонимы последовательного порта Raspberry PI 3

Другие варианты:

Если вы хотите полностью отключить блютуз, доступен другой оверлей:

dtoverlay = pi3-disable-bt

КОНЕЦ

Представляем Raspberry Pi B +

Если вам нравится связывать свой Raspberry Pi с реальным миром, (например) подключая датчики или управляя светодиодами и двигателями, были моменты, когда вы хотели иметь больше входов и выходов на заголовке GPIO или еще пару USB порты для подключения периферийных устройств.Что ж, хорошая новость заключается в том, что люди из Raspberry Pi Foundation, очевидно, прислушались к растущему сообществу пользователей Raspberry Pi и разработали улучшенную версию Raspberry Pi, названную моделью B +. (811-1284)

Raspberry Pi B + Первые впечатления

С первого взгляда новая модель Raspberry Pi B + (811-1284) выглядит совершенно иначе, чем предыдущие модели, и действительно, почти все новые функции и улучшения, представленные в модели B +, связаны с подключением и физическим (в отличие от электронного) дизайном.

Предусмотрено еще два порта USB, которые во многих приложениях исключают необходимость во внешнем концентраторе USB. Я часто хочу подключить к своему Raspberry Pi клавиатуру, мышь и WiFi-адаптер, а с новым модулем Raspberry Pi B + я могу сделать это, не требуя USB-концентратора, и при этом один USB-порт останется свободным.

Всего сейчас 40 контактов GPIO, 26 из которых могут использоваться как цифровые входы или выходы. Возможно, что более важно, 9 из 14 новых контактов GPIO являются выделенными входами / выходами (контакты, которые не имеют альтернативной функции), поэтому теперь, если вы хотите использовать встроенную шину UART, I2C или SPI, вы можете сделать это, и у вас все еще будет много бесплатных входов и выходов GPIO для игры.Новая расширенная распиновка GPIO показана ниже.


Контакты 3 и 5 (GPIO 2 и GPIO 3) имеют встроенные подтягивающие резисторы 1,8 кОм (и они также используются как контакты интерфейса I2C). Контакты 27 и 28 (ID_SD и ID_SC) зарезервированы исключительно для использования ID EEPROM и не могут использоваться в качестве контактов ввода / вывода. Расположение контактов GPIO обратно совместимо с предыдущими моделями Raspberry Pi - контакты с 1 по 26 напрямую совместимы с предыдущими заголовками Raspberry Pi GPIO, хотя следует отметить, что весь заголовок GPIO был перемещен из угла платы в оставьте место для дополнительного монтажного отверстия - поэтому любая вставная плата, разработанная для предыдущих моделей Raspberry Pi, может быть совместимой, но не будет располагаться непосредственно над платой Raspberry Pi B +, потому что заголовок GPIO был перемещен.

Что касается других встроенных разъемов, то выходное гнездо аудиоразъема 3,5 мм и выходное гнездо композитного видеосигнала RCA (как на предыдущих моделях Raspberry Pi) были заменены одним 3,5-мм 4-полюсным разъемом A / V, расположенным рядом с разъем HDMI (который сам был немного перемещен на печатной плате) и разъем питания на новой модели Raspberry Pi B + были перемещены рядом с разъемом HDMI. Это означает, что все аудио / видео разъемы и разъемы питания теперь расположены вдоль одной стороны печатной платы, что поможет содержать все подключенные кабели в порядке.

Среди других изменений, внесенных в новую модель Raspberry Pi B + (811-1284) , слот для карты памяти SD, использовавшийся в предыдущих моделях Raspberry Pi, был заменен слотом для карты памяти Micro SD, светодиоды состояния были перемещены на противоположный конец печатной платы и теперь состоят только из красного светодиода «PWR» и зеленого Светодиод «ACT» и печатная плата теперь имеют 4 монтажных отверстия, расположенных по прямоугольной схеме, что значительно упростит надежную установку печатной платы.

Однако обратите внимание, что новая модель Raspberry Pi B + использует ту же архитектуру процессора и графического процессора, что и модель B, и имеет те же 512 МБ встроенной SDRAM, поэтому я боюсь, что если вы ожидаете повышения производительности или вычислительной мощности, вы можете быть разочарованы.Единственное существенное изменение во встроенной электронике - это то, что линейная схема питания, используемая на предыдущих платах Raspberry Pi, была заменена более эффективной (и значительно «усиленной») конструкцией режима переключения.

Пора дать новой модели Raspberry Pi B + (811-1284) немного тренировки… ..

Мне очень нравятся 7-сегментные светодиодные дисплеи из-за их простоты и «ретро» вида, поэтому я решил использовать расширенный порт GPIO для непосредственного управления несколькими семисегментными светодиодными дисплеями без необходимости использования дополнительных драйверов IC (или для мультиплексирования отдельных элементов или символов).Может показаться, что каждый «семисегментный» светодиодный дисплей имеет 8 выводов плюс общий вывод. Семь терминалов управляют семью сегментами дисплея, а восьмой соединен с десятичной точкой. Я использовал семисегментные дисплеи с общим катодом (номер детали RS 588-639), чтобы я мог подключить выводы GPIO Raspberry Pi непосредственно к входным клеммам и подключить общий катодный вывод каждого дисплея к земле через единственный токоограничивающий резистор 47 Ом. Распиновка используемых мной семи сегментных дисплеев показана ниже.

Каждый вывод подключается к сегменту дисплея, как обозначено буквой рядом с выводом, так, например, вывод 1 подключается к сегменту «e». Контакты 3 и 8 являются общими катодными контактами, и может использоваться любой из них. Я хотел использовать семисегментные дисплеи для отображения некоторой полезной информации, поэтому я подумал, что было бы интересно подключить 1-проводной датчик температуры (DS18B20, номер детали RS (540–2805) к модели Raspberry Pi B + для измерения температуры окружающей среды.

Строим схему

Однопроводной датчик температуры DS18B20 (по умолчанию) использует GPIO 4 в качестве входа. Я решил не использовать GPIO 2 или GPIO 3 из-за подключенных к ним подтягивающих резисторов, а также решил не использовать GPIO 14 и GPIO 15, потому что они дублируют интерфейс UART (который включен по умолчанию), и Часто бывает полезно подключиться к Raspberry Pi в консольном режиме через последовательный интерфейс. В результате у меня остался 21 доступный контакт GPIO - ровно столько, чтобы подключить три семисегментных модуля светодиодных индикаторов (без учета «сегментов» десятичной точки).Готовая схема показана ниже как построенная на небольшой макетной плате со всеми подключениями к новой модели Raspberry Pi B + контакты GPIO, как показано.

Три резистора 47 Ом на левой стороне являются токоограничивающими резисторами для каждого семисегментного светодиодного дисплея, а резистор 47 Ом на правой стороне заставляет постоянно светиться десятичная точка на среднем семисегментном светодиодном дисплее. 1-проводный датчик температуры DS18B20 показан в верхней части макета, для него требуется только один 4.Резистор 7 кОм для правильной работы.

Настройка Raspberry Pi

Чтобы включить поддержку ядра для однопроводного датчика температуры DS18B20, откройте файл «/ etc / modules» и добавьте следующие две строки в конец файла:

w1-gpio
w1-therm

Есть несколько способов сделать это, но самый простой - ввести следующую команду в командной строке:

судо нано / и т. Д. / Модули

Это откроет файл в nano, где вы можете добавить дополнительные строки, а затем сохранить файл и выйти, нажав Ctrl + X, Y и, наконец, введите

Вам нужно будет перезагрузить Raspberry Pi модель B +, чтобы изменения вступили в силу.Вы можете сделать это, введя следующую команду в командной строке:

перезагрузка sudo

Когда ваша модель Raspberry Pi B + перезагрузится, войдите в систему и затем введите следующую команду в командной строке:

cd / sys / bus / w1 / устройства

Теперь введите « ls » в командной строке. Вы должны увидеть что-то вроде следующего:

28-000004d0963d w1_bus_master1

Запишите длинную строку цифр и букв - это серийный номер вашего датчика температуры DS18B20, и он вам понадобится для получения данных с датчика (ваш серийный номер будет отличаться от показанного выше).

Написание программного обеспечения

Я написал программу Python3 для измерения температуры (в градусах Цельсия) каждую секунду и отображения измеренной температуры в формате «##. #» На трех семи сегментных светодиодных модулях, подключенных к заголовку GPIO на новом Raspberry Pi. модель B +. Программа предназначена для отображения измеренной температуры, пока она находится в диапазоне от -9,9 ° C до 99,9 ° C. За пределами этого диапазона на светодиодном дисплее отображается «EEE».

Полный листинг программы можно загрузить с GitHub, перейдя по адресу https: // github.com / mi0iou / RPi_Термометр

Собираем все вместе

Запустите программу из командной строки, введя следующее (где «xx-xxxxxxxxxxxx» - серийный номер вашего датчика температуры DS18B20):

sudo python3 rpi_thermometer.py xx-xxxxxxxxxxxx

После небольшой задержки на модулях светодиодного дисплея отобразится температура. Нажмите Ctrl + C , чтобы завершить программу.

Всю установку можно сделать намного более портативной (как показано на фото ниже), подключив адаптер Wi-Fi к модели Raspberry Pi B +, а затем подключившись с помощью SSH с другого компьютера для доступа к Raspberry Pi и запуска программного обеспечения.

Заключение

Новая модель Raspberry Pi B + настолько же проста в использовании, как и ее предшественники, а добавление дополнительных контактов GPIO и встроенных портов USB, безусловно, откроет новые возможности для экспериментаторов и хакеров. Новый дизайн и расположение разъемов являются логическим продолжением предыдущих моделей, и я считаю, что новая модель Raspberry Pi B + станет еще более адаптируемой и простой для включения в самые разные проекты.

Я уверен, что найдутся некоторые, кто будет сетовать на тот факт, что эта новая модель не имеет более быстрого процессора или большего объема оперативной памяти, но я думаю, что текущая архитектура все еще более чем адекватна и использует ту же базовую архитектуру, что и предыдущие модели. обратная совместимость, что немаловажно.Я не сомневаюсь, что в долгосрочной перспективе новая модель Raspberry Pi B + станет доминирующей моделью, но она не сделает сразу предыдущие модели устаревшими.

Большой силой Raspberry Pi всегда была простота использования (по сравнению с микроконтроллером) в сочетании с легкостью, с которой интерфейс GPIO можно программировать и использовать для подключения к реальному миру. Новая модель Raspberry Pi B + - это логичное и долгожданное дополнение к семейству Raspberry Pi, которое будет еще более привлекательно для любителей, педагогов и профессионалов.

Закажите Raspberry Pi Model B + (811-1284)

Подробнее о Raspberry Pi на сайте DesignSpark

Мой веб-сайт: www.asliceofraspberrypi.blogspot.co.uk

Твиттер: @TomHerbison

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *