Выходы GPIO не изменяют значение

У меня есть малина pi zero, и я пытаюсь изменить значения булавки gpio. Я попытался использовать RPi.GPIO с python и командой gpio из wiringpi, но я не могу изменить значение для любого из контактов. Я использую светодиоды, чтобы проверить, является ли контакт высоким или низким, и независимо от того, что я делаю, контакты не становятся высокими. Я также использовал gpio readall, чтобы увидеть изменения. Я могу изменить режим вывода (ввода или вывода), но не самого значения.

Интересно, что светодиод, подключенный к контакту 26 (нумерация BCM), всегда включен. Я попытался изменить значения, но светодиод остается включенным, а gpio readall показывает его значение как 0.

Я попытался переустановить ОС, но после этого проблема все еще сохраняется. У меня есть raspbian jessie lite.

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

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

Python

import RPi.GPIO as gp
gp.setmode(gp.BCM)

gp.setup(18,gp.OUT)

print "before on"
gp.output(18,gp.HIGH)
print "after on"

wiringpi

Вывод gpio readall перед изменением состояния

+-----+-----+---------+------+---+-Pi Zero--+---+------+---------+-----+-----+
| BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
|     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     |
|   2 |   8 |   SDA.1 |   IN | 0 |  3 || 4  |   |      | 5v      |     |     |
|   3 |   9 |   SCL.1 |   IN | 0 |  5 || 6  |   |      | 0v      |     |     |
|   4 |   7 | GPIO. 7 |   IN | 0 |  7 || 8  | 0 | ALT0 | TxD     | 15  | 14  |
|     |     |      0v |      |   |  9 || 10 | 0 | ALT0 | RxD     | 16  | 15  |
|  17 |   0 | GPIO. 0 |   IN | 0 | 11 || 12 | 0 | OUT  | GPIO. 1 | 1   | 18  |
|  27 |   2 | GPIO. 2 |   IN | 0 | 13 || 14 |   |      | 0v      |     |     |
|  22 |   3 | GPIO. 3 |   IN | 0 | 15 || 16 | 0 | OUT  | GPIO. 4 | 4   | 23  |
|     |     |    3.3v |      |   | 17 || 18 | 0 | IN   | GPIO. 5 | 5   | 24  |
|  10 |  12 |    MOSI |   IN | 0 | 19 || 20 |   |      | 0v      |     |     |
|   9 |  13 |    MISO |   IN | 0 | 21 || 22 | 0 | IN   | GPIO. 6 | 6   | 25  |
|  11 |  14 |    SCLK |   IN | 0 | 23 || 24 | 0 | IN   | CE0     | 10  | 8   |
|     |     |      0v |      |   | 25 || 26 | 0 | IN   | CE1     | 11  | 7   |
|   0 |  30 |   SDA.0 |   IN | 0 | 27 || 28 | 0 | IN   | SCL.0   | 31  | 1   |
|   5 |  21 | GPIO.21 |   IN | 0 | 29 || 30 |   |      | 0v      |     |     |
|   6 |  22 | GPIO.22 |   IN | 0 | 31 || 32 | 0 | IN   | GPIO.26 | 26  | 12  |
|  13 |  23 | GPIO.23 |   IN | 0 | 33 || 34 |   |      | 0v      |     |     |
|  19 |  24 | GPIO.24 |   IN | 0 | 35 || 36 | 0 | IN   | GPIO.27 | 27  | 16  |
|  26 |  25 | GPIO.25 |   IN | 0 | 37 || 38 | 0 | IN   | GPIO.28 | 28  | 20  |
|     |     |      0v |      |   | 39 || 40 | 0 | IN   | GPIO.29 | 29  | 21  |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
+-----+-----+---------+------+---+-Pi Zero--+---+------+---------+-----+-----+

Я выполнил следующие команды

gpio -g mode 26 out
gpio -g write 26 1

Это результат gpio readall после попытки изменить значение

 +-----+-----+---------+------+---+-Pi Zero--+---+------+---------+-----+-----+
| BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
|     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     |
|   2 |   8 |   SDA.1 |   IN | 0 |  3 || 4  |   |      | 5v      |     |     |
|   3 |   9 |   SCL.1 |   IN | 0 |  5 || 6  |   |      | 0v      |     |     |
|   4 |   7 | GPIO. 7 |   IN | 0 |  7 || 8  | 0 | ALT0 | TxD     | 15  | 14  |
|     |     |      0v |      |   |  9 || 10 | 0 | ALT0 | RxD     | 16  | 15  |
|  17 |   0 | GPIO. 0 |   IN | 0 | 11 || 12 | 0 | OUT  | GPIO. 1 | 1   | 18  |
|  27 |   2 | GPIO. 2 |   IN | 0 | 13 || 14 |   |      | 0v      |     |     |
|  22 |   3 | GPIO. 3 |   IN | 0 | 15 || 16 | 0 | OUT  | GPIO. 4 | 4   | 23  |
|     |     |    3.3v |      |   | 17 || 18 | 0 | IN   | GPIO. 5 | 5   | 24  |
|  10 |  12 |    MOSI |   IN | 0 | 19 || 20 |   |      | 0v      |     |     |
|   9 |  13 |    MISO |   IN | 0 | 21 || 22 | 0 | IN   | GPIO. 6 | 6   | 25  |
|  11 |  14 |    SCLK |   IN | 0 | 23 || 24 | 0 | IN   | CE0     | 10  | 8   |
|     |     |      0v |      |   | 25 || 26 | 0 | IN   | CE1     | 11  | 7   |
|   0 |  30 |   SDA.0 |   IN | 0 | 27 || 28 | 0 | IN   | SCL.0   | 31  | 1   |
|   5 |  21 | GPIO.21 |   IN | 0 | 29 || 30 |   |      | 0v      |     |     |
|   6 |  22 | GPIO.22 |   IN | 0 | 31 || 32 | 0 | IN   | GPIO.26 | 26  | 12  |
|  13 |  23 | GPIO.23 |   IN | 0 | 33 || 34 |   |      | 0v      |     |     |
|  19 |  24 | GPIO.24 |   IN | 0 | 35 || 36 | 0 | IN   | GPIO.27 | 27  | 16  |
|  26 |  25 | GPIO.25 |  OUT | 0 | 37 || 38 | 0 | IN   | GPIO.28 | 28  | 20  |
|     |     |      0v |      |   | 39 || 40 | 0 | IN   | GPIO.29 | 29  | 21  |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
+-----+-----+---------+------+---+-Pi Zero--+---+------+---------+-----+-----+

gpio -g read 26 возвращает значение 0. gpio -g mode 18 out и gpio -g write 18 1 также не имел эффекта

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

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

[email protected]:~/repo/lightswitch $ ./lightswitch 
LED is off
Turning on LED
[email protected]:~/repo/lightswitch $ ./lightswitch 
LED is off
Turning on LED

РЕДАКТИРОВАТЬ 3 . Кажется, что контакт 6 всегда имеет то же самое состояние, что имел контакт 26. Интересно, что gpio readall показывает его как ввод и имеет значение 0.

4 голоса | спросил Rumesh 22 Maypm17 2017, 15:39:35

2 ответа


2

Мне кажется, что проблема связана с проводкой. Вы не показываете это в этом вопросе, но изображение в указанной ссылке:

Не используйте это:

 плохая проводка

Это не будет работать надежно, если оно вообще работает. Во-первых, светодиод должен иметь резистор, ограничивающий ток. Значение 330 Ом должно работать для большинства светодиодов и обеспечивать достаточную яркость (около 10 мА тока).

Во-вторых, вы, по-видимому, подключаете штырь 12 (GPIO18) и контакт 38 (GPIO20) непосредственно друг к другу. Это почти наверняка ошибка.

Используйте это:

Вместо этого попробуйте следующее:

Pin 6 (Ground) ----/\/\/-----|<|----- Pin 38 (GPIO20)
                   330 R     LED

Затем попробуйте это из командной строки (bash):

# choose GPIO20
sudo echo "20" /sys/class/gpio/export
# make it an output pin
sudo echo "out" /sys/class/gpio/gpio20/direction
# turn the LED on
sudo echo "1" /sys/class/gpio/gpio20/value
# turn the LED off
sudo echo "0" /sys/class/gpio/gpio20/value

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

Как только все это сработает, вы можете перейти к использованию WiringPi или C или к тому, что вы используете для управления контактами. Чтобы использовать ваш пример Python, вы можете использовать это:

import RPi.GPIO as gp
gp.setmode(gp.BCM)
gp.setup(20,gp.OUT)
gp.output(20, 1)
print "LED should now be on"
ответил Edward 21 22017vEurope/Moscow11bEurope/MoscowTue, 21 Nov 2017 00:57:27 +0300 2017, 00:57:27
1

Это просто идея. Если у вас уже есть wiringPi, вы можете попробовать использовать C. Попробуйте что-то вроде этого:

#include <stdio.h>
#include <wiringPi.h>
const int modePin = 18; 
int main(void){
    wiringPiSetupGpio(); //initialize wiringPi
    pinMode(modePin, OUTPUT);
    digitalWrite(modePin, HIGH); 
    return 0;
}

Примечание. Я не тестировал этот код.

ответил Luis 7 J0000006Europe/Moscow 2017, 18:52:34

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132