Raspberry Pi:Библиотеки/WiringPi
Содержание | Введение | Продукты | Операционная система | Настройка | Основы Linux | Аппаратные средства | Неисправности | Типовые проблемы | Часто возникающие вопросы | Библиотеки | Примеры |
Черновик |
Библиотека WiringPi[1]
WiringPi – это библиотека для доступа к GPIO-контактам чипа BCM2835, используемого в Raspberry Pi. Написана на языке C, выпущена под лицензией GNU LGPLv3 и пригодна для использования в C, C++ и RTB (BASIC), а также в других языках (но для этого нужны специальные функции-обертки, более подробно читайте ниже). Библиотека WiringPi создавалась с прицелом на схожесть с языком Wiring, который используется в Arduino.
WiringPi была портирована на другие платформы, однако автор оригинальной WiringPi поддержкой этих версий не занимается. То есть если вы пытаетесь использовать WiringPi не на Raspberry Pi, а на какой-то другой платформе, то обращайтесь не к автору оригинальной WiringPi, а к создателю порта.
Оригинальные Raspberry Pi Model A и Model B (за 35 долларов) были одноплатными компьютерами с 26-контактным GPIO-коннектором, который поддерживал разные интерфейсы и прочие форматы передачи данных. Среди них были 8 цифровых GPIO-контактов – их можно было запрограммировать и на цифровой вход, и на цифровой выход. Кроме того, два из них (на 40-контактной Pi; на 26-контактной Pi такой контакт всего один) можно было выделить для выдачи аппаратной ШИМ. Вдобавок у них имелся 2-проводной интерфейс I2C, 4-проводной интерфейс SPI (плюс еще один контакт для SS, поэтому в целом получается 5 контактов) и последовательный интерфейс UART с 2 дополнительными контактами.
В дальнейшем на смену этим моделям пришли другие:
- Raspberry Pi Model B версии 1.1 имела 4 дополнительных GPIO-контакта на отдельном коннекторе, который нужно было припаивать к плате
- Raspberry Pi Model A+ и B+ стали результатами 2 лет исследований, разработок и тестирования – их оснастили 40-контактным GPIO-коннектором (распиновка для прежних 26 контактов осталась неизменной) и 4 USB-сокетами
- Raspberry Pi Model 2 оснастили 4-ядерным процессором Arm A7 c 1 Гб памяти типа RAM. GPIO-контакты остались прежними
- Raspberry Pi Model Zero стала уменьшенной версией Pi A+, но с увеличенной производительностью (1 ГГц). Также имеется 40-контактный GPIO-коннектор. Цена – 5 долларов
- Raspberry Pi Model 3 оснастили 4-ядерным процессором Arm 8 (64 бита) с теми же RAM-памятью и GPIO-контактами, как и у Model 2, но со встроенными WiFi и Bluetooth. Цена – все те же 35 долларов
Если контакты интерфейсов I2C, SPI и UART не используются по прямому назначению, их можно использовать как обычные GPIO-контакты, что в целом дает 8 + 2 + 5 + 2 = 17 GPIO-контактов на коннекторе P1 (плюс 4 на коннекторе P5 на Raspberry Pi Model 2) и 28 GPIO-контактов на B+, Model 2 и Model 3. Впрочем, два контакта зарезервированы у них для интерфейса HAT I2C, но если HAT-плата не подключена, их можно использовать как обычные GPIO-контакты.
В комплекте с WiringPi идет gpio, утилита для командной строки, которую можно использовать для программирования и настройки GPIO-контактов. С ее помощью можно записывать и считывать данные с контактов, а также управлять ими при помощи shell-скриптов.
Библиотеку WiringPi можно расширить при помощи модулей. К примеру, один модуль позволяет использовать на Gertboard девайсы с аналоговым интерфейсом, другой – пользоваться MCP23x17 и MCP23x08, популярными чипами для увеличения количества GPIO-контактов, третий – использовать WiringPi для вывода 32 бит данных при помощи 4 сдвиговых регистров 74×595, последовательно подключенных друг к другу. Кроме того, есть модуль, который для увеличения количества GPIO-контактов использует ATmega (например, Arduino или Gertboard) – через последовательный порт Pi.
Вы также можете создавать для WiringPi собственные расширительные модули, чтобы интегрировать в цепь с Pi собственное периферийное устройство.
WiringPi поддерживает аналоговые запись и считывание. Хотя у Pi нет собственных компонентов для работы с аналоговыми данными, для этого можно использовать модули WiringPi – они добавляют поддержку аналоговых чипов Gertboard и других АЦ/ЦА девайсов.
Загрузка
Загрузить WiringPi можно отсюда.
Примечание: Не пользуйтесь версией WiringPi, загруженной на GitHub. Она существует лишь для того, чтобы помочь в конструировании функций-оболочек для языков Ruby и Python, написанных Gadgetiod’ом.
Драйверы devLib
В комплекте с WiringPi идет devLib – это набор драйверов, обеспечивающих доступ к некоторым популярным периферийным устройствам. Среди поддерживаемых устройств: LCD-дисплеи (на базе чипов Hitachi HD44780U) и графические дисплеи (например, обычные дисплеи с разрешением 128х64, работающие на чипе-драйвере 12864H). Также поддерживаются DS1302 (чип, работающий как часы реального времени), датчики на базе чипов Maxdetect (например, RHT003), платы Gertboard/PiFace и т.д.
Дополнительно
- Благодаря Gadgetoid у WiringPi появились функции-обертки для Ruby, Python и Perl; скачать их можно тут
- Благодаря Йеруну Крансену (Jeroen Kransen) функции-обертки есть для Java; скачать их можно тут
- Благодаря Дейву Болтону (Dave Booulton) функции-обертки есть и для TCL, скачать их можно тут
- Pi4J – это еще один проект, использующий WiringPi, и у него есть репозиторий на GitHub
Более подробно об этом можно почитать на страницах вики о Raspberry Pi.
Подключение[2]
Перед тем, как использовать GPIO-библиотеку WiringPi, вам нужно подключить к программе ее заголовочный файл:
#include <wiringPi.h>
Кроме того, при компиляции программы к команде, возможно, нужно будет добавить...
-I/usr/local/include -L/usr/local/lib -lwiringPi
...но это зависит от ОС, которую вы используете. Важным элементом здесь является –lwiringPi.
Вам также, возможно понадобится вписать дополнительные директивы #include, но это зависит от того, используете ли вы дополнительные модули или нет.
Функции
- Функции инициализации
- Основные функции
- Функции для Raspberry Pi
- Функции для работы со временем
- Приоритет, прерывания и потоки
- Приоритет программ (потоков)
- Прерывания
- Параллельная обработка данных (многопоточность)
- Функции для работы с последовательным портом
- Функции для работы с шиной SPI
- Функции для работы с шиной I2C
- Функции для сдвига данных
- Функции для выдачи ШИМ
- Функции для работы со звуком
Расширения
- Подключение чипа MCP23016 (I2C)
- Подключение чипов MCP23008 и MCP23017 (I2C)
- Подключение чипов MCP23S08 и MCP23S17 (SPI)
- Подключение сдвигового регистра 74x595
- Подключение чипа PCF8574 (I2C)
- Подключение аналогового чипа PCF8591 (I2C)
- Подключение светодиодного контроллера SN3218 (I2C)
Написание собственного расширительного модуля[3]
Вы можете написать собственный расширительный модуль для библиотеки WiringPi, если хотите подключить к Raspberry Pi какое-то новое устройство для работы с GPIO-контактами.