nRF24L01+ пользовательский блока на Си

Создаем свой блок. Вопросы, помощь знатоков.
Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

nRF24L01+ пользовательский блока на Си

#1

Сообщение Слимпер » 01.02.2016{, 20:40}

описание
Есть два типа блоков Клиент и Сервер.
Сервер находится в режиме ожидания информации от клиентов. А также по импульсу на входе query посылает данные Клиенту.

Клиент может оправлять данные Серверу в следующих режимах:
1. Через заданный в настройках интервал.
2. В ответ на запрос от сервера.
3. По импульсу на входе Send.
Имеется два основных режима работы:

- Есть один Сервер, который посылает данные Клиентам, а те в свою очередь, в ответ отправляют Серверу свой набор данных. Двухсторонний обмен данными.
- Сервер просто слушает, а Клиенты сами отсылают ему данные.

Сейчас существует два вида блоков:
1. Для передачи 6 переменных типа INT.
2. Для передачи строки (тип String) длинной 26 символов.

Описанное выше означает, что за одну посылку можно отправить именно столько данных, но если передавать их последовательно, то количество данных для передачи не ограничено.

Блок позволяет настраивать :
- Канал передачи (рабочая частота)
- Мощность передатчика
- Скорость передачи данных
Подробнее в описании модуля.

В версии 1.0
Данные на выходах блока сохраняются до прихода новых .
В версии 1.1
Доработка произведена по просьбе пользователя zikkgaz24.
-Данные на выходах могут сбрасываться в ноль по истечению заданного в настойках времени.
-Добавлен выход прихода новых данных (New_data), на который выдается одиночный импульс.
Подключение
SCK (Serial ClocK) — тактирование (синхронизация). ( Arduino UNO D13 | Arduino Mega D52)
MOSI / MI (Master Out Slave In) — вход данных. ( Arduino UNO D11 | Arduino Mega D51)
MISO / MO (Master In Slave Out) — выход данных. ( Arduino UNO D12 | Arduino Mega D50)
CE/SS - Выбор ведомого на шине SPI из нескольких устройств.
SCN - выбор режима приема/передача , фактически тот же CE.
IRQ - выход прерывания, чаще всего не используется. Необходим для немедленной реакции микроконтроллера при приеме нового пакета данных.
GND - земля, масса, минусовая шина.
Vcc -питание модуля 3.3в. Для надежной работы параллельно питанию как можно ближе к радиомодулю рекомендуется подключить электролитический конденсатор не менее 100мкф , а так же керамический на 0.1 мкф.

Попробовал написать блок для с работы nRF24L01 +.
В Си я знаю мало, по сему код получился может и не самый оптимальный.

Идея сделать клиент и сервер.
Клиент отсылает данные по времени или по запросу от сервера.
Сервер опрашивает клиенты или просто получает данные от клиентов.
Так же возможность передачи данных от сервера клиенту.

Если будет возможность и время возможны доработки блоков.

Интересные ссылки по этим модулям:
Описание радиомодуля nRF24L01+
Тест дальности связи NRF24L01+
NRF24L01 - Arduino
NRF24L01 2.4 ГГц радио/беспроводные передатчики и Arduino

скачать

Аватара пользователя
Amator
Рядовой
Сообщения: 23
Зарегистрирован: 11.12.2015{, 12:32}
Репутация: 0
Откуда: Украина г.Краматорск

nRF24L01+ пользовательский блока на Си

#2

Сообщение Amator » 02.02.2016{, 21:08}

Скажите пожалуйста куда закинуть библиотеку?

Добавлено (02.02.2016, 21:08)
---------------------------------------------
Скажите пожалуйста куда закинуть библиотеку?

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

nRF24L01+ пользовательский блока на Си

#3

Сообщение Слимпер » 02.02.2016{, 21:21}

Amator писал(а):Скажите пожалуйста куда закинуть библиотеку?
Надо архив распаковать в *\Flprog\ide\libraries\

