GPIO для чайников (часть 6)
-
Еще раз про загрузку программ из графической оболочки.
Как я понял есть программы, которые необходимо запускать именно при работаещей графике. Я столкнулся с этим при экспериментах с радиолюбительской программой WSPR. Все попытки загрузить эту прогу без графической оболочки у меня провалились. Это видимо от незнания и непонимания, но тем не менее результат был достигнут и прога стала загружаться автономно, т.е. при включении питания RPI. И я не вижу ничего зазорного при таком подходе. Может кому и пригодится. -
Ну дак а я вас и не ругаю. Способ, который описал я, является стандартным способом автозапуска приложений в Линуксе. Это не моё изобретение. Почему он у вас не сработал, я ничего сказать не могу, т.к. тоже в Линуксе чайник и сам с ним разбираюсь потихоньку.
-
Х-сервер (который запускается при старте графической оболочки LXDE, либо другой) требуют программы, которые для отображения графики используют его API. Грубо говоря, если интерфейс этих программ выглядит в виде типичного окна со стандартными кнопочками, то разумеется, просто в терминале такая программа не заработает. Есть программы, которые с графикой работают напрямую. Им LXDE тоже ненужен. В основном это либо игрушки, либо всякие демки с красивыми визуальными эффектами. А есть программы с псевдографическим интерфейсом, это когда графика рисуется в терминале печатными символами. Им тоже LXDE без надобности.
-
ОК!
Будем работать над ошибками.
Мой респект Вам! -
Куда уж подробнее. И так всё разжёвано
-
Здравствуйте!
А не могли бы рассмотреть работу RPI и датчика температуры DS18B20? -
У меня нет такого датчика. Создайте тему в форуме. Не я, так кто-нить другой подскажет.
-
Привет всем!
По поводу кода возник следующий вопрос:
В какое место кода добавить write(); чтобы передать работающему дочернему процессу кнопку ENTER сразу после открытия станции? и как правильно передать нажатие этой кнопки? в ascii?
Пробую с другими плеерами ибо omx не установился на archlinux. -
в случае с mocp плеером можно запустить один раз в начале сервер
execlp("mocp", "mocp", "-S", NULL);
а затем каждую радиостанцию скармливать ему с параметром -l
вот только после запуска сервера программа завершает свою работу.
что тут можно придумать? -
У меня вылазят ошибки при компиляции
radio.c:32:1: warning: excess elements in scalar initializer [enabled by default] radio.c:32:1: warning: (near initialization for ‘station1’) [enabled by default] radio.c:33:1: warning: excess elements in scalar initializer [enabled by default] radio.c:33:1: warning: (near initialization for ‘station2’) [enabled by default] radio.c:34:1: warning: excess elements in scalar initializer [enabled by default] radio.c:34:1: warning: (near initialization for ‘station3’) [enabled by default] radio.c:35:1: warning: excess elements in scalar initializer [enabled by default] radio.c:35:1: warning: (near initialization for ‘station4’) [enabled by default] radio.c: In function ‘play_station’: radio.c:91:17: warning: passing argument 1 of ‘do_child’ from incompatible pointer type [enabled by default] radio.c:43:6: note: expected ‘char **’ but argument is of type ‘char *’ radio.c:92:17: warning: passing argument 1 of ‘do_child’ from incompatible pointer type [enabled by default] radio.c:43:6: note: expected ‘char **’ but argument is of type ‘char *’ radio.c:93:17: warning: passing argument 1 of ‘do_child’ from incompatible pointer type [enabled by default] radio.c:43:6: note: expected ‘char **’ but argument is of type ‘char *’ radio.c:94:17: warning: passing argument 1 of ‘do_child’ from incompatible pointer type [enabled by default] radio.c:43:6: note: expected ‘char **’ but argument is of type ‘char *’
в чем причина?
-
Спасибо за интересную и полезную статью! Хорошая статья и ее реализация! Только вот у меня не компилируется кнопка, а об этой программе вообще нет смысла говорить... надо разобраться с работой кнопки...
-
Код копирую - вставляю... и десяток ошибок при компиляции... ничего не пойму... как так может быть... что не так...
radio.c:32:1: warning: excess elements in scalar initializer [enabled by default] radio.c:32:1: warning: (near initialization for ‘station1’) [enabled by default] radio.c:33:1: warning: excess elements in scalar initializer [enabled by default] radio.c:33:1: warning: (near initialization for ‘station2’) [enabled by default] radio.c:34:1: warning: excess elements in scalar initializer [enabled by default] radio.c:34:1: warning: (near initialization for ‘station3’) [enabled by default] radio.c:35:1: warning: excess elements in scalar initializer [enabled by default] radio.c:35:1: warning: (near initialization for ‘station4’) [enabled by default] radio.c: In function ‘play_station’: radio.c:91:17: warning: passing argument 1 of ‘do_child’ from incompatible pointer type [enabled by default] radio.c:43:6: note: expected ‘char **’ but argument is of type ‘char *’ radio.c:92:17: warning: passing argument 1 of ‘do_child’ from incompatible pointer type [enabled by default] radio.c:43:6: note: expected ‘char **’ but argument is of type ‘char *’ radio.c:93:17: warning: passing argument 1 of ‘do_child’ from incompatible pointer type [enabled by default] radio.c:43:6: note: expected ‘char **’ but argument is of type ‘char *’ radio.c:94:17: warning: passing argument 1 of ‘do_child’ from incompatible pointer type [enabled by default] radio.c:43:6: note: expected ‘char **’ but argument is of type ‘char *’ /tmp/ccbV3SwR.o: In function `main': radio.c:(.text+0x1fc): undefined reference to `forkpty' /usr/local/lib/libbcm2835.a(bcm2835.o): In function `bcm2835_delayMicroseconds': /home/pi/myprog/bcm2835-1.17/src/bcm2835.c:364: undefined reference to `clock_gettime' /home/pi/myprog/bcm2835-1.17/src/bcm2835.c:374: undefined reference to `clock_gettime' collect2: ld returned 1 exit status
(((((((((((((((((((((
-
Здравствуйте все! Автор - ты лучший)) Сейчас пытаюсь добавить кнопок для работы omxplayer. Но выходит не очень. Проблемы с кнопкой "p" (то бишь, пауза). Срабатывает только один раз (а хотелось бы n раз), а включение опроса второй кнопки в цикл, само собой, не позволяет пройти основной программе (для работы "q"). Помогите, пожалуйста.
Может, нужно для опроса этой кнопки создать ещё один параллельный процесс? Как он тогда будет выглядить? -
После долгих изысканий я понял, что за ошибки выдает при компиляции. Строки
char *station1={"http://listen2.myradio24.com:9000/8304", NULL}; char *station2={"http://89.208.99.16:8088/zvezda_128", NULL}; char *station3={"http://imgradio.pro/MegaRadio", NULL}; char *station4={"http://imgradio.pro/RusHit", NULL};
Надо писать так
char *station1[]={"http://listen2.myradio24.com:9000/8304", NULL}; char *station2[]={"http://89.208.99.16:8088/zvezda_128", NULL}; char *station3[]={"http://imgradio.pro/MegaRadio", NULL}; char *station4[]={"http://imgradio.pro/RusHit", NULL};
Теперь процитирую автора: "Прячем наш RPI в изящную коробочку, выводим на панель нашу кнопочку, подключаем колонки и ставим на холодильник готовое устройство, наслаждаемся проделанной работой под музычку, играемую нашим RPI-интернет-радио."
-
Однако сделать так, чтобы программа автозапускалась у меня не получилось никаким образом. Скрипт написал (sudo /home/pi/Myprog/./radio) он рабочий и руками спокойно запускается. Поместил его в /etc/init.d. Сделал ссылку на него в /etc/rc.2 и так далее rc.5. Сделать так как написал блоггер под ником "rn6ljk" тоже не получилось. Прошу помощи. Дайте совет чайнику.
-
Ура ододел и все работает автоматом. Rn6ljk по твоей инструкции все работает. Сам я сначала недопонял. Просто надо класть в автостарт так сказать ярлык.
-
короче, кнопка для переключения даже не требуется, можно переключать аля сенсор: к P1_05 цепляем железную тарелку, и при каждом прикосновении станция переключается. Открытие сделано следующим образом: кнопки нет, хотел замкнуть не мытой вилкой, прикасаюсь к выводу P1_05 и видать заземляю его телом, канал переключается. ВСЕ
-
ЗЫ: кстати без вилки не работает, может вилка заземляет? попробую вилку в перчатках взять
-
вместо перчаток проканали 10 салфеток из ростикса, сложенные в четверо, между ними вилка, трогаю ей порт p1-05 -- работает-переключает. THOUCH RASPBERRY Pi XD
-
У автора опечатка, из-за этого автозапуск и не работает:
sudo update-rc.d autostart.sh defaults - в конце надо дописать s. Лично у меня из-за этого не работало.
Также при изменении файла autostart.sh, надо все время выполнять:sudo chmod 755 /etc/init.d/autostart.sh
Если у вас написано на python то нужно писать в файле:
export USER='pi' sudo python /home/и т.д. exit 0