Страница 1 из 23

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

Добавлено: 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

скачать

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

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

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

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

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

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

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

Добавлено: 02.02.2016{, 21:29}
Amator
Спасибо! Все работает! Скажите а можно логическую 0 или 1 посылать?
Мне в проекте нужно включать и выключать удаленно котел.

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

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

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

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

Делается это с помощью блоков запись и чтения бит.
Для себя я раньше делал пользовательские блоки на FBD, для шифрования регистров

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

Добавлено: 03.02.2016{, 16:30}
Evgesha
Слимпер, спасибо большое!!! желательно бы разместить в раздел "блоки пользователей", если будет свободное время.

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

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

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

Добавлено: 03.02.2016{, 17:48}
Evgesha
Слимпер, не могли бы пару примеров выложить с вашими блоками записи чтения бит, как реализуются в программе? спасибо

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

Добавлено: 03.02.2016{, 20:53}
Сергей
Ребят, сначала тестим блоки, потом перемещаем в "блоки пользователей". Что бы там были отработанные и проверенные блоки.

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

Добавлено: 03.02.2016{, 22:47}
Schlosser
Вчера что то в попыхах нажал, что сообщение пропало...ну да ладно. Пробовал подключить NRF24L01+PA+LNA, на мониторе сом порта видно что передатчик передает счет импульсов, а вот на мониторе приемника появляется каракуля.

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

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

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

Добавлено: 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 могут быть назначены любые свободные (в настройках блока выставляются)

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

Добавлено: 04.02.2016{, 20:06}
Max
А значения выводов на самих блоках прокомментировать можно? Что к ним можно подключать и для чего они.

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

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

Добавлено: 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\  ?

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

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

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

Добавлено: 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.
Так как у меня почему то  библиотека не грузится а появляется пустая папка.

А портабельную версию пробовали?

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

Добавлено: 05.02.2016{, 15:18}
Evgesha
спасибо, понял как шифровать.
по поводу вылетания 
http://forum.flprogwiki.ru/viewtopic.php?f=18&t=640

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

Добавлено: 05.02.2016{, 19:58}
Max
Вот пытаюсь создать простой проект. Передачу температуры с датчика DS18 на блок NRF и далее принимаю на сервере и вывожу на экран.

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

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

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

Добавлено: 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 писал(а):Может разработчик блока сделает правильный пример по моему описанному выше. Для наглядности.
Лучше пришлите ваш не рабочий вариант, я его поправлю, чтобы не гадать куда что у вас подключено. И напишите какой режим связи вам нужен.

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

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

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

Клиент
Сервер