Не хватает знаний для реализации проекта (Нужна помощь, платная и бесплатная)

Модератор: Модераторы разделов

Ответить
VladVol
Сообщения: 142
ОС: KUbuntu

Не хватает знаний для реализации проекта

Сообщение VladVol »

День добрый всем! Есть свой личный проект, который основан на Raspberry Pi, но не хватает знаний для его реализации, есть желание научится вот только не знаю с чего начинать, да и инфа в сети очень часто нацелена на знающих людей, я новичок, мне проще начинать учебу с простых примеров.
В чем хотелось бы разобраться:

1. Работа с I2C, для начала интересует работа с расширителем GPIO портов, как с этим работать? Т.е. логика, мне кажется, мне понятна, открываем устройство I2C, используя его адрес, как файл, далее пишем в него и читаем с него, но практике ничего не получается. Появляются вопросы, которые некому задать.

2. Нужно встроить в программу код, который будет выполнять захват RTSP потока (звук+видео) с IP камеры. Я так понял для это лучше использовать либо FFMPEG либо LIVE555, но как собственно это сделать, я не понял. Все примеры в сети очень "тяжелые", либо в коде есть ГУИ, которые мешает мне понять основное, либо куча доп. функций, которые, снова таки, мешают уловить суть, либо и то и другое. Простого примера вот такой консольной программки нет, ну или я не нашел.

3. Есть возможность читать события генерируемые IP камерой по протоколу ONVIF? Конкретно интересует детектор движения камеры, есть способ реализовать это через С++, думаю есть, через С/С++, можно реализовать все, нужно только знать как.

4. Это не относится к проекту и к программирования, но ответа на этот вопрос вообще нигде нет! Как настроить на CISCO 7911 возможность перезвонить на пропущенный номер и как убрать пропущенные номера с экрана не перезагружая телефон??

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

P.S. Если сам проект имеет значение, то я хочу сделать что-то типа системы охраны, т.к. работаю в этой сфере и мне это интересно

Заранее благодарю, всех кто потратил время и прочел это!
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Не хватает знаний для реализации проекта

Сообщение Bizdelnick »

1. Вроде бы уже обсуждали с примерами кода в Нужна помощь в работе с i2c интерфейсом. Если есть конкретные вопросы — задавайте.
2. Можно, помимо перечисленного, попробовать использовать gstreamer. Там единственное, что требуется, это написать правильный pipeline. В коде есть в качестве примера программа gst-launch, которую удобно использовать для отладки пайплайнов.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
VladVol
Сообщения: 142
ОС: KUbuntu

Re: Не хватает знаний для реализации проекта

Сообщение VladVol »

Bizdelnick писал(а):
12.08.2016 12:51
1. Вроде бы уже обсуждали с примерами кода в Нужна помощь в работе с i2c интерфейсом. Если есть конкретные вопросы — задавайте.
2. Можно, помимо перечисленного, попробовать использовать gstreamer. Там единственное, что требуется, это написать правильный pipeline. В коде есть в качестве примера программа gst-launch, которую удобно использовать для отладки пайплайнов.


Спасибо за ответ!
1. Да, тема по i2c поднималась, но примерно в то время когда я оставил ту тему, у меня украли ноут со всем рабочим материалом и экраном на i2c и расширителем портов gpio, было много матов, соплей, слез, вырванных волос и т.д. После стресса было решено возобновить проект, на это ушло время, т.к. сделано было не мало, собственно было не до i2c, спустя время я понял, что все таки нужно понять как с ним работать, но дабы не наступать на старые грабли, решил начать не с экрана, а с самого простого, т.е. тупо попытаться читать и писать через i2c. Грубо говоря, понять как заставить светодиод загореться и как читать 0 или 1 с конкретного gpio контакта на расширителе. В той теме больше поднят вопрос про работу с экраном, не знаю насколько работа с расширителем отличается от работы с экраном ибо нуб. Наверное вернусь в ту тему и по i2c буду там вопрошать))

2. Спасибо за подсказку, сейчас гляну что это и как его юзать.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Не хватает знаний для реализации проекта