У меня файлы библиотеки лежать здесь:
c:\Program Files (x86)\Flprog\ide\libraries\RF24-master\

Аватара пользователя
Amator
Рядовой
Сообщения: 23
Зарегистрирован: 11.12.2015{, 12:32}
Репутация: 0
Откуда: Украина г.Краматорск

nRF24L01+ пользовательский блока на Си

#4

Сообщение Amator » 02.02.2016{, 21:29}

Спасибо! Все работает! Скажите а можно логическую 0 или 1 посылать?
Мне в проекте нужно включать и выключать удаленно котел.

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

nRF24L01+ пользовательский блока на Си

#5

Сообщение Слимпер » 03.02.2016{, 14:59}

Amator писал(а):Мне в проекте нужно включать и выключать удаленно котел.
Ну блок конечно можно и переделать и под другой набор данных общий объём до  32 байта в одной посылки.

Но по мне более универсально использовать числа или строку.

В одно число типа INT можно 16 бит зашифровать, т.е. 16 состояний 0и1

Делается это с помощью блоков запись и чтения бит.
Для себя я раньше делал пользовательские блоки на FBD, для шифрования регистров
Вложения
0367738.rar
(29.75 КБ) 169 скачиваний

Evgesha
Лейтенант
Сообщения: 525
Зарегистрирован: 29.10.2015{, 09:57}
Репутация: 20
Откуда: Kazakhstan
Имя: Evgesha

nRF24L01+ пользовательский блока на Си

#6

Сообщение Evgesha » 03.02.2016{, 16:30}

Слимпер, спасибо большое!!! желательно бы разместить в раздел "блоки пользователей", если будет свободное время.
ПОМОЩЬ ПРОЕКТУ FLPROG:
http://flprog.ru/pomoshh-proektu/

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

nRF24L01+ пользовательский блока на Си

#7

Сообщение Слимпер » 03.02.2016{, 17:23}

Evgesha писал(а):желательно бы разместить в раздел "блоки пользователей", если будет свободное время.
Думал об этом, но сперва хотел услышать комментарии и возможно советы по улучшению блоков. Так что пока подожду маленько.

Evgesha
Лейтенант
Сообщения: 525
Зарегистрирован: 29.10.2015{, 09:57}
Репутация: 20
Откуда: Kazakhstan
Имя: Evgesha

nRF24L01+ пользовательский блока на Си

#8

Сообщение Evgesha » 03.02.2016{, 17:48}

Слимпер, не могли бы пару примеров выложить с вашими блоками записи чтения бит, как реализуются в программе? спасибо
ПОМОЩЬ ПРОЕКТУ FLPROG:
http://flprog.ru/pomoshh-proektu/

Аватара пользователя
Сергей
Лейтенант
Сообщения: 578
Зарегистрирован: 31.08.2015{, 15:06}
Репутация: 6
Имя: Сергей
Контактная информация:

nRF24L01+ пользовательский блока на Си

#9

Сообщение Сергей » 03.02.2016{, 20:53}

Ребят, сначала тестим блоки, потом перемещаем в "блоки пользователей". Что бы там были отработанные и проверенные блоки.

Schlosser
Рядовой
Сообщения: 11
Зарегистрирован: 08.09.2015{, 08:45}
Репутация: 0

nRF24L01+ пользовательский блока на Си

#10

Сообщение Schlosser » 03.02.2016{, 22:47}

Вчера что то в попыхах нажал, что сообщение пропало...ну да ладно. Пробовал подключить NRF24L01+PA+LNA, на мониторе сом порта видно что передатчик передает счет импульсов, а вот на мониторе приемника появляется каракуля.
Последний раз редактировалось Schlosser 04.02.2016{, 08:25}, всего редактировалось 1 раз.

Аватара пользователя
Skull
Лейтенант
Сообщения: 424
Зарегистрирован: 08.09.2015{, 16:18}
Репутация: 4
Откуда: Мариуполь

nRF24L01+ пользовательский блока на Си

#11

Сообщение Skull » 04.02.2016{, 01:58}

