Рикардо-Рейс
Ср 21 марта 2018 г., 13:26
привет!
В этом посте я постараюсь показать вам, как я создал простой пульт дистанционного управления (POC), который позволяет общаться в обоих направлениях, если вы заметите что -то не так, есть другой подход, которым вы хотели бы поделиться, или у вас есть какие -либо вопросы Что касается реализации, пожалуйста, опубликуйте, у меня, вероятно, есть чему поучиться на ней.
Практический проект, который я буду включать, это ровер дистанционное управление, с телеметрией, отправленной с Rover, к контролю, и от контроля на Rover будут указаны/путевые точки/GPS координаты для «Следуй за мной».. POC действительно включает в себя только общение, с некоторым базовым отображением обратной связи джойстика и управления светодиодом, используя компоненты, перечисленные здесь:
2x Maple Mini
2x NRF24L01
2x джойстик (Thumbsticks)
2x OLED -дисплей (SSD 1306)
1x ina219 (совершенно не требуется для этого конкретного проекта, но я поместил его на одну схему, может быть интересно посмотреть, что такое потребление)
Cuircuit довольно легко собрать, с обеих сторон я использовал одинаковые связи, за исключением INA219, так как у меня сейчас есть один:
OLED -дисплей - подключен к I2C1
INA219 - подключен к I2C1 (адрес отличается от OLED -дисплея, так что, не беспокойтесь)
NRF24L01 - подключен к SPI1 с: 3 - CE, 7 - CSN, 1 - IRQ
Джойстик - Z - 9, x - 10, y - 11 (в моем случае я переключил x на Y, так как ориентация моих джойстиков привела к этой ориентации)
Светодиод - ну, это на борту, PIN 33.
В этом посте я постараюсь показать вам, как я создал простой пульт дистанционного управления (POC), который позволяет общаться в обоих направлениях, если вы заметите что -то не так, есть другой подход, которым вы хотели бы поделиться, или у вас есть какие -либо вопросы Что касается реализации, пожалуйста, опубликуйте, у меня, вероятно, есть чему поучиться на ней.
Практический проект, который я буду включать, это ровер дистанционное управление, с телеметрией, отправленной с Rover, к контролю, и от контроля на Rover будут указаны/путевые точки/GPS координаты для «Следуй за мной».. POC действительно включает в себя только общение, с некоторым базовым отображением обратной связи джойстика и управления светодиодом, используя компоненты, перечисленные здесь:
2x Maple Mini
2x NRF24L01
2x джойстик (Thumbsticks)
2x OLED -дисплей (SSD 1306)
1x ina219 (совершенно не требуется для этого конкретного проекта, но я поместил его на одну схему, может быть интересно посмотреть, что такое потребление)
Cuircuit довольно легко собрать, с обеих сторон я использовал одинаковые связи, за исключением INA219, так как у меня сейчас есть один:
OLED -дисплей - подключен к I2C1
INA219 - подключен к I2C1 (адрес отличается от OLED -дисплея, так что, не беспокойтесь)
NRF24L01 - подключен к SPI1 с: 3 - CE, 7 - CSN, 1 - IRQ
Джойстик - Z - 9, x - 10, y - 11 (в моем случае я переключил x на Y, так как ориентация моих джойстиков привела к этой ориентации)
Светодиод - ну, это на борту, PIN 33.
- DSC_0004.JPG (108.08 киб) просмотрено 1125 раз
Zoomx
Ср 21 марта 2018 г. 13:36
Спасибо, что поделились!
Рикардо-Рейс
Ср 21 марта 2018 13:57
[Zoomx - Ср 21 марта 2018 г. 13:36] - Спасибо, что поделились!добро пожаловать
Стивестронг
Ср 21 марта 2018 г. 14:01
[Zoomx - Ср 21 марта 2018 г. 13:36] - Спасибо, что поделились!+1
Racemaniac
Ср 21 марта 2018 г. 14:45
[Стивестронг - Ср 21 марта 2018 г. 14:01] -+ ++1[Zoomx - Ср 21 марта 2018 г. 13:36] - Спасибо, что поделились!+1
Рикардо-Рейс
Чт 22 марта 2018 12:55
Интересно, если кто -нибудь из вас, ребята, использовал эти модули, видел какую -либо библиотеку для них, которая на самом деле реализует трубы, чтобы мы могли отправить более 32 баллов данных.. Модули, кажется, подчиняют 6 труб, и, если я не ошибаюсь, у Enrib Lib ничего нет в этом.
Mrburnette
Чт 22 марта 2018 г., 3:18
[Рикардо-Рейс - Чт 22 марта 2018 г. 12:55] - Интересно, если кто -нибудь из вас, ребята, использовал эти модули, видел какую -либо библиотеку для них, которая на самом деле реализует трубы, чтобы мы могли отправить более 32 баллов данных.. Модули, кажется, подчиняют 6 труб, и, если я не ошибаюсь, у Enrib Lib ничего нет в этом.Эти инструкции охватывают основы, я не знаю, сколько усилий потребуется, чтобы перенести это в STM32.
http: // www.Инструменты.com/id/nrf24l0 ... R-NetWork/
Поиск в Google показывает небольшие результаты. https: // www.Google.com/search?&q = arduin ... Ulti+трубы
Луча
Zoomx
Чт 22 марта 2018 г. 8:57 утра
[Рикардо-Рейс - Чт 22 марта 2018 г. 12:55] - Интересно, если кто -нибудь из вас, ребята, использовал эти модули, видел какую -либо библиотеку для них, которая на самом деле реализует трубы, чтобы мы могли отправить более 32 баллов данных.. Модули, кажется, подчиняют 6 труб, и, если я не ошибаюсь, у Enrib Lib ничего нет в этом.Среди библиотек, сделанных RF24 (это имя пользователя!) на GitHub для модулей NRF24L01 есть один RF24Audio, которые потоковые данные/аудио между двумя модулями. Я считаю, что это может быть полезно.
https: // github.com/nrf24/rf24audio
Другие библиотеки тоже интересны.
На форуме Arduino вместо этого есть стартовые примеры Post, сделанные Robin2
https: // форум.Ардуино.CC/INDEX.PHP?Тема = 421081.0
Рикардо-Рейс
Чт 22 марта 2018 г. 14:26
@mrbrunette, я был на этой первой ссылке бесчисленное количество раз.. Это, конечно же, поработает, но я искал либера. - Я знаю, что вы не заинтересованы в этом подходе, но это тот, который подходит для моих ограничений, так как я не могу создавать либера. может что -то для меня, чтобы поработать.
@zoomx, это вещи, которые я пробовал раньше с Arduino, в разных проектах, и да, супер интересные вещи.. Есть тонны крутых вещей, которые можно сделать с этими модулями.. В конце концов я вернемся к этим проектам для MM, если я заставлю его работать правильно..
Найдено здесь на форуме еще один подход к модулям RF24, в которой есть своего рода портированная и переименованная библиотека, которая может привести меня к чему -то..
Снова ложился спать очень поздно, сразу после того, как удалось прорезать код, используемый в этом посте ( ViewTopic.PHP?f = 15&t = 317&hilit = rf24&начало = 40 ) и заставить модули общаться в одну сторону.. Это многообещающе, так как LIB переносится из LIB NRF24, которую я знал и использовал раньше для Arduino. он также реализует трубы, которые будут очень полезны для этого проекта..
(Кстати, когда я говорю Project, это просто хобби -проекты, над которыми я работаю)
@zoomx, это вещи, которые я пробовал раньше с Arduino, в разных проектах, и да, супер интересные вещи.. Есть тонны крутых вещей, которые можно сделать с этими модулями.. В конце концов я вернемся к этим проектам для MM, если я заставлю его работать правильно..
Найдено здесь на форуме еще один подход к модулям RF24, в которой есть своего рода портированная и переименованная библиотека, которая может привести меня к чему -то..
Снова ложился спать очень поздно, сразу после того, как удалось прорезать код, используемый в этом посте ( ViewTopic.PHP?f = 15&t = 317&hilit = rf24&начало = 40 ) и заставить модули общаться в одну сторону.. Это многообещающе, так как LIB переносится из LIB NRF24, которую я знал и использовал раньше для Arduino. он также реализует трубы, которые будут очень полезны для этого проекта..
(Кстати, когда я говорю Project, это просто хобби -проекты, над которыми я работаю)
Рикардо-Рейс
Пт 23 марта 2018 г., 14:30
привет!
Обновление статуса: используя библиотеку, которая была связана в приведенном выше посте, я теперь могу общаться в обоих направлениях, используя трубы, в примере, который я собираюсь показать вам, я использую 3 трубы и одну программу для обрабатывать оба отправителя&приемник, для простоты, но как только он вырастет, я, вероятно, разделяю оба, чтобы избежать нагрузки бесполезного кода на каждом конце.
Одна вещь, которую я продолжал замечать, это то, что модули продолжают сбрасывать соединение, но я сузил это до двух вещей: конденсатор 100 UF между VCC/GND на модулях, и проводка - если я коснулся проводов, соединение восстанавливается и все работает хорошо.
На этот раз, на схемах, я решил использовать два джойстика, OLED и NRF24L01 на одном конце, и просто OLED и NRF24L01 на другом. все еще Maple Mini с обеих сторон.
Теперь код (не стесняйтесь добавлять предложения, если вы заметите, что я делаю что -то не так в нем - я бы очень признателен):
Обновление статуса: используя библиотеку, которая была связана в приведенном выше посте, я теперь могу общаться в обоих направлениях, используя трубы, в примере, который я собираюсь показать вам, я использую 3 трубы и одну программу для обрабатывать оба отправителя&приемник, для простоты, но как только он вырастет, я, вероятно, разделяю оба, чтобы избежать нагрузки бесполезного кода на каждом конце.
Одна вещь, которую я продолжал замечать, это то, что модули продолжают сбрасывать соединение, но я сузил это до двух вещей: конденсатор 100 UF между VCC/GND на модулях, и проводка - если я коснулся проводов, соединение восстанавливается и все работает хорошо.
На этот раз, на схемах, я решил использовать два джойстика, OLED и NRF24L01 на одном конце, и просто OLED и NRF24L01 на другом. все еще Maple Mini с обеих сторон.
Теперь код (не стесняйтесь добавлять предложения, если вы заметите, что я делаю что -то не так в нем - я бы очень признателен):
#include
#include
#include
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
const uint64_t pipes[3] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL, 0xF0F0F0F0D4LL };
RF24 radio(3, 7);
boolean isRC = true; // true for one end, false for the other - THIS MUST BE CHANGED OTHERWISE THEY'RE BOTH SET TO DO THE SAME!
// Structure for the joysticks
struct joystick {
int x;
int y;
bool z;
};
joystick right;
joystick left;
/**************************************************/
void setup(){
// zz pins from joysticks
pinMode(12, INPUT_PULLUP);
pinMode(13, INPUT_PULLUP);
// initialize display
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.display();
display.setTextColor(WHITE);
display.setTextSize(1);
// Set up radio module
radio.begin();
radio.setDataRate(RF24_1MBPS); // Both endpoints must have this set the same
radio.setAutoAck(false); // Either endpoint can set to false to disable ACKs
radio.setPALevel(RF24_PA_MAX); // Power amplifier level. Also LOW,MED,HIGH (default is HIGH)
radio.printDetails();
}
/**************************************************/
void handleRC(){
char test[32]="";
radio.openReadingPipe(1,pipes[2]);
radio.startListening();
if ( radio.available() ) {
radio.read(&test, sizeof(test));
}
radio.stopListening();
display.println("");
display.print("-> P1:"); display.print(sizeof(right));
display.print(" P2:"); display.println(sizeof(left));
right.x = analogRead(8);
right.y = analogRead(9);
right.z = digitalRead(12);
left.x = analogRead(10);
left.y = analogRead(11);
left.z = digitalRead(13);
radio.openWritingPipe(pipes[0]);
radio.write(&right, sizeof(right));
display.print("-> X:"); display.print(right.x);
display.print(" Y:"); display.print(right.y);
display.print(" Z:"); display.println(right.z);
radio.openWritingPipe(pipes[1]);
radio.write(&left, sizeof(left));
display.print("-> X:"); display.print(left.x);
display.print(" Y:"); display.print(left.y);
display.print(" Z:"); display.println(left.z);
display.print("<- P1:"); display.println(sizeof(test));
display.print("<- MSG:"); display.println(test);
radio.startListening();
}
/**************************************************/
void handleRover(){
radio.openReadingPipe(1,pipes[0]);
radio.openReadingPipe(2,pipes[1]);
radio.startListening();
if ( radio.available() ) {
radio.read(&right, sizeof(right));
radio.read(&left, sizeof(left));
display.println("");
display.print("<- P1:"); display.print(sizeof(right));
display.print(" P2:"); display.println(sizeof(left));
display.print("<- X:"); display.print(right.x);
display.print(" Y:"); display.print(right.y);
display.print(" Z:"); display.println(right.z);
display.print("<- X:"); display.print(left.x);
display.print(" Y:"); display.print(left.y);
display.print(" Z:"); display.println(left.z);
}
radio.stopListening();
char test[]="TEST!";
radio.openWritingPipe(pipes[2]);
radio.write(&test, sizeof(test));
display.print("-> P1:"); display.println(sizeof(test));
display.print("-> MSG:"); display.println(test);
radio.startListening();
}
/**************************************************/
void loop(){
display.clearDisplay();
display.setCursor(0,0);
display.print("This is the ");
if(isRC){
display.println("RC!");
handleRC();
}
else {
display.println("Rover!");
handleRover();
}
display.display();
}
Рикардо-Рейс
Пт 23 марта 2018 г. 14:35
[Рикардо-Рейс - Пт 23 марта 2018 г., 14:30] - привет!ой! Забыли упомянуть, но это легко заметить из кода - я также использую структуры для обработки данных джойстиков. очень полезно при написании/чтении данных в трубы..
Обновление статуса: используя библиотеку, которая была связана в приведенном выше посте, я теперь могу общаться в обоих направлениях, используя трубы, в примере, который я собираюсь показать вам, я использую 3 трубы и одну программу для обрабатывать оба отправителя&приемник, для простоты, но как только он вырастет, я, вероятно, разделяю оба, чтобы избежать нагрузки бесполезного кода на каждом конце.
Mrburnette
Пт 23 марта 2018 г., 16:04
Очень хорошая эволюция.
Я думаю, что вы можете недооценить свою способность автора библиотеки.
Луча
Я думаю, что вы можете недооценить свою способность автора библиотеки.
Луча
Рикардо-Рейс
Пт 23 марта 2018 г., 16:25
[Mrburnette - Пт 23 марта 2018 г., 16:04] - Очень хорошая эволюция.Спасибо, Рэй.
Я думаю, что вы можете недооценить свою способность автора библиотеки.
Луча
С наставничеством/руководством я был бы в порядке с этим.. Но самостоятельно, это как быть в темноте с фонаря.. Я вижу маленькие кусочки, но не ясно, что делать..
Интересно, есть ли более поздний порт.. Я вижу, что LIB продолжает получать обновления, но не уверен, что есть что -то для MM:
https: // github.com/nrf24/rf24
Документация здесь была хорошим руководством:
http: // tmrh20.GitHub.io/rf24/
Mrburnette
Пт 23 марта 2018 г., 16:29
[Рикардо-Рейс - Чт 22 марта 2018 г. 14:26] - @mrbrunette, я был на этой первой ссылке бесчисленное количество раз.. Это, конечно же, поработает, но я искал либера. - Я знаю, что вы не заинтересованы в этом подходе, но это тот, который подходит для моих ограничений, так как я не могу создавать либера. может что -то для меня, чтобы поработать.Я думаю, что мои «лайки и антипатии» совершенно не имеют отношения к хобби -проекту. Я думаю больше о разработке и кодировании от «основания» для потенциальных коммерческих проектов; Таким образом, избегая каких -либо проблем с лицензией и гарантируя, что библиотека обеспечивает чистые и четко понятные функции и наклоняется без большого «пуха."Тогда эта библиотека функций (ы) включена непосредственно в папку Sketch. Один теперь отделил код эскиза Arduino от сторонней библиотеки (IES). Это просто умно, так как ардуиноид всегда жалуется на обновление библиотек.
<...>
IMO, даже если вы используете стороннюю LIB в проекте хобби, библиотека должна быть поглощена в папке для изоляции для изоляции ... Эффективное создание снижения всего проекта в одном месте ... Очень простой в использовании Zip для архивирования папки проекта для целей списка и резервного копирования. Поскольку я публикую глупые маленькие проекты, это также отличный способ распространения кода, поскольку мне не нужно объяснять читателю, что они должны установить эту библиотеку или эту библиотечную версию и т. Д.
Луча
Рикардо-Рейс
Пт 23 марта 2018 г., 16:38
[Mrburnette - Пт 23 марта 2018 г. 16:29] - Я думаю, что мои «лайки и антипатии» совершенно не имеют отношения к хобби -проекту. Я думаю больше о разработке и кодировании от «основания» для потенциальных коммерческих проектов; Таким образом, избегая каких -либо проблем с лицензией и гарантируя, что библиотека обеспечивает чистые и четко понятные функции и наклоняется без большого «пуха."Тогда эта библиотека функций (ы) включена непосредственно в папку Sketch. Один теперь отделил код эскиза Arduino от сторонней библиотеки (IES). Это просто умно, так как ардуиноид всегда жалуется на обновление библиотек.Они уверены, что актуальны. Некоторые LIBS настолько наполнены таким большим количеством вещей, которые я даже не использую, и в этих случаях это, безусловно, имеет смысл (даже для меня) смотреть на то, что можно забрать, делая их чистыми и легче. Для меньших микрофонов иногда важно иметь возможность даже соответствовать коду в маленьком пространстве, которое у них есть (например, Arduino - OLED и GPS LIBS, и вы едва можете двигаться, чтобы сделать что -либо еще). Но для меня это была одна из причин попробовать ММ.
IMO, даже если вы используете стороннюю LIB в проекте хобби, библиотека должна быть поглощена в папке для изоляции для изоляции ... Эффективное создание снижения всего проекта в одном месте ... Очень простой в использовании Zip для архивирования папки проекта для целей списка и резервного копирования. Поскольку я публикую глупые маленькие проекты, это также отличный способ распространения кода, поскольку мне не нужно объяснять читателю, что они должны установить эту библиотеку или эту библиотечную версию и т. Д.
Идея сохранить молнию всего проекта+LIB очень полезна - долгое время использовала его. Даже есть некоторые из версий Alfa Arduino IDE, и это пригодится довольно много раз.
Mrburnette
Пт 23 марта 2018 г., 18:50
Просто для удовольствия от этого ... Я агрегировал эскиз NRF24L01, RF24_STM32, ADAFRIT_GFX, код ADAFRIT_SSD1306 и файлы GFXFONT в один многотатный проект Arduino. ZIP был слишком большой, чтобы загрузить, но изменения очень незначительные:
в основном для #include <библиотека.час> Просто переодеться в библиотеку #include ".час"
Например:
в основном для #include <библиотека.час> Просто переодеться в библиотеку #include ".час"
Например:
#include "RF24_STM32.h"
#include "Adafruit_SSD1306.h"
Рикардо-Рейс
Сб 24 марта 2018 г. 14:53
[Mrburnette - Пт 23 марта 2018 г. 18:50] - Просто для удовольствия от этого ...Кажется, мне придется попробовать.. Я не могу сказать «нет» после такого толчка..
(...)
Теперь вы в состоянии взломать, как и с любыми/всеми файлами в проекте.