Сообщение Bizdelnick »

Как работать с каким-то конкретным I2C-устройством — это тема совершенно отдельная от того, как работать с I2C вообще. Каким образом оно интерпретирует записанную в него информацию и что отдаёт при чтении, надо смотреть в даташите этого устройства.
С расширителями GPIO, впрочем, обычно всё просто. Тот же PCF8574 каждый записанный в него байт (8 бит) напрямую использует для того, чтобы выставить на 8 своих портах высокий или низкий уровень. То есть если пишем, например, 0xF0 (11110000), то на портах с P0 по P3 будет низкий уровень (0), а с P4 по P7 — высокий (1).
Если же дальше через GPIO подключается какое-то ещё устройство типа HD44780, то что делать с ним — уже совершенно третий вопрос, и надо зарываться в его даташит…
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
VladVol
Сообщения: 142
ОС: KUbuntu

Re: Не хватает знаний для реализации проекта

Сообщение VladVol »

Bizdelnick писал(а):
13.08.2016 16:48
Как работать с каким-то конкретным I2C-устройством — это тема совершенно отдельная от того, как работать с I2C вообще. Каким образом оно интерпретирует записанную в него информацию и что отдаёт при чтении, надо смотреть в даташите этого устройства.
С расширителями GPIO, впрочем, обычно всё просто. Тот же PCF8574 каждый записанный в него байт (8 бит) напрямую использует для того, чтобы выставить на 8 своих портах высокий или низкий уровень. То есть если пишем, например, 0xF0 (11110000), то на портах с P0 по P3 будет низкий уровень (0), а с P4 по P7 — высокий (1).
Если же дальше через GPIO подключается какое-то ещё устройство типа HD44780, то что делать с ним — уже совершенно третий вопрос, и надо зарываться в его даташит…


Спасибо за ответ! Т.е. если разбить алгоритм работы с I2C на пункты, получится что-то типа:
1. Узнать адрес устройства
2. Открываем это устройство
3. Устанавливаем пины в нужное нам положение, т.е. либо in либо out ?
4. И только теперь читаем?
5. Статус портов можно читать только все вместе, т.е. прочитать 1й и 5й - нельзя, читаем байт и разбираем его по битам, соответственно 0 не активен, 1 - активен (если речь идет про входящий сигнал)

Если говорить, про
каждый записанный в него байт (8 бит) напрямую использует для того, чтобы выставить на 8 своих портах высокий или низкий уровень. То есть если пишем, например, 0xF0 (11110000), то на портах с P0 по P3 будет низкий уровень (0), а с P4 по P7 — высокий (1).

получается, что первый байт, как бы это сказать, управляет первыми 8 пинами/портами, а если у меня их 16, то второй байт управляет вторыми 8-ю портами? А как тогда устройство понимает где какой, какой первый, какой второй?

Вот например, я отправляю 0хF0, т.е. с P0 по P3 будет 0, а с P4 по P7 — 1, затем снова отправляю 0хF0, будет ли в таком случае порты с P8 по P12 будет 0, а с P13 по P15 — 1 ? И что будет если я отправлю третий раз опять таки 0хF0, как это будет интерпретировано?

Заранее извиняюсь, если эти вопросы глупые.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Не хватает знаний для реализации проекта

Сообщение Bizdelnick »

VladVol писал(а):
16.08.2016 14:40
Т.е. если разбить алгоритм работы с I2C на пункты, получится что-то типа:
1. Узнать адрес устройства
2. Открываем это устройство
3. Устанавливаем пины в нужное нам положение, т.е. либо in либо out ?
4. И только теперь читаем?
5. Статус портов можно читать только все вместе, т.е. прочитать 1й и 5й - нельзя, читаем байт и разбираем его по битам, соответственно 0 не активен, 1 - активен (если речь идет про входящий сигнал)

Если рассматривать алгоритм работы с I2C, то он заканчивается после пункта 2. Что делать дальше — зависит от конкретного устройства.