Хм... у меня не пошло....
Но у меня 24l01+PA+LNA
PS на обычных- тоже. 
А можно схему подключения выложить на примеры в первом сообщении ?
Последний раз редактировалось Skull 04.02.2016{, 02:03}, всего редактировалось 1 раз.

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

nRF24L01+ пользовательский блока на Си

#12

Сообщение Слимпер » 04.02.2016{, 14:42}

Skull писал(а):А можно схему подключения выложить на примеры в первом сообщении ?
4274614.png
0723505.jpg
Подключение nRF24L01+ к Arduino

Таблица подключения радиомодуля к платам Arduino:

Передатчик       Приемник
Arduino UNO      Arduino Mega
SCK        13        52
MOSI       11       51 
MISO       12       50
CSN        10       10
CE/SS      9        9

Выводы СЕ и CSN могут быть назначены любые свободные (в настройках блока выставляются)

Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

nRF24L01+ пользовательский блока на Си

#13

Сообщение Max » 04.02.2016{, 20:06}

А значения выводов на самих блоках прокомментировать можно? Что к ним можно подключать и для чего они.

Попытался простой проект сделать для передачи температуры. Не компилирует, ошибка:
pr5.ino:1:18: fatal error: RF24.h: No such file or directory
compilation terminated.
Ошибка компиляции.
Последний раз редактировалось Max 04.02.2016{, 20:07}, всего редактировалось 1 раз.

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

nRF24L01+ пользовательский блока на Си

#14

Сообщение Слимпер » 04.02.2016{, 20:12}

AmatorAmator
Evgesha писал(а):Слимпер, не могли бы пару примеров выложить с вашими блоками записи чтения бит, как реализуются в программе?
Примеры выкладывать смыла не вижу.
А вот суть попробую объяснить.
Например нам надо передать несколько дискретных состояний берём и делаем вот так
0273869.png
 
 Мы как бы раскалдываем биты по разным ячейкам. 

Дальше любым доступным средством связи (com, RS-485 Modbus, nRF24L01+ и др.) передаём Регистр в другой контроллер, а там уже расшифровываем.
1158201.png
 
А здесь достаём из этих ячеек.

Главное чтобы совпадали названия входов и выходов (в какую ячейку положили от туда надо и брать).

Не знаю как по другому объяснить.

Добавлено (04.02.2016, 20:12)
---------------------------------------------
Max писал(а):А значения выводов на самих блоках прокомментировать можно? Что к ним можно подключать и для чего они.Попытался простой проект сделать для передачи температуры. Не компилирует, ошибка:pr5.ino:1:18: fatal error: RF24.h: No such file or directorycompilation terminated.Ошибка компиляции.
Так в описании блоков все входа выхода расписаны.

Можно ваш проект глянуть, что там 

 No such file or directorycompilation terminated.

Хотя похоже у вас библиотека не подключилась. Вы ее руками добавляли в папку *\Flprog\ide\libraries\  ?

Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

nRF24L01+ пользовательский блока на Си

#15

Сообщение Max » 04.02.2016{, 20:55}

Да, библиотека не подгружалась. Переустановил, стало компилироваться. Но сейчас сам FLProg без предупреждения стал закрываться.... Не пойму почему. Попытался добавить дисплей и оп, закрылась программа...
Последний раз редактировалось Max 04.02.2016{, 20:56}, всего редактировалось 1 раз.

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

nRF24L01+ пользовательский блока на Си

#16

Сообщение Слимпер » 04.02.2016{, 21:10}

Это есть в описании блоков, но продублировал и суда.
Описание блоков:

Передачи 6 переменных int:

Клиент:
СпойлерПоказать
Параметр
identifier - Номер клиента
Channe - Номер канала: Нулевой канал начинается с 2400мгц и далее с шагом 1 мгц, например 70 канал находится соответственно на 2470мгц. При установке скорости 2мгц занимается ширина двух каналов..
Rate - Скорость RF24_250KBPS на nRF24L01 (без +) неработает. Меньше скорость, выше чувствительность приемника.
mode - Выбор режима работы: 0 - оправка данных через заданый интервал, 1 - ответ на запрос сервера, 2 - по входу Send

