![]() |
![]() |
#41 | |
Senior Member
Регистрация: 19.09.2014
Сообщений: 220
Вес репутации: 0 ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
P.S С компиляцией разобрался, осталось написать драйвер. Последний раз редактировалось khseal; 26.04.2015 в 22:07. |
|
![]() |
![]() |
![]() |
#42 | |
Senior Member
Регистрация: 19.09.2014
Сообщений: 220
Вес репутации: 0 ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
Драйвер приема данных через gpio для ядра написан, но реализация пока оставляет желать лучшего. Купил роутер программисту, который занимается именно написанием этого драйвера, так дело пойдет быстрее. |
|
![]() |
![]() |
![]() |
#43 |
Member
Регистрация: 20.11.2013
Адрес: Брянск
Сообщений: 57
Вес репутации: 0 ![]() |
![]()
Сигнал от передатчика погодой станции - OOK модуляция. С такими сигналами должен работать чип CC1101 и ему подобные. Но там полсотни конфигурационных регистров и SPI интерфейс. И еще там можно устанавливать полосу пропускания приемного тракта, до 800 кГц. Думаю, что китайские схемы генераторов не термостабилизированы и могут возникнуть проблемы.
|
![]() |
![]() |
![]() |
#44 | |
Senior Member
Регистрация: 19.09.2014
Сообщений: 220
Вес репутации: 0 ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
Проблема только в том, что питание организовать сложно без помех. Пока приходится питать приемник от отдельного аккумулятора. Это единственный минус всей конструкции. |
|
![]() |
![]() |
![]() |
#45 |
Senior Member
Регистрация: 19.09.2014
Сообщений: 220
Вес репутации: 0 ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
В итоге заказал еще один китайский приемник но уже с супергетеродином. Плюс у него есть встроенная функция стендбая.
Драйвер для ядра написан, буду завтра тестить. Хотя хочется в драйвере еще irq заюзать. |
![]() |
![]() |
![]() |
#46 |
Senior Member
Регистрация: 19.09.2014
Сообщений: 220
Вес репутации: 0 ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Приемник с супергетеродином без проблем работает от питания роутера.
Осталось допинать программиста, чтобы он дописал нормально софт для приемника. Сейчас в принципе все работает, но сделано это из говна и палок. |
![]() |
![]() |
![]() |
#47 | |
Senior Member
Регистрация: 19.09.2014
Сообщений: 220
Вес репутации: 0 ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Так программист мне и не дописал софтину для обработки данных до комфортного юзабельного состояние. Поэтому выкладываю исходники стабильной, но плохо юзабельной версии без драйвера, возможно кому-то пригодится.
Основные косяки, это отсутствие нормального дебаг режима для определения id датчика и невозможность изменения id датчика в программе через конфиг. По железу советую использовать приемник 433мгц с супергетеродином. http://www.ebay.com/itm/Super-hetero...item2a4a35465d Программа имеет конфиг который руками надо положить в /etc/ Вот примерное содержание рабочего конфига и расшифровка значений int.conf Номер gpio на котором висит датчик PIN 29 Задержка опроса гпио, чем больше тем меньше нагрузка, но данные менее точные. SEC 0 NSEC 120000 Буфер данных. MAXBUFF 100000 Длинна импульса в единицах. Т.е. если идет подряд две 11 или больше это считается за импульс. Количество зависит от скорости опроса. MINPULSE 2 Интервал между импульсами от 10 до 20 нолей. Т.е. есть такой сигнал 1100000000000011. Это считается логическим нулем. SHORT_MIN 10 SHORT_MAX 20 Интервал между импульсами логической единицы . LONG_MIN 20 LONG_MAX 35 Интервал с которого начинается передача с датчика, плюс этот интервал разделяет посылки. Всего посылок с этого датчик 4 штуки. Из них выбирается любая валидная если принялся правильно ID LONGER_MIN 50 LONGER_MAX 75 Включить или выключить логгирование. Пишет логи в /var/log/pulsepos.log Позиция импульсов. (Бесполезны лог) /var/log/raw.log Лог буфера, в котором возможно была посылка. LOGGER 0 В этой конструкции исходного кода проверяется id датчика int product(int n, int *pack) { int id[] = {0,0,0,1,0,1,1,1}; Т.е. посылка должна начинаться с этих битов тогда она будет валидна. Id моего датчика меняется после замены батареек. Основная проблема что после смены батареек нужно перекомпилировать данную программу ![]() Вот пример посылки из буфера Цитата:
Это у нас LONGER промежуток, он находится в начале передачи и между посылками. С него программа начинает анализировать данные. Дальше идет 1111101000000000001111. Одинокая единица это помеха. Это логический ноль т.е. SHORT промежуток. А 1111000000000000000000000000000001111 это LONG промежуток и логическая единица. В начале посылки должен формироваться ID в виде 00010111 тогда наша посылка становится валидной. К сожалению CRC датчика расшифровать не удалось поэтому его пришлось делать из гавна и грязи на bash скриптах. В итоге вывод программы выглядит так Items: 36 -> 000101110100011011010000011001111011 Temp 18.2 Hum 74 Если есть какие-то вопросы задавайте, постараюсь ответить. Последний раз редактировалось khseal; 22.09.2015 в 03:41. |
|
![]() |
![]() |
![]() |
#48 |
Senior Member
Регистрация: 19.09.2014
Сообщений: 220
Вес репутации: 0 ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Вот что получилось в итоге =)
http://kodabra.dyndns.org/stats/ |
![]() |
![]() |
![]() |
#49 |
Senior Member
Регистрация: 19.09.2014
Сообщений: 220
Вес репутации: 0 ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Как вариант, теперь с датчиков можно снимать данные SDR примеником, но он ест много оперативной памяти и грузит процессор на 50%
Последний раз редактировалось khseal; 12.12.2015 в 21:53. |
![]() |
![]() |
![]() |
#50 |
Senior Member
Регистрация: 19.09.2014
Сообщений: 220
Вес репутации: 0 ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Вот еще один человек сделал библиотеку для работы с беспроводными датчиками BL999 для Arduino
Вот ссылка https://github.com/sprilukin/lib_BL999 Его работа пригодится. |
![]() |
![]() |
![]() |
Здесь присутствуют: 2 (пользователей: 0 , гостей: 2) | |
|
|