gpio
[
Пред. ] [ Содержание ] [
След. ]
gpio
echo 53 > /sys/class/gpio/export
cat /sys/class/gpio/gpio53/value
echo out > /sys/class/gpio/gpio53/direction
echo 1 > /sys/class/gpio/gpio53/value
echo 0 > /sys/class/gpio/gpio53/value
# Clean up
echo 53 > /sys/class/gpio/unexport
This is a modified WiringPi for OrangePi. We call it WiringOP. Test fo Orangepi pc https://github.com/zhaolei/WiringOP WiringPi это GPIO библиотека написана @drogon-ом, первоначально для Raspberry Pi, но Orange Pi модифицировали и адаптировали её под свои мини компьютеры и называли её WiringOP, где OP — сокращение от Orange Pi. Подробнее о библиотеке WiringPi можно узнать на сайте разработчика
http://wiringpi.com/.
git clone https://github.com/zhaolei/WiringOP.git -b h3 cd WiringOP chmod +x ./build sudo ./build gpio readall Самая простая программа: Мигание светодиодом
Создайте файл с именем blink.c с содержанием:
#include <wiringPi.h>
int main (void) {
wiringPiSetup();
pinMode (0, OUTPUT) ;
for (;;) {
digitalWrite(0, HIGH);
delay (500) ;
digitalWrite(0, LOW);
delay(500);
}
return 0;
}
Затем, для компиляции и запуска, вы должны выполнить следующие командны:
sudo gcc blink.c -o blink -lwiringPi -lpthread sudo ./blink Чтобы увидеть результат, вам нужно будет подключить один светодиод между CON3-11 и GND с резистором на 220 Ом для ограничения тока.
Использование GPIO с помощью WiringOP для вывода справки по командам наберите
gpio -h
Если у Вас в файле script.bin назначены порты UART, SPI, i2c, то переназначить их можно не редактируя файл script.bin, достаточно задать их командой
gpio mode <номер порта> <значение> где номер порта который соответствует номеру в строке wPi, для использования физического номера используйте команду
gpio -1 mode <номер порта> <значение> например надо физический порт 8 определить на выход
gpio -1 mode 8 out запишем в порт логическую единицу
gpio -1 write 8 1 Так же можно управлять двумя светодиодами на плате, зеленый
перезагружаем устройство и проверяем работу.
echo 1 > /sys/class/gpio_sw/standby_led/data echo 0 > /sys/class/gpio_sw/standby_led/data и красный
echo 1 > /sys/class/gpio_sw/normal_led/data echo 0 > /sys/class/gpio_sw/normal_led/data Соответственно включение и выключение.
Запуск и остановка скриптов с помощью кнопок. GPIO:цифровые входы.
https://pcminipro.ru/stati/zapusk-i-ostanovka-skriptov-s-pomoshhyu-knopok-gpio-tsifrovye-vhody/ Цифровой вход позволяет считывать 2 значения, соответствующее уровню напряжения на пине, в OPi имеет логический уровень 3,3 В, это означает, что цифровые значения соответствуют форме: ‘0’ (LOW) — 0 В; ‘1’ (HIGH) — 3,3 В.
Внимание! Для Orange Pi никогда не должно быть подано на пин напряжение выше 3,3 В (с учетом запаса прочности, 3,6 В).
Управление скриптами с помощью кнопок У нас есть программа/скрипт и нам нужно выполнить и потом закрыть (убить процесс), однако, у нас нет времени делать это в консоли или нет возможности подключиться к системе (нет экрана или клавиатуры).
Подключим кнопку через контакты GPIO для того, чтобы запускать программу по нажатию кнопки и закрывать по повторному нажатию.
И добавим ещё одну, которая отключит систему, когда мы ее нажмем.
Определяем два контакта GPIO, которые находятся в подходящем месте и не имеют специальных функций.
В этом примере использовались контакты GPIO24 и GPIO25 (физические контакты 35 и 37):
Пины Orange Pi GPIO не могут справиться с напряжением выше 3,3, поэтому подключение кнопок должно использовать питание 3.3 В.
Необходимо будет добавить резисторы при подключении кнопок, поскольку библиотека WiringPi не реализует возможность включать внутренние подтягивающие резисторы для пина.
Таким образом, соединение должно выполняться следующим образом :
Создадим три файла:
1 программа управления в Cи, для управления кнопками и 2 сценария BASH для запуска и остановки программы/скрипта. Таким образом, управляющая программа будет отвечать за определение нажатий клавиш, а также вызова системных функций для запуска сценариев BASH, которые отвечают за запуск или убийство программы.
1 Управляющая программа: // Библиотеки
#include <stdio.h>
#include <wiringPi.h>
// Define
#define P_BTN_PWR 24
#define P_BTN_RUN 25
#define WAIT_NPRES 100
#define WAIT_PRES 3000
#define MAX_CMD_LINE 128
int main(int argc, char* argv[])
{
int run = 0;
char script[MAX_CMD_LINE];
if(argc == 2) // Функция вызывается с аргументом
{
// Настройте WiringPi и кнопки в качестве входов
wiringPiSetup();
pinMode(P_BTN_PWR, INPUT);
pinMode(P_BTN_RUN, INPUT);
while(1)
{
// Кнопка запуска/остановки определенного скрипта
if(digitalRead(P_BTN_RUN) == LOW)
{
if(run == 0) // Скрипт не запущен, запустить его
{
run = 1;
snprintf(script, MAX_CMD_LINE, "run_mysh.sh %s", argv[1]);
system(script);
delay(WAIT_PRES);
}
else // Скрипт работает, остановите его (закройте)
{
run = 0;
snprintf(script, MAX_CMD_LINE, "stop_mysh.sh %s", argv[1]);
system(script);
delay(WAIT_PRES);
}
}
// Кнопка Shutdown, запуск сценария завершения работы системы
if(digitalRead(P_BTN_PWR) == LOW)
system("shutdown -h now");
delay(WAIT_NPRES);
}
}
else // Нет или слишком много аргументов
printf("\n\n Неправильный вызов сценария. Вы должны указать аргумент (например, myscript blink)\n\n");
return 0;
}
2 Код сценария выполнения программы, подлежащей контролю: #!/bin/bash ARG_FILE=$1 $ARG_FILE & 3 Код сценария завершения выполнения программы: #!/bin/bash ARG_FILE=$1 PID=`pidof $ARG_FILE` kill -9 $PID Программа управления принимает в качестве аргумента адрес управляемой программы и передает сценариям BASH, чтобы они знали, где они находятся.
Следует иметь в виду, что при использовании команд необходимо, чтобы запуск программы выполнялся с правами администратора (sudo):
sudo btnmyscript /ruta/programa/a/controlar
Когда нажата кнопка, подключенная к контакту 37 (WiringPi — GPIO25), программа будет выполнена и программа будет управляться, и когда кнопка будет нажата снова, программа будет убита, а когда будет нажата кнопка, подключенная к контакту 35 (WiringPi — GPIO24), система выключится.
Инструкции по загрузке и использованию: Вышеупомянутые файлы были скомпилированы в репозитории Github, чтобы они были легко доступны и позволяли им интегрироваться в системы удобным образом:
1 — Загрузите репозиторий, содержащий исходные файлы:
git clone https://github.com/J-Rios/btnmyscript cd btnmyscript 2 — Скомпилировать программу:
gcc -o btnmyscript btnmyscript.c -lwiringPi 3 — Скопируйте необходимые файлы в глобальный путь /usr/bin, чтобы вызвать сценарий из любого места («Установить»):
sudo cp -a btnmyscript /usr/bin/ sudo cp -a run_mysh.sh /usr/bin/ sudo cp -a stop_mysh.sh /usr/bin/ 4 — (Необязательно) Удалить каталог загруженного репозитория:
cd .. sudo rm -rf btnmyscript 5 — Пример использования программы (в данном случае для управления программой, которая находится в каталоге, где мы находимся):
sudo btnmyscript ./programaAcontrolar & Формула для вычисления номер GPIOXX: (позиция буквы в алфавите - 1) * 32 + позиция вывода P
A06 P
A = 1 P (PORT) - не учитывается
(
1 - 1) * 32 +
06 = 0 * 32 + 06 = 06
Код питона
import RPi.GPIO as GPIO
import time
# blinking function
def blink(pin):
GPIO.output(pin,GPIO.HIGH)
time.sleep(1)
GPIO.output(pin,GPIO.LOW)
time.sleep(1)
return
# to use Raspberry Pi board pin numbers
GPIO.setmode(GPIO.BOARD)
# set up GPIO output channel
GPIO.setup(11, GPIO.OUT)
# blink GPIO17 50 times
for i in range(0,50):
blink(11)
GPIO.cleanup()
#include <header.h> // which contatining some delay function
void blink(int pin)
{
//Program the pin (which GPIO) to high
//delay function
//Program the pin (which GPIO) to low
//delay
return 0;
}
main()
{
// to use Raspberry Pi board pin numbers
GPIO.setmode(GPIO.BOARD) //check this fun def and find out what it is doing and code it accordingly
// set up GPIO 11 as output channel
// blink GPIO11 50 times
for(i=0;i<50;i++)
blink(11);
GPIO.cleanup() ////check this fun def and find out what it is doing and code it
led_pins@0 allwinner,pins = "PH24"; GPIO.setup(12, GPIO.OUT)
GPIO.setup(7, GPIO.OUT)
GPIO.setup(8, GPIO.OUT)
В Orange Pi Zero вы можете обращаться подобным образом и к светодиодам на плате (красный и зеленый), которые соответствуют GPIO17 и GPIO362
GPIO17 = PA17 - Красный светодиод (Status Led)
GPIO362 = PL10 - Зеленый светодиод (Power Led)
Но они имеют и свои собственные файлы:
/sys/class/leds/orangepi:green:pwr/brightness
/sys/class/leds/orangepi:red:status/brightness
echo 0 > /sys/class/leds/orangepi:green:pwr/brightness
echo 1 > /sys/class/leds/orangepi:red:status/brightness
2x13 Header
1 3.3V 2 5V
3
PB21 TWI2-SDA gpio53 4 5V
5
PB20 TWI2-SCK gpio52 6 GND
7 PI03 PWM1 gpio259 8 PH00 UART3_TX gpio224
9 GND 10 PH01 UART3_RX gpio225
11
PI19 UART2_RX gpio275 12 PH02 UART3-RTS gpio226
13
PI18 UART2_TX gpio274 14 GND
15
PI17 UART2_CTS gpio273 16 PH20 CAN_TX gpio244
17 3.3V 18 PH21 CAN_RX gpio245
19
PI12 SPI0_MOSI gpio268 20 GND
21 PI13 SPI0_MISO gpio269 22
PI16 UART2_RTS gpio272
23 PI11 SPI0_CLK gpio267 24
PI10 SPI0_CS0 gpio266
25 GND 26
PI14 SPI0_CS1 gpio270
Header
1 5V 2 3.3V
3 PH05 UART4-RX gpio229 4 PI21 UART7_RX gpio277
5 PH03 UART3-CTS gpio227 6 PI20 UART7_TX gpio276
7 GND 8 GND
9 RESET# 10 AB22 LRADC1
11 ADC_Y2 12 AB23 LRADC0
13 ADC_Y1 14 GND
15 ADC_X2 16 PB23 UART0_RX gpio55
17 ADC_X1 18 PB22 UART0_TX gpio54
cat /sys/kernel/debug/pinctrl/pinctrl-maps Pinctrl maps:
device 1c28000.serial
state default
type MUX_GROUP (2)
controlling device 1c20800.pinctrl
group PB22
function uart0
device 1c28000.serial
state default
type MUX_GROUP (2)
controlling device 1c20800.pinctrl
group PB23
function uart0
.....................................
device 1c13400.phy
state default
type CONFIGS_GROUP (4)
controlling device 1c20800.pinctrl
group PH4
config 00000105
cat /sys/kernel/debug/pinctrl/1c20800.pinctrl/pinmux-pins Pinmux settings per pin
Format: pin (name): mux_owner gpio_owner hog?
pin 0 (PA0): 1c50000.ethernet (GPIO UNCLAIMED) function gmac group PA0
pin 1 (PA1): 1c50000.ethernet (GPIO UNCLAIMED) function gmac group PA1
pin 2 (PA2): 1c50000.ethernet (GPIO UNCLAIMED) function gmac group PA2
pin 3 (PA3): 1c50000.ethernet (GPIO UNCLAIMED) function gmac group PA3
pin 4 (PA4): 1c50000.ethernet (GPIO UNCLAIMED) function gmac group PA4
pin 5 (PA5): 1c50000.ethernet (GPIO UNCLAIMED) function gmac group PA5
pin 6 (PA6): 1c50000.ethernet (GPIO UNCLAIMED) function gmac group PA6
pin 7 (PA7): 1c50000.ethernet (GPIO UNCLAIMED) function gmac group PA7
pin 8 (PA8): 1c50000.ethernet (GPIO UNCLAIMED) function gmac group PA8
pin 9 (PA9): (MUX UNCLAIMED) (GPIO UNCLAIMED)
.....................................
pin 277 (PI21): (MUX UNCLAIMED) (GPIO UNCLAIMED)
cat /sys/kernel/debug/gpio gpiochip0: GPIOs 0-287, parent: platform/1c20800.pinctrl, 1c20800.pinctrl:
gpio-41 ( usb0-vbus ) out lo
gpio-228 ( usb0_id_det ) in hi IRQ
gpio-234 ( cd ) in lo IRQ
gpio-246 ( usb2-vbus ) out hi
gpio-247 ( gmac-3v3 ) out hi
gpio-248 ( orangepi:green:usr ) out lo
gpio-250 ( usb1-vbus ) out hi
Считывание температуры с помощью датчика DS18B20 и Orange Pi Подключение датчика температуры DS18B20 к Orange Pi Установка и настройка WiringOP/WiringPi на Orange Pi PC Работа с GPIO на примере Orange Pi
https://vk.com/@digital_club21-qsg3-rabota-s-gpio-na-primere-orange-pi A20-OLinuXino-MICRO https://www.olimex.com/wiki/A20-OLinuXino-MICRO OrangePi PC работаем с GPIO, UART и i2c https://orangepi.su/content.php?p=112&c=OrangePi%2520PC%2520rabotaem%2520s%2520GPIO,%2520UART%2520i%2520i2c
Содержание