Входа:
Send - Послать строку. По переднему фронту отсылает данные на сервер
Nomer_I - Номер блока данных. Если необходимо предать больше чисел можно шифроваться их группы.
in1-in6 - любые числа которые необходимо передать клиенту.

Выхода:
Nomer_O - Номер блока данных. Если необходимо предать больше чисел можно шифровать их группы.
out1-out6 - любые числа которые получение от клиента.
NTransfer - Номер отправленого набора данных поступившего от сервера. Для контроля потереных данных
Сервер:
СпойлерПоказать
Параметры
Channe - Номер канала: Нулевой канал начинается с 2400мгц и далее с шагом 1 мгц, например 70 канал находится соответственно на 2470мгц. При установке скорости 2мгц занимается ширина двух каналов..
Rate - Скорость RF24_250KBPS на nRF24L01 (без +) неработает. Меньше скорость, выше чувствительность приемника.

Входа:
query - Вход опрос клиента . По переднему фронту отсылает запрос клиенту, с
Client - Номер клиента для запроса данных . При отправке клиенту будет указан запросе будет укзан номер клиента к которому обращаются
Nomer_I - Номер блока данных. Если необходимо предать больше чисел можно шифроваться их группы.
in1-in6 - любые числа которые необходимо передать клиенту.

Выхода:
Clients - Номер клиента передавшего данные .
Nomer_O - Номер блока данных. Если необходимо предать больше чисел можно шифровать их группы.
out1-out6 - любые числа которые получение от клиента.
NTransfer - Номер отправленного набора данных поступившего от клиента. Для контроля потерянных данных.
Добавлено (04.02.2016, 20:58)
---------------------------------------------
Передача строки длиной до 26 символов

Клиент
СпойлерПоказать
Параметры
identifier - Номер клиента
Channe - Номер канала: Нулевой канал начинается с 2400мгц и далее с шагом 1 мгц, например 70 канал находится соответственно на 2470мгц. При установке скорости 2мгц занимается ширина двух каналов..
Rate - Скорость RF24_250KBPS на nRF24L01 (без +) не работает. Меньше скорость, выше чувствительность приёмника.
mode - Выбор режима работы: 0 - оправка данных через заданный интервал, 1 - ответ на запрос сервера, 2 - по входу Send

Входа:
Send - Послать строку. По переднему фронту отсылает данные на сервер
Str_I - строка с данными передаваемая серверу. (макс длинна 26 символов, остальные отбрасываются)

Выхода:
Str_O - строка с данными полученная с серверу.
NTransfer - Номер отправленного набора данных поступившего от сервера. Для контроля потерянных данных
Сервер
СпойлерПоказать
Параметры
Channe - Номер канала: Нулевой канал начинается с 2400мгц и далее с шагом 1 мгц, например 70 канал находится соответственно на 2470мгц. При установке скорости 2мгц занимается ширина двух каналов..
Rate - Скорость RF24_250KBPS на nRF24L01 (без +) не работает. Меньше скорость, выше чувствительность приемника.

Входа:
query - Вход опрос клиента . По переднему фронту отсылает запрос клиенту
Client - Номер клиента для запроса данных . При отправке клиенту будет указан запросе будет укзан номер клиента к которому обращаются
Str_I - строка с данными передаваемая клиенту. (макс длинна 26 символов, отальные отбрасываются)

Выхода:
Clients - Номер клиента передавшего данные .
Str_O - строка с данными полученая от клиента.
NTransfer - Номер отправленного набора данных поступившего от клиента. Для контроля потерянных данных.
Добавлено (04.02.2016, 21:10)
---------------------------------------------
Max писал(а):Да, библиотека не подгружалась. Переустановил, стало компилироваться. Но сейчас сам FLProg без предупреждения стал закрываться.... Не пойму почему. Попытался добавить дисплей и оп, закрылась программа...
Вы что сам FLProg переставили? Хотя это не повод вылетать.
Я то предлагал в в паке библиотека (*\Flprog\ide\libraries\) добавить из архива в первом сообщении RF24-master.
Так как у меня почему то  библиотека не грузится а появляется пустая папка.