VladVol писал(а):
16.08.2016 14:40
получается, что первый байт, как бы это сказать, управляет первыми 8 пинами/портами, а если у меня их 16, то второй байт управляет вторыми 8-ю портами?

Не знаю. Читайте даташит.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
IMB
Сообщения: 2559
ОС: Debian

Re: Не хватает знаний для реализации проекта

Сообщение IMB »

Если у Вас проблемы при работе с устройством по протоколу I2C, то может помочь включение отладки I2C в linux, после этого в dmesg Вы получите полный дамп обмена.
Спасибо сказали:
VladVol
Сообщения: 142
ОС: KUbuntu

Re: Не хватает знаний для реализации проекта

Сообщение VladVol »

IMB писал(а):
16.08.2016 16:02
Если у Вас проблемы при работе с устройством по протоколу I2C, то может помочь включение отладки I2C в linux, после этого в dmesg Вы получите полный дамп обмена.

Ну проблема больше не с I2C, а с пониманием как с ним работать, но спасибо за совет, думаю он будет полезен!!
Спасибо сказали:
VladVol
Сообщения: 142
ОС: KUbuntu

Re: Не хватает знаний для реализации проекта

Сообщение VladVol »


Спасибо за ссылку
Спасибо сказали:
VladVol
Сообщения: 142
ОС: KUbuntu

Re: Не хватает знаний для реализации проекта

Сообщение VladVol »

И снова здравствуйте! Подскажите, вроде бы получилось у меня понять как общаться с чудо штукой (расширитель gpio портов) по I2C. Пока получилось только писать, включить свтодиод на конкретном порту(контакте), но не могу понять как читать. Скажу иначе, читать вроде получается, но что прочитано понять не реально, на экран выводятся непонятные символы. Читаю в массив unsigned char, какие-то данные получаю, но как их отобразить в читабельном виде? Желательно в двоичном виде.

Попытка сделать что-то типа:

Код: Выделить всё

    std::ostringstream os;
    os << std::hex << std::setw(2u) << std::setfill('0') << buff;
    s = os.str();

не дала результатов. Кто может, объясните нубу, что делать с полученной инфой.

Спасибо!
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Не хватает знаний для реализации проекта

Сообщение Bizdelnick »

VladVol
Так что за железка-то? Ваш вопрос из серии «как понять, что мне говорит иностранец». Фиг его знает, на каком языке он пытается с Вами объясниться.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Не хватает знаний для реализации проекта

Сообщение NickLion »

Указатель на символ воспринимается как строка и выводится на экран, нужно обработать посимвольно, например, циклом:

Код: Выделить всё

    std::ostringstream os;
    for (int i = 0; i < n; i++) {
        os << std::hex << std::setw(2u) << std::setfill('0') << (int)buf[i] << ' ';
    }
    std::cout << os.str();
Спасибо сказали:
VladVol
Сообщения: 142
ОС: KUbuntu

Re: Не хватает знаний для реализации проекта

Сообщение VladVol »

NickLion писал(а):
28.08.2016 21:08
Указатель на символ воспринимается как строка и выводится на экран, нужно обработать посимвольно, например, циклом:

Код: Выделить всё

    std::ostringstream os;
    for (int i = 0; i < n; i++) {
        os << std::hex << std::setw(2u) << std::setfill('0') << (int)buf[i] << ' ';
    }
    std::cout << os.str();


Спасибо, железяка - расширитель портов gpio на чипе pca9555
Спасибо сказали:
VladVol
Сообщения: 142
ОС: KUbuntu

Re: Не хватает знаний для реализации проекта

Сообщение VladVol »

NickLion писал(а):
28.08.2016 21:08
Указатель на символ воспринимается как строка и выводится на экран, нужно обработать посимвольно, например, циклом:

Код: Выделить всё

    std::ostringstream os;
    for (int i = 0; i < n; i++) {
        os << std::hex << std::setw(2u) << std::setfill('0') << (int)buf[i] << ' ';
    }
    std::cout << os.str();

Ура! Спасибо! Это то, что нужно! А то я пытаюсь понять получается у меня или нет, а вижу только непонятные символы
Спасибо сказали:
Ответить