А портабельную версию пробовали?
Последний раз редактировалось Слимпер 04.02.2016{, 21:15}, всего редактировалось 1 раз.

Evgesha
Лейтенант
Сообщения: 525
Зарегистрирован: 29.10.2015{, 09:57}
Репутация: 20
Откуда: Kazakhstan
Имя: Evgesha

nRF24L01+ пользовательский блока на Си

#17

Сообщение Evgesha » 05.02.2016{, 15:18}

спасибо, понял как шифровать.
по поводу вылетания 
http://forum.flprogwiki.ru/viewtopic.php?f=18&t=640
ПОМОЩЬ ПРОЕКТУ FLPROG:
http://flprog.ru/pomoshh-proektu/

Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

nRF24L01+ пользовательский блока на Си

#18

Сообщение Max » 05.02.2016{, 19:58}

Вот пытаюсь создать простой проект. Передачу температуры с датчика DS18 на блок NRF и далее принимаю на сервере и вывожу на экран.

Уже замучился с вылетами программы при попытке изменения некоторых параметров этого блока.

Может разработчик блока сделает правильный пример по моему описанному выше. Для наглядности.
Вообще, какие входы и выходы можно оставлять не подключенными, а какие надо обязательно подключать, напр. к переменным.

Слимпер
Майор
Сообщения: 1009
Зарегистрирован: 06.09.2015{, 16:56}
Репутация: 27
Откуда: Новосибирск

nRF24L01+ пользовательский блока на Си

#19

Сообщение Слимпер » 05.02.2016{, 20:36}

Max писал(а):Уже замучился с вылетами программы при попытке изменения некоторых параметров этого блока.
Странно, по чему у вас так, у меня не разу не падало.
Max писал(а):Вообще, какие входы и выходы можно оставлять не подключенными, а какие надо обязательно подключать, напр. к переменным.
Клиент:
В клиенте свободными можно оставить любые входа.

Но в зависимости от настройки параметра mode могут быть варианты:
mode=0
Данные будут отправляется автоматически с интервалом timesend
Вход Send можно не подключать
mode=1Данные будут отправляется только в том случаи если сервер будет посылать запросы.
Вход Send можно не подключать.
mode=2
Данные будут отправляется только по переднему фронту сигнала на входе Send.

Сервер:
У сервера свободными можно оставлять входа Nomer_I, in1-in6 (Str_I)

Если на клиенте был выставлен режим опроса сервером (mode=1), тогда на сервере обязательно подключать входа
Clients - нужно указать тот же номер, что и в настройка клиента (identifier)
query - необходимо подавать импульсы с периодом с которым хотите опрашивать клиента.

Параметры Channe - Номер канала, Rate - Скорость и на клиенте и на сервере должны быть одинаковы.
Max писал(а):Может разработчик блока сделает правильный пример по моему описанному выше. Для наглядности.
Лучше пришлите ваш не рабочий вариант, я его поправлю, чтобы не гадать куда что у вас подключено. И напишите какой режим связи вам нужен.
Последний раз редактировалось Слимпер 05.02.2016{, 20:37}, всего редактировалось 1 раз.

Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

nRF24L01+ пользовательский блока на Си

#20

Сообщение Max » 05.02.2016{, 20:46}

Вот. У меня стала просто вылетать прога при изменении чего либо. Как то не очень системно стало происходить. В баг-трекере отписался. Модули NRF  стандартные, обе Ардуины UNO.

Режим - непрерывная передача, или раз в 1 сек.

Клиент
Сервер
Последний раз редактировалось Max 05.02.2016{, 21:00}, всего редактировалось 1 раз.

Ответить

Вернуться в «Разработка пользовательских блоков»